LINUX.ORG.RU

Как собрать модуль ядра в NixOS?

 , ,


0

2

Приветствую, коллеги. Подскажите, как создать derivation для модуля ядра? Вот здесь написано, но я не понял, откуда оно потом вызывается. Просто, как обычный пакет, оно не работает.

★★★★★

Ответ на: комментарий от anonymous

Да, только там нифига не очевидно всё. Теперь нашёл: boot.extraModulePackages = with config.boot.kernelPackages; [ ... ];. Спасибо!

После арча с документацией как-то грустно.

Puzan ★★★★★ ()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

Puzan ★★★★★ ()
Ответ на: комментарий от anonymous

А сейчас вот пытаюсь собрать модули ядра для VMWare, а оно мне говорит

nix/store/6b7izzy7imz3kv5awyrhqljw35f3lfgz-linux-5.4.100-dev/lib/modules/5.4.100/source/include/linux/compiler_types.h:59:10: fatal error: linux/compiler_attributes.h: No such file or directory
   59 | #include <linux/compiler_attributes.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Я пока не сдаюсь, но раздражает. Решение пока не нагуглил.

Puzan ★★★★★ ()
Ответ на: комментарий от Puzan

Собирается, но не инсталлируется (после сборки), пишет, что нет /sbin/modinfo. В мейкфайле модуля про modinfo ничего нет, значит вызов из мейкфайла ядра?

Отбой, нашел. Как обойти пока не придумал..

Puzan ★★★★★ ()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от Puzan

Осилил! Не знаю, насколько правильно, но вроде собралось.

stdenv.mkDerivation rec {
        pname = "vmware-modules";
        version = "16.1.0";

        src = fetchFromGitHub {
          owner = "mkubecek";
          repo = "vmware-host-modules";
          rev = "a409e02f78c5783640885b667312547cc704ff83";
          sha256 = "0ahlyf7kg38sy0bv71q31ry0wbxdlw14cl45ar12b6jzm9af39jb";
        };

        hardeningDisable = [ "pic" "format" ];
        nativeBuildInputs = kernel.moduleBuildDependencies;

        makeFlags = [
          "DESTDIR=$(out)"
          "MODDIR=/lib/modules/${kernel.modDirVersion}/kernel/misc"
        ];

        preBuild = ''
          export LINUXINCLUDE=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build/include
          sed -i '35,40d;43d' Makefile
        '';

        meta = with lib; {
          description = "A kernel module for VMWare Workstation/Player";
          homepage = "https://github.com/mkubecek/vmware-host-modules";
          license = licenses.gpl2;
          platforms = platforms.linux;
        };
      }

Поправил.

Puzan ★★★★★ ()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от Puzan

Так после этого придётся пересобирать всю систему. Я так уже пробовал.

ты что-то путаешь. ничего пересобирать не придется. более того, версию ядра можно зафиксировать в конфиге, чтобы при следующем system reconfigure оно не пересобиралось (бинарного кеша нету на этот канал). я ставил на два разных ноутбука, проблем небыло.

anonymous ()