linux如何发现正确的驱动?

发布于 2022-09-20 03:36:05 字数 97 浏览 23 评论 9

是这样,我的机子有两个网卡,分别是8139和e100的。我在配置内核里除了选择了8139和e100,还选了3com的网卡驱动。我想问一下 linux如何在内核里如何来判断选用选择合适的驱动程序?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

可是我不能没有你 2022-09-20 15:17:37

回复 9# xs3c

    每个编译进kernel的module的__init函数都在内核image的__init_call__ section中,kernel初始化过程中会对这个section中的每个函数都调用一次。

熊抱啵儿 2022-09-20 15:17:36

上面简单的提到了 sysfs 文件系统,您可能想知道 sysfs 是怎么认出系统中存在的设备以及应该使用什么设备号。对于已经编入内核的驱动程序,当被内核检测到的时候,会直接在 sysfs 中注册其对象;对于编译成模块的驱动程序,当模块载入的时候才会这样做。大家知道这个内核检测是在那部分做的?

你怎么敢 2022-09-20 15:17:30

谢谢楼上的回答,有点门道, 我在看看udev是咋回事,以前就听说,但他具体咋工作还不知道。

走走停停 2022-09-20 15:17:23

回复 5# xs3c

    你这里是另外一回事。前面我说的pci云云,都是在driver module已经插入到kernel space中以后这个前提下。即buildin的driver或者已经modprobe后的driver。如果你的driver还在文件系统上,那肯定是参与不到pci probe的id匹配过程的。但总不可能把所有driver module都编译进内核或者一个接一个的modprobe吧。所以就有了udev这种程序,它在user space做这种类似的pci id match的工作,然后把文件系统上对应的module给插入到kernel space中。你的这个脚本也差不多,就是比如你ifconfig eth0 up时,脚本会根据eth0找到一个module name,然后将它modprobe到kernel space.这种机制叫hotplug(热插拔)。前面说的pci id match的机制叫(plug and play)或者pnp(即插即用)

机场等船 2022-09-20 15:16:34

我的理解是这样的:在PCI驱动中有一个pci_device_id结构,里面包含了能够驱动的设备模块列表,在pci_driver中通过id_table和pci_device_id进行关联,加载驱动时,probe函数就会通过id_table找到对应的PCI设备

半山落雨半山空 2022-09-20 15:15:47

谢谢楼上的回答,那pci总线驱动在啥时候调用呢。我看了下redhat下的/etc/rcsysinit脚本。他里面有加载网卡这些驱动,

  1. # Network
  2. pushd /etc/sysconfig/network-scripts >/dev/null 2>&1
  3. interfaces=`ls ifcfg* | LC_ALL=C egrep -v '(ifcfg-lo|:|rpmsave|rpmorig|rpmnew)' |
  4.             LC_ALL=C egrep -v '(~|.bak)$' |
  5.             LC_ALL=C egrep 'ifcfg-[A-Za-z0-9._-]+$' |
  6.             sed 's/^ifcfg-//g' |
  7.             sed 's/[0-9]/ &/' | LC_ALL=C sort -k 1,1 -k 2n | sed 's/ //'`
  8. for i in $interfaces ; do
  9.         eval $(LC_ALL=C fgrep "DEVICE=" ifcfg-$i)
  10.         load_module $DEVICE
  11. done
  12. popd >/dev/null 2>&1
  13. for module in $network ; do
  14.         load_module $module
  15. done
  16. echo -n $" network"

复制代码这里它已经就知道该加载正确的驱动了吗?

无声情话 2022-09-20 15:15:44

驱动程序里注明了它要接管的chip的pci id,pci总线驱动一开始会probe所有的pci device,对每个pci device都去问驱动程序,这个设备的pci id是否是它像要控制的设备的pci id.如果是,就交给这个驱动就行了。其他驱动则打酱油。

酒与心事 2022-09-20 13:56:52

这个问题好,我也想知道

爱本泡沫多脆弱 2022-09-20 13:30:29

自己先顶一下。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文