Я устанавливаю 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 использует это.