liminix

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

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 }