Skip to content

NixOS fml13v03 #41

Description

@RealAstolfo

Made a separate issue tangential to #40

Speaking of Nix on fml13v03, @RossComputerGuy have you had any progress on your part? ive been trying to cross compile an sd-image for it using the fml13v03-opensbi, fml13v03-linux, fml13v03-uboot, and fml13v03-firmware repos. for some reason DC-DeepComputing decided to remove the fml13v03 repo outright, so i cant even just build from that repo and use the resulting kernel and bootchain to build a nixos rootfs.

for context this is my flake. dont mind the bad sha's because i never got that far, and i completely gave up on the opensbi stage.

  description = "NixOS for Framework Laptop 13 RISC-V Edition (EIC7702)";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    systems.url = "github:nix-systems/x86_64-linux";
    flake-utils.url = "github:numtide/flake-utils";
    flake-utils.inputs.systems.follows = "systems";
  };

  outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs {
          inherit system;
          crossSystem = {
            config = "riscv64-unknown-linux-gnu";
            system = "riscv64-linux";
          };
        };

        buildPkgs = import nixpkgs { inherit system; };

        fml13v03-linux-src = buildPkgs.fetchFromGitHub {
          owner = "DC-DeepComputing";
          repo = "fml13v03_linux";
          rev = "fml13v03-6.6.92";
          hash = "sha256-RvZapBfQAokxVMNT2VU0tJqeI4LxMQTs1n+z74mR8XU=";
        };

        fml13v03-uboot-src = buildPkgs.fetchFromGitHub {
          owner = "DC-DeepComputing";
          repo = "fml13v03_u-boot";
          rev = "fml13v03-6.6.18";
          hash = "sha256-cgVjGXityxsnqs/onLJ0E6tlLI4YH1LALUA/rM+LPUg=";
        };

        fml13v03-opensbi-src = buildPkgs.fetchFromGitHub {
          owner = "DC-DeepComputing";
          repo = "fml13v03_opensbi";
          rev = "fml13v03-6.6.18";
          hash = "sha256-RvZapBfQAokxVMNT2VU0tJqeI4LxMQTs1n+z74mR8XU=";
        };

        fml13v03-secboot-fw-src = buildPkgs.fetchFromGitHub {
          owner = "DC-DeepComputing";
          repo = "fml13v03_secboot_fw";
          rev = "main";
          hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
        };

        opensbi = pkgs.stdenv.mkDerivation {
          pname = "opensbi-fml13v03";
          version = "fml13v03";

          src = fml13v03-opensbi-src;

          nativeBuildInputs = with buildPkgs; [
            dtc
            python3
          ];

          makeFlags = [
            "CROSS_COMPILE=riscv64-unknown-linux-gnu-"
            "PLATFORM=eswin/eic770x"
            "PLATFORM_RISCV_XLEN=64"
          ];

          installPhase = ''
            runHook preInstall
            mkdir -p $out/share/opensbi
            cp -r build/platform/eswin/eic770x/firmware/* $out/share/opensbi/
            runHook postInstall
          '';

          dontFixup = true;
        };


        uboot = pkgs.stdenv.mkDerivation {
          pname = "uboot-fml13v03";
          version = "fml13v03";

          src = fml13v03-uboot-src;

          depsBuildBuild = with buildPkgs; [
            buildPackages.stdenv.cc
          ];

          nativeBuildInputs = with buildPkgs; [
            bison
            flex
            bc
            dtc
            openssl
            swig
            ncurses
            python3
            python3Packages.setuptools
            (python3.withPackages (ps: with ps; [ setuptools ]))
          ];

          buildInputs = with buildPkgs; [
            openssl
            ncurses
          ];

          configurePhase = ''
            runHook preConfigure

            make CROSS_COMPILE=riscv64-unknown-linux-gnu- dt_name=eic7702-deepcomputing-fml13v03 board_name=FML13V03 deepcomputing-fml13v03_defconfig

            runHook postConfigure
          '';

          buildPhase = ''
            runHook preBuild
            make CROSS_COMPILE=riscv64-unknown-linux-gnu- -j$NIX_BUILD_CORES
            runHook postBuild
          '';

          installPhase = ''
            runHook preInstall
            mkdir -p $out/share/u-boot
            cp u-boot.bin $out/share/u-boot/ || true
            cp u-boot.itb $out/share/u-boot/ || true
            cp u-boot-spl.bin $out/share/u-boot/ || true
            cp -r arch/riscv/dts/*.dtb $out/share/u-boot/ || true
            runHook postInstall
          '';

          dontFixup = true;
        };

        firmware = buildPkgs.stdenv.mkDerivation {
          pname = "firmware-fml13v03";
          version = "fml13v03";

          src = fml13v03-secboot-fw-src;

          installPhase = ''
            runHook preInstall
            mkdir -p $out/lib/firmware
            cp -r * $out/lib/firmware/ || true
            runHook postInstall
          '';

          dontBuild = true;
          dontFixup = true;
        };

        linuxPackages = pkgs.linuxPackagesFor (pkgs.linux.override {
          src = fml13v03-linux-src;
          version = "6.6.92";
          modDirVersion = "6.6.92";

          structuredExtraConfig = with pkgs.lib.kernel; {
            RISCV = yes;
            SERIAL_8250 = yes;
            SERIAL_8250_CONSOLE = yes;
            MMC = yes;
            MMC_SDHCI = yes;
            USB = yes;
            USB_XHCI_HCD = yes;
            NETDEVICES = yes;
            ETHERNET = yes;
            OF = yes;
            FW_LOADER = yes;
          };

          extraMeta.branch = "6.6";
        });

      in rec {
        packages.default = packages.sd-image;

        packages.sd-image = (import "${nixpkgs}/nixos" {
          configuration = { config, lib, pkgs, ... }: {
            imports = [
              "${nixpkgs}/nixos/modules/installer/sd-card/sd-image.nix"
            ];

            boot = {
              kernelPackages = linuxPackages;

              loader = {
                grub.enable = false;
                generic-extlinux-compatible.enable = true;
              };

              initrd.availableKernelModules = [
                "mmc_block"
                "usbhid"
                "hid_generic"
              ];

              kernelParams = [
                "console=ttyS0,115200n8"
                "earlycon=sbi"
                "root=/dev/mmcblk0p2"
                "rootwait"
                "rw"
              ];
            };

            hardware = {
              deviceTree = {
                enable = true;
                name = "eswin/eic7702-deepcomputing-fml13v03.dtb";
              };

              firmware = [ firmware ];
            };

            sdImage = {
              compressImage = false;

              populateFirmwareCommands = ''
                cp ${uboot}/share/u-boot/u-boot.bin firmware/ || true
                cp ${uboot}/share/u-boot/u-boot.itb firmware/ || true
              '';

              populateRootCommands = ''
                mkdir -p ./files/boot
                ${config.boot.loader.generic-extlinux-compatible.populateCmd} -c ${config.system.build.toplevel} -d ./files/boot
              '';

              firmwareSize = 64;
            };

            users.users.nixos = {
              isNormalUser = true;
              password = "test123";
              extraGroups = [ "wheel" "networkmanager" ];
            };

            security.sudo.wheelNeedsPassword = false;

            services.openssh = {
              enable = true;
              settings.PermitRootLogin = "yes";
            };

            networking = {
              hostName = "fml13v03";
              useDHCP = lib.mkDefault true;
              networkmanager.enable = true;
            };

            environment.systemPackages = with pkgs; [
              vim
              git
              htop
              wget
              curl
            ];

            nixpkgs.crossSystem = {
              config = "riscv64-unknown-linux-gnu";
              system = "riscv64-linux";
            };

            system.stateVersion = "24.11";
          };
          inherit system;
        }).config.system.build.sdImage;

        packages.uboot = uboot;
        packages.firmware = firmware;
        packages.kernel = linuxPackages.kernel;

        devShells.default = buildPkgs.mkShell {
          nativeBuildInputs = with buildPkgs; [
            gcc
            dtc
            python3
            bison
            flex
            bc
            openssl
            swig
            ncurses
          ];

          shellHook = ''
            export CROSS_COMPILE=riscv64-unknown-linux-gnu-
            export ARCH=riscv
            echo "FML13V03 Development Shell"
          '';
        };
      });
}```

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions