Go to file
Rodrigo Arias Mallo 3707e5708e Disable EFI in the kernel and use normal stdenv
In order to build the kernel without compressed instructions we need to
disable EFI support. We also need to leave the kernel to figure the
proper -march and -mabi flags, as otherwise it fails to build. Using the
option "CONFIG_RISCV_ISA_C n" disables the use of compressed
instructions.
2024-01-22 13:37:00 +01:00
examples Booting 2023-11-29 10:48:59 +01:00
visionfive2 visionfive2: Explain kernel situation 2023-02-16 13:30:40 +01:00
.gitignore init 2022-07-09 04:35:35 +01:00
base.nix Booting 2023-11-29 10:48:59 +01:00
boot.sh Increase SMP CPUs to 32 2024-01-19 13:43:14 +01:00
configuration.nix Add default user and serial boot parameters 2024-01-19 13:43:32 +01:00
flake.lock Boot opensbi without compressed 2024-01-17 18:22:30 +01:00
flake.nix Booting Linux and userspace OK 2024-01-19 12:35:05 +01:00
kernel.nix Disable kernel oprtions 2024-01-17 15:00:51 +01:00
old-flake.lock Boot opensbi without compressed 2024-01-17 18:22:30 +01:00
old-flake.nix Boot opensbi without compressed 2024-01-17 18:22:30 +01:00
overlay.nix Disable EFI in the kernel and use normal stdenv 2024-01-22 13:37:00 +01:00
README.md Add notes about compressed instructions 2024-01-19 16:27:58 +01:00
vm.nix Booting Linux and userspace OK 2024-01-19 12:35:05 +01:00

NixOS on RISC-V

To boot the system in QEMU, first enter the development shell:

$ nix develop

Then run the boot script:

$ ./boot.sh

In u-boot use the following to boot:

=> booti 0x84000000 - ${fdtcontroladdr} 

Use more than 1 CPU

With only 1 CPU some thigs are soo slow to work. For example, the ttyS0 device doesn't arrive on time and the login fails. Or the SSH daemon doesn't start until the third try. With -smp 32 seems to work ok.

Compressed instructions

To see if a binary has compressed instructions or not, you can use objdump:

hut% nix shell -vL nixpkgs#pkgsCross.riscv64.bintools
hut% objdump -M no-aliases -D result/u-boot | grep 'c\.' | head -5
    80200000:   822a                    c.mv    tp,a0
    80200002:   84ae                    c.mv    s1,a1
    80200018:   52c1                    c.li    t0,-16
    8020001e:   0356                    c.slli  t1,0x15
    80200024:   850a                    c.mv    a0,sp

To dump a ROM without the ELF header:

hut% objdump -b binary -m riscv:rv64 -M no-aliases -D result/u-boot.bin