forked from dan/liminix
* [] is now [ ] * {} is now { } * commas in arglists go at end of line not beginning In short, I ran the whole thing through nixfmt-rfc-style but only accepted about 30% of its changes. I might grow accustomed to more of it over time
44 lines
1.2 KiB
Nix
44 lines
1.2 KiB
Nix
{
|
|
liminix,
|
|
lib,
|
|
targets ? [ ],
|
|
kernel ? null,
|
|
runCommand,
|
|
pkgsBuildBuild,
|
|
dependencies ? [ ],
|
|
}:
|
|
let
|
|
inherit (liminix.services) oneshot;
|
|
inherit (lib) concatStringsSep;
|
|
loader = runCommand "modules" {
|
|
nativeBuildInputs = with pkgsBuildBuild ;[
|
|
kmod cpio gawk
|
|
];
|
|
} ''
|
|
kernel=${kernel.modulesupport}
|
|
|
|
mkdir -p lib/modules/0.0
|
|
(cd $kernel && find . -name \*.ko | cpio --verbose --make-directories -p $NIX_BUILD_TOP/lib/modules/0.0)
|
|
cp $kernel/modules.* lib/modules/0.0
|
|
depmod -b . 0.0
|
|
|
|
(for i in ${lib.concatStringsSep " " targets}; do
|
|
modprobe -S 0.0 -d $NIX_BUILD_TOP --show-depends $i | sed "s,^insmod $NIX_BUILD_TOP/lib/modules/0.0/,,g"
|
|
done) | awk '!a[$0]++' > load-order
|
|
|
|
mkdir $out
|
|
for i in $(cat load-order); do
|
|
install -v $NIX_BUILD_TOP/lib/modules/0.0/$i -D $out/$i
|
|
done
|
|
echo "O=$out" > $out/load.sh
|
|
sed "s,^,insmod \$O/,g" < load-order >> $out/load.sh
|
|
echo "O=$out" > $out/unload.sh
|
|
tac load-order | sed "s,^,rmmod \$O/,g" > $out/unload.sh
|
|
'';
|
|
in oneshot {
|
|
name = "kmodloader-" + (concatStringsSep "-" targets);
|
|
up = "sh ${loader}/load.sh";
|
|
down = "sh ${loader}/unload.sh";
|
|
inherit dependencies;
|
|
}
|