add outputs.flashable - flashable firmware.bin
This commit is contained in:
parent
0cab6e9fba
commit
6d191b73ae
7 changed files with 85 additions and 0 deletions
|
@ -91,6 +91,12 @@
|
||||||
defaultOutput = "tftproot";
|
defaultOutput = "tftproot";
|
||||||
loadAddress = "0x80060000";
|
loadAddress = "0x80060000";
|
||||||
entryPoint = "0x80060000";
|
entryPoint = "0x80060000";
|
||||||
|
flash = {
|
||||||
|
address = "0x9F060000";
|
||||||
|
size ="0xfa0000";
|
||||||
|
};
|
||||||
|
rootDevice = "1f05";
|
||||||
|
|
||||||
networkInterfaces = {
|
networkInterfaces = {
|
||||||
lan = interface { device = "eth0"; };
|
lan = interface { device = "eth0"; };
|
||||||
wan = interface { device = "eth1"; };
|
wan = interface { device = "eth1"; };
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
, dtc
|
, dtc
|
||||||
|
, lib
|
||||||
}:
|
}:
|
||||||
{ dts
|
{ dts
|
||||||
, includes
|
, includes
|
||||||
|
, commandLine
|
||||||
}:let
|
}:let
|
||||||
cppDtSearchFlags = builtins.concatStringsSep " " (map (f: "-I${f}") includes);
|
cppDtSearchFlags = builtins.concatStringsSep " " (map (f: "-I${f}") includes);
|
||||||
dtcSearchFlags = builtins.concatStringsSep " " (map (f: "-i${f}") includes);
|
dtcSearchFlags = builtins.concatStringsSep " " (map (f: "-i${f}") includes);
|
||||||
|
cmdline = lib.concatStringsSep " " commandLine;
|
||||||
in stdenv.mkDerivation {
|
in stdenv.mkDerivation {
|
||||||
name = "dtb";
|
name = "dtb";
|
||||||
phases = [ "buildPhase" ];
|
phases = [ "buildPhase" ];
|
||||||
nativeBuildInputs = [ dtc ];
|
nativeBuildInputs = [ dtc ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
${stdenv.cc.targetPrefix}cpp -nostdinc -x assembler-with-cpp ${cppDtSearchFlags} -undef -D__DTS__ -o dtb.tmp ${dts}
|
${stdenv.cc.targetPrefix}cpp -nostdinc -x assembler-with-cpp ${cppDtSearchFlags} -undef -D__DTS__ -o dtb.tmp ${dts}
|
||||||
|
echo '/{ chosen { bootargs = ${builtins.toJSON cmdline}; }; };' >> dtb.tmp
|
||||||
dtc ${dtcSearchFlags} -I dts -O dtb -o $out dtb.tmp
|
dtc ${dtcSearchFlags} -I dts -O dtb -o $out dtb.tmp
|
||||||
test -e $out
|
test -e $out
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -75,6 +75,7 @@ in {
|
||||||
default = [];
|
default = [];
|
||||||
example = ["ath9k" "ath10k"];
|
example = ["ath9k" "ath10k"];
|
||||||
};
|
};
|
||||||
|
rootDevice = mkOption { };
|
||||||
networkInterfaces = mkOption {
|
networkInterfaces = mkOption {
|
||||||
type = types.attrsOf types.anything;
|
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;
|
inherit (config.kernel) config src extraPatchPhase;
|
||||||
};
|
};
|
||||||
dtb = (callPackage ../kernel/dtb.nix {}) {
|
dtb = (callPackage ../kernel/dtb.nix {}) {
|
||||||
|
inherit (config.boot) commandLine;
|
||||||
dts = config.boot.dts.src;
|
dts = config.boot.dts.src;
|
||||||
includes = config.boot.dts.includes ++ [
|
includes = config.boot.dts.includes ++ [
|
||||||
"${kernel.headers}/include"
|
"${kernel.headers}/include"
|
||||||
|
|
|
@ -26,6 +26,7 @@ in {
|
||||||
MTD = "y";
|
MTD = "y";
|
||||||
MTD_PHRAM = "y";
|
MTD_PHRAM = "y";
|
||||||
MTD_CMDLINE_PARTS = "y";
|
MTD_CMDLINE_PARTS = "y";
|
||||||
|
MIPS_CMDLINE_FROM_BOOTLOADER = "y";
|
||||||
|
|
||||||
# one or more of the following is required to get from
|
# one or more of the following is required to get from
|
||||||
# VFS: Cannot open root device "1f00" or unknown-block(31,0): error -6
|
# VFS: Cannot open root device "1f00" or unknown-block(31,0): error -6
|
||||||
|
|
|
@ -44,6 +44,7 @@ in rec {
|
||||||
imports = [
|
imports = [
|
||||||
./modules/wlan.nix
|
./modules/wlan.nix
|
||||||
./modules/tftpboot.nix
|
./modules/tftpboot.nix
|
||||||
|
./modules/flashable.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
kernel = {
|
kernel = {
|
||||||
|
|
Loading…
Reference in a new issue