|
楼主 |
发表于 2008-4-21 09:30:30
|
显示全部楼层
一些精彩的话语
特别的爱给特别的Root Hub
莎士比亚曾经说过,不懂hub 是怎么工作的就等于不知道usb 设备驱动是怎么工作的.这句话一
点没错,因为usb 设备的初始化都是hub 这边发起的,通常我们写usb 设备驱动程序都是在已经
得到了一个struct usb_interface 指针的情况下开始probe 工作,可是我要问你,你的struct
usb_interface 从哪来的?你以为你的设备天生丽质?长得比较帅?一插入usb 口就有了?如果有
人说是的,那么我只能说,相信这个人的嘴,不如相信世上有鬼!老实说,要想知道从usb 设备插入
usb 口的那一刻开始,这个世界发生了什么,你必须知道hub 是怎么工作的,Linux 中hub 驱动程
序是怎么工作的.
.世界在变,Linux 内核代码当然也在变,小时候我
为人不识谭浩强,精通内核也枉然
13
们看周润发赵雅芝演的上海滩,长大了我们看孙俪黄晓明演的上海滩.都是上海滩,只是版本不同,
只是内容不同.内核kthread_run()就扮演着2.6.10 内核那个kernel_thread()的作用.不过
当时kernel_thread() 返回值是一个int 型的, 而kthread_run() 返回的却是struct
task_struct 结构体指针.这里等号左边的khubd_task 是我们自己定义的一个struct
task_struct 指针.
88 static struct task_struct *khubd_task;
人的无聊,有时候很难用语言表达.以下关于IS_ERR 的文字仅献给无聊的你.如果你对内存管理
没有任何兴趣,就不用往下看了,跳到下一节吧.要想明白IS_ERR(),首先你得知道有一种空间叫
做内核空间,不清楚也不要紧,我也不是很清楚,曾经,在复旦,上操作系统这门课的时候,我一度以
为我已经成为天使了,因为我天天上课都在听天书.后来,确切地说是去年,我去微软全球技术中心
(GSTC)面试的时候,那个manager 就要我解释这个名词,要我谈一谈对内核空间和用户空间的
理解,其实我也挺纳闷的,我只不过是希望能成为微软的一名技术支持工程师,居然还要懂内核,你
说这是什么世道?中学时候,老师不是跟我说只要学好数理化,走遍天下都不怕吗?算了,不去想这
些伤心往事了.结合IS_ERR()的代码来看,来自include/linux/err.h:
最后,总结陈词,本方论点:中学我们学习写议论文的时候,老师教过有这样几种结构,总分总式结
构,对照式结构,层进式结构,并列式结构.而总分总式就是先提出中心论点,然后围绕中心,以不同
角度提出分论点,展开论述,最后进行总结.而总分总具体来说又有总分,分总,总分总三种形式.以
前我以为Linus只是技术比我强,现在我算是看明白了,这家伙语文学得也比我好.看出来了么?这
里采用的就是我们议论文中的总分总结构,先设置一个链表,hub_event_list,设置一个总的函数
hub_events(),这是总,然后每一个hub 都有一个event_list,每当有一个hub 的event_list
出现了变化,就把它的event_list 插入到hub_event_list 中来,这是分,然后触发总函数
hub_events(),这又是总,然后在hub_events()里又根据event_list 来确定是哪个struct
usb_hub,或者说是哪个hub 有事情,又针对该hub 进行具体处理,这又是分.这就是Linux 中
hub驱动的中心思想.Linus,I 服了U!从前我只佩服复旦大学中文系系主任陈思和,他早上8点的
公选课学生7点去就没有了座位,堪称复旦的奇迹,而Linus你和你的那些伙伴们让我们知道了真
正的文学泰斗是从来不写文学著作的!是从来不讲论语心得,从来不去品三国的! |
|