OpenBSD 7.2 on ODROID-C4 (eMMC)
Installing OpenBSD on the ODROID-C4 single board computer - small guide to not forget it again.
Hardware
The CPU is decent 4-core 1.9GHz ARM Cortex-A55 that doesn’t run hot and the stock heatsink is being quite sufficient.
4 gigabytes of DDR4 RAM.
xhci(4) ports work too so usb 3.0 hard drive performs well.
Network card is a proper dwge(4) gigabit ethernet that works too.
Caveats
HDMI framebuffer seems to not work at the moment with OpenBSD but that does not bother me much since I’m using this machine as a DHCP/DNS/Samba server.
MicroSD support is wobbly at best; it works as a boot device but doesn’t get initialized by OpenBSD kernel; since I’m using eMMC module I didn’t care as much but beware - if the uSD is the only root media you’ve got it might not be so easy.
There is no wireless card/chip onboard at all; use usb dongle if needed such as EDIMAX EW-7811UN v2 (works good with OpenBSD)
Tools needed
- microsd sufficient to write an OpenBSD miniroot image
- usb flash drive to write a full install image with file sets and u-boot
- usb-uart adapter such as CH341 or similar; 3.3V only!
- host machine to hook the adapter into.
Files to download
-
arm64 install72.img
-
arm64 miniroot72.img
-
a patched u-boot since the stock image doesn’t support this board natively:
https://sibelius.home.xs4all.nl/firmware/odroid-hc4/u-boot.bin.sd.bin
Backup link: u-boot.bin.sd.bin
Actual steps
Write a miniroot image onto microsd(N): dd if=miniroot72.img of=/dev/sdNc bs=1m
Write an install image onto flashdrive(M): dd if=install72.img of=/dev/sdMc bs=1m
Write a patched u-boot onto microsd:
dd if=u-boot.bin.sd.bin of=/dev/sdNc bs=512 skip=1 seek=1
dd if=u-boot.bin.sd.bin of=/dev/sdNc bs=1 count=444
We will need that u-boot file once more after installation so mount the boot partition of the USB flashdrive (!) and copy the file there:
mount /dev/sdMi /mnt/boot
cp u-boot.bin.sd.bin /mnt/boot/
umount /mnt/boot
UART console connector pinout:
_____UART____
|Pin 4 - GND|
|Pin 3 - RXD|
|Pin 2 - TXD|
|Pin 1 - VCC|
\___________|
Connect to the UART terminal: cu -l /dev/cuaU0 -s 115200
Board will boot from that microsd properly but won’t be able to use it afterwards; use preset usb flash drive to fetch the filesets or load them with network connected.
General OpenBSD installation proceeds; nothing tricky or unusual, but we will need to dump the patched u-boot onto eMMC after installation is finished once more; just don’t reboot afterwards, drop into shell, mount the boot partition from the usb flashdrive and use the u-boot file copied there beforehand to write onto eMMC with offsets same as before.
dmesg
OpenBSD 7.2 (GENERIC.MP) #2: Thu Nov 24 23:53:03 MST 2022 root@syspatch-72-arm64.openbsd.org:/usr/src/sys/arch/arm64/compile/GENERIC.MP real mem = 4103942144 (3913MB) avail mem = 3900149760 (3719MB) random: good seed from bootblocks mainbus0 at root: Hardkernel ODROID-C4 psci0 at mainbus0: PSCI 1.0, SMCCC 1.1, SYSTEM_SUSPEND cpu0 at mainbus0 mpidr 0: ARM Cortex-A55 r1p0 cpu0: 32KB 64b/line 4-way L1 VIPT I-cache, 32KB 64b/line 4-way L1 D-cache cpu0: 512KB 64b/line 16-way L2 cache cpu0: DP,RDM,Atomic,CRC32,SHA2,SHA1,AES+PMULL,LRCPC,DPB,ASID16,PAN+ATS1E1,LO,HPDS,HAFDBS cpu1 at mainbus0 mpidr 1: ARM Cortex-A55 r1p0 cpu1: 32KB 64b/line 4-way L1 VIPT I-cache, 32KB 64b/line 4-way L1 D-cache cpu1: 512KB 64b/line 16-way L2 cache cpu1: DP,RDM,Atomic,CRC32,SHA2,SHA1,AES+PMULL,LRCPC,DPB,ASID16,PAN+ATS1E1,LO,HPDS,HAFDBS cpu2 at mainbus0 mpidr 2: ARM Cortex-A55 r1p0 cpu2: 32KB 64b/line 4-way L1 VIPT I-cache, 32KB 64b/line 4-way L1 D-cache cpu2: 512KB 64b/line 16-way L2 cache cpu2: DP,RDM,Atomic,CRC32,SHA2,SHA1,AES+PMULL,LRCPC,DPB,ASID16,PAN+ATS1E1,LO,HPDS,HAFDBS cpu3 at mainbus0 mpidr 3: ARM Cortex-A55 r1p0 cpu3: 32KB 64b/line 4-way L1 VIPT I-cache, 32KB 64b/line 4-way L1 D-cache cpu3: 512KB 64b/line 16-way L2 cache cpu3: DP,RDM,Atomic,CRC32,SHA2,SHA1,AES+PMULL,LRCPC,DPB,ASID16,PAN+ATS1E1,LO,HPDS,HAFDBS efi0 at mainbus0: UEFI 2.9 efi0: Das U-Boot rev 0x20230100 apm0 at mainbus0 amlsm0 at mainbus0: ver 2 pwmreg0 at mainbus0 "efuse" at mainbus0 not configured "gpu-opp-table" at mainbus0 not configured simplebus0 at mainbus0: "soc" ampintc0 at simplebus0 nirq 256, ncpu 4 ipi: 0, 1, 2: "interrupt-controller" dwge0 at simplebus0: rev 0x37, address 00:1e:06:48:9d:6c rgephy0 at dwge0 phy 0: RTL8169S/8110S/8211 PHY, rev. 6 simplebus1 at simplebus0: "bus" "hdmi-tx" at simplebus1 not configured simplebus2 at simplebus1: "bus" amlrng0 at simplebus2 simplebus3 at simplebus1: "bus" amlpinctrl0 at simplebus3 amltemp0 at simplebus1 amltemp1 at simplebus1 amlusbphy0 at simplebus1 simplebus4 at simplebus1: "bus" amlusbphy1 at simplebus1 simplebus5 at simplebus1: "bus" syscon0 at simplebus5: "system-controller" amlclock0 at syscon0 amlpwrc0 at syscon0 amlpciephy0 at simplebus1 "mdio-multiplexer" at simplebus1 not configured simplebus6 at simplebus1: "bus" "clock-controller" at simplebus6 not configured "audio-controller" at simplebus6 not configured "audio-controller" at simplebus6 not configured "audio-controller" at simplebus6 not configured "reset-controller" at simplebus6 not configured "audio-controller" at simplebus6 not configured "audio-controller" at simplebus6 not configured simplebus7 at simplebus0: "bus" syscon1 at simplebus7: "sys-ctrl" amlpinctrl1 at syscon1 "clock-controller" at syscon1 not configured syscon2 at simplebus7: "ao-secure" "rtc" at simplebus7 not configured amlpwm0 at simplebus7 amluart0 at simplebus7: console "ir" at simplebus7 not configured "adc" at simplebus7 not configured "video-decoder" at simplebus0 not configured "vpu" at simplebus0 not configured simplebus8 at simplebus0: "bus" amlreset0 at simplebus8 "interrupt-controller" at simplebus8 not configured "watchdog" at simplebus8 not configured "clock-measure" at simplebus8 not configured amlmmc0 at simplebus0 sdmmc0 at amlmmc0: 4-bit, sd high-speed, sdr50, dma amlmmc1 at simplebus0 sdmmc1 at amlmmc1: 8-bit, mmc high-speed, ddr52, hs200, dma amldwusb0 at simplebus0: "usb" "usb" at amldwusb0 not configured xhci0 at amldwusb0, xHCI 1.10 usb0 at xhci0: USB revision 3.0 uhub0 at usb0 configuration 1 interface 0 "Generic xHCI root hub" rev 3.00/1.00 addr 1 "gpu" at simplebus0 not configured agtimer0 at mainbus0: 24000 kHz "xtal-clk" at mainbus0 not configured "audio-controller-1" at mainbus0 not configured "opp-table" at mainbus0 not configured "emmc-pwrseq" at mainbus0 not configured "regulator-tflash_vdd" at mainbus0 not configured "gpio-regulator-tf_io" at mainbus0 not configured "regulator-flash_1v8" at mainbus0 not configured "regulator-main_12v" at mainbus0 not configured "regulator-vcc_5v" at mainbus0 not configured "regulator-vcc_1v8" at mainbus0 not configured "regulator-vcc_3v3" at mainbus0 not configured "regulator-usb_pwr_en" at mainbus0 not configured "regulator-vddao_1v8" at mainbus0 not configured "regulator-vddao_3v3" at mainbus0 not configured "hdmi-connector" at mainbus0 not configured "sound" at mainbus0 not configured gpioleds0 at mainbus0: no LEDs simplefb0 at mainbus0: 720x576, 32bpp wsdisplay0 at simplefb0 mux 1 wsdisplay0: screen 0-5 added (std, vt100 emulation) scsibus0 at sdmmc1: 2 targets, initiator 0 sd0 at scsibus0 targ 1 lun 0:removable sd0: 59000MB, 512 bytes/sector, 120832000 sectors uhub1 at uhub0 port 1 configuration 1 interface 0 "VIA Labs, Inc. USB2.0 Hub" rev 2.10/90.33 addr 2 uhub2 at uhub0 port 3 configuration 1 interface 0 "VIA Labs, Inc. USB3.0 Hub" rev 3.10/90.33 addr 3 umass0 at uhub2 port 3 configuration 1 interface 0 "ULT-Best Best USB Device" rev 3.00/1.00 addr 4 umass0: using SCSI over Bulk-Only scsibus1 at umass0: 2 targets, initiator 0 sd1 at scsibus1 targ 1 lun 0: serial.174c55aa000090000454 sd1: 953869MB, 512 bytes/sector, 1953525168 sectors vscsi0 at root scsibus2 at vscsi0: 256 targets softraid0 at root scsibus3 at softraid0: 256 targets root on sd0a (d9c20a8284a9197b.a) swap on sd0b dump on sd0b WARNING: / was not properly unmounted WARNING: CHECK AND RESET THE DATE!
Links & Sources
https://www.mail-archive.com/arm@openbsd.org/msg02484.html https://wiki.odroid.com/odroid-c4/getting_started/os_installation_guide https://wiki.odroid.com/odroid-c4/hardware/hardware#board_layout https://www.openbsd.org/faq/faq4.html#Download