URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 45050
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Использование DKMS для перестроения драйверов без их пересборки при обновлении Linux ядра"

Отправлено auto_tips , 12-Ноя-08 17:46 
В Ubuntu 8.10 интегрирована технология DKMS (Dynamic Kernel Module Support, http://linux.dell.com/dkms),
позволяющая автоматически перестраивать текущие модули ядра с драйверами устройств после обновления версии ядра.

Пример 1. Драйвер mad-wifi на ноутбуке Samsung R25 с wifi-картой на чипсете Atheros AR242x.
Оригинал заметки: http://blog.antage.name/2008/11/atheros-wifi-dkms.html

1. Ставим DKMS:

      sudo apt-get install dkms

2. Качаем и распаковываем исходники драйвера:

      cd
      wget http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/ma...
      sudo tar xzf madwifi-hal-0.10.5.6-r3875-20081105.tar.gz -C /usr/src/

3. Создаем конфиг модуля в файле /usr/src/madwifi-hal-0.10.5.6-r3875-20081105/dkms.conf:

      PACKAGE_NAME="madwifi-hal"
      PACKAGE_VERSION="0.10.5.6-r3875-20081105"

      AUTOINSTALL="yes"

      BUILT_MODULE_NAME[0]="ath_pci"
      BUILT_MODULE_LOCATION[0]="ath/"
      DEST_MODULE_LOCATION[0]="/kernel/net/"

      BUILT_MODULE_NAME[1]="ath_hal"
      BUILT_MODULE_LOCATION[1]="ath_hal/"
      DEST_MODULE_LOCATION[1]="/kernel/net/"

      BUILT_MODULE_NAME[2]="ath_rate_sample"
      BUILT_MODULE_LOCATION[2]="ath_rate/sample/"
      DEST_MODULE_LOCATION[2]="/kernel/net/"

      BUILT_MODULE_NAME[3]="ath_rate_minstrel"
      BUILT_MODULE_LOCATION[3]="ath_rate/minstrel/"
      DEST_MODULE_LOCATION[3]="/kernel/net/"

      BUILT_MODULE_NAME[4]="ath_rate_amrr"
      BUILT_MODULE_LOCATION[4]="ath_rate/amrr/"
      DEST_MODULE_LOCATION[4]="/kernel/net/"

      BUILT_MODULE_NAME[5]="ath_rate_onoe"
      BUILT_MODULE_LOCATION[5]="ath_rate/onoe/"
      DEST_MODULE_LOCATION[5]="/kernel/net/"

      BUILT_MODULE_NAME[6]="wlan"
      BUILT_MODULE_LOCATION[6]="net80211/"
      DEST_MODULE_LOCATION[6]="/kernel/net/"

      BUILT_MODULE_NAME[7]="wlan_scan_ap"
      BUILT_MODULE_LOCATION[7]="net80211/"
      DEST_MODULE_LOCATION[7]="/kernel/net/"

      BUILT_MODULE_NAME[8]="wlan_scan_sta"
      BUILT_MODULE_LOCATION[8]="net80211/"
      DEST_MODULE_LOCATION[8]="/kernel/net/"

      BUILT_MODULE_NAME[9]="wlan_tkip"
      BUILT_MODULE_LOCATION[9]="net80211/"
      DEST_MODULE_LOCATION[9]="/kernel/net/"

      BUILT_MODULE_NAME[10]="wlan_xauth"
      BUILT_MODULE_LOCATION[10]="net80211/"
      DEST_MODULE_LOCATION[10]="/kernel/net/"

      BUILT_MODULE_NAME[11]="wlan_wep"
      BUILT_MODULE_LOCATION[11]="net80211/"
      DEST_MODULE_LOCATION[11]="/kernel/net/"

      BUILT_MODULE_NAME[12]="wlan_ccmp"
      BUILT_MODULE_LOCATION[12]="net80211/"
      DEST_MODULE_LOCATION[12]="/kernel/net/"

      BUILT_MODULE_NAME[13]="wlan_acl"
      BUILT_MODULE_LOCATION[13]="net80211/"
      DEST_MODULE_LOCATION[13]="/kernel/net/"

4. Добавлем драйвер в DKMS:

      sudo dkms add -m madwifi-hal -v 0.10.5.6-r3875-20081105

5. Собираем и инсталлируем:

      sudo dkms build -m madwifi-hal -v 0.10.5.6-r3875-20081105
      sudo dkms install -m madwifi-hal -v 0.10.5.6-r3875-20081105


Пример 2. Автосборка модуля файловой системы BTRFS при обновлении ядра.
Оригинал заметки: http://deepwalker.blogspot.com/2008/11/810-dkms-nvidia-btrfs...

Загружаем исходники модуля ядра и кладем их в /usr/src/btrfs-0.16.
В том же каталоге создаем dkms.conf следующего содержания:

      MAKE[0]=make
      BUILT_MODULE_NAME[0]=btrfs
      DEST_MODULE_LOCATION[0]="/kernel/fs/btrfs"
      PACKAGE_NAME="btrfs"
      PACKAGE_VERSION="0.16"
      CLEAN="make clean"
      AUTOINSTALL="yes"


Далее следует серия команд для запуска модуля в работу:

      # dkms add -m btrfs -v 0.16
      # dkms add -m btrfs -v 0.16

      Creating symlink /var/lib/dkms/btrfs/0.16/source -> /usr/src/btrfs-0.16

      DKMS: add Completed.
      
      # dkms build -m btrfs -v 0.16

      Kernel preparation unnecessary for this kernel. Skipping...

      Building module:
      cleaning build area....
      make KERNELRELEASE=2.6.27-7-generic............
      cleaning build area....

      DKMS: build Completed.

      # dkms install -m btrfs -v 0.16

      Running module version sanity check.

      btrfs.ko:
      - Original module
      - No original module exists within this kernel
      - Installation
      - Installing to /lib/modules/2.6.27-7-generic/updates/dkms/

      depmod........

      DKMS: install Completed.

      modprobe btrfs


URL:
Обсуждается: https://www.opennet.ru/tips/info/1826.shtml


Содержание

Сообщения в этом обсуждении
"Использование DKMS для перестроения драйверов без их пересборки при обновлении Linux ядра"
Отправлено pavlinux , 12-Ноя-08 17:46 
Создаем и копируем все дриверы в одну папку!

# mkdir /usr/src/drivers
# cp -a btrfs-0.16.tar.bz2 madwifi.tar.bz2 ipw3945-1.0.2.tar.bz2 /usr/src/drivers

for i in /usr/src/drivers
   do
      cd $i;
      make clean; make; make install;
      cd -
done


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено User294 , 12-Ноя-08 17:51 
А при выходе нового ядра я так понимаю Павлин предлагает в i-й раз перекомпиливать все самостоятельно, так? =)

"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено pavlinux , 12-Ноя-08 20:39 
Как же эта хрень определяет что появилось новое ядро?


Так и мы, попишемся в /etc/cron.daily, со словами


#!/bin/sh

VER="/etc/kernel.version"


function recompile(){

    for i in /usr/src/drivers
       do
         pushd
              cd $i;
                make clean && make && make install
                if [ $? != 0]
                  then
                       exit 1;
                fi
         popd
   done
uname -r > $VER;
}


main() {

     if [ `md5sum $VER` -ne `uname -r | md5sum` ]
       then
           recompile;
       else
           exit 0;
     fi
}

main;

  
Причёсывайте сами...


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено User294 , 14-Ноя-08 21:30 
>Причёсывайте сами...

Юзайте это сами, thanks :).Так сходу - а что будет если апдейт ядра случится до того как это daily отстреляется? =)


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено pavlinux , 15-Ноя-08 23:40 
Ну блин, ты Unix_oid или откуда

Говорю же
> Причёсывайте сами...

cat >> /etc/crontab << EOF
1 * * * *  root /etc/cron.dayly/update_modules.sh
EOF


  


"Использование DKMS для перестроения драйверов без их пересборки при обновлении Linux ядра"
Отправлено Аноним , 12-Ноя-08 21:32 
> Причёсывайте сами...

Рассмешил.


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено pavlinux , 13-Ноя-08 03:04 
>> Причёсывайте сами...
>
>Рассмешил.

А такой монстроподобный dkms.conf для каждого драйвера, это смешно? :)


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено User294 , 14-Ноя-08 22:28 
>А такой монстроподобный dkms.conf для каждого драйвера, это смешно? :)

Смотрим текст новости еще раз, для btrfs =)
======================
      MAKE[0]=make
      BUILT_MODULE_NAME[0]=btrfs
      DEST_MODULE_LOCATION[0]="/kernel/fs/btrfs"
      PACKAGE_NAME="btrfs"
      PACKAGE_VERSION="0.16"
      CLEAN="make clean"
      AUTOINSTALL="yes"
======================

И вот это теперь называется монструозным конфигом?Ну тогда наверное пора начинать считать в стиле 1, 2, много... если 7 строчек - монструозно =)

Первый конфиг в примере - для большой *кучки* модулей.Вы что, десятками добавляется собственные модули в ядро? =)


"Использование DKMS для перестроения драйверов без их пересборки при обновлении Linux ядра"
Отправлено Valentin , 14-Ноя-08 22:31 
Аффигеть. А теперь расскажите мне, чем оно лучше module-assistant Debian'а!
Пример:
установка дров nvidia (ядерного модуля и только):

m-a prepare #подготовка ядра к сборке модулей
m-a a-i nvidia # _загрузка_, сборка и установка модуля
modprobe nvidia #profit


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено Zulu , 15-Ноя-08 14:35 
Мало чем, но DKMS более распространен и стало быть для совместимости его надо поддерживать.

"Использование DKMS для перестроения драйверов без их пересборки при обновлении Linux ядра"
Отправлено pavlinux , 22-Ноя-08 00:39 
А я Вам даже объясню почему подобные вещи - зло для Unix.

  Вся прелесть открытых Unix_ов - полный контроль над системой.
Данные скриптовые комплексы - разрушают эту гармонию, когда рушатся
такие системы, вам приходиться изучать, чужие методы и способы работы
со скриптовыми языками!
  Время которое уйдёт на создание и эксплуатацию Вашей системы, намного
меньше, чем изучение и ремонт чужой.
Особенное зло - это использование чужих фаирволов на базе iptables/xtables/iproute2.


"Использование DKMS для перестроения драйверов без их пересбо..."
Отправлено User294 , 22-Ноя-08 22:51 
>А я Вам даже объясню почему подобные вещи - зло для Unix.

А при чем тут вообще юниксы?Разговор про лоадабельные модули ядра в линуксах.Вы хотите рулить модулями ядра во всех *никсоподобных одинаково?Жаль но боюсь что с этой мечтой придется умереть.А так по вашей логике cron тоже зло.

>  Вся прелесть открытых Unix_ов - полный контроль над системой.

Поэтому давайте выкинем крон нафиг.Будем сами вместо него принимать решения когда надо модули сбилдить или там процесс запустить.

>Данные скриптовые комплексы - разрушают эту гармонию, когда рушатся
>такие системы, вам приходиться изучать, чужие методы и способы работы
>со скриптовыми языками!

А почему вас не коробит изучать "чужие" скриптовые конструкции скажем для управления старичком init?Собссно по вашей логике дебиановские средства для упрощения настройки стартовых скриптов надо выбросить.В редхатоподобных - аналогично.И айда педалить с десяток симлинков в разных дирах руками!Ибо нефиг автоматизировать этот процесс.А то отличия между *никсами получаются, мать-мать-мать...

>Особенное зло - это использование чужих фаирволов на базе iptables/xtables/iproute2.

Какой же ты зануда, Павлин =).Скажи, а при нужде доехать из точки А в точку Б ты сперва тоже озадачиваешься вопросами угла опережения зажигания и нытьем про то что автоматические коробки передач - для лохов, а система микроклимата в салоне автоматически удерживающая заданную температуру а также бортовой компьютер с нафигацией - ненужная блажь, да? =)