diff --git a/base.nix b/base.nix index 596ffb6..1eade56 100644 --- a/base.nix +++ b/base.nix @@ -6,6 +6,7 @@ # RISC-V Quirks and patches, should be upstreamed nixpkgs.overlays = [ (final: prev: { + hpcg = prev.callPackage ./examples/hpcg.nix { }; vte = (prev.vte.override { stdenv = prev.stdenv; }).overrideAttrs (old: { diff --git a/configuration.nix b/configuration.nix index 2d70f72..0b00720 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,7 +1,7 @@ { lib, ... }: { imports = [ - ./examples/launchCageOnBoot.nix + #./examples/launchCageOnBoot.nix ]; # networking = { @@ -22,7 +22,11 @@ kernelParams = [ "boot.shell_on_fail" ]; consoleLogLevel = lib.mkDefault 7; initrd.kernelModules = [ + "virtio_pci" "virtio_blk" + "virtio_input" + "9pnet" + "9pnet_virtio" ]; }; @@ -30,19 +34,19 @@ services.openssh.enable = true; # Open port 19999 for Netdata - networking.firewall.allowedTCPPorts = [ 19999 ]; - services.netdata.enable = true; + #networking.firewall.allowedTCPPorts = [ 19999 ]; + #services.netdata.enable = true; # Enable Avahi mDNS, you should be able to reach http://visionfive-nix:19999 # to reach netdata when booted - services.avahi = { - openFirewall = true; - nssmdns = true; # Allows software to use Avahi to resolve. - enable = true; - publish = { - enable = true; - addresses = true; - workstation = true; - }; - }; + #services.avahi = { + # openFirewall = true; + # nssmdns = true; # Allows software to use Avahi to resolve. + # enable = true; + # publish = { + # enable = true; + # addresses = true; + # workstation = true; + # }; + #}; } diff --git a/examples/hpcg.nix b/examples/hpcg.nix new file mode 100644 index 0000000..100f118 --- /dev/null +++ b/examples/hpcg.nix @@ -0,0 +1,32 @@ +{ lib, stdenv, fetchFromGitHub, cmake } : + +stdenv.mkDerivation rec { + pname = "hpcg"; + version = "114602d"; + + src = fetchFromGitHub { + owner = "hpcg-benchmark"; + repo = pname; + rev = "114602d458d1034faa52b71e4c15aba9b3a17698"; + hash = "sha256-n+Qz0G630SyG3v1E1buwjHO8t779tq2TbWBcAjwwvxw="; + }; + + nativeBuildInputs = [ cmake ]; + enableParallelBuilding = true; + + installPhase = '' + mkdir -p $out/bin $out/share/hpcg + + cp xhpcg $out/bin + #cp hpcg.dat $out/share/hpcg + ''; + + meta = with lib; { + description = "HPC conjugate gradient benchmark"; + homepage = "https://www.hpcg-benchmark.org"; + platforms = platforms.linux; + license = licenses.bsd3; + maintainers = [ maintainers.markuskowa ]; + }; +} + diff --git a/flake.lock b/flake.lock index bfa06b0..cb0567c 100644 --- a/flake.lock +++ b/flake.lock @@ -1,110 +1,5 @@ { "nodes": { - "jh7100_ddrinit": { - "flake": false, - "locked": { - "narHash": "sha256-pOlg3FtFdFhHHnE16izS26RkJ7RbQpglDKgpVRdyAso=", - "type": "file", - "url": "https://github.com/starfive-tech/JH7100_ddrinit/releases/download/ddrinit-2133-211102/ddrinit-2133-211102.bin.out" - }, - "original": { - "type": "file", - "url": "https://github.com/starfive-tech/JH7100_ddrinit/releases/download/ddrinit-2133-211102/ddrinit-2133-211102.bin.out" - } - }, - "jh7100_recovery_binary": { - "flake": false, - "locked": { - "narHash": "sha256-T3vqaelqwXiOqD8yRHw899A5GI2J+hU/5l5S3euIs2g=", - "type": "file", - "url": "https://github.com/starfive-tech/bootloader_recovery/releases/download/JH7100_recovery_binary/jh7100_recovery_boot.bin" - }, - "original": { - "type": "file", - "url": "https://github.com/starfive-tech/bootloader_recovery/releases/download/JH7100_recovery_binary/jh7100_recovery_boot.bin" - } - }, - "jh7100_secondBoot": { - "flake": false, - "locked": { - "narHash": "sha256-Ek8RK8t3y9JfpVfey1X9yZn9OIbOj/EJokUeWbZWZGU=", - "type": "file", - "url": "https://github.com/starfive-tech/JH7100_secondBoot/releases/download/bootloader-211102_VisionFive_JH7100/bootloader-JH7100-211102.bin.out" - }, - "original": { - "type": "file", - "url": "https://github.com/starfive-tech/JH7100_secondBoot/releases/download/bootloader-211102_VisionFive_JH7100/bootloader-JH7100-211102.bin.out" - } - }, - "jh7110-kernel": { - "flake": false, - "locked": { - "lastModified": 1673450975, - "narHash": "sha256-o1k1UDUXUsRb4200zZ5ozVL15g7wsheet8O5UhX2HWY=", - "owner": "starfive-tech", - "repo": "linux", - "rev": "59cf9af678dbfa3d73f6cb86ed1ae7219da9f5c9", - "type": "github" - }, - "original": { - "owner": "starfive-tech", - "ref": "JH7110_VisionFive2_devel", - "repo": "linux", - "type": "github" - } - }, - "jh7110_recovery_binary": { - "flake": false, - "locked": { - "narHash": "sha256-WL2ltlIJoWQFrRxEQNYQdzBBj0qv9FnMWLHVZVzWzBQ=", - "type": "file", - "url": "https://github.com/starfive-tech/Tools/blob/bc6dc7e33e0c2466db0476b5043f0f77842f98f0/recovery/jh7110-recovery-20221205.bin?raw=true" - }, - "original": { - "type": "file", - "url": "https://github.com/starfive-tech/Tools/blob/bc6dc7e33e0c2466db0476b5043f0f77842f98f0/recovery/jh7110-recovery-20221205.bin?raw=true" - } - }, - "jh7110_u-boot-bin": { - "flake": false, - "locked": { - "narHash": "sha256-DfB8HpWv+/i+fdGvF6oGVVgc+A+LV5NA8PZ1JSOSuys=", - "type": "file", - "url": "https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.8.0/visionfive2_fw_payload.img" - }, - "original": { - "type": "file", - "url": "https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.8.0/visionfive2_fw_payload.img" - } - }, - "jh7110_u-boot-spl-bin": { - "flake": false, - "locked": { - "narHash": "sha256-Mgw6YUn69MNvgZFd1WvamF0N1ZjF35km76i1AknaAT8=", - "type": "file", - "url": "https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.8.0/u-boot-spl.bin.normal.out" - }, - "original": { - "type": "file", - "url": "https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.8.0/u-boot-spl.bin.normal.out" - } - }, - "jh71xx-tools": { - "flake": false, - "locked": { - "lastModified": 1644591616, - "narHash": "sha256-eCOI/kYmkSxL4HPqBPoJFWa6qJwqafPOxS8KhIuMF4s=", - "owner": "xypron", - "repo": "jh71xx-tools", - "rev": "afe3328923d6c3883886a00c4ed10eda019f2db1", - "type": "github" - }, - "original": { - "owner": "xypron", - "repo": "jh71xx-tools", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1657645802, @@ -123,14 +18,6 @@ }, "root": { "inputs": { - "jh7100_ddrinit": "jh7100_ddrinit", - "jh7100_recovery_binary": "jh7100_recovery_binary", - "jh7100_secondBoot": "jh7100_secondBoot", - "jh7110-kernel": "jh7110-kernel", - "jh7110_recovery_binary": "jh7110_recovery_binary", - "jh7110_u-boot-bin": "jh7110_u-boot-bin", - "jh7110_u-boot-spl-bin": "jh7110_u-boot-spl-bin", - "jh71xx-tools": "jh71xx-tools", "nixpkgs": "nixpkgs", "vendor-kernel": "vendor-kernel" } diff --git a/flake.nix b/flake.nix index a346b1c..fb72dce 100644 --- a/flake.nix +++ b/flake.nix @@ -7,44 +7,8 @@ url = "github:starfive-tech/linux"; flake = false; }; - jh7100_ddrinit = { - url = "https://github.com/starfive-tech/JH7100_ddrinit/releases/download/ddrinit-2133-211102/ddrinit-2133-211102.bin.out"; - flake = false; - }; - jh7100_secondBoot = { - url = "https://github.com/starfive-tech/JH7100_secondBoot/releases/download/bootloader-211102_VisionFive_JH7100/bootloader-JH7100-211102.bin.out"; - flake = false; - }; - jh7100_recovery_binary = { - url = "https://github.com/starfive-tech/bootloader_recovery/releases/download/JH7100_recovery_binary/jh7100_recovery_boot.bin"; - flake = false; - }; - jh71xx-tools = { - url = "github:xypron/jh71xx-tools"; - flake = false; - }; - - # VisionFive 2 - jh7110-kernel = { - # url = "github:starfive-tech/linux/50a831018ed997c9fb3b603574176b221a28aa12"; # JH7110_VisionFive2_devel via VisionFive2 project submodule about two revisions back. - url = "github:starfive-tech/linux/JH7110_VisionFive2_devel"; - flake = false; - }; - jh7110_recovery_binary = { - url = "https://github.com/starfive-tech/Tools/blob/bc6dc7e33e0c2466db0476b5043f0f77842f98f0/recovery/jh7110-recovery-20221205.bin?raw=true"; - flake = false; - }; - # Should be possible to build from https://github.com/starfive-tech/VisionFive2 - jh7110_u-boot-spl-bin = { - url = https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.8.0/u-boot-spl.bin.normal.out; - flake = false; - }; - jh7110_u-boot-bin = { - url = https://github.com/starfive-tech/VisionFive2/releases/download/VF2_v2.8.0/visionfive2_fw_payload.img; - flake = false; - }; }; - outputs = inputs@{ self, nixpkgs, jh71xx-tools, jh7100_recovery_binary, jh7100_secondBoot, jh7100_ddrinit, vendor-kernel, ... }: + outputs = { self, nixpkgs, vendor-kernel, ... }: let inherit (nixpkgs) lib; system = "x86_64-linux"; @@ -55,16 +19,16 @@ ./base.nix ./configuration.nix ]; - - # Pass arguments to a module inside a function inside a file, while preserving - # the file name behavior of the module system. - importApply = - modulePath: staticArgs: - lib.setDefaultModuleLocation modulePath (import modulePath staticArgs); in { overlay = final: prev: { - linuxPackages_visionfive = final.linuxPackagesFor ((final.callPackage ./kernel.nix { inherit vendor-kernel; }).override { patches = []; }); + linuxPackages_visionfive = final.linuxPackagesFor ( + ( + final.callPackage ./kernel.nix { inherit vendor-kernel; } + ).override { + patches = []; + } + ); }; legacyPackages.${system} = { @@ -77,10 +41,6 @@ visionfive2-cross = self.nixosConfigurations.visionfive2-cross.config.system.build.sdImage; visionfive2-native = self.nixosConfigurations.visionfive2-native.config.system.build.sdImage; }; - nixosModules = { - visionfive2-sd-image = importApply ./visionfive2/sd-image.nix { inherit inputs importApply; }; - visionfive2-kernel = importApply ./visionfive2/kernel/nixos-module.nix { inherit inputs importApply; }; - }; nixosConfigurations = { visionfive-cross = nixpkgs.lib.nixosSystem { system = "${system}"; diff --git a/kernel.nix b/kernel.nix index 1063444..0105dfa 100644 --- a/kernel.nix +++ b/kernel.nix @@ -38,6 +38,23 @@ in buildLinux (args // { PTP_1588_CLOCK = yes; STMMAC_ETH = yes; STMMAC_PCI = yes; + + # For qemu + BLOCK = yes; + BLK_DEV = yes; + DEVTMPFS = yes; + VIRTIO_MENU = yes; + VIRTIO_BLK = yes; + + # For 9P: https://wiki.qemu.org/Documentation/9psetup + NET_9P = yes; + NET_9P_VIRTIO = yes; + NET_9P_DEBUG = yes; + "9P_FS" = yes; + "9P_FS_POSIX_ACL" = yes; + PCI = yes; + VIRTIO_PCI = yes; + PCI_HOST_GENERIC = yes; }; extraMeta = { diff --git a/run-visionfive-nix-vm.sh b/run-visionfive-nix-vm.sh index 5decffc..1e0f94c 100755 --- a/run-visionfive-nix-vm.sh +++ b/run-visionfive-nix-vm.sh @@ -2,13 +2,16 @@ set -e +export PATH=/nix/store/c5xwy0rllg4lcw61mh20glairjz7ibv4-qemu-8.0.4/bin/:$PATH + NIX_DISK_IMAGE=$(readlink -f "${NIX_DISK_IMAGE:-./visionfive-nix.qcow2}") if ! test -e "$NIX_DISK_IMAGE"; then - /nix/store/gn94kgxqg9wv7y9cjkkavv2626sbq5vz-qemu-host-cpu-only-riscv64-unknown-linux-gnu-7.0.0/bin/qemu-img create -f qcow2 "$NIX_DISK_IMAGE" \ - 1024M + qemu-img create -f qcow2 "$NIX_DISK_IMAGE" 1024M fi +echo "NIX_DISK_IMAGE = $NIX_DISK_IMAGE" + # Create a directory for storing temporary data of the running VM. if [ -z "$TMPDIR" ] || [ -z "$USE_TMPDIR" ]; then TMPDIR=$(mktemp -d nix-vm.XXXXXXXXXX --tmpdir) @@ -19,33 +22,43 @@ fi # Create a directory for exchanging data with the VM. mkdir -p "$TMPDIR/xchg" +system=$(readlink -f ./current-system) +echo $system +sleep 1 cd "$TMPDIR" -QEMU_KERNEL_PARAMS="boot.trace " +#QEMU_KERNEL_PARAMS="boot.debug1devices" +#QEMU_KERNEL_PARAMS="boot.trace boot.debug1" + # Start QEMU. -exec /nix/store/c5xwy0rllg4lcw61mh20glairjz7ibv4-qemu-8.0.4/bin/qemu-system-riscv64 \ +exec qemu-system-riscv64 \ -name visionfive-nix \ -m 1024 \ -smp 1 \ -nographic \ -machine virt \ -device virtio-rng-pci \ - -net nic,netdev=user.0,model=virtio -netdev user,id=user.0,"$QEMU_NET_OPTS" \ + -netdev user,id=net0,hostfwd=tcp::60022-:22 -device virtio-net-device,netdev=net0 \ -virtfs local,path=/nix/store,security_model=none,mount_tag=nix-store \ -virtfs local,path="${SHARED_DIR:-$TMPDIR/xchg}",security_model=none,mount_tag=shared \ -virtfs local,path="$TMPDIR"/xchg,security_model=none,mount_tag=xchg \ - -hda "$NIX_DISK_IMAGE" \ -device virtio-keyboard \ - -kernel ${NIXPKGS_QEMU_KERNEL_visionfive_nix:-/nix/store/y0912x26b1fxrs0d8yfzsznak56pk2c8-nixos-system-visionfive-nix-22.11.20220712.39a827f/kernel} \ - -initrd /nix/store/y0912x26b1fxrs0d8yfzsznak56pk2c8-nixos-system-visionfive-nix-22.11.20220712.39a827f/initrd \ - -append "$(cat /nix/store/y0912x26b1fxrs0d8yfzsznak56pk2c8-nixos-system-visionfive-nix-22.11.20220712.39a827f/kernel-params) init=/nix/store/y0912x26b1fxrs0d8yfzsznak56pk2c8-nixos-system-visionfive-nix-22.11.20220712.39a827f/init regInfo=/nix/store/x3zpwfbk2wkiisxhgi7zwsfwbdfxk0w1-closure-info-riscv64-unknown-linux-gnu/registration console=ttyS0,115200n8 loglevel=7 $QEMU_KERNEL_PARAMS" \ + -drive "file=$NIX_DISK_IMAGE,if=none,id=hd0" \ + -device virtio-blk-device,drive=hd0 \ + -kernel $system/kernel \ + -initrd $system/initrd \ + -append "$(cat $system/kernel-params) init=$system/init regInfo=/nix/store/x3zpwfbk2wkiisxhgi7zwsfwbdfxk0w1-closure-info-riscv64-unknown-linux-gnu/registration console=ttyS0,115200n8 loglevel=7 $QEMU_KERNEL_PARAMS" \ $QEMU_OPTS \ "$@" +# -drive "file=$NIX_DISK_IMAGE,if=virtio,id=hd0" \ +# -hda "$NIX_DISK_IMAGE" \ +#-net nic,model=virtio,macaddr=16:da:11:b4:44:c9 -net user \ +# -net nic,netdev=user.0,model=virtio -netdev user,id=user.0,"$QEMU_NET_OPTS" \ #console=tty0 #console=ttyS0,115200n8 #