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

Как я могу управлять модулями ядра, созданными из исходного кода в Debian?

Я устанавливаю Debian squeeze на новый Mac Mini, и сетевая карта Broadcom в нем работает только с последний модуль tg3 от Broadcom. Я могу достаточно легко собрать этот модуль, но выполнение сборки вручную и перезапись tg3.ko, поставляемого с пакетами ядра, кажется беспорядком, потому что:

я прочел Как мне собрать пакеты модулей ядра debian?, но методы, которые я исследовал до сих пор, похоже, относятся к случаю упаковки модуля, который нет в пакетах ядра. Учитывая, что я хочу заменить модуль, уже предоставленный пакетом ядра, а не добавлять новый, как я могу сделать это, не прибегая к хрупким кладжам?

Я смог заставить это работать с DKMS. Возникла дополнительная проблема, заключающаяся в том, что файл tg3.ko, который уже существует в пакетах ядра, не затирался. Я узнал, что может быть каталог "обновлений" под /lib/modules/$KERNELVERSION. Таким образом, мне не нужно беспокоиться о перезаписи файлов другого пакета, и есть простой способ вернуться к версии по умолчанию. Подробнее здесь:

http://www.linuxvox.com/2009/10/update-kernel-modules-the-smart-and-safe-way/

А вот хороший учебник по процессу DKMS, в котором также описывается некоторая специфическая магия Ubuntu / Debian, когда модули DKMS помещают свои модули в / updates:

https://wiki.kubuntu.org/Kernel/Dev/DKMSPackaging

Файл dkms.conf, который я использовал для этого конкретного модуля:

PACKAGE_NAME="tg3"
PACKAGE_VERSION="3.124c"
BUILT_MODULE_NAME[0]="tg3"
DEST_MODULE_LOCATION[0]="/updates"
MAKE[0]="'make' KVER=$kernelver"
AUTOINSTALL="yes"

Сложнее всего было процитировать 'make' в $MAKE, потому что, если он не заключен в кавычки, DKMS добавит KERNELRELEASE=... к make, и это нарушает эту конкретную систему сборки.

Я смог выполнить все построение в сжатой среде chroot, запустить dkms mkdeb, затем установите полученный пакет deb на Mini для победы.

Проверять, выписываться DKMS. Он может перекомпилировать модули ядра после обновления ядра. Например, nvidia использует это.