В этой короткой заметке рассмотрена процедура установки модулей ядра в дистрибутивах Fedora. Данная процедура может быть использована для добавления модулей ядра, не включенных в состав стокового ядра Fedora, а также для сборки модулей в дереве ядра в процессе разработки для этого дистрибутива.

Процедура установки описана на примере модулей шины CAN и дистрибутива Fedora 22.

Перед началом установки рекомендуется обновить систему:
sudo dnf update
reboot

Для сборки ядра используются RPM Development Tools. Дерево сборки RPM пакетов (~/rpmbuild/) создается командой:
rpmdev-setuptree

Далее скачиваются исходники ядра:
dnf download --source kernel

Устанавливаются зависимости для сборки пакета ядра:
sudo dnf builddep kernel-4.1.6-200.fc22.src.rpm

Пакет ядра устанавливается в дерево RPM:
rpm -Uvh kernel-4.1.6-200.fc20.src.rpm

Cоздается актуальное ядро (накатываются патчи и т.п.):
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec

В актуальном ядре необходимо задать EXTRAVERSION по uname -r текущего ядра:
cd ~/rpmbuild/BUILD/kernel-4.1.fc22/linux-4.1.6-200.fc22.i686
gedit Makefile

..
EXTRAVERSION = -200.fc22.i686
..

Теперь можно скопировать конфиг текущего ядра и включить требуемые модули:
cp /boot/config-4.1.6-200.fc22.i686 .config
make menuconfig

Сборка модулей шины CAN:
make modules_prepare
make M=net/can modules
make M=drivers/net/can modules

Установка:
sudo make M=net/can modules_install
sudo make M=drivers/net/can modules_install
sudo depmod -a
sudo modprobe can

Комментарии (4)


  1. jcmvbkbc
    06.09.2015 03:04
    +4

    Попробуйте DKMS чтобы не ковыряться в дистровом ядре (и последующих обновлениях) руками.


    1. spot62
      07.09.2015 20:32

      Ковыряться в стоковом ядре все равно придется.
      Кроме того, в случае DKMS не очень понятно, как быть если в очередном релизе ядра произошло также обновление и в модулях.


      1. jcmvbkbc
        07.09.2015 22:18

        Ковыряться в стоковом ядре все равно придется.

        Зачем?
        как быть если в очередном релизе ядра произошло также обновление и в модулях

        Мммм? Возможно, «в интерфейсах/структурах данных используемых модулем»? Абстрагироваться и выбирать нужное портянками из #if LINUX_VERSION_CODE < KERNEL_VERSION(a,b,c). Делать это для модуля поддерживающего несколько версий ядра в любом случае придётся, а DKMS к этому ортогонален.


        1. spot62
          07.09.2015 23:56

          Зачем?

          чтобы создать структуру модулей в пакете dkms
          Мммм? Возможно, «в интерфейсах/структурах данных используемых модулем»?

          Да. В в интерфейсах/структурах данных используемых модулем(ями) пакета dkms. Т.е. нужен более свежий пакет dkms? dkms не умеет собирать новые модули из исходников текущего установленного ядра?