自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(289)
  • 资源 (5)
  • 收藏
  • 关注

原创 Linux那些事儿之我是Hub(21)八大重量级函数闪亮登场(五)

Go go go, fire in the hole!八大函数已经看了一半,剩下一半,Linux十六岁了,十六岁的季节,一半是诗,一半是梦,一首浸透着生命的诗,一个温馨的少年梦.十六岁的天空,一半绚丽,一半深沉,一种缀满五彩缤纷云霞般的绚丽,一种风也洒脱,雨也豪迈的深沉.让我们继续下一半,我知道你和我一样,也感觉到了一些疲倦,这个时候,正是体现我们作为社会主义有志青年的关键时刻,让我们以黄

2007-09-11 20:13:00 5171

原创 Linux那些事儿之我是Sysfs(10)sysfs 创建目录

每当我们新增一个kobject结构的时候,同时会在/sys下创建一个目录。kobject_add()  ->  create_dir() -> sysfs_create_dir()此时,我还想重申,kernel代码的更新换代是很快的,我们的目的是懂得代码背后的原理,知识,或曰哲学。我不想讲的太细,因为关于sysfs的部分从2.6.10到现在2.6.22已经改了很多了。但其总体架构没变。写此

2007-09-11 18:57:00 8745

原创 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 9878 7

原创 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(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 7604 1

原创 Linux那些事儿之我是Sysfs(9)sysfs文件系统模型

最近Linus炮轰C++,“C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’”。牛人就是牛气冲天阿。在fs/sysfs/下面,除去makefile,还有8个文件。其中, bin.c, file.c, dir.c, symblink.c分别代表了在sysfs文件系统中当文件类型为二进制文件,普通文件,目录,符

2007-09-09 23:04:00 10440

原创 Linux那些事儿之我是Sysfs(8)一起散散步-pathwalk

前面说过,只要知道文件的索引节点号,就可以得到那个文件。但是我们在操作文件时,从没听说谁会拿着索引节点号来操作文件,我们只知道文件名而已。它们是如何"和谐"起来的呢?linux把目录也看成一种文件,里面记录着文件名与索引节点号的对应关系。比如在ext3文件系统中,如果文件是一个目录,那么它的内容就是一系列ext3_dir_entry_2的结构struct ext3_dir_entry_2 {_

2007-09-07 21:00:00 9652 1

原创 Linux那些事儿之我是Sysfs(7)dentry与inode

我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode)。它们的定义如下:struct dentry {struct inode                                *d_inode; /* Where the name belongs to - NULL isstruct dentry                         

2007-09-06 22:09:00 18060 2

原创 Linux那些事儿之我是Hub(17)八大重量级函数闪亮登场(一)

还有人记得1996年那部史诗般的电视剧英雄无悔>>吗?那年我初二.这部戏让我认识了濮存昕,也是这部戏确立了濮存昕少妇杀手的地位,后来大肆那年濮存昕去过复旦,宣传艾滋病方面的知识,尽管那时候我正在求职的路上遭遇种种挫折,但还是抽出了时间去五教看了听了他的讲座,完了之后他还即兴了一段朗诵.我觉得他身上那种健康的形象是我喜欢的,因为这种积极向上的东西我太缺了.英雄无悔>>里面濮存昕扮演的公安局长高天

2007-09-06 21:46:00 6578 1

原创 Linux那些事儿之我是Sysfs(6)文件系统

接下来,我们进入sysfs部分。看看kobject_add()->create_dir()->sysfs_create_dir()bus create file->sysfs create file(). . .这些sysfs函数的内幕。说白了,sysfs就是利用VFS的接口去读写kobject的层次结构,建立起来的文件系统。关于sysfs的内容就在fs/sysfs/下。 kobject的层次结构

2007-09-03 22:54:00 9831

原创 Linux那些事儿之我是Hub(16)盖茨家对Linux代码的影响

hub_port_connect_change,顾名思义,当hub端口上有连接变化时调用这个函数,这种变化既可以是物理变化也可以是逻辑变化.注释里说得也很清楚.有三种情况会调用这个函数,一个是连接有变化,一个是端口本身重新使能,即所谓的enable,这种情况通常就是为了对付电磁干扰的,正如我们前面的判断中所说的那样,第三种情况就是在复位一个设备的时候发现其描述符变了,这通常对应的是硬件本身有了升级

2007-09-01 22:30:00 10261 4

原创 Linux那些事儿之我是Sysfs(5)举例二sculld

不妨再把sculld的代码也分析一下,先看初始函数sculld_init()             -> register_ldd_driver()                         ->driver_register()                                            ->bus_add_driver()             -> reg

2007-09-01 16:33:00 12755 3

原创 Linux那些事儿之我是Sysfs(4)举例一lddbus

对了,你得把ldd3的examples代码下下来。不然没法继续了。接下来我们从例子着手,localhost:/home/XX/examples/lddbus#insmod lddbus.ko此时再看/sys/bus/ 这时就多了一个文件夹ldd。里面的文件构成是这样的/sys/bus/ldd/|--device|--driver`--versionlocalhost:/sys/bus/ldd#

2007-09-01 16:12:00 18918 3

原创 Linux那些事儿之我是Sysfs(3)设备模型上层容器

§1 bus系统中总线由struct bus_type描述,定义为:struct bus_type {char * name; 总线类型的名称struct subsystem subsys; 与该总线相关的subsystemstruct kset drivers; 所有与该总线相关的驱动程序集合struct kset devices; 所有挂接在该总线上的设备集合struct bus attrib

2007-09-01 15:20:00 16916 5

原创 Linux那些事儿之我是Sysfs(2)linux设备底层模型

关于linux设备模型网上有一些论述,有些东西我就用了拿来主义,进行了修改和整理。§1 KobjectKobject 是Linux 2.6引入的新的设备管理机制,在内核中由struct kobject表示。通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注册的kobject

2007-09-01 14:58:00 24919 8

原创 Linux那些事儿之我是Sysfs(1)sysfs初探

"sysfs is a ram-based filesystem initially based on ramfs. It provides a meansto export kernel data structures, their attributes, and the linkages between them touserspace.” --- documentation/filesyst

2007-09-01 14:21:00 30708 4

原创 ==关于三个作者==

因历史原因,本blog专栏名字叫做fudan_abc,但时过境迁, 如今blog维护者已不仅仅是复旦人,一名交大才子加入了这支革命队伍.====================================================================================昨天:两个曾经的复旦人,复旦人甲和复旦人乙.==================

2007-08-31 23:12:00 8443 7

原创 Linux那些事儿之我是Hub(15)一个都不能少

烟波江声里,何处是江南.一晃神,一转眼,我们就这样垂垂老去.可是我们直到现在还根本就没有看明白hub驱动究竟是怎么工作的.但我相信,红莲即将绽放,双星终会汇聚,命运的轮转已经开始,我们只需耐心的等待.2686行,苦苦追寻之后,终于发现从这里开始针对端口进行分析了,有几个端口就对几个端口进行分析,分析每一个端口的状态变化,一个都不能少,很显然,这就是我们期待看到的代码,马上我们就可以知道,当我们

2007-08-30 23:56:00 9861 1

原创 Linux那些事儿之我是Hub(14)没完没了的判断

看着这代码,空虚的代码,麻木的走在崩溃边缘.最讨厌这种没完没了的判断了.记得有一次在中信泰富广场去摩托罗拉中国研发中心面试,也是问了一道挺简单的题目,我就把基本的算法说了一下,然后面试官就说为什么没有错误判断.你说像我这种根本不怎么懂编程的人好不容易能回答出一道题,已经很不错了,为何那些企业要求都这么高呢?一个人因为没有工作经验而不能得到一个工作,但是他又因为没有一个工作而得不到工作经验.算了,现

2007-08-30 23:26:00 7034 2

原创 Linux那些事儿之我是Hub(13)树,是什么样的树?

同学们,今天我们来讲一棵树.记得小时候我们看白眉大侠>>,记得那段精彩的对白:刀,是什么样的刀?金丝大环刀!剑,是什么样的剑?闭月羞光剑!招,是什么样的招?天地阴阳招!人,是什么样的人?飞檐走壁的人!情,是什么样的情?美女爱英雄!而今天我们要问的是:树,是什么样的树?答:USB设备树.这是怎样一棵树?让我慢慢的道来.苏格拉底曾经说过:为人不识谭浩强,精通内核也枉然.还记得谭浩强大哥

2007-08-27 12:59:00 4752 2

原创 Linux那些事儿之我是Hub(12)再向虎山行

徐志摩说:轻轻的我穿衣,正如我轻轻的脱;后来徐志摩又说:轻轻的我走了,正如我轻轻的来.hub_events(),没错,胡汉三又回来了.再一次进入while这个(该)死(的)循环.第一次来这里的时候,hub_event_list是空的,可是这一次不是了,我们刚刚在kick_khubd()里面才执行了往这个队列里插入的操作,所以我们不会再像第一次一样,从2621行的break跳出循环.

2007-08-25 22:14:00 5742

原创 Linux那些事儿之我是Hub(11)While You Were Sleeping(四)

我们说过,hub里面的中断端点是IN的,不是OUT的.但这并不说明凡是中断传输数据一定是从设备到主机,没这种说法,别起哄.不过hub需要的确实只是IN的传输.首先,每一个男人都应该知道,中断是由设备产生的.在usb的世界里两个重要角色,主机,设备.主机就像一个人民公仆,设备就像人民群众,公仆常常日理万机,或者日理万鸡,他也许不会去理会每一个子民的水深火热,群众如果要想引起公仆的注意,只能做一些有创

2007-08-23 22:34:00 5396 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 6931

原创 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 5050 1

原创 Linux那些事儿之我是Hub(8)While You Were Sleeping(一)

最近看了热播的电视剧奋斗>>,赵宝刚导演的转型之作.里面李小璐和文章演的那对小夫妻甚是搞笑.这部片子其实号称励志篇但实际上一点也不励志,就是搞笑,像我这种严肃的人向来不喜欢这些搞笑,不过里面李小璐扮演的杨晓芸对文章演的那个向南的一番对话倒是让我觉得颇为感慨.杨晓芸一心希望向南能够有理想有目标,而向南却非常满足于现状,而这种矛盾间接导致了杨晓芸对丈夫的失望并且最终两个人走向了离婚.其实我就是一个没有

2007-08-23 22:26:00 5637

原创 Linux那些事儿之我是Hub(7)蝴蝶效应

朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应,最终导

2007-08-20 15:17:00 14932 9

原创 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(5)等待,只因曾经承诺

hub_thread()中还有一个函数没有讲.它就是try_to_freeze().这是电源管理相关的.对大多数人来说,关于这个函数,了解就可以了.以下的内容就当科普性质吧,也算哥们儿为奥运做点贡献,提高国民科学文化知识水平.随着Linux开始支持suspended之后,西方的资本家们提倡,每一个内核进程都应该在适当的时候,调用try_to_freeze().什么意思呢?有这样一个flag,PF_

2007-08-11 12:34:00 9089 4

原创 Linux那些事儿之我是Hub(4)那些队列,那些队列操作函数

这一节我们讲队列.从前在乡下的时候是不用排队的,村里的人们都很谦让,而且人本来又不多.后来到了县城里,县城里不大,大家去走亲戚去串门去逛街不用坐车不用排队,除了街上的游戏厅人多一点以外,别的地方人都不是很多,陪妈妈去菜市场买菜也不用排队.后来到了上海,发现去食堂吃饭要排队,开学报道要排队,在人民广场等回复旦的123路公共汽车要排队,考试成绩不好去教务处交重修费要排队,甚至连追求一个女孩子也要排

2007-08-10 10:04:00 8357 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 8112 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(1)跟我走吧,现在就出发

最早知道hub是在大学里,复旦的4人间宿舍,条件真好,每个人一张书桌,书桌下面一个网口,但是有时候网口坏了,那可急死人了,要知道当初我们买电脑初衷虽说是为了学习C语言,可是买了之后,C倒是没学,先学了CS.printf还没学会呢,倒是先学会了怎么在CS里喊go go go, fire in the hole!网口坏了就意味着CS不能玩了,当时对人生真的很绝望,后来有人介绍,说6楼几个哥们也有这

2007-08-07 21:28:00 6867 1

原创 Linux那些事儿之我是U盘 提供pdf下载

http://www.newsmth.net/att.php?p.299.44271.374.pdf还会继续修改,主要是加入一些图片.比如传输协议的,数据格式的,函数调用关系的图片.预计会在9月初提供更新版本的下载.欢迎指出错误. 

2007-08-07 17:21:00 13597 28

原创 Linux那些事儿之我是Hub(引子)

  来北京也有半年了,这半年里,想疯的时候就去工体西路的Babyface,不想疯的时候就去权金城.喜欢权金城其实是没有理由的,但仔细想想又还是有理由的.  洗浴费39元,像我同学办了张银卡,于是每次只要29元.洗完了要按摩就按摩,不按摩就开个房间,睡一晚上,有那种89块钱的三人间,费用比那些宾馆要便宜许多,很适合我们这种夜生活丰富,不想回家睡的家伙.不过权金城很奇怪的,不提供特殊服务,我们问过

2007-08-05 15:45:00 6579 4

原创 Linux那些事儿之我是U盘(大结局)其实世上本有路,走的人多了,也便没了路

  其实信号量这东西,就像北京户口,你占了一个名额,我就可能没有了名额.但是有些事情,没有北京户口你又办不成.比如我满怀壮志的走到医院向医生表达说我希望死了以后可以捐献遗体,可得到的只是医生冷冷的回复,对不起,你没有资格,因为你没有户口.  我们前面说过,Linux中,有信号量,有自旋锁,有互斥锁,自旋锁或者互斥锁从某种意义上来说就只是一种特殊的信号量,即信号量意味着资源数量有限,但这个有限也

2007-08-04 16:47:00 5070 12

原创 Linux那些事儿之我是U盘(54)当梦醒了天晴了

  多情自古伤离别,更那堪,冷落清秋节!  今宵酒醒何处?  杨柳岸,晓风残月.  此去经年,应是良辰好景虚设.  便纵有,千种风情,更与何人说?   伴随着婉约派才子,词坛浪子柳永的这首令人肝肠寸断的雨霖铃>>,我们来到了最后一个重要的函数,storage_disconnect.  usb设备的热插拔特性注定了我们应该在设备插入的时候做一些事情,在设备拔出的时候做一些

2007-08-04 15:26:00 4559 1

原创 Linux那些事儿之我是U盘(53)有多少爱可以胡来?(二)

device_reset()完了之后我们来看bus_reset().同样来自drivers/usb/storage/scsiglue.c中.265 /* This resets the devices USB port. */    266 /* It refuses to work if theres more than one interface in    267  * the de

2007-08-04 13:44:00 3571 1

原创 Linux那些事儿之我是U盘(52)有多少爱可以胡来?(一)

上帝给了每个人一支书写人生的铅笔,却未曾给我们橡皮擦.但计算机的世界却并非如此,电脑用着用着觉得不正常了,按一下reset键就一切ok了. (当然你要是中了熊猫烧香啊中了冲击波啥的病毒那就另当别论了,喂,别打岔行不行,我们讲正事呢.)如果人生也可以这样,那么星爷的那段经典的妇孺皆知的”人世间最悲哀的……假如……”的对白恐怕就没有意义了.在驱动程序中,一个非常非常重要的概念就是错误处理.生活不是

2007-08-03 22:51:00 4515 3

原创 Linux那些事儿之我是U盘(51)光荣属于苹果,属于诺基亚,属于摩托罗拉,属于索尼爱立信

这一节我们来分析一个在很多企业的产品中都存在的bug.写设备驱动是一件很实在的事情,你得根据实实在在的硬件来编写你的代码,如果你的硬件存在某种bug,那么你就要去fix它.如果你希望成为通用的驱动程序,那么你就要兼顾各家企业,兼顾各种可能存在的bug.也许一百家企业的产品都可以很好的被你的程序所支持,但是如果地一百零一家的产品有问题,你就得尽量解决.usb-storage正是这样一个模块.所以它的

2007-08-02 23:09:00 5118

原创 Linux那些事儿之我是U盘(50)跟着感觉走(二)

回到usb_stor_invoke_transport()中来,540行,还是老套路,又问是不是命令被放弃了,放弃了当然下面的就别执行了.goto Handle_Abort去.546行,如果有错误,注意正如前面所说,USB_STOR_TRANSPORT_ERROR表示传输本身就是有问题的,比如管道堵塞.而USB_STOR_TRANSPORT_FAILED则只是说明命令传输是没有问题的,就比如你

2007-08-01 23:26:00 5034

Linux那些事儿之我是USB Core(v1.0)

2.6.22内核的usb core源码分析。原文为blog.csdn.net/fudan_abc上的《linux那些事儿之戏说USB》。

2007-11-05

Linux那些事儿之我是Hub

2.6.22.1内核的usb hub driver分析.Beta版.

2007-09-29

Linux那些事儿之我是U盘

Linux 2.6 kernel usb mass storage driver<br>设备驱动源代码分析

2007-08-07

Linux那些事儿之我是U盘

Linux 2.6 内核 usb 设备驱动&lt;br&gt;电子书&lt;br&gt;pdf格式

2007-08-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除