Rodrigo Arias Mallo
3707e5708e
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. |
||
---|---|---|
examples | ||
visionfive2 | ||
.gitignore | ||
base.nix | ||
boot.sh | ||
configuration.nix | ||
flake.lock | ||
flake.nix | ||
kernel.nix | ||
old-flake.lock | ||
old-flake.nix | ||
overlay.nix | ||
README.md | ||
vm.nix |
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