gosoft 发表于 2004-2-25 15:13:06

请教几个驱动方面的基本问题.

我对Linux如何加载驱动程序的,一直不能理解;如在windows中当内核加载后,读取注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下的内容是驱动的加载进内核;而Linux中我没有发现类似这样一个存贮系统要加载那些驱动的配置文件,那么它是如何知道要加载那些驱动的呢?如果有这样的配置文件,在什么目录下呢?

对于编译进内核的模块,还好理解,在LINUX启动的时候,这些模块就启动了,而当需要那些可加载的模块,是不是内核中有这样一个数据结构用来登记内核模块,并且记录了那些模块已经编译进内核,那些没有编译进内核。对于编译进内核的模块,直接启动好了;对于没有编译进内核的模块,当需要使用的时候,再把它加载进内核,这样理解对吗?

如果以上的理解是正确的,那么对于那些第三方提供的驱动模块,并没有再内核的那个数据结构中登记;那么它又是如何加载进内核的呢?特别是硬件的驱动程序?

还又我们在windows中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中会记录驱动文件的全路径,可以让内核知道如何找到需要的驱动模块的文件。而linux中好像使用的是模块名称,而不是文件名,是不是在Linux中模块名称和文件名之间有什么约定?????

还有我们在windows中了解到,windows自动识别硬件然后加载相应的驱动程序,那么是不是在系统中存储了这样一个数据库来描述什么样的硬件使用什么样驱动程序???如果有,那么在linux中是否也有这样的一个数据库呢??在什么地方?

kakuyou 发表于 2004-2-25 16:34:45

我也没看明白,目前也在猜测阶段,只是说说自己的想法,希望懂的人指出我那错了,做个抛砖引玉的作用。

Linux的内核(2.4系列)的模块实际上算是内核代码的一部分,因为它跟编译好的内核之间没有任何特殊通信方法或者接口,也不需要任何额外的数据,所以你不用考虑模块是怎么回事,你直接就当它是内核的一部分就行了。

Linux在启动时通过枚举总线和上面的设备来加载相应的处理,所以我想所有的注册数据都是在内核里。毫无疑问,Linux得正确识别出来硬件的信息(主要是在什么总线上,有什么样的芯片)是无法为硬件指定驱动程序的。

gosoft 发表于 2004-2-27 14:22:58

up

gosoft 发表于 2004-3-2 08:32:41

up

zhangkun 发表于 2004-3-3 15:46:08

急需了解这方面的知识
关注ing

shenzhouw 发表于 2004-4-16 11:09:12

没高手么?顶下

Dragonfly 发表于 2004-4-16 11:56:33

for pci devices, there is a pciid. name data base.
for module, check kernel code about modprobe. or the chapter about module in QJFX
页: [1]
查看完整版本: 请教几个驱动方面的基本问题.