Назад | Перейти на главную страницу

Как узнать, какие модули ядра требуются?

Скажем, у меня установлен Gentoo по умолчанию со всеми скомпилированными модулями (например, драйверами устройств). С этого момента есть ли простой способ исключить неиспользуемые модули при следующей перекомпиляции ядра?

make localmodconfig и make localyesconfig (введено в 2.6.32, выпущенной 3 декабря 2009 г.) выбирает модули, необходимые для загрузки используемых модулей.

Больше информации.

Обратите внимание, что это не учитывает модули, которые были загружены один раз, но в настоящее время выгружены. ArchLinux имеет modprobed_db я не знаю, есть ли он у Gentoo.

Я использую пакет Discover в debian, чтобы выяснить, какие модули ядра я могу загрузить. В частности:

apt-get install discover
discover --data-path=linux/module/name|sort|uniq

Для моего двухъядерного настольного компьютера amd с чипсетом nvidia я получаю:

amd74xx
emu10k1
emu10k1-gp
forcedeth
i2c-nforce2
ohci1394
sata_nv

Вот короткое эссе об обнаружении оборудования в Linux, включая текст по использованию discover.

Вы можете использовать "lsmod", чтобы узнать модули ядра.

Показать используемые драйверы / модули:

lspci -v

Если бы мы собирались вдаваться в технические детали, я бы сказал, что вы можете просто выгрузить эти модули, и тогда вам не нужно будет перекомпилировать. Однако я думаю, вы имели в виду «включить только драйверы для моего конкретного оборудования». В этом случае я бы посоветовал:

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 

В «Ядре Linux в двух словах» от GKH есть сценарий оболочки, который делает это приближенно. Сценарий можно бесплатно загрузить с веб-сайта книг, и на нем нет сообщения об авторских правах, поэтому я предполагаю, что могу разместить его здесь.

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: если вы не хотите, чтобы это публиковалось вот так, я удалю его ;-)

В некоторых дистрибутивах также есть отличный инструмент под названием hwinfo, который дает вам много полезной информации о вашем оборудовании.

Чтобы узнать больше о модулях ядра, lspci и lsmod всегда делал для меня хорошую работу.

Если вы перекомпилируете ядро. Лучше всего хорошо знать свое оборудование, используя метод, представленный theman_on_osx. Составьте список всех ваших компонентов. Вам просто нужно снять / исключить модули (которые не нужны) из меню (т.е. если вы перекомпилируете его с помощью make menuconfig / make xconfig).

Вы также можете выгружать модули, которые загружаются "на лету", используя команду "rmmod".

lspci также должен вам помочь.