- 浏览: 845170 次
- 性别:
- 来自: 北京
最新评论
-
xingqinstar:
简单浏览一遍,博主将项目管理比喻成谈女朋友,结婚,很通俗易懂, ...
关于项目管理的通俗讲解 -
xingwang.ye:
W_h 写道热血又沸腾了问题是沸腾了过不了多久又冷却了如果一点 ...
一位软件工程师的6年总结 -
daive_java:
受益匪浅啦!
一位软件工程师的6年总结 -
berylcc:
学 历 代表 过 去、能力代表 现 在、学 习 力代表未来感触 ...
一位软件工程师的6年总结 -
greenwen:
学习,谨记~~;
一位软件工程师的6年总结
文章列表
解决了这个INQUIRY的问题,我们就可以继续往下走了,373行,这就是真正的Bulk传输的地方,proto_handler()就是正儿八经的处理SCSI命令的函数指针.而usb_stor_control_thread之前的所有代码就是为了判断是不是有必要调用proto_handler(),比如超时了,比如模块该卸载了,比如设置了断开flag了,比如要处理的就是这个有问题的INQUIRY,等等这些情况都需要先排除了才有必要到达这里来执行真正的命令.实际上这就是先从宏观上来控制,保证我们走的是一条正确的道路,而不至于是沿着错误的道路走半天,毕竟,在错误的路上,
- 2007-07-28 22:44
- 浏览 600
- 评论(0)
对于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的情况,当然就直接返回
- 2007-07-28 21:22
- 浏览 706
- 评论(0)
很显然,我们是把为INQUIRY命令准备的数据保存到了我们自己定义的一个结构体中,即struct data_ptr[36],但是我们是为了回应一个SCSI命令,最终需要知道答案的是scsi核心层.正是它们传递了一个scsi_cmnd结构体下来,即srb.struct scsi_cmnd中有两 ...
- 2007-07-28 20:59
- 浏览 393
- 评论(0)
七年前,在那个千禧年里,凭借<<我的父亲母亲>>获得金鸡奖最佳女主角的章子怡姐姐说:"我长得挺漂亮,又是单身,男人不可能对我没兴趣!"是的,古人云,男人分两种,一种是好色,一种是十分好色.所以章子怡这话一点没错.不过,对于大多数80后来说,他们早已不再像十年前那么另类,那么出格,因为他们生活压力很重,他们很老实,很现实,一个显而易见的事实,yy章子怡不如老老实实的学Linux.虽然很多人对两者都有兴趣
- 2007-07-28 17:16
- 浏览 531
- 评论(0)
燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候;老婆离了,有再找的时候,孩子跑了,有回来的时候;煮熟的鸭子飞了,有飞回来的时候.一个函数没讲完就跳走了,有再回来的时候.其实,那些人,那些事
- 2007-07-27 23:27
- 浏览 539
- 评论(0)
遥想公瑾当年,小乔出嫁了,雄姿英发.
羽扇纶巾,谈笑间,樯橹灰飞烟灭.
故国神游,多情应笑我,早生华发,
人生如梦,一樽还酹江月.
的确,人生如梦,设计Linux代码的人想必非常认可这种观点,因为他们已然把这种思想融入到了代码 ...
- 2007-07-26 23:02
- 浏览 618
- 评论(0)
有时候觉得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 ...
- 2007-07-26 10:58
- 浏览 749
- 评论(0)
如果让观众短信投票的话,usb_stor_control_thread()这个函数中的代码无疑是整个模块中最为精华的代码.我们只需要它中间301行那个for(;;)就知道,这是一个死循环,即使别的代码都执行完了,即使别的函数都退出了,这个函数仍然像永不消逝的电波一般,经典常驻.显然,只有死循环才能代码永恒.才能代表忠诚.这是每一个守护者的职责.
usb_stor_control_thread(),其代码如下:
281 static int usb_stor_control_thread(void * __us) 282 { 283
- 2007-07-19 23:14
- 浏览 702
- 评论(0)
彼岸花,花语是悲伤的回忆.
很久很久以前,城市的边缘开满了大片大片的曼珠沙华,它的花香有一种魔力,可以让人想起自己前世的事情.守护曼珠沙华的是两个妖精,一个是花妖叫曼珠,一个是叶妖叫沙华.他们守侯了几千年,可是从来没有见过面,因为开花的时候,就没有叶子,有叶子的时候没有花.他们疯狂地想念着彼此,并被这种痛苦折磨着.终于有一天,他们决定违背神的规定偷偷地见一次面.那一年的曼珠沙华红艳艳的花被惹眼的绿色衬托着,开得格外妖冶美丽.
- 2007-07-19 22:34
- 浏览 554
- 评论(0)
关于scsi,咱想说的是,在Linux内核中,整个scsi子系统被分为三层.upper level,mid level,lower level,也许您看到这心里很烦,Linux为什么这么麻烦呢.就像某位大侠所说的:真不明白,女孩买很多很多漂亮衣服穿,就是为了吸引男孩的目光,但男孩想看的,却是不穿衣服的女孩.实际上,Linux开发者们把scsi子系统包装成很多层,是为了给您提供方便,但是您看代码的时候却会感觉很烦,要是没有那么多层该多好.
来说说这三层吧
- 2007-07-19 21:54
- 浏览 684
- 评论(0)
scsi子系统里的设备使用scsi命令来通信,scsi spec定义了一大堆的命令,spec里称这个为命令集,即所谓的command set.其中一些命令是每一个scsi设备都必须支持的,另一些命令则是可选的.而作为U盘,它所支持的是scsi transparent command set,所以它基本上就是支持所有的scsi命令了,不过我们其实并不关心任何一个具体的命令,只需要了解一些最基本的命令就是了.比如我们需要知道,所有的scsi设备都至少需要支持以下这四个scsi命令:INQUIRY,REQUEST SENSE,SEND DIAGNOSTIC,TEST UNIT READY.一会我们在代 ...
- 2007-07-18 19:37
- 浏览 1035
- 评论(0)
世界上最遥远的距离,
不是生与死,
而是我就站在你面前,
你却不知道我爱你.
世界上最遥远的距离,
不是我就站在你面前,
你却不知道我爱你,
而是明明知道彼此相爱,
却不能在一起.
- 2007-07-17 21:17
- 浏览 567
- 评论(0)
其实usb_stor_clear_halt这个函数的作用很简单,就是spec里边规定了,usb设备中,有两类端点,必须具有一个叫做Halt的特征,啥是Halt?查金山词霸去,中断,停止,暂停,怎么解释呢,你把手机关了,就不能给超级女生发短信投票了吧,你把电脑关了, ...
- 2007-07-16 21:58
- 浏览 675
- 评论(0)
金城武说:不知道从什么时候开始,在什么东西上面都有个日期,秋刀鱼会过期,肉罐头会过期,连保鲜纸都会过期,我开始怀疑,在这个世界上,还有什么东西是不会过期的?
有时候我也被这个问题所困扰,我不知道是我不明白还是这世界变化太快.连Linux中都引入了过期这么一个概念.说文雅一点就是超时.设置一个时间,如果时间到了该做的事情还没有做完,那么某些事情就会发生.
比如,咱们需要做这样一些事情
- 2007-07-12 17:24
- 浏览 666
- 评论(0)
让我们单刀直入,进入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 ...
- 2007-07-11 23:26
- 浏览 626
- 评论(0)