下面摘抄字linux内核技术手册:
构建内核最难的部分是.config的生成,到底要勾选那些选项,我的系统到底要支持那些设备,我要提供那些驱动,而对于我这种对于make menuconfig下的
选单又不清楚的人来说,简直就是灾难。
下面分几种情况来分几种情况来化解我的灾难:
1,在运行的系统中来获取设备的一些驱动信息,然后加载相应的驱动模块,如果现在没有运行环境,也可以下载对应的liveCD来运行,先得到一些硬件需要的配置选项:
a,通知各发行版本会同时发布一个配置文件,可能在/proc/config.gz中,如果有可以用gzip -dv config.gz来解压缩,这样的配置,可能内核会很大,几乎宝航了所有的内核模块;如果没有,我都可以考虑用/boot/下的配置文件
把他们拷贝到自己过得内核源码树中,病改名为.config,或者用make menuconfig来加载这个配置文件,然后更改,再保存;
b,既然使用发行版本的config会使得构建太费时间,那么我们就要搞清楚,自己的系统中到底需要哪些模块:
我们可以通过sysfs来窥探内核部分与文件系统各个符号链接之间的关系:
以网卡为例:
ls /sys/class/net 可以查看系统中的网卡名字:
eth0 eth1 lo
萎了搞清eth0的驱动,有很多方法,下面我通过:
$ basename ·readlink /sys/class/net/etho/device/driver/module·
e1ooo
得到了驱动模块名称,回到源码树去找相应配置选项:
$ cd ~/linux/linux-2.6.17.8
$ find -type f -name Makefile | xargs grep e1000
./drivers/net/Makefile:obj-$(CONFIG_El000) += elOOO/
./drivers/net/elOOO/Makefile:obj-$(CONFIG_ElOOO) += elOOO.o
./ drivers/net/elOOO/Makefile:elOOO-objs := elOOO main.o elOOO hw.o eiOOO_
ethtool.o e l OOOparam.o
找到了配置选项,执行make menuconfig ,然后按下/ ,输入E1000,就可以知道要选中那个配置选项了:
Symbol: E1000 [=y]
Prompt: Intel(R) PRO/IOOO Gi9dblt Ethernet support
Defined at drlvers/nct/Kconfig:1901
Depends
Locatic
j/nct/Kconfig:NET 认!UML 认 PCI
;ion:
-> Device Drivers
-> Network device
-> Ethernet
ice support
(1000 Mbit)
Symbol: ElOOO^DISABLE.PACKET.SPLIT [=n]
Prompt: Disable Packet Split for PCI express adapters
Defined at drivers/net/Kconfi9:1940
Depends c NET ^ !UML 鈦 E1000
Location:
-> Device Drivers
显示出的第一个选项就是你所寻找的。L o c a t io n中的信息告诉你要把模块E1000构建到
内核中,下面的配置选项必须启用:
Device Drivers
Network device support
[*] Network device support
Ethernet (1000 Mbit)
[*] Intel(R) PRO/IOOO Gigabit Ethernet support
这些步骤对于内核中任何活动的设备都是有效的。
另外一个例子,一个usb设备:
目前它正连接到
/dev/ttyUSBO端口,所以需要査找町j/ j中的部分。
$ Is /sys/class/tty/ | grep USB
ttyUSBO
如上节所示,你可以通过追踪找到控制这个设备的模块:
$ basename 'readlink /sys/class/tty/ttyUSBO/device/driver/module、
pl2303
然后搜索内核源码树找到你需要启用的配罝选项。
$ cd ~/linux/linux-2.6.l7*8
$ find -type f -name Makefile | xargs grep pl2303
./drivers/usb/serial/Makefile:obj-$(C0NFIG_USB_SERIAL_PL230B) +- pl2B03.o
使用内核配置工具,如图7-3所示,找出正确的选项以设置C0NFIG_USB_SERIAL__PL2303
字段。
它显示了究竟在何处可以找到用来控制这个设备正常运行的USB P r o l i f i c 2303 S in g le
Port S e r ia l Driver选项 0
Symbol: USB_SERIAL_PL2303 [=»]
Profit USB Prolific 2303 Single Port Serial Driver
Defined at drivers/usb/ser'ial/Kconfig:442
Depends on: USB!=n W USB^SERIAL
Location:
-> Device Drivers
-> USB support
-> USB Serial Converter
•>
;B support
USB Serial Converter support (USB^SERIflL [=«])
设备查找概要
总的来说,以下是寻找已经绑定到设备的驱动所需的步骤:
1. 在a j / s 的c la s s文件夹中找到设备所对应的文件。网络设备罗列在Asw/c/ws/Aier
中,tty设备罗列在其他设备根据其种类不同罗列在Ayw/chM下的其
他目录中。
2. 跟踪u s / s找到控制这个设备的模块名称。通常会在
name/device/driver/module中, 并可使用read/iViA:和程序显示出来。
$ basename 'readlink /sys/class/class_name/device_name/device/driver/module
3. 使用//nd和在内核的M ak e file文件中查找用于构建该模块的以CON FIG_为前缀
的字段。
$ find -type f -name Makefile | xargs grep module_name
4. 在内核配置系统中搜索这个值并到菜单中相应的位置启用这个驱动。
让内核告诉我们需要什么
到此为止,关于在中通过浏览和跟踪符号链接寻找内核名称的步骤,我们已经全
部做了一遍。下面有一个非常简单的脚本让我们可以用另一种方法完成这些工作。
#!/bin/bash
n
# find all modules.sh
#
for i in 'find /sys/ -name modalias -exec cat {} \;'; do
/sbin/modprobe --config /dev/null --show-depends $i ;
done | rev | cut -f 1 -d '/' | rev | sort -u
你可以从本书前言中“联系我们” 一节中提供的网址,下载包含这个脚本的示例文
件。
这个脚本遍历sysfs并査找所有名为modalias的文件。modalias文件包含的模块别名让modprobe
命令知道应该加栽哪个模块来控制这个设备。该模块别名是由设备制造商、
I D、类的类塑和其他标识特定设备的唯一标识符。每个内核驱动模块都有一个内置的
女持设备列表,当驱动告诉内核它所支持的设备时,该列表自动生成。mod p rob e查看
所有驱动的设备列表,并尝试和它的别名匹配。如果找到了一个符合的模块,它就会
加载它(这个过程就是Limix的驱动自动加载功能的工作原理)。
这个脚本会使modreobe 程序在实际加载模块之前停止,而只打印出随后将执行的操
作。这样我们就有一张控制系统中所有设条所需的模块的列表。我们可以通过排序或
者只显示某一特定部分对它做些整理,输出结果如下:
$ find_all_modules.sh
8l39cp.ko
8l39too.ko
ehci-hcd.ko
firmwareclass.ko
i2c-i80l.ko
ieee802ll.ko
ieee80211_crypt•ko
ipw2200.ko
mii.ko
m m c c o r e . k o
pcmciacore.ko
rsrcnonstatic.ko
sdhci.ko
snd-hda-codec.ko
snd-hda-intel.ko
snd-page-alloc.ko
snd-pcm.ko
snd-timer.ko
snd.ko
soundcore.ko
uhci-hcd.ko
usbcore.ko
yentasocket.ko
这是计算机中所有控制硬件所需模块的清单。
此脚本也很4 能肢示一些错误信息,如:
FATAL: Module pci:v00008086d00002592sv000010CFsd000012E2bc03scOOiOO not found.
FATAL: Module 5erio:ty0lpr00id00ex00 not found.
这表示它无法找到可以控制此设备的模块。无需为此拘心,闪为某些设备原本就没冇
支持它的内核驱动.
2 从零开始确定正确的模块:
有时候,你的确没有机会通过运行发行版中的内核来确定驱动硬件需要哪些模块。或
者系统屮添加了新的硬件,而你需要找出使它正常工作的内核配置选项。本节将教会
你怎样找到使硬件正常工作的内核Si置选项。
确定-•个新设备由哪个驱动控制的婊简单方法,就足把内核源码树屮所有此类驱动构
建成模块,并让zdev完成设备和驱动的匹配《 —旦完成这些,你就能用刚才W论过的
方法确定所需驱动,然后回过头去修改内核配置,仅启用这个驱动。
但如果你不想构建所有的驱动,或h述方法因为某些原因行不通,那就需要-点额外
的工作来确定所需的驱动程序。Fifi的步骤很复杂,而且还时常需要深入内核源码。
不过不必畏惧这些,它会帮助你更加深刻的理解硬件和内核源码。
这些为设备卩L:配驱动的步骤取决于你所使用的设备类型。本章我们将讨论两类婊常!Al
的设备:PC丨设备和USB设备。这里描述的方法对其他种类的设备同样有效。由于设条
的不间,为其确定驱动的步骤也不尽相同。
当然,让内核能够找到系统中所有的文件系统也是很重要的,其中最重要的是根文件
系统。我们将在稍后的“根文件系统” 中讲解要怎样做。
PCI设备
P C丨设备依靠供应商ID (vendor I D ) 和设备ID (device I D ) 来识别,每个供应商和设条
ID的组合就可能唯••确定一个设备驱动。这是本章W论的基础。
在这个示例中,我们使用一个在当前版本的内核i l无法工作的PC丨网卡。你的实际情况
"1*能会和这个示例不同,包括不丨司的PCI设备和总线ID号,但是以K操作中的步骤适
用于为任何类型的PC丨设备寻找驱动。
首先,找到系统中不能工作的P C I设备。要得到所有P C I设备列表,使用/.vpd程序。因
为我们只关心以太网P C 1设备,所以要把我们的搜索范围缩小到只查找包含E th e rn e t的
字段(不区分大小写) :
$ /usr/sbin/lspci | grep -i ethernet
06:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/
8139C/81B9C+ (rev 1 0 )
这就是我们希望使之正常工作的设备。
/677C/输出的首部显示的是该设备的P C I总线1D,06:04.0。这就是我们在中查找此
设备信息时要使用的值。
进入罗列各种PCI设备的•sw办,注意它们的名字:
$ cd /sys/bus/pci/devices/
$ Is
0000:00:00.0
0000:00:Id.0
0000:00:02.0
0000:0 0 :ld.l
0000:0 6 :04.0
0000:0 0 :Id.2
内核给P C I设备的编号以0 0 0 0 :开头,它在/印c/程序的输出中并+ 显示。因此要
在你用/WC/•找到的数值前面加上“0 0 0 0 :” ,然后进入目录:
$ cd 0000:0 6 :04.0
在这个目录中,你可以得知(供应商)和☆ W a (设备)文件的内容:
$ cat vendor
OxiOec
$ cat device
0x8139
这些就是这个设备的供应商ID和设备ID。内核使闬这些值来正确的匹iSd驱动和设务。
PCI驱动告诉内核它所支持的供应商和设备1D,因此内核就知道怎样把驱动绑定到介
适的设备上。把它们记下来,后面我们要用到。
现在知道了这个PCI设备的供应商和产品1D,接下来我们需要寻找支持它的驱动。返
回到内核源码EI录:
$ cd ~ /linux/linux-2.6.17.8/
PCI ID在内核源码树中® 常见的位置是在这个文件中搜索我们
的供应商和产品编号:
$ grep -i OxiOec i n c l ude/linux/pci一ids.h
#define PCI_VENDOR_ID_REALTEK "" OxiOec
PCI_VENDOR_ID_REALTEK这个值吋能被任何声明i :持这个制造商的设备的驱动程序使
用。
为保险起见,也应在这个文件中赍找设备ID ,有时它也会在这里定义:
$ grep -i 0x8139 include/linux/pci_ids.h
#define PCI_DEVICE_ID_REALTEK_8l39~ 0x8139
这个宏定义在后面会用到。
现在寻找引用这个供应商宏定义的驱动源码文件。
$ grep -R1 PCI_VENDOR_IO_REALTEK *
include/linux/pciids.h
drivers/net/r8l69.c
drivers/net/8l39too.c
drivers/net/8lB9cp.c
不需要看列表中的第一个文件冈为那是我们找到原始宏定义的地方。彳
应当仔细查看t/r/ver.y/nef/子目录中的nS/J9.C、片/J9/价?■和8/69(7^文件。
在编辑器中打开其中的一个文件汴搜索PCI_VENDOR_ID_REALTEK。在.drivers/net/r8!69.c
文件中,它出现在下面这段代码中:
static struct p c i d e v i c e i d r t l8i69_ p c i _ t b l [ ] = {
{ PCI_DEVfCE(PCI~VENDOR_ID_REALTEK, Ox8l69)> },
{ PCI_OEVICE(PCI~VENDOR~ID~REALTEK, 0x8129), },
{ PCI^DEVICE(PCI~VENDOR~ID~DLINK, 0x4300), },
{ PCI_D E V I C E (0xl6ec, 0x0116), },
{ PI_VEN00R_ID_LINKSYS, 0x 1032, PCI_ANY_ID, 0x0024, },
{0,}
所有的PCI驱动都包含一个仑所支持设备的列表。如上所示,这个列表包含在一个由
PCI_DEVICE_ID组成的结构中。通过查看它可以确定其是否支持我们的设条。制造商
m在这里是匹配的,制造商后的那个值足设备ID。我们的设洛ID为0x8139,而这个职
动支持的设备是制造商ID为PCI一VENDOR ID REALTEK、设备ID为0x8169和0x8129的设
备。因此这个驱动不支持我们的设备。
掊下来査看下一个文件,driversfnet/8139too.c、以发现字符串PCI_VEND0R一ID REALTEK
出现在下面这段代码屮:
if (pdev->vendor « PCI_VENDOR_ID_REALTEK &&
pdev->device := PCI_DEVICE_ID_REALTEK_8139 && p c i r e v >= 0x20) {
dev_info(&pdev->dev,
”This (id %04x:%04x rev %02x) is an enhanced 8139C+ chip\n",
pdev->vendor, pdev->device, p c i r e v ) ;
dev_info(&pdev->dev,
"Use the \"8i39cp\" driver for improved performance and
stability.\n");
}
这里对PCI_VENDOR_ID_REALTEK值的用法和检测PCI设备ID是否匹配PCI_DEVICE_ID_
REALTEK 8139的代码相似。如果这个检测通过f ,驱动会打印出这样一条消息.
“ Use the 8139cp driver for improved performance and stability (使用8丨39cp驰动以改
善性能和稳定性) 。” 也许应该继续看下一个驱动。即使我们没有明砬的线索,然而
8 l3 9 t o o . c驱动串.也没有在s t r u c t p c i d e v ic e一i d 屮包含我们要找的制造商丨丨)和设条
1D,这就告诉我们它不支持我们的设备。
敁沿,各看cMversfnet/8139i:p.c。仑在下面的代码段中使用了PCI_VEND0R_ID_REALTEK
宏:
static struct p c i d e v i c e id cp p c i _ t b l [ ] = {
{ PCI_VEND0R_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139,
PCI:ANY-ID; PCI_ANY_ID, 0, 0, },
{ PCI~VEND0R_ID_TTTECH, P C I _ D E V I C E _ I D _ T T T E C H _ M C 3 2 2 ,
pci二any_idT p c i a n y i d , o7 0, },一
这是一个在s t r u c t p c i一d e v ic e_ id变量中同时使用我们的制造商ID和设备丨1)的地方。
这个驱动应该支持我们的设备。
现在我们有丫驵动的名字,就可以按照本章第丨节的步骤,找到应该被启用的介适驸动
配置来构建这个驱动。
概括起来,下向是为某个PCI设备找出其合适的驱动所需的步骤:
1. 使用/A77C/查找该设备的PCI总线ID。
2 . 选尺/syx/bid.s/pci/devices/0000:bus_ i d 百录,这里的bws—ic/指的是 h — 步找到的
PC丨总线丨D。
3. 查阅PCI设备目录屮vendor和d e v i c e义件的内容。
4. 返冋内核源码树H 录,并在.include/Iinux/pci—id s上中査找之前步骤中找到的P C I制
造商和设备I D。
5. 在内核源码树屮查找驱动中对这些值的引用。生产商和设备丨D都应该在结构体
s t u r c t p c i_ d e v ic e_ id中定义。
6. 使用//W和g/rp在内核的Make file文件中杏找用于构建该校块的以C0NFIG_为前缀
的字段。
$ find -type f -name Makefile | xargs grep ORIVER_NAME
7 . 在内核sd置系统中搜索这个配置的值,进人到菜单中的相应位置启n]该选项來构
逮驱动程序。
USB设备
为U S B设备资找特定驱动的过程与之前讲述的为PCI设条奄找驱动很相似,只是/I:仵找
总线ID时有细微的差別。
在这个示例中,我们一起来查找一个U SB无线设备的驱动。和PCI设条-•样,该示例中
的细节会和你的情况不同,但其中的步骤应该适合任何类型的U SB设备。
同P C I设备一样,我们也必须找到该U S B设备的总线1D。总线ID可以使用usbutils包屮
的lsusb程序来査找。
lsusb程序可以舐示出所有连接到系统的U S B设备。如果你不知道知道正在寻找的设备叫什么名
称,那就从查看所有的设备开始:
$ /usr/sbin/lsusb
Bus 004 Device 0 0 3: ID 157e:300d
如果你W 次将这个设备连接到你的计算机并奄看的输出,设备编号将会改变:
$ /usr/sbin/lsusb | grep I57e
Bus 004 Device 0 0 4: ID 157e:300d
这是因为U S B 设条编号是不固定的,每次插入设备后都会改变。固定的足制造商1 D和
产品I D,在中就足以两个以:分隔的4位数字来显示。对于这个设备,制造商1丨)就
是1 5 7 e而产品I D是3 0 0 d。记录找到的值,后面的步骤屮将会用到它们。
和PC1设备一样,我们将在内核源代码中搜索USB制造商和设备ID, 来为这个设备寻找
适合的驱动。不幸的是,像PCI设备一样,没有哪个文件同时包含所有的USB设备ID。
因此需要搜索整个内核源码树:
ZD1211 }
ZD1211 }
ZD1211 }
Z01211 }
ZD1211 }
ZD1211 }
DEVICE一ZD1211B },
DEVICE~ZD1211B },
,driver_info
• d r i v e r i n千o
static struct u s b d e v i c e ^ i d u s b _ i d s [ ]
{ USB_DEVICE(OxOace, 0x1211),
{ USB~DEVICE(0x07b8, 0x6001),
{ USB"DEVICE(Oxl26f, 0x a006),
{ USB~DEVICE(Ox6891, Oxa727),
{ USB~DEVICE(0x0df6, 0x9071),
{ USB~DEVICE(0xlS7e, 0x300b),
{ USB_DEVICE(0x0ace, 0x1215),
{ USB~OEVICE(Oxl57e, 0x300d),
0
$ grep -l -R -1 I57e drivers/*
d r i v e r s / a t m / p c a200e.data
drivers/atm/pca200e_ecd.data
drivers/atm/sba200e_ecd.data
d rivers/net/wireless/zdl2lirw/zd_usb.c
drivers/scsi/qli040_fw.h
drivers/scsi/qli280_fw.h
d r i v e r s / s c s i / q l o g i c p t i a s m . c
我们知道这是一个USB无线设备,而不是ATM或SCSI设条,W此可以放心的忽略
和\scsi 目录中的文件。这就剩卩drivers/net/wireless/zd1211rw/zdjusb.c文件。
在中,字符串I 5 7 e在以下字符块中显示:
像PC:丨驰动一样,U S B 驵动告诉内核它们支持哪些设备,以便内核可以把驱动绑定到设
备丨:。IH4丨丨这个结构体变量struct u s b _ d e v i c e _ i d所示这里列出f 这个职动支持的
不同制造商1 D和设备I D。这〜行
{ USB_^DEVICE(Oxl57e, 0x300b), .driver—info = DE V I C E一ZD1211 },
•乜你知道T 这个设条所需驱动的名称,返回到内核A ^ ^ / /化文件,用本章之前所i并方
法,确定怎样正确启用该驵动。
总的宋说,查找特定U S B 设备驱动的步骤是:
1. 找到需要驱动的U S B 设备的制造商丨D 和产品丨D , 分别在添加和移除设备诟使⑴
Isusb来查看列表中发生的改变。
2. 在内核源码树中搜索USB设备的制造商ID和产品ID。它们都应该在结构体s t r u c t
usb_device_id 中定义。
3. 使用//W和在内核的Makefile文件中査找用于构建该模块的以CONFIG 一为前绂
的字段。
$ find -type f -name Makefile | xargs grep DRIVER^NAME
4. 在内核f l d S系统中搜索这个配贾的值,在菜单中进入到相应的位置并启用这个选
项来构建驱动。
根文件系统
根文件系统是系统引导的重要组成部分。它不怛包含了发行套件所有的初始化程序
( ini t ial p r o g r a m ) , 通常还包含计算机的全部系统配置。总之,它是非常重要的,)(*-
11.为使系统正常工作,内核必须在引导时找到仑。
如果新配置的内核在引导时出错,就像
VFS: Cannot open root device hda2 (03:02)
Please append a correct "root=" boot option
Kernal p a n i c : VFS: Unable to mount root fs on 03:02
这就是因为内核无法& 到根文件系统。如果在引导时没有使用ramdLsk映像,通常逮i义
把根分区的文件系统支持及其所在磁盘的磁盘控制器支持都构建进内核,而不足把它
用做模块。如果在引导时使用的是n im d i s k ,就可以放心的把这些部分构建成模块。
注意: 怎样确定作启动时是否使川了r am d i s k ?江第5章我们对使用发行版的安装脚本和白己手动
安装内核做/ 比较。如果你选择发行版提供的安装脚本, 很可能使用广ramdisk。如采足手
工安装的就可能没有使Hiramdisk。
下丨fti的小节敁示了怎样让内核在引导时找到根文件系统。
文件系统类型
首先,需要确认根分「>(使用的文件系统类型。为了做到这一点,丧看m o / w /命令的输出:
$ mount | grep •• / "
/dev/sda2 on / type ext3 ( r w’noatime)
我们关心的是羊词t y p e后面显示的文件系统类型。在这个例子中,它是e x t 3。这就足
根分丨乂正仵使用的文件系统类型。进入内核配置系统并确定这个文件系统类兜是启川
的,如第8章所述。
磁盘控制器
在之前⑴ 命令的输出中,该行的第一部分显示出哪个块设备挂载为根文件系统。本
例中它是/々v / . v ^ 2。现在文件系统在内核中已经被正确配置,你还必须确保这个块设
条也能正常丨:作。要找出需要哪些驱动,需要再次査看sp/s,。
所有的块设备都显示权丨sys丨block鸯Jsya丨cluss丨b丨o ck中,这取决丁•正在使用的内核版本。
在这两个位置上,块设备都是以树的结构存作的,而各分区作为主设备的子元素。
$ tree -d /sys/block/ | egrep “h d | s d”
|- - hdc
I - - hdd
sda
|-- sdal
|-• sdd2
I-- sda3
从m 如m 命令提供的信总屮,需要确认^ ^ 2 设备已经被正确的配置。虽然这&一个分
(磁啟分K 是有编号的,而主块设备没有),但是整个s d a设备必须被配置(没有主坱
设备,就没法访问其他各分区)。
s d a块设备和本载前面提到网络设备一样。在设备目录中有一个叫做d e v i c e的符号链
接,它指向控制这个块设备的逻辑设备。
$ Is -1 /sys/block/sda
• • •
device -> . . . /devices/pci0000:00/0000:00:if.2/hostO/targetO:0:0/0:0:0:0
现在需要沿着•中的设备链来找出控制这个设备的驱动。
$ Is -1 /sys/devices/pci0000:00/0000: 0 0 : l f . 2 / h o s t 0 / t a r g e t 0 : 0 : 0 / 0 : 0 : 0 : 0
• • •
driver -> . /bus/scsi/drivers/sd
这里我们看到S C S I磁盘控制器驷动控制这个设备的工作。W此我们锯要把S C S丨磁盘支
持加入到我们的内核配冒.中。
在.9P/V链中返冋上一级H 录继续査找, 试矜在这里找控制硬件的驱动。
$ Is -1 /sys/devices/pcioooo:oo/oooo:o o:if.2/hosto/targeto:o:o
这个H 录里没有叫driver的链接,再次返问上一级。
$ Is -1 /sys/devices/pcioooo:00/0000:0 0:if.2/hosto
« • •
这ill依然没有d r i v e r。继续返回上•级。
$ Is -1 /sys/devices/pcioooo:00/0000:oo:if.2
• • •
driver -> . /bus/pci/drivers/ata_piix
就在这里!这就是我们需要在内核ftd肾中启用的磁盘控制器。
W此对干这个根文件系统,我们需要在内核妃筲中启用e x t 3 ,sd和a t a一p i i x 驱动,这
样就可以在这个硬件I .成功的引导我们的内核丫。
辅助脚本
如本窣开始时所述,US/A•中的文件和目录会随笤内核版本改变。这有一个脚本,能方
便的确定系统中所有设条节点所需的内核驱动和模块的名称。它由负贵的内核开
发者们开发,能成功的运行在未来发布的所有2.6版内核上。
它提供f 完成b述操作的拢径。例如,当你需要获得所有sda块设备需要的驱动时:
$ get-driver.sh sda
looking at sysfs device: / sys/devices / p c i O O O O : 0 0 / 0 0 0 0:0 0 : i f .2/hosto/
target0:0:0/0:0:0:0
found driver: sd
found driver: a t a p i i x
还可以为类似USB-串U 转换器之类的复杂设备找到所有合适的驱动。
$ get-driver.sh ttyUSBO
looking at sysfs device: / s y s / d e v i c e s / p c i 0 0 0 0 : 0 0 / 0 0 0 0:0 0:id.3/usb4/4-2/4-2.
3/4-2.3 :1.0/ttyUSB0
found driver: pl2303 from module: pl2303
driver: pl230B from module: pl2303
driver: usb from module: usbcore
driver: usb from module: usbcore
driver: usb from module: usbcore
driver: uhci hcd from module: uhci hcd
你可以从这本书的网站上下载一个包含这个脚丨本的示例文阼,地址在前言“怎样联系
我们” 一节屮提供。