commit 27ce61ae4e144d617269dc5b1142fd4ab119ced7
parent 3f0f621809ce3d357b2ef7d2e9d595fde886cd6b
Author: Daniel Barlow <dan@telent.net>
Date: Fri, 24 Nov 2023 23:29:12 +0000
add bootable config for Turris Omnia
Diffstat:
3 files changed, 163 insertions(+), 1 deletion(-)
diff --git a/devices/turris-omnia/default.nix b/devices/turris-omnia/default.nix
@@ -0,0 +1,114 @@
+{
+ description = ''
+ Turris Omnia
+ ************
+ '';
+
+ system = {
+ crossSystem = {
+ config = "armv7l-unknown-linux-musleabihf";
+ };
+ };
+
+ module = {pkgs, config, lib, lim, ... }:
+ let openwrt = pkgs.openwrt; in {
+ imports = [ ../../modules/arch/arm.nix ];
+ kernel = {
+ src = pkgs.pkgsBuildBuild.fetchurl {
+ name = "linux.tar.gz";
+ url = "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.71.tar.gz";
+ hash = "sha256-yhO2cXIeIgUxkSZf/4aAsF11uxyh+UUZu6D1h92vCD8=";
+ };
+ extraPatchPhase = ''
+ ${pkgs.openwrt.applyPatches.mvebu}
+ '';
+ config = {
+ PCI = "y";
+ OF = "y";
+ MEMORY = "y"; # for MVEBU_DEVBUS
+ DMADEVICES = "y"; # for MV_XOR
+ CPU_V7 = "y";
+ ARCH_MULTIPLATFORM = "y";
+ ARCH_MVEBU = "y";
+ ARCH_MULTI_V7= "y";
+ PCI_MVEBU = "y";
+ AHCI_MVEBU = "y";
+ MACH_ARMADA_38X = "y";
+ SMP = "y";
+ # this is disabled for the moment because it relies on a GCC
+ # plugin that requires gmp.h to build, and I can't see right now
+ # how to confgure it to find gmp
+ STACKPROTECTOR_PER_TASK = "n";
+ NR_CPUS = "4";
+ VFP = "y";
+ NEON= "y";
+
+ # WARNING: unmet direct dependencies detected for ARCH_WANT_LIBATA_LEDS
+ ATA = "y";
+
+ # switch is DSA
+ # CONFIG_NET_DSA_MV88E6060=y
+ # CONFIG_NET_DSA_MV88E6XXX=y
+ # CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
+
+ # CONFIG_REGMAP=y
+ # CONFIG_REGMAP_I2C=y
+ # CONFIG_REGMAP_SPI=y
+ # CONFIG_REGMAP_MMIO=y
+
+ PSTORE = "y";
+ PSTORE_RAM = "y";
+ PSTORE_CONSOLE = "y";
+ PSTORE_DEFLATE_COMPRESS = "n";
+
+ SERIAL_8250 = "y";
+ SERIAL_8250_CONSOLE = "y";
+ SERIAL_OF_PLATFORM="y";
+ SERIAL_MVEBU_UART = "y";
+ SERIAL_MVEBU_CONSOLE = "y";
+
+ SERIAL_8250_DMA= "y";
+ SERIAL_8250_DW= "y";
+ SERIAL_8250_EXTENDED= "y";
+ SERIAL_8250_MANY_PORTS= "y";
+ SERIAL_8250_SHARE_IRQ= "y";
+ OF_ADDRESS= "y";
+ OF_MDIO= "y";
+
+ MVEBU_DEVBUS = "y"; # "Device Bus controller ... flash devices such as NOR, NAND, SRAM, and FPGA"
+ MVMDIO = "y";
+ MVNETA = "y";
+ MVNETA_BM = "y";
+ MVNETA_BM_ENABLE = "y";
+ MVPP2 = "y";
+ MV_XOR = "y";
+ };
+ };
+ boot = {
+ commandLine = [ "console=ttyS0,115200" ];
+ imageFormat = "fit";
+ };
+
+ hardware = {
+ defaultOutput = "flashimage";
+ loadAddress = lim.parseInt "0x00008000";
+ entryPoint = lim.parseInt "0x00008000";
+ rootDevice = "/dev/mtdblock0";
+ dts = {
+ src = "${config.system.outputs.kernel.modulesupport}/arch/arm/boot/dts/armada-385-turris-omnia.dts";
+ includes = [
+ "${config.system.outputs.kernel.modulesupport}/arch/arm/boot/dts/"
+ ];
+ };
+ flash.eraseBlockSize = 65536; # only used for tftpboot
+ networkInterfaces =
+ let
+ inherit (config.system.service.network) link;
+ inherit (config.system.service) bridge;
+ in rec {
+ lan = link.build { ifname = "eth0"; };
+ };
+ };
+
+ };
+}
diff --git a/examples/turris.nix b/examples/turris.nix
@@ -0,0 +1,48 @@
+{ config, pkgs, lib, lim, ... } :
+let
+ inherit (pkgs) serviceFns;
+ svc = config.system.service;
+
+in rec {
+ imports = [
+ ../modules/network
+ ../modules/ssh
+ ../modules/vlan
+
+ ../modules/ext4fs.nix
+ ../modules/tftpboot.nix
+ ];
+
+ rootfsType = "ext4";
+
+ boot.tftp = {
+ # IP addresses to use in the boot monitor when flashing/ booting
+ # over TFTP. If you are flashing using the stock firmware's Web UI
+ # then these dummy values are fine
+ ipaddr = "10.0.0.8"; # my address
+ serverip = "10.0.0.1"; # build machine or other tftp server
+ loadAddress = lim.parseInt "0x40000800";
+ };
+
+ hostname = "hello";
+
+ services.dhcpc = svc.network.dhcp.client.build {
+ interface = config.hardware.networkInterfaces.lan;
+
+ # don't start DHCP until the hostname is configured,
+ # so it can identify itself to the DHCP server
+ dependencies = [ config.services.hostname ];
+ };
+
+ services.sshd = svc.ssh.build { };
+
+ users.root = {
+ # the password is "secret". Use mkpasswd -m sha512crypt to
+ # create this hashed password string
+ passwd = "$6$y7WZ5hM6l5nriLmo$5AJlmzQZ6WA.7uBC7S8L4o19ESR28Dg25v64/vDvvCN01Ms9QoHeGByj8lGlJ4/b.dbwR9Hq2KXurSnLigt1W1";
+ };
+
+ defaultProfile.packages = with pkgs; [
+ figlet
+ ];
+}
diff --git a/modules/tftpboot.nix b/modules/tftpboot.nix
@@ -90,7 +90,7 @@ in {
setenv ipaddr ${cfg.ipaddr}
setenv bootargs 'liminix ${cmdline} $cmd'
tftpboot 0x${lib.toHexString cfg.loadAddress} result/uimage ; tftpboot 0x$(printf %x $rootfsStart) result/rootfs ; tftpboot 0x$dtbStart result/dtb
- bootm 0x$${lib.toHexString cfg.loadAddress} - 0x$dtbStart
+ bootm 0x${lib.toHexString cfg.loadAddress} - 0x$dtbStart
EOF
'';
};