自定义博客皮肤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)
  • 收藏
  • 关注

原创 kdb代码分析(二)

 来看另一个函数kdb_init(),显然这个函数就是整个kdb的入口,或者说初始化函数. 12393 + 12394 +/* 12395 + * kdb_init 12396 + * 12397 + *     Initialize the kernel debugger environment. 12398 + * 12399 + * Parameters:

2008-02-27 20:28:00 7070

原创 kdb代码分析(一)

这是一个很冷门的话题,它受关注的程度永远也比不上陈冠希老师的摄影作品.不过人在江湖身不由己,因为工作原因我不得不接触它,不得不了解一点kdb的代码.Kdb,也叫kernel debugger.是Linux系统的内核调试器,它是一个开源工具,乃是SGI公司开发的.kdb适用于调试内核空间的程序代码,譬如进行设备驱动程序调试,内核模块的调试.Official的Linux kernel并不包含kdb

2008-02-26 21:07:00 12838 5

原创 比较EHCI和UHCI(一)

摄影艺术家陈冠希老师告诉我们:好的作品,与器材无关,好的作品,与器官无关.有人说,有了EHCI,Intel的上一代USB主机控制器UHCI似乎就将走到被淘汰的边缘.但实际情况是,EHCI和UHCI往往是并存的,它们各有价值,如果说EHCI是一款数码相机,那么UHCI则是陈冠希老师那款记录了无数不朽历史瞬间的手机.中国是摄影大国,大多数摄影爱好者玩着器材,追着器材,一味的追求顶尖的器材,但他们的作品

2008-02-25 19:43:00 11856 6

原创 Linux那些事儿之我是EHCI(5) 2008年的这一场雪

2008年的这一场雪,比以往时候来的要大一些。以前是买不到票,这次有票也走不了了。此时此刻,多少兄弟姐妹被困在路上,饥寒交迫,多少城市停电停水,物价飞涨。我真是忍不住破口大骂,好一个和谐盛世!虽说是天灾,但岂无人祸?直接原因是那该死的冻雨。但我认为罪魁乃是三峡工程,以及所谓南水北调。祝愿那些困在铁路,公路上的人们早日回家团圆,大家过个好年。还是先看看股市,有消息称,"导致大

2008-01-28 21:03:00 7174

原创 闲谈NP

本文扯了扯P,NP,NP-c,NP-hard。作为一个调节,过两天再聊linux。先来看一个小故事,假如老板要你解决一个问题,你绞尽脑汁还是想不出来,叫天天不应,叫地地不灵,这时你走进老板办公室,可以采取3种策略:(1)一副倒霉像,神情ws,可怜巴巴的说:老板,我没做出来,我想我是太蠢了。。。boss:蠢材!滚!(失败。。。)(2)雄赳赳气昂昂跨进老板办公室,大吼一声:

2008-01-19 13:41:00 6908 4

原创 内核中的死锁问题--当UHCI遇上OHCI

上次我上网查资料,突然弹出来一个网页,很黄很暴力,和张殊凡小朋友一样,我赶紧给关了.不过,从此……我天天上网查资料.今天我就给大家介绍一下我的成果.比如有一个网站叫做bugzilla.kernel.org,这是一个Linux hacker云集的网站.这个网站用于汇报Linux内核的那些bug,每当看到这些bug,Linux黑客们就采用各种手段去解决它,包括暴力手段.在2007年的那个枫

2008-01-17 15:47:00 20065 22

原创 Linux那些事儿之我是EHCI(4) data structure of ehci driver and device

阿扁"辞职"了,kde4发布了,更让我激动的是,英雄志过两天又有更新了,这部连载长达8年的小说,终于要进入精彩的大结局。卢云的命运究竟如何?观海云远,四个性格理念完全不同的人,谁是好,谁是坏,谁是对,谁是错?何谓正道?接着上回说,usb_hcd_pci_probe这个函数在"我是UHCI"中也有讨论,不过我想按照我的思路写下去。      46 /**//**     47  * us

2008-01-13 20:55:00 6315 1

原创 Linux那些事儿之我是EHCI(3) pci match 和 probe

pci_bus_type 定义如下, struct bus_type pci_bus_type = ...{    .name        = "pci",    .match        = pci_bus_match,    .uevent        = pci_uevent,    .probe        = pci_device_probe,    .remove   

2008-01-13 15:53:00 5543 1

原创 Linux那些事儿之我是Block层(12)传说中的内存映射(下)

下面我们来看另一个”映射”函数,blk_rq_map_kern().当我们在设备驱动内部或者scsi mid-level要发送scsi命令给设备的时候,我们会调用这个函数.回首往事,当年在讲scsi命令的时候,在scsi_execute_req()调用了scsi_execute()之后,scsi_execute()中就会调用blk_rq_map_kern()函数.正常情况下它应该返回0,在当年的s

2008-01-11 15:47:00 8363 2

原创 Linux那些事儿之我是EHCI(2) 套路

子曰:按套路出牌。的确,什么东西都有套路,泡妞有泡妞的套路,花前月下不如花钱日下。打麻将有打麻将的套路,少吃少碰少放炮,多摸多杠多发财。星际有星际的套路,linux也有linux的套路。刘涛姐姐的故事再一次告诉我们,年龄不是问题,身高不是距离,有cai就行。我们不妨看看 modprobe ehci-hcd 之后发生了什么事情。ehci-hcd是一个驱动程序,不知您记不记得我在sysfs中谈论过

2008-01-09 21:31:00 8414 1

原创 Linux那些事儿之我是SCSI硬盘(7)从应用层走来的ioctl

2007年过去了,这一年里明星们一如既往,大牌们继续做领军人物,而希望上位的小辈也使尽手段.该恋爱的恋爱,该炒作的炒作,该整容的整容.功成名就的就做慈善,有待提高的就造绯闻.而我该做的,是继续写我的blog,继续说Linux那些鸟事儿,继续说那些无聊的函数,在说完了sd_probe之后,我们要接触一些新的函数了,首先推出的是ioctl,具体到sd模块中就是sd_ioctl.当我们向scsi磁盘

2008-01-03 19:55:00 11046 1

原创 Linux那些事儿之我是EHCI(1) 接口体系

EHCI首先是一个PCI设备,我们可以lspci一下看看。00:1a:7 USB Controller: Intel Corporation USB2 EHCI Controller #1 (rev 03) 我们与外围硬件打交道,可以把数据用in(out)指令传递给外围硬件,还可以把数据传输到cpu和外围硬件共享的内存里面去。这些都是计算机与硬件的接口。(参见ldd3 第9章)那么我们

2008-01-03 18:10:00 8562 2

原创 Linux那些事儿之我是EHCI 引子

转眼之间,到了2008年,先祝大家新年快乐,希望新的一年里好运连连,工资猛涨。好久没有写了,一个原因在于,作为一个PHD学生,难免要做一些读paper写paper的琐事,另一个原因就是自己太懒了。大哥甲一如既往,坚持的写作,着实让人钦佩。此时此刻,我情不自禁,作诗一首,北飘奇男子,江南大丈夫。海上常常生明月,江湖就此一枝花。不服不行。这里主要就linux ehci host controlle

2008-01-02 19:41:00 8694 8

原创 Linux那些事儿之我是Block层(10)scsi命令的前世今生(四)

当然,while循环结束也可能是因为1453行的这两个判断.首先req如果没有了,另一个得看scsi_dev_queue_ready()的返回值,如果返回值为0,那么break也会被执行,从而结束循环.   1270 /*   1271  * scsi_dev_queue_ready: if we can send requests to sdev, return 1 else  

2007-12-25 20:04:00 10122

原创 Linux那些事儿之我是Block层(9)scsi命令的前世今生(三)

下一个更为重要的函数是scsi_dispatch_cmd,来自drivers/scsi/scsi.c:    459 /*    460  * Function:    scsi_dispatch_command    461  *    462  * Purpose:     Dispatch a command to the low-level driver.    4

2007-12-25 19:58:00 7252

原创 Linux那些事儿之我是Block层(8)scsi命令的前世今生(二)

一旦这种狼狈为奸的关系建立好了,就可以开始执行请求了.来看blk_execute_rq(),来自block/ll_rw_blk.c:   2605 /**   2606  * blk_execute_rq - insert a request into queue for execution   2607  * @q:          queue to insert the re

2007-12-25 15:19:00 11240

原创 Linux那些事儿之我是Block层(7)scsi命令的前世今生(一)

现在我们块设备也有了,队列也有了,要提交请求也就可以开始提交了.那就让我们来研究一下如何提交请求如何处理请求吧.不过哥们儿有言在先,出错处理的那些乱七八糟的代码咱们就不理睬了.仍然以scsi磁盘举例,最初scsi这边发送的是scsi命令,可是从block走就得变成request,然而走到usb-storage那边又得变回scsi命令.换言之,这整个过程scsi命令要变两次身.首先让我们从s

2007-12-25 15:03:00 10291 2

原创 Linux那些事儿之我是Block层(6)浓缩就是精华?(三)

第三个,blk_register_queue().   4079 int blk_register_queue(struct gendisk *disk)   4080 {   4081         int ret;   4082   4083         request_queue_t *q = disk->queue;   4084   4085    

2007-12-20 15:30:00 7973

原创 Linux那些事儿之我是Block层(5)浓缩就是精华?(二)

第二个,register_disk,来头不小,它来自遥远的fs/partitions/check.c:    473 /* Not exported, helper to add_disk(). */    474 void register_disk(struct gendisk *disk)    475 {    476         struct block_devi

2007-12-19 20:21:00 10910

原创 Linux那些事儿之我是Block层(4)浓缩就是精华?(一)

 人,生在床上,死在床上;欲生欲死,还是在床上.这句话非常有道理.有人说它有点俗,但,我并不这么认为.我因为经常坐在床上一边看A片一边看代码,所以对这句话体会颇深,事实上它形象的描述了我坐在床上看代码时复杂的心情,说欲生欲死,一点也不夸张,尤其是当我看到add_disk()这个无比变态的函数的时候.我不禁感慨,上帝欲使人灭亡,必先使其疯狂;上帝欲使人疯狂,必先使其看Linux内核代码.

2007-12-19 15:34:00 9875 3

原创 Linux那些事儿之我是Block层(3)驱动不过一出戏,内存申请为哪般?

下一个函数,alloc_disk().在sd.c中咱们传递进来的参数是16.    720 struct gendisk *alloc_disk(int minors)    721 {    722         return alloc_disk_node(minors, -1);    723 }    724    725 struct gendisk *al

2007-12-19 14:42:00 8259

原创 Linux那些事儿之我是Block层(2)注册一个块设备驱动

看完了block子系统的初始化之后,我曾一度迷茫过,也曾辗转反侧,也曾苦恼万分,我完全不知道下一步该怎么走,几经思索,思索着我和中国的未来,徘徊过后,彷徨过后,终于决定,和scsi disk驱动同步进行往下走,因为scsi disk那边会调用许多block层这边提供的函数,于是我们就在这边来看看这些函数究竟是干什么的.第一个函数当然就是register_blkdev().     55

2007-12-19 14:09:00 7887 1

原创 Linux那些事儿之我是Block层(1)Block子系统的初始化

于是我们从genhd_device_init()开始看起.    350 static int __init genhd_device_init(void)    351 {    352         int err;    353    354         bdev_map = kobj_map_init(base_probe, &block_subsys_loc

2007-12-12 16:07:00 12587 3

原创 Linux那些事儿之我是SCSI硬盘(6)三座大山(三)

接下来,第三座大山是sd_read_cache_type.   1385 /*   1386  * sd_read_cache_type - called only from sd_revalidate_disk()   1387  * called with buffer of length SD_BUF_SIZE   1388  */   1389 static voi

2007-12-10 18:55:00 12372 5

原创 Linux那些事儿之我是SCSI硬盘(5)三座大山(二)

第二座大山,sd_read_write_protect_flag.   1327 /*   1328  * read write protect setting, if possible - called only in sd_revalidate_disk()   1329  * called with buffer of length SD_BUF_SIZE   1330 

2007-12-10 18:48:00 12106 1

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

很久以前,天还是蓝的,水也是绿的,庄稼是长在地里的,猪肉是可以放心吃的,耗子还是怕猫的,法庭是讲理的,上床是先结婚的,理发店是只管理发的,药是可以治病的,医生是救死扶伤的,拍电影是不需要陪导演睡觉的,照相是要穿衣服的,欠钱是要还的,孩子的爸爸是明确的,学校是不图挣钱的,白痴是不能当教授的,卖狗肉是不能挂羊头的,男就是男的女的就是女的.那时候Block层还是一部分附属于drivers/目录下一部分附

2007-12-10 18:31:00 11221 4

原创 Linux那些事儿之我是SCSI硬盘(3)磁盘磁盘你动起来!

首先我们看sd_revalidate_disk(),这个函数很重要,一定程度上来说,正是这个函数从硬件和软件两个方面掀起了我们了解scsi磁盘的性高潮.这个函数它不是一个函数在战斗,它完全是贾宝玉林黛玉方世玉附体,由这一个函数可以牵连出N个函数.而这N个函数中的一些函数本身又有好几百行,所以我们算是陷进去了.   1496 /**   1497  *      sd_revalidat

2007-12-07 14:29:00 12183

原创 Linux那些事儿 之 我是PCI(5)初始化(二)

.initcall2.init子节中的两个函数已经见识过了,该轮到.initcall3.init子节里的了,就是上边儿表中的acpi_pci_init和pci_access_init,这两个又是谁先谁后那?acpi_pci_init在drivers/pci/pci-acpi.c文件里,而pci_access_init 在arch/i386/pci/init.c文件里,它俩根本就不在同一个目录下面,

2007-12-05 18:43:00 14766 13

原创 Linux那些事儿之我是SCSI硬盘(2)依然probe

虽然scsi disk不难,但是如果你以为scsi disk这个模块每个函数都像init_sd()一样简单,那么我只能说你属于那种被蜘蛛咬了就以为自己是蜘蛛侠,被雷电劈了就以为自己是闪电侠,摸了一次高压电就以为自己是沈殿霞.你不服?咱们来看sd_probe,这个函数就不是那么简单.   1566 /**   1567  *      sd_probe - called during d

2007-12-04 21:25:00 9947 3

原创 Linux那些事儿 之 我是PCI(4)初始化(一)

解析完了PCI的那些内核参数,再翻过多少座山跨过多少条河,内核就会遇到init/main.c里一个名叫do_initcalls的函数。do_initcalls对内核来说只不过是漫长冒险旅程中的一个驿站,对PCI这个故事来说却是命运转轮的开始,内核在它里边完成了对.initcall.init节里各种xxx_initcall函数的执行,PCI的那些自然也包括在内。你不用像新东方老罗“我走来走去,为中国

2007-12-01 23:41:00 12377 1

原创 Linux那些事儿之我是SCSI硬盘(1)简简单单初始化

在那茫茫人海中,我找到了这两行,   1886 module_init(init_sd);   1887 module_exit(exit_sd);不要问我它们来自哪里,咱们整个故事就是围绕着drivers/sd.c这么一个文件展开,所以除非特别声明的之外,都是来自这个文件.   1831 /**   1832  *      init_sd - entry point f

2007-11-30 17:53:00 9589 2

原创 Linux那些事儿之我是SCSI硬盘-引子

有一天身子问心:"我要是痛了,医生会给我治,你痛了谁给你治啊?"于是心说:"我只能自己给自己治."也许因为这样,每个人都有一个治疗自己心中伤痛的方法.喝酒,唱歌,发火,或哭或笑,跟朋友诉苦,共旅行,跑马拉松,最差的一种方法是逃避这种心痛.我的方法是写这种伪技术的文章.但是写些什么呢?既然有人写了USB,既然有人写了PCI,那么如果不写SCSI,恐怕是天理地理都难容了.就说我们公司吧,机

2007-11-29 21:28:00 11570 6

原创 Linux那些事儿 之 我是PCI(3)PCI的那些内核参数

经过上节的头脑风暴,咱们明白了,PCI这边儿入口虽然多,但还是有规律可循有法可依的,内核启动时,得一个一个严格的按照顺序调用它们来完成PCI子系统的初始化,不能乱了章法。这点儿并不是所有人都会明白的,比如前段儿时间厦门那出儿卖房事件里宣称“我海关有人,谁敢动我”的那位海关老婆,她就觉得有法是不如有人的。(背景知识:厦门网11月14日电,06年11月5日,曾先生夫妻向被告购买了香秀里的这套房子,

2007-11-25 22:59:00 8940 3

原创 Linux那些事儿之我是UHCI(大结局)"脱"就一个字

李小璐脱了,周迅脱了,汤唯脱了.下一个脱的是谁?答案不是林志玲,不是徐静蕾,而是QH.我们知道整个故事里我们一直围绕着QH的队列在说来说去,我们不停的进行着队列操作,我们有时候把QH link起来成一个个的队列,而有时候又把QH从队列里给unlink,我所用的盗版的金山词霸2005告诉我,unlink翻译成中文就是解开,拆开,松开.Okay,简洁一点说,一个字,脱!脱就脱,东风吹,战鼓擂,这个

2007-11-24 23:30:00 3130

原创 Linux那些事儿之我是UHCI(29)FSBR

现在让我们来关注一下fsbr.尽管之前就FSBR本身已经说过了,但是代码中出现了很多关于fsbr的变量以及函数.如果不来梳理一下,恐怕你和我一样,仍然感到无限困惑,无限茫然.那么让我们点亮心灵的阿拉丁神灯,共同穿越这代码的迷朦.struct uhci_hcd中有这么几个成员,unsigned int fsbr_is_on,unsigned int fsbr_is_wanted,unsigned

2007-11-24 23:27:00 6813

原创 Linux那些事儿之我是UHCI(27)实战电源管理(三)

接下来剩下两个重要的函数,uhci_suspend和uhci_resume,不过孤立的看这两个函数没有意义,得结合上下文来看,调用它们的分别是usb_hcd_pci_suspend和usb_hcd_pci_resume,所以我们从这两个函数看起.当然单纯的看这些函数也是没有意义的,这个世界上像灰尘一样多的,除了美女,还有Linux内核中的函数;这个世界上像细菌一样多的,除了帅哥,还有Linux内核

2007-11-22 17:29:00 5627 1

原创 Linux那些事儿之我是UHCI(26)实战电源管理(二)

看了suspend自然就要看resume,在电源管理的世界里,挂起和唤醒是永远被相提并论的一对,它们就像天上的雪花,本来互不相识,一旦落在地上,化成水,结成冰,便再也分不开了!沿着上面的线索我们继续玩.现在我们设置断点wakeup_rh.然后我们插入U盘.不出所料,我们又一次进入了kdb.用bt命令看一下调用堆栈,发现调用wakeup_rh的uhci_rh_resume,调用uhci_rh_r

2007-11-22 17:26:00 3012

原创 Linux那些事儿 之 我是PCI(1)PCI,我们来了

现在这段时间最火的工程是什么?当然不会是PCI这个系统工程了,你即使不是党员也总归是个中国人,是中国人都要毫不犹豫的回答“探月工程”。不过,如果你在两年前就这么问我的话,俺会面带羞涩的回答你,是“中国芯工程”,谁让汉芯偏偏就是俺们交大的那,谁让汉芯又偏偏是假的那,俺无法回答你,俺陈进手下的哥们儿也无法回答你。到现在俺还依稀记得,在2002年的那个秋天,俺刚到交大就遇到陈进时的情景,旁边儿一见多识广

2007-11-16 16:51:00 17015 10

原创 Linux那些事儿之我是UHCI(25)实战电源管理(一)

车上的乘客大家请注意,下一站车上将上来几个小偷,大家一定要看管好自己的钱包和随身携带的物品.——东北某报记者在葫芦岛听到公共汽车售票员这样提示.此刻,我也需要预先提示你,关于uhci,我们如果想结束,现在就可以结束,如果不想,那么继续往前走一点也未尝不可.继续走的话我们会关注电源管理的部分,就如同我们在hub驱动中关注的一样.由于这部分代码颇为抽象,我们于是利用kdb,并且以做实验的方

2007-11-15 21:55:00 3739

原创 Linux那些事儿之我是UHCI(24)等时传输

然后我们可以来看等时传输了.由于等时传输的特殊性,很多地方它都被特别的对待了.从usb_submit_urb开始就显示出了它的白里透红与众不同了.该函数中268行, 判断temp是不是PIPE_ISOCHRONOUS,即是不是等时传输,如果是,就执行下面那段代码.278行,int number_of_packets是struct urb的一个成员,它用来指定该urb所处理的等时传输缓冲区的数量

2007-11-15 17:50:00 4704

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关注的人

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