bpi-r3: working boot

This commit is contained in:
chayleaf 2023-06-12 17:07:38 +07:00
parent ecc746c284
commit 26f1d0a864
9 changed files with 103 additions and 64 deletions

View file

@ -79,11 +79,20 @@
./system/hosts/nixserver ./system/hosts/nixserver
]; ];
}; };
router = { router-emmc = {
system = "aarch64-linux"; system = "aarch64-linux";
modules = [ modules = [
./system/hardware/bpi_r3.nix ./system/hardware/bpi_r3/emmc.nix
./system/hosts/router ./system/hosts/router
{ networking.hostName = "router"; }
];
};
router-sd = {
system = "aarch64-linux";
modules = [
./system/hardware/bpi_r3/sd.nix
./system/hosts/router
{ networking.hostName = "router"; }
]; ];
}; };
nixmsi = rec { nixmsi = rec {
@ -103,13 +112,25 @@
]; ];
}; };
}; };
in { in rec {
overlays.default = overlay; overlays.default = overlay;
packages = lib.genAttrs [ packages = lib.genAttrs [
"x86_64-linux" "x86_64-linux"
"aarch64-linux" "aarch64-linux"
] (system: let self = overlay self (import nixpkgs { inherit system; }); in self ); ] (system: let self = overlay self (import nixpkgs { inherit system; }); in self );
# this is the system config part # this is the system config part
nixosImages.router = let pkgs = import nixpkgs { system = "aarch64-linux"; overlays = [ overlay ]; }; in {
emmcImage = pkgs.callPackage ./system/hardware/bpi_r3/image.nix {
inherit (nixosConfigurations.router-emmc) config;
rootfsImage = nixosConfigurations.router-emmc.config.system.build.rootfsImage;
bpiR3Stuff = pkgs.bpiR3StuffEmmc;
};
sdImage = pkgs.callPackage ./system/hardware/bpi_r3/image.nix {
inherit (nixosConfigurations.router-sd) config;
rootfsImage = nixosConfigurations.router-sd.config.system.build.rootfsImage;
bpiR3Stuff = pkgs.bpiR3StuffSd;
};
};
nixosConfigurations = builtins.mapAttrs (hostname: args @ { system ? "x86_64-linux", modules, nixpkgs ? {}, home ? {}, ... }: nixosConfigurations = builtins.mapAttrs (hostname: args @ { system ? "x86_64-linux", modules, nixpkgs ? {}, home ? {}, ... }:
lib.nixosSystem ({ lib.nixosSystem ({
inherit system; inherit system;
@ -129,8 +150,8 @@
./system/modules/common.nix ./system/modules/common.nix
(getPrivSys hostname) (getPrivSys hostname)
# The common configuration that isn't part of common.nix # The common configuration that isn't part of common.nix
({ config, pkgs, ... }: { ({ config, pkgs, lib, ... }: {
networking.hostName = hostname; networking.hostName = lib.mkDefault hostname;
nixpkgs.overlays = [ overlay ]; nixpkgs.overlays = [ overlay ];
nix.extraOptions = '' nix.extraOptions = ''
plugin-files = ${pkgs.nix-plugins.override { nix = config.nix.package; }}/lib/nix/plugins/libnix-extra-builtins.so plugin-files = ${pkgs.nix-plugins.override { nix = config.nix.package; }}/lib/nix/plugins/libnix-extra-builtins.so

View file

@ -250,7 +250,7 @@ rec {
BRIDGE = yes; BRIDGE = yes;
HSR = no; HSR = no;
NET_DSA = module; NET_DSA = yes;
# packet CLaSsification # packet CLaSsification
NET_CLS_ROUTE4 = module; NET_CLS_ROUTE4 = module;
@ -289,10 +289,13 @@ rec {
# random stuff # random stuff
PSAMPLE = module; PSAMPLE = module;
RFKILL = yes; RFKILL = yes;
CRYPTO_SHA256 = yes;
# hardware specific stuff # hardware specific stuff
FB = lib.mkForce no; FB = lib.mkForce no;
DRM = no; DRM = no;
CFG80211 = module;
MAC80211 = module;
NR_CPUS = lib.mkForce (freeform "4"); NR_CPUS = lib.mkForce (freeform "4");
SMP = yes; SMP = yes;
@ -312,8 +315,11 @@ rec {
MTK_PMIC_WRAP = yes; MTK_PMIC_WRAP = yes;
MTK_THERMAL = yes; MTK_THERMAL = yes;
MTK_TIMER = yes; MTK_TIMER = yes;
NET_DSA_MT7530 = module; NET_DSA_MT7530 = yes;
NET_MEDIATEK_SOC = module; NET_DSA_MT7530_MDIO = yes;
NET_DSA_MT7530_MMIO = yes;
NET_DSA_TAG_MTK = yes;
NET_MEDIATEK_SOC = yes;
NET_MEDIATEK_SOC_WED = yes; NET_MEDIATEK_SOC_WED = yes;
NET_MEDIATEK_STAR_EMAC = yes; NET_MEDIATEK_STAR_EMAC = yes;
NET_SWITCHDEV = yes; NET_SWITCHDEV = yes;

View file

@ -1,26 +0,0 @@
{ pkgs
, ... }:
{
boot.loader = {
grub.enable = false;
generic-extlinux-compatible.enable = true;
};
# i'm not about to build a kernel on every update without an arm device...
# i guess i could use my phone for building it, but no, not interested
# boot.kernelPackages = pkgs.linuxPackages_testing;
boot.kernelPackages = pkgs.linuxPackages_bpiR3;
hardware.deviceTree.enable = true;
hardware.deviceTree.filter = "*mt7986*";
hardware.enableRedistributableFirmware = true;
# # disable a bunch of useless drivers
# boot.initrd.includeDefaultModules = false;
boot.initrd.availableKernelModules = [ "mmc_block" "dm_mod" "rfkill" "cfg80211" "mt7915e" ];
boot.kernelParams = [ "console=ttyS0,115200" ];
boot.initrd.compressor = "zstd";
nixpkgs.buildPlatform = "x86_64-linux";
}

View file

@ -0,0 +1,43 @@
{ pkgs
, config
, ... }:
{
boot.loader = {
grub.enable = false;
generic-extlinux-compatible.enable = true;
};
# boot.kernelPackages = pkgs.linuxPackages_testing;
boot.kernelPackages = pkgs.linuxPackages_bpiR3;
hardware.deviceTree.enable = true;
hardware.deviceTree.filter = "mt7986a-bananapi-bpi-r3.dtb";
hardware.enableRedistributableFirmware = true;
# # disable a bunch of useless drivers
# boot.initrd.includeDefaultModules = false;
boot.initrd.availableKernelModules = [ "mmc_block" "dm_mod" "rfkill" "cfg80211" "mt7915e" ];
boot.kernelParams = [ "boot.shell_on_fail" "console=ttyS0,115200" ];
boot.initrd.compressor = "zstd";
nixpkgs.buildPlatform = "x86_64-linux";
system.build.rootfsImage = pkgs.callPackage "${pkgs.path}/nixos/lib/make-ext4-fs.nix" {
storePaths = config.system.build.toplevel;
compressImage = false;
volumeLabel = "NIX_ROOTFS";
};
boot.postBootCommands = ''
if [ -f ${toString config.impermanence.path}/nix-path-registration ]; then
${config.nix.package.out}/bin/nix-store --load-db < ${toString config.impermanence.path}/nix-path-registration
mkdir -p /etc
touch /etc/NIXOS
${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system
rm -f ${toString config.impermanence.path}/nix-path-registration
fi
'';
hardware.wirelessRegulatoryDatabase = true;
}

View file

@ -0,0 +1,11 @@
{ config, ... }:
{
imports = [ ./. ];
hardware.deviceTree.overlays = [
{
name = "mt7986a-bananapi-bpi-r3-emmc.dtbo";
dtboFile = "${config.boot.kernelPackages.kernel}/dtbs/mediatek/mt7986a-bananapi-bpi-r3-emmc.dtbo";
}
];
}

View file

@ -52,7 +52,6 @@ vmTools.runInLinuxVM (runCommand "bpi-r3-fs" {
]; ];
preVM = '' preVM = ''
img=./result.img img=./result.img
ls /dev/fuse /etc/mtab || (echo "Must have /dev/fuse and /etc/mtab in nix options (extra-sandbox-paths)" && exit 1)
${vmTools.qemu}/bin/qemu-img create -f raw $img 7818182656 ${vmTools.qemu}/bin/qemu-img create -f raw $img 7818182656
truncate -s ${toString imageSize} $img truncate -s ${toString imageSize} $img

View file

@ -78,6 +78,9 @@ run cp -rv "$boot"/* "$tmp/out/@boot/"
run umount "$tmp/out" run umount "$tmp/out"
Mount btrfs "$template" "$tmp/out" "compress=zstd:15" Mount btrfs "$template" "$tmp/out" "compress=zstd:15"
run cp -v "$rootfs/nix-path-registration" "$tmp/out/@/" run cp -v "$rootfs/nix-path-registration" "$tmp/out/@/"
# those two are the only dirs needed for impermanence in boot stage 1
sudo -A mkdir -p "$tmp/out/@/var/lib/nixos"
sudo -A mkdir -p "$tmp/out/@/var/log"
run ls "$boot" run ls "$boot"
cpr "$boot" "$tmp/out/@boot" cpr "$boot" "$tmp/out/@boot"
cpr "$rootfs/nix" "$tmp/out/@nix" cpr "$rootfs/nix" "$tmp/out/@nix"

View file

@ -0,0 +1,11 @@
{ config, ... }:
{
imports = [ ./. ];
hardware.deviceTree.overlays = [
{
name = "mt7986a-bananapi-bpi-r3-sd.dtbo";
dtboFile = "${config.boot.kernelPackages.kernel}/dtbs/mediatek/mt7986a-bananapi-bpi-r3-sd.dtbo";
}
];
}

View file

@ -1,20 +1,11 @@
{ config { config
, pkgs
, ... }: , ... }:
# EMMC size: 7818182656
let let
rootUuid = "44444444-4444-4444-8888-888888888888"; rootUuid = "44444444-4444-4444-8888-888888888888";
rootPart = "/dev/disk/by-uuid/${rootUuid}"; rootPart = "/dev/disk/by-uuid/${rootUuid}";
rootfsImage = pkgs.callPackage "${pkgs.path}/nixos/lib/make-ext4-fs.nix" {
storePaths = config.system.build.toplevel;
compressImage = false;
volumeLabel = "NIX_ROOTFS";
};
in { in {
system.stateVersion = "22.11"; system.stateVersion = "22.11";
# TODO
fileSystems = { fileSystems = {
# mount root on tmpfs # mount root on tmpfs
"/" = { device = "none"; fsType = "tmpfs"; neededForBoot = true; "/" = { device = "none"; fsType = "tmpfs"; neededForBoot = true;
@ -38,24 +29,4 @@ in {
{ directory = /root; mode = "0700"; } { directory = /root; mode = "0700"; }
]; ];
}; };
hardware.wirelessRegulatoryDatabase = true;
system.build.emmcImage = pkgs.callPackage ./image.nix {
inherit config rootfsImage;
bpiR3Stuff = pkgs.bpiR3StuffEmmc;
};
system.build.sdImage = pkgs.callPackage ./image.nix {
inherit config rootfsImage;
bpiR3Stuff = pkgs.bpiR3StuffSd;
};
system.build.rootfs = rootfsImage;
boot.postBootCommands = ''
if [ -f ${toString config.impermanence.path}/nix-path-registration ]; then
${config.nix.package.out}/bin/nix-store --load-db < ${toString config.impermanence.path}/nix-path-registration
mkdir -p /etc
touch /etc/NIXOS
${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system
rm -f ${toString config.impermanence.path}/nix-path-registration
fi
'';
boot.kernelParams = [ "boot.shell_on_fail" ];
} }