셋업을 시도하면서 찾아본 내용을 정리해본다.
오개념이 있을 수 있다.
직접 부팅을 허용하는 저장소: MicroSD / SPI NOR Flash / eMMC (해당 없음)
- MicroSD 에 U-Boot을 포함한 시스템 이미지를 적어놓은 상태로 그리로 바로 부팅하는 방법
- SPI 에 부트로더 (U-Boot or EDK2)를 올려서 NVMe or MicroSD로 부팅하는 방법
- 부팅 우선순위는 SPI > MicroSD
- AP 내부에 미리 저장된 코드로 부팅하는 모드
- 주로 SPI에 플래시 하기 위해 사용하는 듯 함
- 플래시 순서
- rkdeveloptool db를 통해 SPL Loader를 로딩시켜서 플래시를 할 수 있는 상태로 만든 후
- rkdeveloptool wl 로 SPI에 플래시할 수 있음
-
- 가장 일반적인 컴퓨팅 환경에 근접해보임.
- Rock 5B+ 는 아직 Bronze Support임.
- 이슈를 찾아보니 DMC (Dynamic Memory Controller인 듯)가 작동하지 않는다는 말이 있음
-
U-Boot 버전이 낮다고 함커널 이름 길이나 이런 데에서 문제가 조금씩 있을 수 있다고 함
- 최근에 업데이트가 된 것으로 보임 (확실치 않음)
-
Close-to-Mainline U-Boot (Artifacts)
- Collabora 측에서 Upstreaming을 시도하고 있는 U-Boot
- MicroSD에 U-Boot을 설치하는 방법도 있다는 듯 하다.
- U-Boot도 UEFI 스펙의 일부를 구현하고 있어 UEFI로서 부팅이 가능하다는 듯 하다.
- 시리얼 콘솔에 문제가 있다면 케이블을 체크하자
- 기본 baudrate가 1.5M이라 가지고 있는 케이블로는 안됐었다.
- RADXA Wiki / Install the bootloader to the SPI NOR flash
- RADXA Wiki / Install the image to microSD
- NixOS Wiki / Radxa ROCK5 Model B
- Rockchip(락칩) - 세 가지 부트 모드(Boot Mode) 설명
- RK3588 Mainline U-Boot Instructions
- Mainline DeviceTree가 아직 작성되지 않았다.
- 찾아보니 패치를 보낸 것 같으나 아직 머지가 안된 듯
- 레포를 클론한다.
$ git clone https://gitlab.collabora.com/hardware-enablement/rockchip-3588/u-boot.git
$ git clone https://gitlab.collabora.com/hardware-enablement/rockchip-3588/rkbin.git
- 크로스빌드 환경을 구축한다.
let
nixpkgs = import <nixpkgs> {};
crosspkgs = import <nixpkgs> {
crossSystem = { config = "aarch64-unknown-linux-gnu"; };
};
in
nixpkgs.mkShell {
nativeBuildInputs = (with crosspkgs.buildPackages; [
binutils
bison
flex
gcc
]) ++ (with nixpkgs; [
gnutls
openssl
python312
python312Packages.pip
python312Packages.pyelftools
python312Packages.virtualenv
python312Packages.setuptools
swig
]);
}
- u-boot를 빌드한다.
$ nix-shell
$ cd u-boot
$ make rock5b-rk3588_defconfig
# 빌드한다.
$ export ROCKCHIP_TPL=../rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v1.18.bin
$ export BL31=../rkbin/bin/rk35/rk3588_bl31_v1.47.elf
$ make CROSS_COMPILE="aarch64-unknown-linux-gnu-"
$ ls -alh u-boot.idb idbloader.img
-rw-r--r-- 1 nenw nenw 216K May 6 03:33 idbloader.img
-rw-r--r-- 1 nenw nenw 1.5M May 6 03:33 u-boot.itb
# 기존 이미지에 덮어씌운다.
$ cp ~/rock-5b-spi-image-gd1cf491-20240523-debug.img ./rock-5b-plus-bootloader-20250506.img
$ dd if=idbloader.img of=rock-5b-plus-bootloader-20250506.img seek=64 conv=notrunc
$ dd if=u-boot.itb of=rock-5b-plus-bootloader-20250506.img seek=16384 conv=notrunc
- NixOS Download 에서 Minimal ISO (64-bit ARM) 을 다운로드한다.
- USB에 쓴다.
$ lsblk
# 주의! `/dev/sdX` 를 이전 `lsblk` 에서 알아낸 USB의 디바이스 파일로 교체한다.
# 잘못 수행 시 엉뚱한 디스크가 날아갈 수 있으므로 주의할 것
$ dd if=nixos-minimal-25.05.802674.7848cd8c982f-aarch64-linux.iso of=/dev/sdX bs=4M status=progress conv=fdatasync
Nice work! 👍 Thank you for reproducible builds!