Linux 那些事儿之我是 PCI
目录
目录 ..................................................................................................................................................2
引子 ..................................................................................................................................................3
PCI,我们来了 ................................................................................................................................4
PCI全接触 ......................................................................................................................................15
PCI的那些内核参数 ......................................................................................................................23
初始化(一)......................................................................................................................................31
初始化(二)......................................................................................................................................33
第 2 页 共 43 页
Linux 那些事儿之我是 PCI
引子
老夫子们痛心疾首的总结说,现代青年的写照是——自负太高,反对太多,商议太久,行动
太迟,后悔太早。上天戏弄,俺不幸的混进了 80 后的革命队伍里,成了一名现代青年,前
有老夫子的忧心忡忡,后有 90 后的轻蔑嘲弄,终日在迷失与老土这样的两极词汇里徘徊。
为了说明俺也是有主义有信仰的,也是经历过楼市股市狂风暴雨考验的,这里就讲讲 PCI,
而且不再做过多的罗唆铺垫,直接开门见山,让他们看看 80 后不仅仅知道什么是网恋什么
是异性同居,知道怎么靠上半身上位怎么用下半身写作,还知道什么叫 PCI,什么叫雷厉风
行。
Linux 里的 PCI 是一个系统工程。现在各行各业都爱和工程这个词儿沾个边儿,勤工助学是
爱心工程,交通治理是畅通工程,只要加上个“工程”,那股热火朝天无私奉献的劲儿就出来
了,不过很让人惭愧的是,提到工程俺首先反应出来的还是豆腐渣工程,实在是给 80 后摸
黑。PCI 这个系统工程当然不是豆腐渣工程,否则不可能结实牢固的运转这么多年,我相信
与它一番亲密接触之后,就会和国家“畅通工程”专家组组长、东南大学交通学院院长王炜教
授的研究成果“中国城市环境污染不是由汽车造成的,而是由自行车造成的。自行车的污染
比汽车更大。”一样,收获会是巨大的、空前绝后的。为了高屋建瓴的审视一下 PCI 这个系
统工程,咱们先去看看使用 make menuconfig 配置内核时显示的那个界面
第 3 页 共 43 页
Linux 那些事儿之我是 PCI
很严肃的告诉你,这里所说的工程所依托的内核版本仍然是 2.6.22,这话我只在这儿告诉你
一次,好话不会再说第二遍。为什么这里要采用与 USB 那块儿不同的手法,从一张图片儿
开始咱们的故事?作为一个勤于分析善于思考的 80 后,俺经过复杂的推理和多方面的论证,
得出了这么一个结论:图片要比文字形象的多,要更得人心一些。不然为啥你看到有关石靖
的文字报道和评论后还不满足,非要漫天的去搜索她的那些图片儿那?为啥你看到那个越南
美女黄垂玲的消息后,就非要到处找那几段儿视频小录像那?
PCI,我们来了
现在这段时间最火的工程是什么?当然不会是 PCI 这个系统工程了,你即使不是党员也总
归是个中国人,是中国人都要毫不犹豫的回答“探月工程”。不过,如果你在两年前就这么问
我的话,俺会面带羞涩的回答你,是“中国芯工程”,谁让汉芯偏偏就是俺们交大的那,谁让
汉芯又偏偏是假的那,俺无法回答你,俺陈进手下的哥们儿也无法回答你。到现在俺还依稀
记得,在 2002 年的那个秋天,俺刚到交大就遇到陈进时的情景,旁边儿一见多识广的哥们
儿指着一个瘦高瘦高文质彬彬的帅哥说:“看,那小伙儿就是陈进,搞汉芯的,博导,大牛!”
俺无比激动的望过去,差点崇拜的华丽丽的摔倒,就没诚想到了 05 年就什么都成假的了,
这要放到宪哥的节目里,肯定是最难的一期真的假不了。不过搞计算机的再怎么敢玩儿虚的,
第 4 页 共 43 页
Linux 那些事儿之我是 PCI
搞航空航天的都不敢这么玩儿,所以说一会儿航天飞机一会儿探月工程,和那个中国芯工程
比起来是冰火两重天,特提神儿。
因此,现在俺决定,下次望见月亮时,俺要自豪的在心里默默的呼喊一下:月亮,我们来了!
作为热身,借这地儿俺也要呼喊一下:PCI,我们来了!虽说俺都不记得上次望见月亮是哪
年哪月的事儿了,但是 PCI 总归是就在眼前的。
还是看看前面的那张图,第一项,“PCI support”,只有选上它,咱们的故事才能够继续得下
去,所以说为公为私,为你为我,这一项都必须得选上。
选上了第一项,才有第二项“PCI access mode”的存在,它是一个单项选择题,有四个答案,
分别是 BIOS、MMConfig、Direct、Any,记不记得青春年少的时候,考试时涂的那些答题
卡?亲爱的老师们改的时候一般都是拿个挖了很多洞洞的纸片儿往答题卡上套,这样一目了
然就知道你哪些答对了哪些答错了,有些天资聪慧的同学很容易的就想出了个对策,在不怎
么肯定的题目里将模棱两可的答案都给涂上,这样老师们拿纸片儿往上套的时候就总会是对
的,不过可惜的是高考不是这么个改法,也就不能这么搞。这里“PCI access mode”的四个选
项也不能这么搞,你是只能选上一个的,其实你也不用这么搞,Any 选项本身就表示了你告
诉内核说前面三个答案随便一个都可以,你只要选上了它,就相当于所有的四个答案都给选
上了,可惜啊可惜,为啥咱们考试时咋就没有这么一个选项捏?
这么一说,你就明白了,即使咱们什么都不懂,随便蒙上一个 Any 也错不了,咱们都是挤
了多少次独木桥挤过来的,这点技巧还是有的,但是现在不是考试,所以咱们不但要会答题
还要明白题目的意思。祭出咱们早已很娴熟的猜题大法,可以很快的就从名字里就猜到 PCI
access mode 是说 PCI 的访问方式的,访问什么?当然是访问 PCI 设备,那么几个答案的意
思也就是,你可以通过 BIOS 去访问,也可以抛开 BIOS,直接(Direct)去访问,或者通过
一个叫 MMConfig 的东东去访问,Any 就是表示你如果拿不准的话可以让内核去选择一种访
问方式,当然,内核一向都是很严谨刻板的,绝不会真的抓阄儿抓到哪个就使用哪种方式,
它会按照一定的优先级,首先尝试 MMConfig,然后是 Direct,如果这两种方式都不起效,
最后再使用 BIOS。
那现在你可能会感到疑惑的是,这里所谓的 access 到底是怎么回事,为啥还搞出这么多名
堂来。说起来话长,俺在讲 usb core 的时候就提到了,每个 PCI 设备都有那么一张表,就是
传说中的配置寄存器,有了它,写 PCI 驱动的身体甭儿好,吃饭甭儿香,中断号什么的也
不用再去申请了,直接从表里拿出来就是,这就少了很多冗长的步骤手续和推诿扯皮,省事
又省心。关于这张表,现在还不是详细去讲它的最佳时机,咱们虽然是在开门见山,但视力
范围毕竟有限还看不了那么远。目前来说,俺只想问的一个问题是,它的内容都从哪儿来的?
其中一部分,包括设备 ID,厂 商 ID 等等自然都是厂商固化在设备里边儿的,它们的内容咱
们不需要去改变也改变不了,而还有一部分则是需要咱们的内核去酌情修改设置的,具体在
什么时候去设置,就牵涉到了另外一个无比重要的概念——总线枚举。
随着剧情的深入发展,人物总是会越来越多,为了今后能够更好的理清他们之间的关系,在
讲总线枚举之前有必要先窥探一下 PCI 系统的全貌。引用一下 LDD3 里的一张图
第 5 页 共 43 页