commit 5feda1a1e6adddb69b0a35d59dad6ce6e6f9a4ae
parent e78028e58fe3f60b1b71b35ad388622925f258a0
Author: Daniel Barlow <dan@telent.net>
Date: Fri, 7 Oct 2022 00:24:35 +0100
add 'phram' param for tftp boot without flashing
Diffstat:
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/default.nix b/default.nix
@@ -1,4 +1,6 @@
-{ device ? (import devices/gl-ar750.nix)
+{
+ device ? (import devices/gl-ar750.nix)
+, phram ? false
}:
let
@@ -12,6 +14,7 @@ let
<liminix-config>
./modules/s6
./modules/users.nix
+ (if phram then ./modules/phram.nix else (args: {}))
] nixpkgs.pkgs;
squashfs = liminix.builders.squashfs config.filesystem.contents;
kernel = callPackage ./kernel {
@@ -37,6 +40,22 @@ let
dd if=${uimage} of=$out/firmware.bin bs=128k conv=sync
dd if=${squashfs} of=$out/firmware.bin bs=128k conv=sync,nocreat,notrunc oflag=append
'';
+ boot-scr =
+ let
+ inherit (nixpkgs.lib.trivial) toHexString;
+ uimageStart = 10485760; # 0xa00000
+ squashfsStart = uimageStart + 2 * 1024 * 1024;
+ squashfsSize = 8;
+ cmd = "mtdparts=phram0:${toString squashfsSize}M(nix) phram.phram=phram0,0x${toHexString squashfsStart},${toString squashfsSize}Mi memmap=${toString squashfsSize}M\$0x${toHexString squashfsStart} root=1f00";
+ in
+ nixpkgs.pkgs.buildPackages.writeScript "firmware.bin" ''
+ setenv serverip 192.168.8.148
+ setenv ipaddr 192.168.8.251
+ setenv bootargs '${concatStringsSep " " config.boot.commandLine} ${cmd}'
+ tftp 0x8${toHexString uimageStart} result/uimage ; tftp 0x8${toHexString squashfsStart} result/squashfs
+ bootm 0x${toHexString uimageStart}
+ '';
+
directory = nixpkgs.pkgs.runCommand "liminix" {} ''
mkdir $out
cd $out
@@ -44,6 +63,8 @@ let
ln -s ${kernel.vmlinux} vmlinux
ln -s ${manifest} manifest
ln -s ${uimage} uimage
+ ${if phram then "ln -s ${boot-scr} boot.scr" else ""}
+ ln -s ${boot-scr} flash.scr
'';
# this exists so that you can run "nix-store -q --tree" on it and find
# out what's in the image, which is nice if it's unexpectedly huge
diff --git a/modules/phram.nix b/modules/phram.nix
@@ -0,0 +1,29 @@
+{
+ config
+, ...
+}:
+{
+ config = {
+ kernel = {
+ checkedConfig = {
+ MTD = "y";
+ MTD_PHRAM = "y";
+ MTD_CMDLINE_PARTS = "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
+ # to
+ # VFS: Mounted root (squashfs filesystem) readonly on device 31:0.
+ MTD_OF_PARTS = "y";
+ PARTITION_ADVANCED = "y";
+ MSDOS_PARTITION = "y";
+ EFI_PARTITION = "y";
+ MTD_BLKDEVS = "y";
+ MTD_BLOCK = "y";
+
+ # CONFIG_MTD_MTDRAM=m c'est quoi?
+ };
+
+ };
+ };
+}