liminix

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

default.nix (1618B)


      1 {
      2   stdenv
      3 , buildPackages
      4 , kernelSrc  ? null
      5 , modulesupport ? null
      6 , targets ? []
      7 , kconfig ? {}
      8 , openssl
      9 , writeText
     10 , lib
     11 }:
     12 let
     13   writeConfig = import ../kernel/write-kconfig.nix { inherit lib writeText; };
     14   arch = if stdenv.isMips
     15          then "mips"
     16          else if stdenv.isAarch64
     17          then "arm64"
     18          else throw "unknown arch";
     19 in stdenv.mkDerivation {
     20   name = "kernel-modules";
     21 
     22   nativeBuildInputs = [buildPackages.stdenv.cc] ++
     23                       (with buildPackages.pkgs; [
     24                         bc bison flex
     25                         openssl
     26                         cpio
     27                         kmod
     28                       ]);
     29   CC = "${stdenv.cc.bintools.targetPrefix}gcc";
     30   HOST_EXTRACFLAGS = with buildPackages.pkgs;
     31     "-I${buildPackages.openssl.dev}/include -L${buildPackages.openssl.out}/lib";
     32   CROSS_COMPILE = stdenv.cc.bintools.targetPrefix;
     33   ARCH = arch;
     34   KBUILD_BUILD_HOST = "liminix.builder";
     35 
     36   buildPhase = ''
     37     cat ${writeConfig "kconfig" kconfig}  > .more-config
     38     cat .more-config >> .config
     39     make olddefconfig
     40     for v in $(cat .more-config) ; do grep $v .config || (echo Missing $v && exit 1);done
     41     # grep =m .config
     42     make modules
     43   '';
     44   src =  modulesupport;
     45   installPhase = ''
     46     mkdir -p $out/lib/modules/0.0
     47     find . -name \*.ko | cpio --verbose --make-directories -p $out/lib/modules/0.0
     48     depmod -b $out -v 0.0
     49     touch $out/load.sh
     50     for i in ${lib.concatStringsSep " " targets}; do
     51       modprobe -S 0.0 -d $out --show-depends $i >> $out/load.sh
     52     done
     53     tac < $out/load.sh | sed 's/^insmod/rmmod/g' > $out/unload.sh
     54   '';
     55 }