yanchenko Asked: 2009-05-29 09:57:02 +0800 CST2009-05-29 09:57:02 +0800 CST 2009-05-29 09:57:02 +0800 CST 如何判断需要哪些内核模块? 772 比如说,我有一个默认的 Gentoo 安装,其中编译了所有模块(例如设备驱动程序)。从这一点来看,下次我重新编译内核时,有没有一种简单的方法可以排除未使用的模块? gentoo kernel-modules 9 个回答 Voted ignis 2013-03-22T22:48:31+08:002013-03-22T22:48:31+08:00 make localmodconfig和make localyesconfig(在 2009 年 12 月 3 日发布的 2.6.32 中引入)将选择加载正在使用的模块所需的模块。 更多信息。 请注意,这不考虑曾经加载但当前已卸载的模块。ArchLinux 有一个modprobed_db可以解决这个问题,我不知道 Gentoo 是否也有一个。 shapr 2009-05-29T10:56:29+08:002009-05-29T10:56:29+08:00 我使用 debian 中的 discover 包来确定我可以加载哪些内核模块。具体来说: apt-get install discover discover --data-path=linux/module/name|sort|uniq 对于带有 nvidia 芯片组的 AMD 双核台式机,我得到: amd74xx emu10k1 emu10k1-gp forcedeth i2c-nforce2 ohci1394 sata_nv 这是一篇关于 linux 中硬件检测的短文,包括一些关于使用 discover 的文本。 Caterpillar 2009-05-30T02:13:27+08:002009-05-30T02:13:27+08:00 您可以使用“lsmod”来了解内核模块 Alakdae 2009-06-10T10:39:05+08:002009-06-10T10:39:05+08:00 显示正在使用的驱动程序/模块: lspci -v theman_on_osx 2009-05-29T10:06:48+08:002009-05-29T10:06:48+08:00 如果我们要进入技术细节,我会说你可以卸载这些模块,然后你不需要重新编译。但是,我认为您的意思是“仅将驱动程序包含在我的特定硬件中”。在这种情况下,我会建议: dmesg | less 仔细查看,看看你可以推断出哪些硬件细节。然后,当你去编译内核时,查看所有组件,看看它是否提到了你的硬件。重新启动后,检查以确保所有硬件都正常工作。 在 archlinux 中,有一个名为 的 bash 脚本[hwd][1],我认为它可以在 gentoo 上运行(可能需要一些黑客攻击),但它会告诉你你得到了什么。这是我的工作电脑: [theman@work]# hwd -s HARDWARE DETECT ver 5.5 (simple mode) Kernel : 2.6.29-ARCH CPU & Cache: Processor 0: Intel(R) Pentium(R) Dual CPU E2200 @ 2.20GHz 2194MHz, 1024 KB Cache Processor 1: Intel(R) Pentium(R) Dual CPU E2200 @ 2.20GHz 2194MHz, 1024 KB Cache Sound(a) : 82801G ICH7 Family High Definition Audio Controller module: snd-hda-intel Video : GeForce 8400 GS server: Xorg (vesa) Driver : xf86-video-vesa module: - Monitor : Generic Monitor H: 28.0-96.0kHz V: 50.0-75.0Hz Mouse : Logitech, Inc. Marble Mouse (4-button) xtype: IMPS2 device: /dev/input/mice HDD : 82801GB/GR/GH ICH7 Family SATA IDE Controller module: ata_piix USB : 82801G ICH7 Family USB UHCI Controller #4 module: uhci_hcd USB2 : 82801G ICH7 Family USB2 EHCI Controller module: ehci_hcd Ethernet : RTL8139/8139C/8139C+ module: 8139too Network : No wireless card Menu : Main menu: hwd All : Detect all hardwares: hwd -e X sample : Generate X sample: hwd -x wzzrd 2009-05-30T05:17:29+08:002009-05-30T05:17:29+08:00 GKH 在“Linux Kernel in a nutshell”中有一个 shellscript,它通过近似值做到了这一点。该脚本可以从书籍网站免费下载,并且没有版权信息,所以我想我可以在这里发布。 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 脚本输出是您的硬件需要运行的模块列表。它没有列出使某些软件工作所需的模块,例如 ipv6.so! @Greg:如果您不希望这样发布,我将其删除;-) hajowieland 2009-06-01T10:39:03+08:002009-06-01T10:39:03+08:00 在某些发行版中,还有一个非常漂亮的工具,称为hwinfo,它为您提供了许多有关硬件的有用信息。 为了更多地了解内核模块,lspci和lsmod对我来说总是做得很好。 setzamora 2009-05-30T02:24:31+08:002009-05-30T02:24:31+08:00 如果你正在重新编译内核。最好的办法是使用theman_on_osx提供的方法很好地了解您的硬件。列出所有组件。您只需从菜单中取消选中/排除模块(不需要的)(即,如果您通过 make menuconfig / make xconfig 重新编译它)。 您还可以使用“rmmod”卸载可即时加载的模块。 laurentb 2009-05-30T05:00:29+08:002009-05-30T05:00:29+08:00 lspci也应该可以帮助你。
make localmodconfig
和make localyesconfig
(在 2009 年 12 月 3 日发布的 2.6.32 中引入)将选择加载正在使用的模块所需的模块。更多信息。
请注意,这不考虑曾经加载但当前已卸载的模块。ArchLinux 有一个modprobed_db可以解决这个问题,我不知道 Gentoo 是否也有一个。
我使用 debian 中的 discover 包来确定我可以加载哪些内核模块。具体来说:
对于带有 nvidia 芯片组的 AMD 双核台式机,我得到:
这是一篇关于 linux 中硬件检测的短文,包括一些关于使用 discover 的文本。
您可以使用“lsmod”来了解内核模块
显示正在使用的驱动程序/模块:
如果我们要进入技术细节,我会说你可以卸载这些模块,然后你不需要重新编译。但是,我认为您的意思是“仅将驱动程序包含在我的特定硬件中”。在这种情况下,我会建议:
仔细查看,看看你可以推断出哪些硬件细节。然后,当你去编译内核时,查看所有组件,看看它是否提到了你的硬件。重新启动后,检查以确保所有硬件都正常工作。
在 archlinux 中,有一个名为 的 bash 脚本
[hwd][1]
,我认为它可以在 gentoo 上运行(可能需要一些黑客攻击),但它会告诉你你得到了什么。这是我的工作电脑:GKH 在“Linux Kernel in a nutshell”中有一个 shellscript,它通过近似值做到了这一点。该脚本可以从书籍网站免费下载,并且没有版权信息,所以我想我可以在这里发布。
脚本输出是您的硬件需要运行的模块列表。它没有列出使某些软件工作所需的模块,例如 ipv6.so!
@Greg:如果您不希望这样发布,我将其删除;-)
在某些发行版中,还有一个非常漂亮的工具,称为hwinfo,它为您提供了许多有关硬件的有用信息。
为了更多地了解内核模块,lspci和lsmod对我来说总是做得很好。
如果你正在重新编译内核。最好的办法是使用theman_on_osx提供的方法很好地了解您的硬件。列出所有组件。您只需从菜单中取消选中/排除模块(不需要的)(即,如果您通过 make menuconfig / make xconfig 重新编译它)。
您还可以使用“rmmod”卸载可即时加载的模块。
lspci也应该可以帮助你。