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