This repository has been archived by the owner on Dec 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: use emulated system for everything else except the kernel docs: update README for both U-boot & UEFI
- Loading branch information
Showing
17 changed files
with
485 additions
and
296 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
# U-Boot | ||
|
||
Here we describe how to use U-Boot to boot NixOS on RK3588/RK3588s based SBCs. | ||
|
||
## 1. Flash U-Boot to SPI flash | ||
|
||
You should get the uboot from the vendor and flash it to the SPI flash before doing anything NixOS | ||
|
||
1. [Armbian on Orange Pi 5 / Orange Pi 5 Plus](https://www.armbian.com/orange-pi-5/) as an example: | ||
1. download the image and flash it to a sd card first | ||
2. boot the board with the sd card, and then run `sudo armbian-install` to flash the uboot to the SPI flash(maybe named as `MTD devices`) | ||
|
||
For Rock 5A, we've bundled the uboot into the sdImage, so you don't need to flash it into the SPI flash manually. | ||
|
||
## 2. Flash NixOS | ||
|
||
There're two ways to flash NixOS to the board: | ||
|
||
1. Flash NixOS to SD card | ||
2. Flash NixOS into SSD/eMMC | ||
|
||
## 2.1. Flash NixOS to SD card | ||
|
||
This is the common way to flash NixOS to the board. | ||
|
||
Build an sdImage by `nix build`, and then flash it to a SD card using `dd`(please replace `/dev/sdX` with the correct device name of your sd card): | ||
|
||
> **Instead of build from source, you can also download the prebuilt image from [Releases](https://github.com/ryan4yin/nixos-rk3588/releases)**. | ||
```shell | ||
# for orange pi 5 plus | ||
nix build .#sdImage-opi5plus | ||
zstdcat result/sd-image/orangepi5plus-sd-image-*.img.zst | sudo dd status=progress bs=8M of=/dev/sdX | ||
|
||
# for orange pi 5 | ||
nix build .#sdImage-opi5 | ||
zstdcat result/sd-image/orangepi5-sd-image-*.img.zst | sudo dd status=progress bs=8M of=/dev/sdX | ||
``` | ||
|
||
For Rock 5A, it requires a little more work to flash the image to the sd card: | ||
|
||
> The prebuilt image has been repaired before uploading, so you can use it directly. | ||
```shell | ||
nix build .#sdImage-rock5a | ||
zstd -d result/sd-image/rock5a-sd-image-*.img.zst -o rock5a.img | ||
|
||
# increase img's file size | ||
dd if=/dev/zero bs=1M count=16 >> rock5a.img | ||
sudo losetup --find --partscan rock5a.img | ||
|
||
nix shell nixpkgs#parted | ||
## rock 5a's u-boot require to use gpt partition table, and the root partition must be the first partition! | ||
## so we need to remove all the partitions on the sd card first | ||
## and then recreate the root partition with the same start sector as the original partition 2 | ||
START=$(sudo fdisk -l /dev/loop0 | grep /dev/loop0p2 | awk '{print $2}') | ||
sudo parted /dev/loop0 rm 1 | ||
sudo parted /dev/loop0 rm 2 | ||
sudo parted /dev/loop0 mkpart primary ext4 ${START}s 100% | ||
|
||
# check rootfs's status, it's broken. | ||
sudo fsck /dev/loop0p1 | ||
|
||
# umount the image file | ||
sudo losetup -d /dev/loop0 | ||
|
||
|
||
# flash the image to the sd card | ||
cat rock5a.img | sudo dd status=progress bs=8M of=/dev/sdX | ||
``` | ||
|
||
1. Insert the sd card to the board, and power on | ||
2. Resize the root partition to the full size of the sd card. | ||
3. Then having fun with NixOS <3. | ||
|
||
Once the system is booted, you can use `nixos-rebuild` to update the system. | ||
|
||
## Flash NixOS into SSD/eMMC | ||
|
||
To flash the image into the board's eMMC / SSD, you need to flash the image into the SD card and start into NixOS first, as SSD / eMMC is not easy to remove and connect to your host. | ||
|
||
Then, use the following command to flash the image into the board's SSD / eMMC: | ||
|
||
```bash | ||
# upload the sdImage to the NixOS system on the board | ||
scp result/sd-image/orangepi5-sd-image-*.img.zst rk@<ip-of-your-board>:~/ | ||
|
||
# login to the board via ssh or serial port | ||
ssh rk@<ip-of-your-board> | ||
|
||
# check all the block devices | ||
# you should see nvme0n1(SSD) | ||
$ lsblk | ||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS | ||
mtdblock0 31:0 0 16M 0 disk | ||
zram0 254:0 0 0B 0 disk | ||
nvme0n1 259:0 0 238.5G 0 disk | ||
...... | ||
|
||
# flash the image into the board's SSD | ||
zstdcat orangepi5-sd-image-*.img.zst | sudo dd bs=4M status=progress of=/dev/nvme0n1 | ||
``` | ||
|
||
After the flash is complete, remove the SD card and reboot, and NixOS should boot from the SSD / eMMC now. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# UEFI | ||
|
||
Here we describe how to use UEFI([edk2-rk3588]) to boot NixOS on RK3588/RK3588s based SBCs. | ||
|
||
## 1. Flash [edk2-rk3588] to SPI flash | ||
|
||
To use UEFI to boot NixOS, you need to flash the UEFI firmware to the SPI flash of the board. | ||
|
||
The steps to do this: | ||
|
||
1. Download the prebuilt UEFI firmware from [edk2-rk3588/releases](https://github.com/edk2-porting/edk2-rk3588/releases). | ||
1. To flash the UEFI firmware to the SPI flash, you need to: | ||
1. Boot the board with a Linux distro that supports your SBC, such as [armbian](https://www.armbian.com/download/) or your SBC's official image. | ||
1. Then use `dd` to flash the UEFI firmware you downloaded to the SPI flash: | ||
```bash | ||
sudo dd if=./xxx-UEFI-xxx.img of=/dev/mtdblock0 | ||
``` | ||
1. Reboot the board, and you should see the UEFI boot menu. | ||
1. In the UEFI boot menu | ||
1. Enter [Device Manager] => [Rockchip Platform Configuration] => [ACPI / Device Tree] | ||
1. Change [Config Table Mode] to `Both`. | ||
1. Change [Device Tree Configuration] => [Support DTB override & overlays] to `Enabled`. | ||
1. Enter [Device Manager] => [Rockchip Platform Configuration] => [PCIe/SATA/USB Combo PIPE PHY] | ||
1. Change all changable `PHY` settings to `PCIe 2.1`. | ||
|
||
|
||
## 2. Flash NixOS to SD card | ||
|
||
This is the common way to flash NixOS to the board. | ||
|
||
First, build the raw efi image: | ||
|
||
> It will takes a long time(about 12mins) to finish, as we have to use the emulated system on x64 host to build the raw efi image. | ||
```bash | ||
# for orange pi 5 | ||
nix build .#rawEfiImage-opi5 --show-trace -L --verbose | ||
|
||
# for orange pi 5 plus | ||
nix build .#rawEfiImage-opi5plus --show-trace -L --verbose | ||
|
||
# for rock 5a | ||
nix build .#rawEfiImage-rock5a --show-trace -L --verbose | ||
``` | ||
|
||
If you encounter issues like [`cannot allocate memory` despite free reporting "available"](https://stackoverflow.com/questions/46464785/cannot-allocate-memory-despite-free-reporting-available) when building the raw efi image, check your `dmesg`, and try to fix it via: | ||
|
||
```bash | ||
echo 1 > /proc/sys/vm/compact_memory | ||
``` | ||
|
||
Then, flash the raw efi image to the board's SSD / SD card: | ||
|
||
> please replace `/dev/sdX` with the correct device name of your sd card | ||
```bash | ||
cat result | sudo dd status=progress bs=8M of=/dev/sdX | ||
``` | ||
|
||
After the flash is complete, remove the SD card and reboot, you should see the UEFI boot menu. | ||
|
||
## 3. Install NixOS into SSD / eMMC via `nixos-install` | ||
|
||
> It's recommend to install your system into SSD / eMMC or a high-speed SD card, otherwise `nixos-install` may take a long time to finish. | ||
It's also possible to install NixOS via `nixos-install`, this will give you a more flexible way to manage your system. | ||
For example, you can use `nixos-install` to install NixOS with LUKS encryption, custom partition layout & filesystem, and with all your favorite packages pre-installed, etc. | ||
|
||
To do this, you need to flash the image into the SD card and start into NixOS first, and then just follow the [official installation guide](https://nixos.org/manual/nixos/stable/#sec-installation-manual). | ||
|
||
[edk2-rk3588]: https://github.com/edk2-porting/edk2-rk3588 |
Binary file not shown.
Oops, something went wrong.