Skip to content

Commit e5f4a40

Browse files
committed
bananapi/bpi-sm10: init
1 parent c97bc4d commit e5f4a40

2 files changed

Lines changed: 126 additions & 0 deletions

File tree

bananapi/bpi-sm10/default.nix

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
lib,
3+
...
4+
}:
5+
6+
{
7+
# The BPI-SM10 (K3-CoM260) shares the same SoC, firmware and boot flow as the
8+
# K3 Pico-ITX. Only the device tree differs.
9+
imports = [ ../../spacemit/k3-pico-itx ];
10+
11+
hardware.deviceTree.name = lib.mkForce "spacemit/k3_com260_ifx.dtb";
12+
}

bananapi/bpi-sm10/sd-image.nix

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
{
2+
config,
3+
lib,
4+
modulesPath,
5+
pkgs,
6+
...
7+
}:
8+
9+
{
10+
imports = [
11+
"${modulesPath}/profiles/base.nix"
12+
"${modulesPath}/installer/sd-card/sd-image.nix"
13+
./default.nix
14+
];
15+
16+
hardware.enableAllHardware = lib.mkForce false;
17+
18+
fileSystems."/" = lib.mkForce {
19+
device = "/dev/disk/by-partlabel/nixos-rootfs";
20+
fsType = "ext4";
21+
};
22+
23+
fileSystems."/boot" = {
24+
device = "/dev/disk/by-label/ESP";
25+
fsType = "vfat";
26+
options = [
27+
"fmask=0077"
28+
"dmask=0077"
29+
];
30+
};
31+
32+
image.fileName = "${config.image.baseName}-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}-bpi-sm10.img";
33+
34+
sdImage = {
35+
expandOnBoot = false;
36+
firmwarePartitionOffset = 12;
37+
firmwarePartitionName = "ESP";
38+
firmwareSize = 256;
39+
40+
populateFirmwareCommands =
41+
let
42+
systemdBoot = "${pkgs.systemd}/lib/systemd/boot/efi/systemd-bootriscv64.efi";
43+
kernel = "${config.system.build.kernel}/${config.system.boot.loader.kernelFile}";
44+
initrd = "${config.system.build.initialRamdisk}/${config.system.boot.loader.initrdFile}";
45+
dtb = "${config.hardware.deviceTree.package}/${config.hardware.deviceTree.name}";
46+
kernelParams = lib.concatStringsSep " " config.boot.kernelParams;
47+
in
48+
''
49+
mkdir -p firmware/EFI/BOOT firmware/EFI/systemd firmware/EFI/nixos
50+
mkdir -p firmware/loader/entries
51+
52+
cp ${systemdBoot} firmware/EFI/BOOT/BOOTRISCV64.EFI
53+
cp ${systemdBoot} firmware/EFI/systemd/systemd-bootriscv64.efi
54+
55+
cp ${kernel} firmware/EFI/nixos/kernel.efi
56+
cp ${initrd} firmware/EFI/nixos/initrd
57+
cp ${dtb} firmware/EFI/nixos/k3_com260_ifx.dtb
58+
59+
cat > firmware/loader/loader.conf <<EOF
60+
default nixos
61+
timeout 3
62+
console-mode auto
63+
EOF
64+
65+
cat > firmware/loader/entries/nixos.conf <<EOF
66+
title NixOS
67+
linux /EFI/nixos/kernel.efi
68+
initrd /EFI/nixos/initrd
69+
devicetree /EFI/nixos/k3_com260_ifx.dtb
70+
options init=${config.system.build.toplevel}/init ${kernelParams}
71+
EOF
72+
73+
cat > firmware/startup.nsh <<EOF
74+
@echo -off
75+
echo Booting NixOS...
76+
for %i in 0 1 2 3 4 5
77+
if exist FS%i:\EFI\BOOT\BOOTRISCV64.EFI then
78+
FS%i:\EFI\BOOT\BOOTRISCV64.EFI
79+
endif
80+
endfor
81+
EOF
82+
'';
83+
populateRootCommands = "";
84+
85+
postBuildCommands = ''
86+
eval $(${pkgs.util-linux}/bin/partx $img -o START,SECTORS --nr 2 --pairs)
87+
ROOTFS_START=$START
88+
ROOTFS_SECTORS=$SECTORS
89+
90+
truncate -s '+2M' $img
91+
92+
${pkgs.util-linux}/bin/sfdisk $img <<EOF
93+
label: gpt
94+
unit: sectors
95+
sector-size: 512
96+
first-lba: 256
97+
98+
start=1280, size=128, name="env", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
99+
start=2048, size=256, name="bootinfo", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
100+
start=3072, size=1024, name="fsbl", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
101+
start=8192, size=6144, name="esos", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
102+
start=14336, size=2048, name="opensbi", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
103+
start=16384, size=8192, name="uboot", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
104+
start=24576, size=524288, name="ESP", type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B
105+
start=$ROOTFS_START, size=$ROOTFS_SECTORS, name="nixos-rootfs", type=0FC63DAF-8483-4772-8E79-3D69D8477DE4
106+
EOF
107+
108+
dd if=${config.system.build.fsbl}/bootinfo_block.bin of=$img conv=notrunc bs=1M seek=1
109+
dd if=${config.system.build.fsbl}/FSBL.bin of=$img conv=notrunc bs=1024 seek=1536
110+
dd if=${config.system.build.opensbi}/share/opensbi/lp64/generic/firmware/fw_dynamic.itb of=$img conv=notrunc bs=1M seek=7
111+
dd if=${config.system.build.edk2}/edk2.itb of=$img conv=notrunc bs=1M seek=8
112+
'';
113+
};
114+
}

0 commit comments

Comments
 (0)