В 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.html1. Ставим 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.16Creating symlink /var/lib/dkms/btrfs/0.16/source -> /usr/src/btrfs-0.16
DKMS: add Completed.
# dkms build -m btrfs -v 0.16Kernel 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:
Обсуждается: http://www.opennet.me/tips/info/1826.shtml
Создаем и копируем все дриверы в одну папку!# mkdir /usr/src/drivers
# cp -a btrfs-0.16.tar.bz2 madwifi.tar.bz2 ipw3945-1.0.2.tar.bz2 /usr/src/driversfor i in /usr/src/drivers
do
cd $i;
make clean; make; make install;
cd -
done
А при выходе нового ядра я так понимаю Павлин предлагает в i-й раз перекомпиливать все самостоятельно, так? =)
Как же эта хрень определяет что появилось новое ядро?
Так и мы, попишемся в /etc/cron.daily, со словами
#!/bin/shVER="/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;
Причёсывайте сами...
>Причёсывайте сами...Юзайте это сами, thanks :).Так сходу - а что будет если апдейт ядра случится до того как это daily отстреляется? =)
Ну блин, ты Unix_oid или откудаГоворю же
> Причёсывайте сами...cat >> /etc/crontab << EOF
1 * * * * root /etc/cron.dayly/update_modules.sh
EOF
> Причёсывайте сами...Рассмешил.
>> Причёсывайте сами...
>
>Рассмешил.А такой монстроподобный dkms.conf для каждого драйвера, это смешно? :)
>А такой монстроподобный 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 строчек - монструозно =)
Первый конфиг в примере - для большой *кучки* модулей.Вы что, десятками добавляется собственные модули в ядро? =)
Аффигеть. А теперь расскажите мне, чем оно лучше module-assistant Debian'а!
Пример:
установка дров nvidia (ядерного модуля и только):m-a prepare #подготовка ядра к сборке модулей
m-a a-i nvidia # _загрузка_, сборка и установка модуля
modprobe nvidia #profit
Мало чем, но DKMS более распространен и стало быть для совместимости его надо поддерживать.
А я Вам даже объясню почему подобные вещи - зло для Unix.Вся прелесть открытых Unix_ов - полный контроль над системой.
Данные скриптовые комплексы - разрушают эту гармонию, когда рушатся
такие системы, вам приходиться изучать, чужие методы и способы работы
со скриптовыми языками!
Время которое уйдёт на создание и эксплуатацию Вашей системы, намного
меньше, чем изучение и ремонт чужой.
Особенное зло - это использование чужих фаирволов на базе iptables/xtables/iproute2.
>А я Вам даже объясню почему подобные вещи - зло для Unix.А при чем тут вообще юниксы?Разговор про лоадабельные модули ядра в линуксах.Вы хотите рулить модулями ядра во всех *никсоподобных одинаково?Жаль но боюсь что с этой мечтой придется умереть.А так по вашей логике cron тоже зло.
> Вся прелесть открытых Unix_ов - полный контроль над системой.
Поэтому давайте выкинем крон нафиг.Будем сами вместо него принимать решения когда надо модули сбилдить или там процесс запустить.
>Данные скриптовые комплексы - разрушают эту гармонию, когда рушатся
>такие системы, вам приходиться изучать, чужие методы и способы работы
>со скриптовыми языками!А почему вас не коробит изучать "чужие" скриптовые конструкции скажем для управления старичком init?Собссно по вашей логике дебиановские средства для упрощения настройки стартовых скриптов надо выбросить.В редхатоподобных - аналогично.И айда педалить с десяток симлинков в разных дирах руками!Ибо нефиг автоматизировать этот процесс.А то отличия между *никсами получаются, мать-мать-мать...
>Особенное зло - это использование чужих фаирволов на базе iptables/xtables/iproute2.
Какой же ты зануда, Павлин =).Скажи, а при нужде доехать из точки А в точку Б ты сперва тоже озадачиваешься вопросами угла опережения зажигания и нытьем про то что автоматические коробки передач - для лохов, а система микроклимата в салоне автоматически удерживающая заданную температуру а также бортовой компьютер с нафигацией - ненужная блажь, да? =)