2007年12月
网友”宁失身不失眠”非常好奇我是怎么知道的.说来话长,还记得我们当时在usb-storage中说的那个scsi_done么?命令执行完了就会call scsi_done.而scsi_done来自drivers/scsi/scsi.c,很显然这个函数是我们的突破口,我们找到了这个函数就好比国民党找到了甫志高,就好比王佳芝找到了易先生.阅读全文>
发表于 @ 2007年12月25日 20:04:00|评论(loading...)|编辑
这年头,有人做贼,我可以理解是为了劫富济贫,有人杀人,我可以理解是为了伸张正义,甚至有女人红杏出墙,我还可以理解是为了繁荣经济.然而,很长一段时间我都没办法理解有人编写这两个函数是为了什么?阅读全文>
发表于 @ 2007年12月25日 19:58:00|评论(loading...)|编辑
汤唯姐姐曾坦言拍床戏的经验让她恍如在地狱走了一趟,而看代码的我又何尝不是如此呢?而且汤唯姐姐说虽然过程好似地狱,但过后就是天堂.而我们则永远陷在这代码中,不知何时才是个头,这不,结束了elv_next_request,又要看下一个.阅读全文>
发表于 @ 2007年12月25日 15:19:00|评论(loading...)|编辑
scsi命令就是这样被request拖下水的,从此它们之间不再是以前那种”水留不住落花的漂泊,落花走不进水的世界”的关系,而是沦落到了一荣俱荣一损俱损狼狈为奸的关系.至此,完成了第一次变身,从scsi命令到request的变身.阅读全文>
发表于 @ 2007年12月25日 15:03:00|评论(loading...)|编辑
看完之后,我深深的吸了一口气,我不得不承认,add_disk这个函数,这个只有四行代码的函数,很好,很强大.写代码毕竟不是写琼瑶剧本,不可能像一帘幽梦里的一句”我爱你”,需要用四十几集来诠释,那才叫一个深刻呢!阅读全文>
发表于 @ 2007年12月20日 15:30:00|评论(loading...)|编辑
好家伙,一下子定义了这么多函数,要是每个都要看那我他妈还要不要活了.也亏了哥们儿是曾经的复旦大学优秀团员,要不然还不被吓死去了.不过情况总还没有那么遭,我们不用像某些媒体一样每次都把夸大事实,以至于每年的洪水或干旱都被认定是百年一遇,搞得我们不禁怀疑自己到底活过了几个百年?
阅读全文>
发表于 @ 2007年12月19日 20:21:00|评论(loading...)|编辑
人,生在床上,死在床上;欲生欲死,还是在床上.这句话非常有道理.有人说它有点俗,但,我并不这么认为.我因为经常坐在床上一边看A片一边看代码,所以对这句话体会颇深,事实上它形象的描述了我坐在床上看代码时复杂的心情,说欲生欲死,一点也不夸张,尤其是当我看到add_disk()这个无比变态的函数的时候.我不禁感慨,上帝欲使人灭亡,必先使其疯狂;上帝欲使人疯狂,必先使其看Linux内核代码.阅读全文>
发表于 @ 2007年12月19日 15:34:00|评论(loading...)|编辑
网友”暗恋未遂”打断了我,他说这行代码并不是定义一个结构体.它更像是一个声明,而不像是定义.我仔细一看,似乎真的是的,这里的确是声明,而定义并不在这里,Linux内核代码的确是虚虚实实真真假假,一不小心就会看走眼,写代码的哥们儿果然是深谙兵不厌诈的道理.但愿他们只是借此表达他们对现实社会的不满吧,毕竟在这年头,只有假货是真的,别的都是假的.阅读全文>
发表于 @ 2007年12月19日 14:42:00|评论(loading...)|编辑
看完了block子系统的初始化之后,我曾一度迷茫过,也曾辗转反侧,也曾苦恼万分,我完全不知道下一步该怎么走,几经思索,思索着我和中国的未来,徘徊过后,彷徨过后,终于决定,和scsi disk驱动同步进行往下走,因为scsi disk那边会调用许多block层这边提供的函数,于是我们就在这边来看看这些函数究竟是干什么的.阅读全文>
发表于 @ 2007年12月19日 14:09:00|评论(loading...)|编辑
早在我还没断奶的时候,我就听说了Block子系统是如何如何的复杂,赫赫有名的ll_rw_blk.c是如何如何的深奥,也许那时候,我是个天才,可是,后来经过二十多年的社会主义教育后,终于成功的被培育成了庸才!所以现在的我要想看懂这代码可真不是件容易的事儿.阅读全文>
发表于 @ 2007年12月12日 16:07:00|评论(loading...)|编辑
我知道,一味的复制粘贴是一件很无耻的事情,但是你也不用对我要求太高,因为现在本来就是一个道德沦丧的社会.在这个社会里,偷一个人的主意是剽窃,偷很多人的主意就是研究,所以我只好时而剽窃,时而研究.阅读全文>
发表于 @ 2007年12月10日 18:55:00|评论(loading...)|编辑
MODE SENSE这个命令的目的在于获得设备内部很多潜在的信息,这其中包括设备是否设置了写保护,当然还有更多SCSI特有的信息.只不过我们此时此刻只关注写保护设了没有.这些特性就像设备的天性一样,在它出生的时候就设置好了,当然有些天性也是可以改变的,就比如范冰冰,可能她生下来的时候长相平平,但是经过整容,变成了美女.又比如何丽秀,原本是男人,后来却变成了女人.而对于SCSI设备来说,很多特性可以改变,但是有些特性就不可以改变了,比如medium type,即它属于哪种类型的设备,对于SCSI Block设备,其内部保存MEDIUM TYPE的这个byte一定是00h.阅读全文>
发表于 @ 2007年12月10日 18:48:00|评论(loading...)|编辑
好不容易结束了sd_spinup_disk(),马上我们就遇到了三座大山.它们是sd_read_capacity(),sd_read_write_protect_flag(),sd_read_cache_type(),要继续往下看,我们不得不先推翻这三座大山.旧的三座大山已经在毛主席的英明领导下成功推翻了,但是今天我们的人民却身处新三座大山的压迫之下,眼前这三个函数堪比臭名昭著的房改医改教改.阅读全文>
发表于 @ 2007年12月10日 18:41:00|评论(loading...)|编辑
很久以前,天还是蓝的,水也是绿的,庄稼是长在地里的,猪肉是可以放心吃的,耗子还是怕猫的,法庭是讲理的,上床是先结婚的,理发店是只管理发的,药是可以治病的,医生是救死扶伤的,拍电影是不需要陪导演睡觉的,照相是要穿衣服的,欠钱是要还的,孩子的爸爸是明确的,学校是不图挣钱的,白痴是不能当教授的,卖狗肉是不能挂羊头的,男就是男的女的就是女的.那时候Block层还是一部分附属于drivers/目录下一部分附属于fs/目录下的.阅读全文>
发表于 @ 2007年12月10日 18:31:00|评论(loading...)|编辑
和usb核心层一样,scsi核心层也提供了大量的函数让我们调用,这些函数极大的便利了我们编写scsi设备驱动程序.我们只要准备好参数传递给这个函数,然后就万事大吉了,等着判断函数返回值就是了,至于需要传递的数据,则已经被填充在我们的参数中的buffer里边了.这就好比我每天上班的时候把自行车停在西直门城铁站外,到了晚上下班回来的时候,自行车框里自然而然的就被填充满了,什么都有,香烟盒,卫生纸,吃剩的苹果,嚼过的口香糖,偶尔还有用过的避孕套,总而言之,首都人民的热情一次次的让我感动得泪流满面,让我觉得北漂的日子并不孤独.阅读全文>
发表于 @ 2007年12月07日 14:29:00|评论(loading...)|编辑
庆祝一件事的最好的方法就是不去做这件事。譬如,庆祝世界杯的最好的方式就是不去参加世界杯——中国队几乎一直都是这么做的。再譬如,庆祝情人节的最好的方式就是不去找情人——于是,很多中国的男人把情人节的前一天(2月13日)过成了情人节。阅读全文>
发表于 @ 2007年12月05日 18:43:00|评论(loading...)|编辑
如果我们不看新闻联播,我们又怎么知道自己生活在幸福中呢?如果我们不看probe,我们又怎么知道设备驱动的故事是如何展开的呢?阅读全文>
发表于 @ 2007年12月04日 21:25:00|评论(loading...)|编辑
解析完了PCI的那些内核参数,再翻过多少座山跨过多少条河,内核就会遇到init/main.c里一个名叫do_initcalls的函数。do_initcalls对内核来说只不过是漫长冒险旅程中的一个驿站,对PCI来说却是命运转轮的开始。内核在它里边完成了对.initcall.init节里各种xxx_initcall函数的执行,PCI的那些自然也包括在内。阅读全文>
发表于 @ 2007年12月01日 23:41:00|评论(loading...)|编辑