default.nix (1618B)
1 { 2 stdenv 3 , buildPackages 4 , kernelSrc ? null 5 , modulesupport ? null 6 , targets ? [] 7 , kconfig ? {} 8 , openssl 9 , writeText 10 , lib 11 }: 12 let 13 writeConfig = import ../kernel/write-kconfig.nix { inherit lib writeText; }; 14 arch = if stdenv.isMips 15 then "mips" 16 else if stdenv.isAarch64 17 then "arm64" 18 else throw "unknown arch"; 19 in stdenv.mkDerivation { 20 name = "kernel-modules"; 21 22 nativeBuildInputs = [buildPackages.stdenv.cc] ++ 23 (with buildPackages.pkgs; [ 24 bc bison flex 25 openssl 26 cpio 27 kmod 28 ]); 29 CC = "${stdenv.cc.bintools.targetPrefix}gcc"; 30 HOST_EXTRACFLAGS = with buildPackages.pkgs; 31 "-I${buildPackages.openssl.dev}/include -L${buildPackages.openssl.out}/lib"; 32 CROSS_COMPILE = stdenv.cc.bintools.targetPrefix; 33 ARCH = arch; 34 KBUILD_BUILD_HOST = "liminix.builder"; 35 36 buildPhase = '' 37 cat ${writeConfig "kconfig" kconfig} > .more-config 38 cat .more-config >> .config 39 make olddefconfig 40 for v in $(cat .more-config) ; do grep $v .config || (echo Missing $v && exit 1);done 41 # grep =m .config 42 make modules 43 ''; 44 src = modulesupport; 45 installPhase = '' 46 mkdir -p $out/lib/modules/0.0 47 find . -name \*.ko | cpio --verbose --make-directories -p $out/lib/modules/0.0 48 depmod -b $out -v 0.0 49 touch $out/load.sh 50 for i in ${lib.concatStringsSep " " targets}; do 51 modprobe -S 0.0 -d $out --show-depends $i >> $out/load.sh 52 done 53 tac < $out/load.sh | sed 's/^insmod/rmmod/g' > $out/unload.sh 54 ''; 55 }