Linux那些事儿 之 我是Hub
文章平均质量分 81
fudan_abc
这个作者很懒,什么都没留下…
展开
-
Linux那些事儿之我是Hub(引子)
来北京也有半年了,这半年里,想疯的时候就去工体西路的Babyface,不想疯的时候就去权金城.喜欢权金城其实是没有理由的,但仔细想想又还是有理由的. 洗浴费39元,像我同学办了张银卡,于是每次只要29元.洗完了要按摩就按摩,不按摩就开个房间,睡一晚上,有那种89块钱的三人间,费用比那些宾馆要便宜许多,很适合我们这种夜生活丰富,不想回家睡的家伙.不过权金城很奇怪的,不提供特殊服务,我们问过原创 2007-08-05 15:45:00 · 6579 阅读 · 4 评论 -
Linux那些事儿之我是Hub(18)八大重量级函数闪亮登场(二)
第二个函数,usb_set_device_state(),鉴于网友”潜水潜到二零零八”提出drivers/usb/core/hub.c出镜频率过于的高,为避免被人成为新时期祥林嫂,经支部开会决定,从此以后凡是出自drivers/usb/core/hub.c这个文件的函数将不再做介绍其来源,这个就当是默认的位置. 1041 /** 1042 * usb_set_device_sta原创 2007-09-10 20:46:00 · 7606 阅读 · 1 评论 -
Linux那些事儿之我是Hub(20)八大重量级函数闪亮登场(四)
接下来我们来到了第四个函数,hub_port_init().这个函数和接下来要遇到的usb_new_device()是最重要的两个函数,也是相对复杂的函数. 2096 /* Reset device, (re)assign address, get device descriptor. 2097 * Device connection must be stable, no mor原创 2007-09-10 20:50:00 · 9879 阅读 · 7 评论 -
Linux那些事儿之我是Hub(17)八大重量级函数闪亮登场(一)
还有人记得1996年那部史诗般的电视剧英雄无悔>>吗?那年我初二.这部戏让我认识了濮存昕,也是这部戏确立了濮存昕少妇杀手的地位,后来大肆那年濮存昕去过复旦,宣传艾滋病方面的知识,尽管那时候我正在求职的路上遭遇种种挫折,但还是抽出了时间去五教看了听了他的讲座,完了之后他还即兴了一段朗诵.我觉得他身上那种健康的形象是我喜欢的,因为这种积极向上的东西我太缺了.英雄无悔>>里面濮存昕扮演的公安局长高天原创 2007-09-06 21:46:00 · 6578 阅读 · 1 评论 -
Linux那些事儿之我是Hub(19)八大重量级函数闪亮登场(三)
在开始第三个函数前,2492行至2494行还有三行代码,对udev中的speed,bus_mA,level进行赋值.先说一下,bus_mA,struct usb_device中的成员,unsigned short bus_mA,记录的是能够从总线上获得的电流,毫无疑问就是咱们前面算出来的hub上的那个mA_per_port.上头能给多少咱们就要多少.再说level,级别,表征usb设备树的原创 2007-09-10 20:47:00 · 3869 阅读 · 2 评论 -
Linux那些事儿之我是Hub(21)八大重量级函数闪亮登场(五)
Go go go, fire in the hole!八大函数已经看了一半,剩下一半,Linux十六岁了,十六岁的季节,一半是诗,一半是梦,一首浸透着生命的诗,一个温馨的少年梦.十六岁的天空,一半绚丽,一半深沉,一种缀满五彩缤纷云霞般的绚丽,一种风也洒脱,雨也豪迈的深沉.让我们继续下一半,我知道你和我一样,也感觉到了一些疲倦,这个时候,正是体现我们作为社会主义有志青年的关键时刻,让我们以黄原创 2007-09-11 20:13:00 · 5171 阅读 · 0 评论 -
Linux那些事儿之我是Hub(22)八大重量级函数闪亮登场(六)
在调用usb_new_device之前,2555至2560这一小段,如果说hub已经被撤掉了,那么老规矩,别浪费感情了.否则,把udev赋值给hdev->children数组中的对应元素,也正是从此以后,这个设备才算是真正挂上了这棵大树.Ok,如果status确实为0,(注意,2549刚刚把status赋为了0.)正式调用usb_new_device. 1275 /** 127原创 2007-09-12 22:34:00 · 4783 阅读 · 4 评论 -
Linux那些事儿之我是Hub(23)是月亮惹的祸还是spec的错?
来北京九个月了,和同学去五道口的光合作用酒吧玩了一夜,其间和两个乌拉圭的女留学生搭讪,其间学会了吸水烟,其间和我一个北邮的同学聊到生活的艰难,他说,人们为了求生而来到大都市,但是依我看,他们是为了求死而来.出来之后,独自叹息,工作两年,没有省下一分钱,生活压力大得不得了,买房买车这些事看起来和我简直有一万光年的距离.而你不得不承认,这种距离,就像稀盐酸,腐蚀的是我的人生观,腐蚀的是我对生活的信心.原创 2007-09-15 19:55:00 · 4488 阅读 · 6 评论 -
Linux那些事儿之我是Hub(24)所谓的热插拔
你问我这世界,最远的地方在哪里,我将答案抛向蓝天之外落在你心底,你问我这世界,最后的真爱在哪里,我把线索指向大海之外直达我怀里.你问我hub_irq()这个函数,最终是被谁调用,我却只能说我既没有答案也没有线索.当然,你要是问我芙蓉姐姐还能红多久,我倒是可以很爽快的告诉你,你知道永远有多远吗?我们曾经在hub_configure中讲过中断传输,当时调用了usb_fill_int_urb()函数原创 2007-09-16 22:18:00 · 8605 阅读 · 2 评论 -
Linux那些事儿之我是Hub(25)不说代码说理论
当女作家们越来越多的使用下半身来告诉我什么是文学的时候,当模特们越来越多的使用裸体来告诉我什么是人体艺术的时候,我开始对这个社会困惑了,当行为艺术家们越来越多的使用垃圾堆砌来告诉我什么是波谱的时候,当地下音乐者们越来越多的使用烦躁不安的敲打来告诉我什么是原创的时候,我开始对这个时代迷茫了,当我们系的教授们越来越多的使用旧得不能再旧的教材来告诉我什么是微电子前沿技术的时候,当我们区(开源社区)的兄弟原创 2007-09-20 20:19:00 · 5653 阅读 · 0 评论 -
Linux那些事儿之我是Hub(27)电源管理的四大消息
如果真的有一种水可以让你让我喝了不会醉那么也许有一种泪可以让你让我流了不伤悲如果真的有一种硬件可以让你让我用了不耗电那么也许有一种代码可以让你让我看了不得不崩溃这一节涉及电源管理中的一些核心概念,所以你如果可以选择看,也可以选择不看,it’s up to you.883行,令dev.power.power_state.event等于msg.event.现在是时候来讲一讲两样东西了,一个原创 2007-09-28 17:34:00 · 5096 阅读 · 1 评论 -
Linux那些事儿之我是Hub(29)梦醒时分
爱情就像拔河比赛,如果一方先放手,另一方就会受伤.只可惜说出这句话的梁咏琪,最终还是放开了与郑伊健相牵的手.suspend和resume也是这样,如果你不调用suspend,那么你永远也不需要调用resume,它们就这样青梅竹马的存在于这个世界上,过着世外桃源般的日子.但是如果你不小心调用了suspend让设备睡眠,那么你就必然需要在将来某个时刻调用resume来唤醒设备.看完了sus原创 2007-09-28 17:39:00 · 6506 阅读 · 1 评论 -
Linux那些事儿之我是Hub(大结局)挂起自动化
目睹了当今大学校园的素质流氓化,kiss公开化,消费白领化,上课梦游化,逃课普遍化,补考专业化之后,区里的人们很时髦的提出了一个挂起自动化的概念.接下来的一个话题就是autosuspend/autoresume.所谓的autosuspend就是driver自己判断是否需要挂起,而之前的suspend/resume是受外界影响的,比如说PM core统一的系统级的挂起,或者用户通过sysfs原创 2007-09-28 17:56:00 · 9701 阅读 · 3 评论 -
Linux那些事儿之我是Hub(14)没完没了的判断
看着这代码,空虚的代码,麻木的走在崩溃边缘.最讨厌这种没完没了的判断了.记得有一次在中信泰富广场去摩托罗拉中国研发中心面试,也是问了一道挺简单的题目,我就把基本的算法说了一下,然后面试官就说为什么没有错误判断.你说像我这种根本不怎么懂编程的人好不容易能回答出一道题,已经很不错了,为何那些企业要求都这么高呢?一个人因为没有工作经验而不能得到一个工作,但是他又因为没有一个工作而得不到工作经验.算了,现原创 2007-08-30 23:26:00 · 7034 阅读 · 2 评论 -
Linux那些事儿之我是Hub(16)盖茨家对Linux代码的影响
hub_port_connect_change,顾名思义,当hub端口上有连接变化时调用这个函数,这种变化既可以是物理变化也可以是逻辑变化.注释里说得也很清楚.有三种情况会调用这个函数,一个是连接有变化,一个是端口本身重新使能,即所谓的enable,这种情况通常就是为了对付电磁干扰的,正如我们前面的判断中所说的那样,第三种情况就是在复位一个设备的时候发现其描述符变了,这通常对应的是硬件本身有了升级原创 2007-09-01 22:30:00 · 10265 阅读 · 4 评论 -
Linux那些事儿之我是Hub(12)再向虎山行
徐志摩说:轻轻的我穿衣,正如我轻轻的脱;后来徐志摩又说:轻轻的我走了,正如我轻轻的来.hub_events(),没错,胡汉三又回来了.再一次进入while这个(该)死(的)循环.第一次来这里的时候,hub_event_list是空的,可是这一次不是了,我们刚刚在kick_khubd()里面才执行了往这个队列里插入的操作,所以我们不会再像第一次一样,从2621行的break跳出循环.原创 2007-08-25 22:14:00 · 5742 阅读 · 0 评论 -
Linux那些事儿之我是Hub(1)跟我走吧,现在就出发
最早知道hub是在大学里,复旦的4人间宿舍,条件真好,每个人一张书桌,书桌下面一个网口,但是有时候网口坏了,那可急死人了,要知道当初我们买电脑初衷虽说是为了学习C语言,可是买了之后,C倒是没学,先学了CS.printf还没学会呢,倒是先学会了怎么在CS里喊go go go, fire in the hole!网口坏了就意味着CS不能玩了,当时对人生真的很绝望,后来有人介绍,说6楼几个哥们也有这原创 2007-08-07 21:28:00 · 6868 阅读 · 1 评论 -
Linux那些事儿之我是Hub(2)特别的爱给特别的Root Hub
莎士比亚曾经说过,不懂hub是怎么工作的就等于不知道usb设备驱动是怎么工作的.这句话一点没错,因为usb设备的初始化都是hub这边发起的,通常我们写usb设备驱动程序都是在已经得到了一个struct usb_interface指针的情况下开始probe工作,可是我要问你,你的struct usb_interface从哪来的?你以为你的设备天生丽质?长得比较帅?一插入usb口就有了?如果有人说是的原创 2007-08-07 22:34:00 · 7668 阅读 · 7 评论 -
Linux那些事儿之我是Hub(4)那些队列,那些队列操作函数
这一节我们讲队列.从前在乡下的时候是不用排队的,村里的人们都很谦让,而且人本来又不多.后来到了县城里,县城里不大,大家去走亲戚去串门去逛街不用坐车不用排队,除了街上的游戏厅人多一点以外,别的地方人都不是很多,陪妈妈去菜市场买菜也不用排队.后来到了上海,发现去食堂吃饭要排队,开学报道要排队,在人民广场等回复旦的123路公共汽车要排队,考试成绩不好去教务处交重修费要排队,甚至连追求一个女孩子也要排原创 2007-08-10 10:04:00 · 8358 阅读 · 3 评论 -
Linux那些事儿之我是Hub(3)一样的精灵不一样的API
usb_register()和usb_deregister()这两个函数我们当初分析usb storage的时候就已经见到过了.当时我们就说过了,这个函数是用来向usb核心层,即usb core,注册一个usb设备驱动的.那年我们注册了一个struct usb_driver usb_storage_driver.而这里我们注册的是hub的驱动程序所对应的struct usb_driver结构体原创 2007-08-09 20:38:00 · 8113 阅读 · 1 评论 -
Linux那些事儿之我是Hub(5)等待,只因曾经承诺
hub_thread()中还有一个函数没有讲.它就是try_to_freeze().这是电源管理相关的.对大多数人来说,关于这个函数,了解就可以了.以下的内容就当科普性质吧,也算哥们儿为奥运做点贡献,提高国民科学文化知识水平.随着Linux开始支持suspended之后,西方的资本家们提倡,每一个内核进程都应该在适当的时候,调用try_to_freeze().什么意思呢?有这样一个flag,PF_原创 2007-08-11 12:34:00 · 9090 阅读 · 4 评论 -
Linux那些事儿之我是Hub(6)probe,又见probe!
话说因为hub驱动无所事事,所以hub_thread()进入了睡眠,直到某一天,hub_probe被调用.所以我们来看hub_probe().这个函数来自drivers/usb/hub.c,其作用就如同当初我们在usb-storage中的那个storage_probe()一样. 887 static int hub_probe(struct usb_interface *intf, co原创 2007-08-18 22:53:00 · 10340 阅读 · 1 评论 -
Linux那些事儿之我是Hub(7)蝴蝶效应
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应,最终导原创 2007-08-20 15:17:00 · 14932 阅读 · 9 评论 -
Linux那些事儿之我是Hub(8)While You Were Sleeping(一)
最近看了热播的电视剧奋斗>>,赵宝刚导演的转型之作.里面李小璐和文章演的那对小夫妻甚是搞笑.这部片子其实号称励志篇但实际上一点也不励志,就是搞笑,像我这种严肃的人向来不喜欢这些搞笑,不过里面李小璐扮演的杨晓芸对文章演的那个向南的一番对话倒是让我觉得颇为感慨.杨晓芸一心希望向南能够有理想有目标,而向南却非常满足于现状,而这种矛盾间接导致了杨晓芸对丈夫的失望并且最终两个人走向了离婚.其实我就是一个没有原创 2007-08-23 22:26:00 · 5638 阅读 · 0 评论 -
Linux那些事儿之我是Hub(9)While You Were Sleeping(二)
老实说,从函数一个开始的598行直到627行都没有什么可说的.其中需要一提的是,606行,调用usb_buffer_alloc()申请内存,赋给hub->buffer.614行,调用kmalloc()申请内存,赋给hub->status.622行,调用kmalloc()申请内存,赋给hub->descriptor.当然也别忘了这中间的某行,初始化一把互斥锁,hub->status_mutex.以后原创 2007-08-23 22:28:00 · 5051 阅读 · 1 评论 -
Linux那些事儿之我是Hub(10)While You Were Sleeping(三)
get_hub_descriptor()结束了,然后就返回hub_configure()中来.635到642行,判断刚才的返回值,小于零当然是出错了,大于零也还要多判断一次, USB_MAXCHILDREN是咱们自己定义的一个宏,值为31.看include/linux/usb.h:324 #define USB_MAXCHILDREN (31)其实hub可以接一共255个端原创 2007-08-23 22:31:00 · 6932 阅读 · 0 评论 -
Linux那些事儿之我是Hub(11)While You Were Sleeping(四)
我们说过,hub里面的中断端点是IN的,不是OUT的.但这并不说明凡是中断传输数据一定是从设备到主机,没这种说法,别起哄.不过hub需要的确实只是IN的传输.首先,每一个男人都应该知道,中断是由设备产生的.在usb的世界里两个重要角色,主机,设备.主机就像一个人民公仆,设备就像人民群众,公仆常常日理万机,或者日理万鸡,他也许不会去理会每一个子民的水深火热,群众如果要想引起公仆的注意,只能做一些有创原创 2007-08-23 22:34:00 · 5396 阅读 · 1 评论 -
Linux那些事儿之我是Hub(13)树,是什么样的树?
同学们,今天我们来讲一棵树.记得小时候我们看白眉大侠>>,记得那段精彩的对白:刀,是什么样的刀?金丝大环刀!剑,是什么样的剑?闭月羞光剑!招,是什么样的招?天地阴阳招!人,是什么样的人?飞檐走壁的人!情,是什么样的情?美女爱英雄!而今天我们要问的是:树,是什么样的树?答:USB设备树.这是怎样一棵树?让我慢慢的道来.苏格拉底曾经说过:为人不识谭浩强,精通内核也枉然.还记得谭浩强大哥原创 2007-08-27 12:59:00 · 4752 阅读 · 2 评论 -
Linux那些事儿之我是Hub(15)一个都不能少
烟波江声里,何处是江南.一晃神,一转眼,我们就这样垂垂老去.可是我们直到现在还根本就没有看明白hub驱动究竟是怎么工作的.但我相信,红莲即将绽放,双星终会汇聚,命运的轮转已经开始,我们只需耐心的等待.2686行,苦苦追寻之后,终于发现从这里开始针对端口进行分析了,有几个端口就对几个端口进行分析,分析每一个端口的状态变化,一个都不能少,很显然,这就是我们期待看到的代码,马上我们就可以知道,当我们原创 2007-08-30 23:56:00 · 9862 阅读 · 1 评论 -
Linux那些事儿之我是Hub(28)将suspend分析到底
伫倚危楼风细细望极春愁黯黯生天际草色烟光残照里无言谁会凭栏意拟把疏狂图一醉对酒当歌强乐还无味衣带渐宽终不悔为伊消得人憔悴北宋词人柳永曾用这首蝶恋花来抒发对Linux内核中电源管理部分代码的无奈.当年柳永痛苦的看这代码看得想跳楼自尽.这首词,上片写登楼伫望情景.以细风,草色,烟光,残阳几个关合着忧愁的意象,组成一幅黄昏春望图,多层次地描摹写词人愁之景,愁之态,笔意婉约.下片抒情,直抒胸臆,写词人原创 2007-09-28 17:37:00 · 11822 阅读 · 2 评论