liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }