FreeBSD on Allwinner (sunxi) systems
Support policies
Support for all the below is done on a volunteer basis. New devices are added all the time. However, from time to time certain older devices will be dropped unless new developers volunteer to maintain them.
Supported SoCs
FreeBSD supports the following Allwinner SoCs:
| Name | Type | Cores | Width | Family | FreeBSD | Comments | Example Boards |
|---|---|---|---|---|---|---|---|
| Allwinner A10 | sun4i | 1 | 32 | Cortex-A8 | armv7 | supported | Cubieboard |
| Allwinner A13/R8 | sun5i | 1 | 32 | Cortex-A8 | armv7 | supported | OLinuXino |
| Allwinner A20 | sun7i | 2 | 32 | Cortex-A7 | armv7 | supported | Banana Pi |
| Allwinner A31 & A31s | sun6i | 4 | 32 | Cortex-A7 | armv7 | supported | Banana Pi M2 |
| Allwinner A64 | sun50i | 4 | 64 | Cortex-A53 | aarch64 | supported | Pine64 |
| Allwinner A83T | sun8i | 8 | 32 | Cortex-A7 | armv7 | supported | Banana Pi M3 |
| Allwinner H3 & H2+ | sun8i | 4 | 32 | Cortex-A7 | armv7 | supported | Orange Pi One |
| Allwinner H5 | sun50i | 4 | 64 | Cortex-A53 | aarch64 | supported | NanoPI K1 Plus |
| Allwinner H6 | sun50i | 4 | 64 | Cortex-A53 | aarch64 | supported | Pine H64 |
Supported boards
These SoCs are found in a large number of development boards and other devices. FreeBSD has support for some of these boards, including (but not limited to) the following:
A10 Supported Boards
Note: A10 support is now in an “only as needed” basis as of 20180620. It is reasonably similar to the more-popular A20, however.
A13 Supported Boards
Note: A13 support is now in an “only as needed” basis as of 20180620. It is reasonably similar to the more-popular A20, however.
A20 Supported Boards
A31/A31S Supported Boards
Note: A31 support is being considered for deprecation as of 20180612.
A64 Supported Boards
Vendor sites
A83T Supported Boards
H3 Supported Boards
H5 Supported Boards
Boards known to boot FreeBSD:
H6 Supported Boards
Building an Image
- See the Allwinner boot process page for details how the board starts.
- See that same page for details how to modify a GENERICSD image for use with a Pine H64.
For the quickest of quick-starts without understanding, follow these steps:
- Obtain a bootable – for some other SBC – aarch64 image, such as FreeBSD-13.0-RELEASE-arm64-aarch64-ROCK64.img
- Install sysutils/u-boot-pine-h64
- Write the bootable image to a micro-SD card
- Write the u-boot code to the micro-SD card
- Place card in the Pine H64 SD-card slot and power on the board
dd if=FreeBSD-13.0-RELEASE-arm64-aarch64-ROCK64.img \ of=/dev/da0 bs=1M conv=notrunc dd if=/usr/local/share/u-boot/u-boot-pine-h64/u-boot-sunxi-with-spl.bin \ of=/dev/da0 bs=128k seek=1 conv=sync
Supported devices
Legend
| Supported |
| Should work |
| Work in progress |
| Untested |
| Not working |
| Not supported |
| Not applicable |
| A10 | A13 | A20 | A31 | A31S | A64 | A83T | H3 | H5 | H6 | |
| Audio (analog) | YES | YES | YES | |||||||
| Audio (HDMI) | YES | |||||||||
| cpufreq / DVFS | YES | YES | YES | YES | YES | YES | ||||
| crypto | YES | |||||||||
| DMA | YES | YES | YES | |||||||
| Ethernet | r262710 | YES | YES | YES | r305134 | YES | YES | YES | YES | |
| Framebuffer | YES | efifb | efifb | |||||||
| GPIO | r246342 | YES | YES | YES | YES | r305134 | YES | YES | YES | |
| HDMI video | YES | |||||||||
| I2C | r295626 | YES | YES | YES | YES | r305134 | YES | YES | ||
| IR (RX) | YES | YES | YES | |||||||
| SATA | 285090 | YES | ||||||||
| SD/MMC | r283253 | YES | YES | YES | YES | r305134 | YES | YES | YES | YES |
| Thermal | YES | YES | YES | YES | YES | YES | YES | |||
| UART | YES | YES | YES | YES | YES | r305134 | YES | YES | YES | YES |
| USB Host | r246057 | YES | YES | YES | YES | r305134 | YES | YES | YES | |
| USB DRD | YES | YES | YES | YES | YES | YES | YES | |||
| Watchdog | YES | YES | YES | YES | YES | r305134 | YES | YES | YES | |
| SPI | YES | YES | YES | YES | YES | YES | YES | YES | YES |
What still needs to be done
The following SoC interfaces are not yet supported by FreeBSD:
- Crypto engine
- Display Engine 2.0 (sun8i/sun50i)
- KEYADC
- I2S/TDM
- OWA
- NAND
- Smart card reader
- Transport stream controller
The following features are not directly related to Allwinner SoCs but are often implemented on Allwinner boards:
- Bluetooth UART (ng_h4)
- SDIO wifi support
The Allwinner boot process
Most Allwinner systems use U-Boot as the boot program. Please see this page for details.
How to Build an Image
There are several different ways to build an image.
- FreeBSD Release Engineering uses the release.sh script to build releases for various 32-bit and 64-bit arm targets.
- The Crochet build tool (deprecated) supports boards including the Cubieboard 1, Cubieboard 2, Banana Pi, and Banana Pi M3.
- Work is ongoing to support building images via the poudriere image command.
- A GENERIDSD image is available for arm32, you just need to add u-boot on it and write it to an sdcard (See this page for how to add u-boot)
How to setup Xorg
Install the xorg and xf86-video-scfb packages, and add the following to /etc/X11/xorg.conf:
Section "InputDevice"
Identifier "Keyboard1"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/sysmouse"
EndSection
Section "Monitor"
Identifier "Monitor"
EndSection
Section "Device"
Identifier "Generic FB"
Driver "scfb"
EndSection
Section "Screen"
Identifier "Screen"
Device "Generic FB"
Monitor "Monitor"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubsection
EndSection
Section "ServerLayout"
Identifier "layout"
Screen 0 "Screen" 0 0
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection