`
javatome
  • 浏览: 827197 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
文章列表
解决了这个INQUIRY的问题,我们就可以继续往下走了,373行,这就是真正的Bulk传输的地方,proto_handler()就是正儿八经的处理SCSI命令的函数指针.而usb_stor_control_thread之前的所有代码就是为了判断是不是有必要调用proto_handler(),比如超时了,比如模块该卸载了,比如设置了断开flag了,比如要处理的就是这个有问题的INQUIRY,等等这些情况都需要先排除了才有必要到达这里来执行真正的命令.实际上这就是先从宏观上来控制,保证我们走的是一条正确的道路,而不至于是沿着错误的道路走半天,毕竟,在错误的路上,
对于use_sg为0的情况,我们接下来再看206行,offset是函数调用传递进来的参数,注释里说的很清楚,就是用来标志偏移量的,每次copy几个字节她就增加几,最大她也不能超过request_bufflen,这是显然的.usb_stor_access_xfer_buf()这个函数所做的事情就是从srb->request_buffer往buffer里边copy数据,或者反过来从buffer往srb->request_buffer,然后返回copy了多少个字节.对于offset大于等于request_bufflen的情况,当然就直接返回
很显然,我们是把为INQUIRY命令准备的数据保存到了我们自己定义的一个结构体中,即struct data_ptr[36],但是我们是为了回应一个SCSI命令,最终需要知道答案的是scsi核心层.正是它们传递了一个scsi_cmnd结构体下来,即srb.struct scsi_cmnd中有两 ...
七年前,在那个千禧年里,凭借<<我的父亲母亲>>获得金鸡奖最佳女主角的章子怡姐姐说:"我长得挺漂亮,又是单身,男人不可能对我没兴趣!"是的,古人云,男人分两种,一种是好色,一种是十分好色.所以章子怡这话一点没错.不过,对于大多数80后来说,他们早已不再像十年前那么另类,那么出格,因为他们生活压力很重,他们很老实,很现实,一个显而易见的事实,yy章子怡不如老老实实的学Linux.虽然很多人对两者都有兴趣
燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候;老婆离了,有再找的时候,孩子跑了,有回来的时候;煮熟的鸭子飞了,有飞回来的时候.一个函数没讲完就跳走了,有再回来的时候.其实,那些人,那些事
遥想公瑾当年,小乔出嫁了,雄姿英发. 羽扇纶巾,谈笑间,樯橹灰飞烟灭. 故国神游,多情应笑我,早生华发, 人生如梦,一樽还酹江月. 的确,人生如梦,设计Linux代码的人想必非常认可这种观点,因为他们已然把这种思想融入到了代码 ...
有时候觉得Linus其实蛮搞笑的,不仅仅是他那句名言read the fucking source code. 下面是今天早上Linus同志提出来的一个问题,他的usb设备玩着玩着系统就崩溃了...谁来帮他找出原因吧.应该是用的2.6.22的代码.可能是driver的问题,也可能是设备本身有问题.其中的设备就是我们说过的那个多合一的读卡器. I have a flaky(?) USB multi-card reader, and I just got an oops with it onx86-64. It was preceded by some of the IO errors: e ...
如果让观众短信投票的话,usb_stor_control_thread()这个函数中的代码无疑是整个模块中最为精华的代码.我们只需要它中间301行那个for(;;)就知道,这是一个死循环,即使别的代码都执行完了,即使别的函数都退出了,这个函数仍然像永不消逝的电波一般,经典常驻.显然,只有死循环才能代码永恒.才能代表忠诚.这是每一个守护者的职责. usb_stor_control_thread(),其代码如下: 281 static int usb_stor_control_thread(void * __us) 282 { 283
彼岸花,花语是悲伤的回忆. 很久很久以前,城市的边缘开满了大片大片的曼珠沙华,它的花香有一种魔力,可以让人想起自己前世的事情.守护曼珠沙华的是两个妖精,一个是花妖叫曼珠,一个是叶妖叫沙华.他们守侯了几千年,可是从来没有见过面,因为开花的时候,就没有叶子,有叶子的时候没有花.他们疯狂地想念着彼此,并被这种痛苦折磨着.终于有一天,他们决定违背神的规定偷偷地见一次面.那一年的曼珠沙华红艳艳的花被惹眼的绿色衬托着,开得格外妖冶美丽.
关于scsi,咱想说的是,在Linux内核中,整个scsi子系统被分为三层.upper level,mid level,lower level,也许您看到这心里很烦,Linux为什么这么麻烦呢.就像某位大侠所说的:真不明白,女孩买很多很多漂亮衣服穿,就是为了吸引男孩的目光,但男孩想看的,却是不穿衣服的女孩.实际上,Linux开发者们把scsi子系统包装成很多层,是为了给您提供方便,但是您看代码的时候却会感觉很烦,要是没有那么多层该多好. 来说说这三层吧
scsi子系统里的设备使用scsi命令来通信,scsi spec定义了一大堆的命令,spec里称这个为命令集,即所谓的command set.其中一些命令是每一个scsi设备都必须支持的,另一些命令则是可选的.而作为U盘,它所支持的是scsi transparent command set,所以它基本上就是支持所有的scsi命令了,不过我们其实并不关心任何一个具体的命令,只需要了解一些最基本的命令就是了.比如我们需要知道,所有的scsi设备都至少需要支持以下这四个scsi命令:INQUIRY,REQUEST SENSE,SEND DIAGNOSTIC,TEST UNIT READY.一会我们在代 ...
世界上最遥远的距离, 不是生与死, 而是我就站在你面前, 你却不知道我爱你. 世界上最遥远的距离, 不是我就站在你面前, 你却不知道我爱你, 而是明明知道彼此相爱, 却不能在一起.
其实usb_stor_clear_halt这个函数的作用很简单,就是spec里边规定了,usb设备中,有两类端点,必须具有一个叫做Halt的特征,啥是Halt?查金山词霸去,中断,停止,暂停,怎么解释呢,你把手机关了,就不能给超级女生发短信投票了吧,你把电脑关了, ...
金城武说:不知道从什么时候开始,在什么东西上面都有个日期,秋刀鱼会过期,肉罐头会过期,连保鲜纸都会过期,我开始怀疑,在这个世界上,还有什么东西是不会过期的? 有时候我也被这个问题所困扰,我不知道是我不明白还是这世界变化太快.连Linux中都引入了过期这么一个概念.说文雅一点就是超时.设置一个时间,如果时间到了该做的事情还没有做完,那么某些事情就会发生. 比如,咱们需要做这样一些事情
让我们单刀直入,进入usb_stor_msg_common()函数. 首先看145行,让us->flags和ABORTING_OR_DISCONNECTING相与,ABORTING_OR_DISCONNECTING宏定义于drivers/usb/storage/usb.h中: 78 /* Dynamic flag definitions: used in set_bit() etc. */ 79 #define US_FLIDX_URB_ACTIVE 18 /* 0x00040000 current_urb is in use */ 80 #define US_FLIDX_SG_ACT ...
Global site tag (gtag.js) - Google Analytics