add outputs.flashable - flashable firmware.bin
This commit is contained in:
@@ -75,6 +75,7 @@ in {
|
||||
default = [];
|
||||
example = ["ath9k" "ath10k"];
|
||||
};
|
||||
rootDevice = mkOption { };
|
||||
networkInterfaces = mkOption {
|
||||
type = types.attrsOf types.anything;
|
||||
};
|
||||
|
71
modules/flashable.nix
Normal file
71
modules/flashable.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
config
|
||||
, pkgs
|
||||
, lib
|
||||
, ...
|
||||
}:
|
||||
let
|
||||
inherit (lib) mkOption types concatStringsSep;
|
||||
inherit (config.boot) tftp;
|
||||
in {
|
||||
options = {
|
||||
device.flash = {
|
||||
address = mkOption { type = types.str; };
|
||||
size = mkOption { type = types.str; };
|
||||
};
|
||||
};
|
||||
config = {
|
||||
kernel = {
|
||||
config = {
|
||||
MTD_SPLIT_UIMAGE_FW = "y";
|
||||
# ignore the commandline provided by U-Boot because it's most
|
||||
# likely wrong
|
||||
MIPS_CMDLINE_FROM_BOOTLOADER = lib.mkForce "n";
|
||||
MIPS_CMDLINE_FROM_DTB = "y";
|
||||
};
|
||||
};
|
||||
|
||||
boot.commandLine = [
|
||||
"root=${config.device.rootDevice}"
|
||||
];
|
||||
outputs.firmware =
|
||||
let o = config.outputs; in
|
||||
pkgs.runCommand "firmware" {} ''
|
||||
dd if=${o.uimage} of=$out bs=128k conv=sync
|
||||
dd if=${o.squashfs} of=$out bs=128k conv=sync,nocreat,notrunc oflag=append
|
||||
'';
|
||||
outputs.flashable =
|
||||
let o = config.outputs; in
|
||||
pkgs.runCommand "flashable" {} ''
|
||||
mkdir $out
|
||||
cd $out
|
||||
ln -s ${o.firmware} firmware.bin
|
||||
ln -s ${o.squashfs} squashfs
|
||||
ln -s ${o.kernel} vmlinux
|
||||
ln -s ${o.manifest} manifest
|
||||
ln -s ${o.kernel.headers} build
|
||||
ln -s ${o.uimage} uimage
|
||||
ln -s ${o.dtb} dtb
|
||||
ln -s ${o.flash-scr} flash.scr
|
||||
'';
|
||||
|
||||
outputs.flash-scr =
|
||||
let
|
||||
inherit (pkgs.lib.trivial) toHexString;
|
||||
inherit (pkgs.lib.lists) concatStringsSep;
|
||||
inherit (config.device) flash;
|
||||
in
|
||||
pkgs.buildPackages.runCommand "" {} ''
|
||||
imageSize=$(stat -L -c %s ${config.outputs.firmware})
|
||||
cat > $out << EOF
|
||||
setenv serverip ${tftp.serverip}
|
||||
setenv ipaddr ${tftp.ipaddr}
|
||||
tftp 0x$(printf %x ${tftp.loadAddress}) result/firmware.bin
|
||||
erase 0x$(printf %x ${flash.address}) +0x$(printf %x ${flash.size})
|
||||
cp.b 0x$(printf %x ${tftp.loadAddress}) 0x$(printf %x ${flash.address}) \''${filesize}
|
||||
echo command line was ${builtins.toJSON (concatStringsSep " " config.boot.commandLine)}
|
||||
EOF
|
||||
'';
|
||||
|
||||
};
|
||||
}
|
@@ -23,6 +23,7 @@ in
|
||||
inherit (config.kernel) config src extraPatchPhase;
|
||||
};
|
||||
dtb = (callPackage ../kernel/dtb.nix {}) {
|
||||
inherit (config.boot) commandLine;
|
||||
dts = config.boot.dts.src;
|
||||
includes = config.boot.dts.includes ++ [
|
||||
"${kernel.headers}/include"
|
||||
|
@@ -26,6 +26,7 @@ in {
|
||||
MTD = "y";
|
||||
MTD_PHRAM = "y";
|
||||
MTD_CMDLINE_PARTS = "y";
|
||||
MIPS_CMDLINE_FROM_BOOTLOADER = "y";
|
||||
|
||||
# one or more of the following is required to get from
|
||||
# VFS: Cannot open root device "1f00" or unknown-block(31,0): error -6
|
||||
|
Reference in New Issue
Block a user