{
  lzma
, stdenv
, ubootTools
} :
let
  objcopy = "${stdenv.cc.bintools.targetPrefix}objcopy";
in {
  vmlinux
# , commandLine
# , fdt ? null
, entryPoint
# , extraName ? ""                # e.g. socFamily
, loadAddress
} :
  # patchDtbCommand = if (fdt != null) then ''
  #   ( cat vmlinux.stripped ${fdt} > vmlinux.tmp ) && mv vmlinux.tmp vmlinux.stripped
  # '' else ''
  #   echo patch-cmdline vmlinux.stripped '${commandLine}'
  #   patch-cmdline vmlinux.stripped '${commandLine}'
  #   echo
  # '';
stdenv.mkDerivation {
  name = "kernel.image";
  phases = [ "buildPhase" "installPhase" ];
  nativeBuildInputs = [
    # patchImage
    lzma
    stdenv.cc
    ubootTools
  ];
  buildPhase = ''
    ${objcopy} -O binary -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id -S ${vmlinux} vmlinux.stripped
    # {patchDtbCommand}
    rm -f vmlinux.stripped.lzma
    lzma -k -z  vmlinux.stripped
    mkimage -A mips -O linux -T kernel -C lzma -a ${loadAddress} -e ${entryPoint} -n 'MIPS Liminix Linux ' -d vmlinux.stripped.lzma kernel.image
  '';
  installPhase = ''
    cp kernel.image $out
  '';
}