Hardware:
-
uConsole (ClockworkPi)
-
Host OS PC x86 with Arch linux
-
Radxa CM5 compute module
-
Booting from microSD
Goal
Boot Arch Linux ARM using a self-built kernel (from @Rex ak-rex/ClockworkRadxa-linux) and overlays from @_dev-null dev-null2019/radxa-cm5-uconsole.
Steps I took (Host: Arch Linux x86_64)
sudo pacman -Syu
sudo pacman -S base-devel git bc flex bison openssl ncurses dtc uboot-tools dwarves aarch64-linux-gnu-gcc dtc
sudo pacman -Syu --needed base-devel git bc flex bison dtc openssl ncurses \
aarch64-linux-gnu-gcc uboot-tools
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
mkdir ~/cm5
cd ~/cm5
git clone --depth=1 -b linux-6.1-stan-rkr4.1 https://github.com/ak-rex/ClockworkRadxa-linux.git
cd ClockworkRadxa-linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_linux_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image modules dtbs
ls -l \
/home/doraemon/cm5/ClockworkRadxa-linux/include/dt-bindings/interrupt-controller/irq.h \
/home/doraemon/cm5/ClockworkRadxa-linux/include/dt-bindings/gpio/gpio.h \
/home/doraemon/cm5/ClockworkRadxa-linux/include/dt-bindings/pinctrl/rockchip.h
Overlays
cd ~/cm5
git clone https://github.com/dev-null2019/radxa-cm5-uconsole.git
cd radxa-cm5-uconsole/devicetree_overlays
ls -1 *.dts
cd /home/doraemon/cm5/radxa-cm5-uconsole/devicetree_overlays
mkdir -p build
sed -n '1,2p' axp20x.dts; sed -n '1,2p' cwu50_panel.dts; sed -n '1,2p' displaystuff.dts
cpp -P -nostdinc \
-I /home/doraemon/cm5/ClockworkRadxa-linux/include \
-I /home/doraemon/cm5/ClockworkRadxa-linux/scripts/dtc/include-prefixes \
-I /home/doraemon/cm5/ClockworkRadxa-linux/arch/arm64/boot/dts \
-I /home/doraemon/cm5/ClockworkRadxa-linux/arch/arm64/boot/dts/rockchip \
-I /home/doraemon/cm5/radxa-cm5-uconsole/devicetree_overlays \
-I /home/doraemon/cm5/radxa-cm5-uconsole/devicetree_overlays/dt-bindings \
-undef -x assembler-with-cpp \
axp20x.dts > build/axp20x.pp.dts
dtc -@ -I dts -O dtb -o build/axp20x.dtbo build/axp20x.pp.dts
for f in cwu50_panel.dts displaystuff.dts; do
base=${f%.dts}
cpp -P -nostdinc \
-I /home/doraemon/cm5/ClockworkRadxa-linux/include \
-I /home/doraemon/cm5/ClockworkRadxa-linux/scripts/dtc/include-prefixes \
-I /home/doraemon/cm5/ClockworkRadxa-linux/arch/arm64/boot/dts \
-I /home/doraemon/cm5/ClockworkRadxa-linux/arch/arm64/boot/dts/rockchip \
-I /home/doraemon/cm5/radxa-cm5-uconsole/devicetree_overlays \
-I /home/doraemon/cm5/radxa-cm5-uconsole/devicetree_overlays/dt-bindings \
-undef -x assembler-with-cpp \
"$f" > "build/${base}.pp.dts"
dtc -@ -I dts -O dtb -o "build/${base}.dtbo" "build/${base}.pp.dts"
done
ls -lh build/*.dtbo
Arch rootfs + kernel install
sudo fdisk /dev/sdX
sudo mkfs.vfat -F32 /dev/sdX1
sudo mkfs.ext4 /dev/sdX2
sudo mkdir -p /mnt/archroot/boot
sudo mount /dev/sdX2 /mnt/archroot
sudo mount /dev/sdX1 /mnt/archroot/boot
wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt/archroot
sudo tee /mnt/archroot/etc/fstab <<'EOF'
/dev/mmcblk0p1 /boot vfat defaults,noatime 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
EOF
cd ~/cm5/ClockworkRadxa-linux
sudo cp arch/arm64/boot/Image /mnt/archroot/boot/Image
sudo mkdir -p /mnt/archroot/boot/dtbs/rockchip
sudo cp arch/arm64/boot/dts/rockchip/rk3588s-radxa-cm5*.dtb /mnt/archroot/boot/dtbs/rockchip/
sudo cp -r ../cm5-modules/lib/modules/* /mnt/archroot/lib/modules/
sudo mkdir -p /mnt/archroot/boot/overlays
sudo cp ~/cm5/radxa-cm5-uconsole/devicetree_overlays/build/*.dtbo /mnt/archroot/boot/overlays/
sudo mkdir -p /mnt/archroot/boot/extlinux
sudo tee /mnt/archroot/boot/extlinux/extlinux.conf <<'EOF'
timeout 5
default ArchLinuxARM
label ArchLinuxARM
kernel /Image
fdt /dtbs/rockchip/rk3588s-radxa-cm5-io.dtb
fdtoverlays /overlays/axp20x.dtbo /overlays/cwu50_panel.dtbo /overlays/displaystuff.dtbo
append root=/dev/mmcblk0p2 rw rootwait console=ttyS2,1500000n8 console=tty1
EOF
sync
sudo umount /mnt/archroot/boot
sudo umount /mnt/archroot
References
-
https://forum.clockworkpi.com/t/bookworm-6-1-y-for-the-radxa-cm5-uconsole/16315
-
https://forum.clockworkpi.com/t/uconsole-radxa-cm5-image/15375
(but the second link uses .deb kernel packages Iâm trying to build from source instead)
Issue
After following the above steps, the board does not show anything on screen (no splash, no output).
I donât have a UART cable.
Questions
-
Do I also need to flash U-Boot for the CM5 to boot from SD?
- Can it load U-Boot from SD, or must there be a bootloader on SPI/eMMC?
-
Is
rk3588s-radxa-cm5-io.dtbthe correct base DTB for the uConsole mainboard? -
Are these the correct overlays and order?
/overlays/axp20x.dtbo /overlays/cwu50_panel.dtbo /overlays/displaystuff.dtbo
I just want to confirm whether Iâm missing a required U-Boot step, or if my DTB/overlay setup is wrong.
Thanks for any pointers!