From 900e2d1b8f5281fa21ca9763ccd072020fc798b8 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Fri, 7 Jul 2023 01:47:40 +0200 Subject: [PATCH] stuff --- README.md | 67 ++++++++++++++++++++++++++++++++++++++ flake.nix | 94 +++++++++++++++++++++++++++++++++-------------------- notes.md | 31 ++++++++++++++++++ qemu-vm.nix | 2 -- 4 files changed, 156 insertions(+), 38 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8dc5ef6 --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# Personal NixOS RISC-V 64 flake + +Goals: + +* I want to flash NixOS on to the M.2 NVMe SSD of a VisionFive2 +* I want a flake with a neat cross story / UX + +# Nix? + +* https://nixos.org/ +* https://determinate.systems/posts/determinate-nix-installer + +# How? + +The VisionFive2 shipped with a stinky firmware, which does not support booting from the SSD. +This capability was later added in [starfive uboot v3.0.4](https://github.com/starfive-tech/u-boot/commit/2139bf20ea67250c9dc426735fb9daf14e21bb9f). +As such we have to flash an SD card, use it to flash new firmware to the VisionFive2 SPI flash, then finally boot from the NVMe, all the while [fiddling with DIP switches](dip-pics.md). + +## Building an image + +Pick a host, then pick your poison: + +| Hostname | Description | +| -------------- | ------------------- | +| `demo-r12a` | Board rev 1.2A | +| `demo-r12a-8g` | Board rev 1.2A, 8GB | +| `demo-r13b` | Board rev 1.3B | +| `demo-r13b-8g` | Board rev 1.3B, 8GB | +| `asgaut` | Asgaut | +| `gunder` | Gunder | + +```shell +nix build .#asgaut-qemu # emulation go brr +nix build .#asgaut-nvme-image +nix build .#asgaut-sd-image +nix build .#asgaut-sd-installer +``` + +## Building without cross compilation + +Either use a `riscv64-linux` host, or run the following command with `riscv64-linux` [binfmt emulation](https://search.nixos.org/options?query=boot.binfmt.emulatedSystems) configured: + +```shell +nix build .#packages.riscv64-linux.demo-nvme-image +``` + +## Flashing an image + +```shell +nix build .#something +lsblk # locate your SD card +umount /run/media/pbsds/9C33-6BBD # example mounts +sudo dd if=result/sd-image/*.img of=/dev/sdX bs=4M conf=fsync status=progress +sync +``` + +## Booting + +Here are some sweet [dip pics](https://doc-en.rvspace.org/VisionFive2/Boot_UG/VisionFive2_SDK_QSG/boot_mode_settings.html). + +After flashing the firmware you can boot using quad SPI. Use SDIO3.0 to boot using the u-boot SPL and FIT firmware on the sd card. + +## Updating SPI firmware + +```shell +sudo update-firmware +``` diff --git a/flake.nix b/flake.nix index 4a5e5e8..cca67d2 100644 --- a/flake.nix +++ b/flake.nix @@ -1,9 +1,9 @@ { description = "My visionfive 2 setup"; - #inputs.nixpkgs.url = "github:NickCao/nixpkgs/riscv"; # https://github.com/NickCao/nixpkgs/tree/riscv - #inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + #inputs.nixpkgs.url = "github:NickCao/nixpkgs/riscv"; # https://github.com/NickCao/nixpkgs/tree/riscv + #inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.nixos-hardware.url = "github:nixos/nixos-hardware"; #inputs.nickcao-rv64.url = "github:NickCao/nixos-riscv"; # https://github.com/NickCao/nixos-riscv @@ -17,19 +17,17 @@ #nickcao-rv64, ...} @ inputs: let - #systems = nixpkgs.lib.systems.flakeExposed; - systems = [ + forSystems = systems: f: nixpkgs.lib.genAttrs systems (system: f rec { + inherit system; + pkgs = nixpkgs.legacyPackages.${system}; + lib = nixpkgs.legacyPackages.${system}.lib; + }); + #forAllSystems = forSystems nixpkgs.lib.systems.flakeExposed; + forAllSystems = forSystems [ "x86_64-linux" "aarch64-linux" "riscv64-linux" ]; - forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f rec { - inherit system; - pkgs = nixpkgs.legacyPackages.${system}; - inherit (pkgs) liv; - mkNixos = modules: nixpkgs.lib.nixosSystem { inherit system modules; }; - vf2-firmware = pkgs.callPackage "${nixos-hardware}/starfive/visionfive/v2/firmware.nix" { }; - }); #overlays = nixpkgs.lib.mapAttrsToList (name: val: val) self.overlays; in { @@ -41,14 +39,16 @@ #}; nixosModules = rec { - # hardware - rv64 = { config, lib, ... }: lib.mkIf (config.nixpkgs.system != "riscv64-linux") { + # cross + rv64-maybe-cross = { config, lib, ... }: lib.mkIf (config.nixpkgs.system != "riscv64-linux") { # (system != "riscv64-linux") => do cross nixpkgs.crossSystem.config = "riscv64-unknown-linux-gnu"; nixpkgs.crossSystem.system = "riscv64-linux"; }; + + # hardware vf2-r12a = { lib, ...}: { - imports = [ rv64 ]; + imports = [ rv64-maybe-cross ]; hardware.deviceTree.name = "starfive/jh7110-starfive-visionfive-2-v1.2a.dtb"; }; vf2-r12a-8gb = { @@ -59,7 +59,7 @@ }]; }; vf2-r13b = { lib, ...}: { - imports = [ rv64 ]; + imports = [ rv64-maybe-cross ]; hardware.deviceTree.name = "starfive/jh7110-starfive-visionfive-2-v1.3b.dtb"; # default }; vf2-r13b-8gb = { @@ -119,15 +119,24 @@ # components - minimal = { lib, ...}: { - boot.enableContainers = false; - programs.command-not-found.enable = false; - documentation.man.enable = false; - documentation.info.enable = false; - security.polkit.enable = lib.mkForce false; - security.audit.enable = false; + minimal = { lib, ...}: with lib; { + #boot.enableContainers = mkDefault false; + documentation.enable = mkDefault false; + documentation.doc.enable = mkDefault false; + documentation.info.enable = mkDefault false; + documentation.man.enable = mkDefault false; + documentation.nixos.enable = mkDefault false; + #environment.noXlibs = mkDefault true; networking.firewall.enable = lib.mkDefault false; - + programs.command-not-found.enable = false; + security.audit.enable = mkDefault false; + security.polkit.enable = lib.mkForce false; + services.logrotate.enable = mkDefault false; + services.udisks2.enable = mkDefault false; + #xdg.autostart.enable = mkDefault false; + #xdg.icons.enable = mkDefault false; + #xdg.mime.enable = mkDefault false; + #xdg.sounds.enable = mkDefault false; }; dhcp = { networking.interfaces.end0.useDHCP = true; @@ -155,6 +164,7 @@ networking.hostName = "asgaut"; environment.systemPackages = with pkgs;[ neofetch htop fd ripgrep ]; system.stateVersion = "23.05"; + virtualisation.docker.enable = true; }; gunder = { pkgs, ... }: { imports = [ minimal dhcp locale-no_nb ]; @@ -164,19 +174,31 @@ }; }; - packages = forAllSystems ({ system, mkNixos, ... }: let - mkAll = hostname: modules: with self.nixosModules; { - "${hostname}-sd-installer" = (mkNixos (modules ++ [ vf2-r12a-8gb vf2-sd-installer ])).config.system.build.sdImage; - "${hostname}-sd-image" = (mkNixos (modules ++ [ vf2-r12a-8gb vf2-sd-image ])).config.system.build.sdImage; - "${hostname}-nvme-image" = (mkNixos (modules ++ [ vf2-r12a-8gb vf2-nvme-image ])).config.system.build.efiImage; - "${hostname}-qemu" = (mkNixos (modules ++ [ rv64 vf2-qemu ])).config.system.build.vm; + packages = forAllSystems ({ system, ... }: let + m = self.nixosModules; + mkNixos = modules: nixpkgs.lib.nixosSystem { inherit system modules; }; + mkAll = hostname: modules: with m; { + "${hostname}-sd-installer" = (mkNixos (modules ++ [ vf2-sd-installer ])).config.system.build.sdImage; + "${hostname}-sd-image" = (mkNixos (modules ++ [ vf2-sd-image ])).config.system.build.sdImage; + "${hostname}-nvme-image" = (mkNixos (modules ++ [ vf2-nvme-image ])).config.system.build.efiImage; + "${hostname}-qemu" = (mkNixos (modules ++ [ vf2-qemu ])).config.system.build.vm; }; - in (mkAll "demo" [ self.nixosModules.demo ]) - // (mkAll "asgaut" [ self.nixosModules.asgaut ]) - // (mkAll "gunder" [ self.nixosModules.gunder ])); + in (mkAll "demo-r12a" [ m.demo m.vf2-r12a ]) + // (mkAll "demo-r12a-8gb" [ m.demo m.vf2-r12a-8gb ]) + // (mkAll "demo-r13b" [ m.demo m.vf2-r13b ]) + // (mkAll "demo-r13b-8gb" [ m.demo m.vf2-r13b-8gb ]) + // (mkAll "asgaut" [ m.asgaut m.vf2-r12a-8gb ]) + // (mkAll "gunder" [ m.gunder m.vf2-r12a-8gb ]) + // { + default = self.packages.${system}.demo-r12a-qemu; + }); - nixosConfigurations.demo = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = with self.nixosModules; [ demo vf2-nvme ]; }; - nixosConfigurations.asgaut = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = with self.nixosModules; [ asgaut vf2-nvme ]; }; - nixosConfigurations.gunder = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = with self.nixosModules; [ gunder vf2-nvme ]; }; + nixosConfigurations = let + m = self.nixosModules; + mkSystem = modules: nixpkgs.lib.nixosSystem { system = "x86_64-linux"; inherit modules; }; + in { + asgaut = mkSystem (with m; [ asgaut vf2-r12a-8gb vf2-nvme ]); + gunder = mkSystem (with m; [ gunder vf2-r12a-8gb vf2-nvme ]); + }; }; } diff --git a/notes.md b/notes.md index 2938c8d..9aed9b7 100644 --- a/notes.md +++ b/notes.md @@ -140,3 +140,34 @@ github:zhaofengli/nixos-riscv64/def02c67833bf551288c5cbd8ed6652b255d2fe8 │ └───visionfive: NixOS module └───overlay: Nixpkgs overlay ``` + + + +# BARF + +https://www.waveshare.com/wiki/VisionFive2 + +https://doc-en.rvspace.org/Doc_Center/visionfive_2.html +https://github.com/starfive-tech/VisionFive2 +https://github.com/starfive-tech/u-boot +https://github.com/u-boot/u-boot/blob/master/doc/board/starfive/visionfive2.rst +http://forum.rvspace.org/t/usb-serial-needed/897/4 +https://reddit.com/r/RISCV/comments/zy30vl/comment/j3zhzkx/ +https://forum.rvspace.org/t/nvme-boot-using-visionfive2-software-v2-11-5/2464/1 +https://forum.rvspace.org/t/i-tried-the-v3-0-4-sdcard-img-from-sdcard-and-from-nvme/2965 +https://u-boot.readthedocs.io/en/latest/board/starfive/visionfive2.html + + + +* base: https://github.com/NixOS/nixos-hardware/blob/master/starfive/visionfive/v2/ +* make-sd-image: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/sd-card/sd-image.nix +* make-disk-image: + * https://github.com/NixOS/nixpkgs/blob/master/nixos/lib/make-disk-image.nix + * https://github.com/nix-community/nixos-generators/blob/master/formats/raw.nix + * https://github.com/nix-community/nixos-generators/blob/master/formats/raw-efi.nix +* riscv efi: https://github.com/dramforever/nixos-riscv-efi/ +* https://github.com/dramforever/nixos-riscv-efi +* gpu?: https://github.com/dramforever/nixos-visionfive +* qemu: https://github.com/NickCao/nixos-riscv +* Distroboot u-boot: https://github.com/NickCao/u-boot-starfive +* ?? https://github.com/zhaofengli/nixos-riscv64 diff --git a/qemu-vm.nix b/qemu-vm.nix index e92b63c..00acd7d 100644 --- a/qemu-vm.nix +++ b/qemu-vm.nix @@ -3,8 +3,6 @@ { boot.loader.generic-extlinux-compatible.enable = false; - - #boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelParams = [ "console=ttyS0" "earlycon" ]; boot.initrd.availableKernelModules = [ "pci_host_generic" "virtio_pci" "9p" "9pnet_virtio" ];