default.nix (1341B)
1 { 2 liminix, 3 lib, 4 targets ? [ ], 5 kernel ? null, 6 runCommand, 7 pkgsBuildBuild, 8 dependencies ? [ ], 9 }: 10 let 11 inherit (liminix.services) oneshot; 12 inherit (lib) concatStringsSep; 13 loader = 14 runCommand "modules" 15 { 16 nativeBuildInputs = with pkgsBuildBuild; [ 17 kmod 18 cpio 19 gawk 20 ]; 21 } 22 '' 23 kernel=${kernel.modulesupport} 24 25 mkdir -p lib/modules/0.0 26 (cd $kernel && find . -name \*.ko | cpio --verbose --make-directories -p $NIX_BUILD_TOP/lib/modules/0.0) 27 cp $kernel/modules.* lib/modules/0.0 28 depmod -b . 0.0 29 30 (for i in ${lib.concatStringsSep " " targets}; do 31 modprobe -S 0.0 -d $NIX_BUILD_TOP --show-depends $i | sed "s,^insmod $NIX_BUILD_TOP/lib/modules/0.0/,,g" 32 done) | awk '!a[$0]++' > load-order 33 34 mkdir $out 35 for i in $(cat load-order); do 36 install -v $NIX_BUILD_TOP/lib/modules/0.0/$i -D $out/$i 37 done 38 echo "O=$out" > $out/load.sh 39 sed "s,^,insmod \$O/,g" < load-order >> $out/load.sh 40 echo "O=$out" > $out/unload.sh 41 tac load-order | sed "s,^,rmmod \$O/,g" > $out/unload.sh 42 ''; 43 in 44 oneshot { 45 name = "kmodloader-" + (concatStringsSep "-" targets); 46 up = "sh ${loader}/load.sh"; 47 down = "sh ${loader}/unload.sh"; 48 inherit dependencies; 49 }