Orange Pi Zero support

Johnny Sorocil jsorocil at gmail.com
Sat Jun 24 11:13:42 UTC 2017


Hi all!

I am trying to run FreeBSD on Orange Pi Zero board (Allwinner H2+ SoC).

I have few questions:
1) How to build vanilla u-boot which will be capable booting FreeBSD
kernel? I have managed to load ubldr, but not the kernel.
2) How to use newer Linux dts/dtb files?

1) u-boot
This is how I built u-boot:
git clone git://git.denx.de/u-boot.git
cd u-boot
git checkout v2017.05
# apply patch so it can be built on FreeBSD (tested on FreeBSD 11.1-BETA1)
(in the attachment)
gmake ARCH=arm CROSS_COMPILE=arm-none-eabi- orangepi_zero_defconfig
gmake -j4 ARCH=arm CROSS_COMPILE=arm-none-eabi-
dd if=u-boot-sunxi-with-spl.bin conv=notrunc,sync of=/dev/mmcsd0 bs=1024
seek=8

In the u-boot prompt:
  fatload mmc 0 0x42000000 ubldr.bin
  setenv fdtfile sun8i-h3-orangepi-one.dtb
  go 0x4200000
ubldr will work as expected, but kernel will hang at the start.
If I use
/usr/local/share/u-boot/u-boot-orangepi-one/u-boot-sunxi-with-spl.bin then
the kernel and userland will boot normally.
This is tested booting -CURRENT from Jul 22 (git: 57e30b47aab)

2) newer DTS/DTB
If I use sun8i-h3-orangepi-one.dtb from FreeBSD source tree then the board
will boot fine, but I don't have network.
I can also boot normally if the dtb file is rebuilt manually:
  cd /usr/src/sys/gnu/dts/arm
  cpp -P -x assembler-with-cpp -I /usr/src/sys/gnu/dts/include -include
sun8i-h3-orangepi-plus.dts /dev/null | dtc -O dtb -o ./sun8i-h3-rebuilt.dtb
  ls -lh sun8i-h3-rebuilt.dtb
  -rw-r--r--  1 root  wheel    15K Jun 24 13:02 sun8i-h3-rebuilt.dtb
But, if dtb files from Armbian (Linux 4.11) are used, kernel will hang:
  Using DTB from loaded file
'boot/dtb-4.11.3-sun8i/sun8i-h2-plus-orangepi-zero.dtb'.
  Kernel entry at 0x42200100...
  Kernel args: -v
The same file boots Linux without problems.

I don't know why newer dtb files won't work because there is no output on
serial console.
Any ideas how to make it work?
-------------- next part --------------
diff --git a/lib/bch.c b/lib/bch.c
index ec53483774..b45c507c51 100644
--- a/lib/bch.c
+++ b/lib/bch.c
@@ -61,7 +61,11 @@
 #include <linux/bitops.h>
 #else
 #include <errno.h>
+#ifdef __FreeBSD__
+#include <machine/endian.h>
+#else
 #include <endian.h>
+#endif
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
@@ -112,7 +116,7 @@ struct gf_poly_deg1 {
 	unsigned int   c[2];
 };
 
-#ifdef USE_HOSTCC
+#if defined USE_HOSTCC && !defined __FreeBSD__
 static int fls(int x)
 {
 	int r = 32;


More information about the freebsd-arm mailing list