--- wikisrc/ports/evbarm/allwinner.mdwn 2014/12/07 14:28:37 1.37 +++ wikisrc/ports/evbarm/allwinner.mdwn 2020/01/08 06:45:15 1.105 @@ -1,152 +1,192 @@ [[!meta title="NetBSD/evbarm on Allwinner Technology SoCs"]] +NetBSD supports many boards based on Allwinner SoCs. Starting with NetBSD 8.0, FDT is used to configure devices. As a result, a large number of boards and configurations can be supported with a single kernel. + + + + [[!toc levels=2]] -# Supported boards - - [Banana Pi](http://www.bananapi.org/p/product.html) (BPI) - - Cubieboard 2 (CUBIEBOARD) - - Cubieboard 4 (ALLWINNER_A80) *NetBSD-current* - - Cubietruck (CUBIETRUCK) - - [Merrii Hummingbird A31](http://www.merrii.com/en/pla_d.asp?id=172) (HUMMINGBIRD_A31) +# Supported SoCs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FamilySoCNetBSD versionExample boardsNotes
sun4iA109.0Olimex A10-OLinuXino-LIME
sun5iA10s-
sun5iA139.0Olimex A13-OLinuXino, Olimex A13-OLinuXino-MICRO
sun5iGR89.0C.H.I.P. Pro
sun5iR89.0C.H.I.P., Pocket C.H.I.P.
sun6iA317.0Merrii Hummingbird A31
sun6iA31s-
sun7iA207.0Cubietech Cubieboard 2, Cubietech Cubietruck, LeMaker Banana Pi
sun8iA23-
sun8iA33-Olimex A33-OLinuXino
sun8iR40-Sinovoip Banana Pi BPI-M2U
sun8iA83T8.0Sinovoip Banana Pi BPI-M3
sun8iH2+8.0Xunlong Orange Pi Zero
sun8iH38.0FriendlyARM NanoPi NEO, Xunlong Orange Pi Plus 2E
sun8iV3s-Lichee Pi Zero
sun9iA808.0Cubietech Cubieboard 4
sun50iA649.0Pine64, Pinebook
sun50iH59.0FriendlyARM NanoPi NEO2, FriendlyARM NanoPi NEO Plus2
sun50iH69.0Orange Pi One Plus, Pine H64
+ # Supported hardware - - SoCs - - Cortex-A7: A20 (2-core), A31 (4-core), A80 - - Cortex-A7/A15: A80 (4-core A7 + 4-core A15) - - SD/MMC controller (DMA) - - DMA controller - - GPIO - - Configuration using FEX scripts is supported - - UART - - I2C - - P2WI (A31) / RSB (A80) - - PMU - - AXP209 (A20) - - AXP221 (A31) - - AXP806 (A80) - - AXP809 (A80) - - Watchdog timer - - RTC - - A20/A31: integrated RTC, PCF8563 - - A80: AC100 - - Audio codec (A20/A31) - - USB host - - OHCI - - EHCI - - OTG (A20) - - SATA (A10/A20) - - Gigabit Ethernet (GMAC) - - HDMI (A20/A31) - - DDC / EDID mode detection - - Audio support - - Framebuffer (A20/A31) - - IR receiver (A20/A31) - -# TODO - - SoCs - - Cortex-A8: A10 - - Cortex-A7/A15: A80 SMP - - OTG (A31) - - USB device mode - - Bluetooth / WiFi (Cubietruck, Hummingbird A31) - - 3G (Hummingbird A31) - - SD/MMC UHS-I support (needs sdmmc(4) changes) - - TV input (Hummingbird A31) - - NAND - - Fast Ethernet (EMAC) - - IR transmitter (A20) + +Please refer to the [GENERIC (32-bit)](https://nxr.netbsd.org/xref/src/sys/arch/evbarm/conf/GENERIC) or [GENERIC64 (64-bit)](https://nxr.netbsd.org/xref/src/sys/arch/evbarm/conf/GENERIC64) kernel configs for the most up-to-date list of supported hardware. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DeviceSupportedNotes
Audio codecYesSupported on sun4i, sun5i, sun6i, sun7i, sun8i-h2+, sun8i-h3, sun50i-h5, sun50i-a64
CAN controllerYes
Crypto engine-
CSI-
DMAYes
Fast Ethernet (sun4i/sun5i/sun7i)Yes
FramebufferYesUses simplefb configured by bootloader
Gigabit Ethernet (sun6i/sun7i/sun9i)Yes
Gigabit Ethernet (sun8i/sun50i)Yes
GPIOYes
GPU-
I2CYes
I2S/PCMExperimental
IR transceiver-
NANDYes
P2WI/RSBYes
PCIe-H6
PWMYes
RTCYes
SATAYes
SD/MMCYes
SMPYes
SPDIF-
SPIYes
Thermal sensorsYes
Touch screenYes
UARTYes
USB 2.0Yes
USB 3.0Yes
USB OTGExperimental
Watchdog timerYes
# Installation -## A10 / A20 / A31 based boards +- Download or build **armv7.img** (32-bit) or **arm64.img** (64-bit) from NetBSD 9.0 or later +- Write the image to disk: **dd if=armv7.img of=/dev/rld0d bs=1m conv=sync** +- Install a board-specific U-Boot (2018.05 or later) from pkgsrc to the SD card + (the `u-boot-sunxi-with-spl.bin`-s are provided by `sysutils/u-boot-` packages): + **dd if=/usr/pkg/share/u-boot/<boardname>/u-boot-sunxi-with-spl.bin of=/dev/rld0d bs=1k seek=8 conv=sync** -* Start with an ARMv7 image from *evbarm-earmv7hf/binary/gzimg/* such as *beagleboard.img* -* Download a U-Boot build for your board - * A10/A20: Download from the linux-sunxi web site - * A31: The standard u-boot-sunxi tree doesn't support A31 yet. Until sun6i support is merged, a build is available at -* Write the *u-boot-sunxi-with-spl.bin* loader to the base image: -[[!template id=programlisting text=""" -# dd if=u-boot-sunxi-with-spl.bin of=beagleboard.img bs=1k seek=8 conv=notrunc -"""]] -* Write the image to an SD card. -* Copy the kernel (netbsd.ub) for your board to the root of the MS-DOS partition. -* Create or edit uEnv.txt on the MS-DOS partition: -[[!template id=programlisting text=""" -bootargs=root=ld0a -uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000 -"""]] +If your SoC has a SATA controller and you would like to install on +an hard disk and use a SD card only for u-boot please give a look +to +[[NetBSD/evbarm install via sysinst(8) on a SATA hard disk, USB stick or (u)SD card|ports/evbarm/install_using_sysinst]]. -## A80 based boards +# Tips and tricks -* Cubieboard 4 SDK (lubuntu) U-Boot env: -[[!template id=programlisting text=""" -baudrate=115200 -boot_normal=fatload mmc 0:1 20007800 uimage;bootm 20007800 -bootcmd=run setargs_cubie boot_normal -bootdelay=3 -console=ttyS0,115200 -console1=tty1 -init=/init -loglevel=8 -mmc_root=/dev/mmcblk0p2 -setargs_cubie=setenv bootargs console=${console1} console=${console} root=${mmc_root} loglevel=${loglevel} -stderr=serial -stdin=serial -stdout=serial -"""]] +## Video overscan compensation -# Big (endian) fun +On some television models, the borders of the screen may be cut off. If your television doesn't have an option to disable overscan, you can enable overscan compensation by entering the following commands at the U-Boot prompt: -You can run this boards with a little endian (this is the default and implied by above install instructions) -or with a big endian kernel and userland. However, kernel and userland endianness needs to match. + setenv video-mode sunxi:1280x720-24,overscan_x=32,overscan_y=20 + saveenv + reset -To build a big endian release (or sets) use -[[!template id=programlisting text=""" -./build.sh -m evbearmv7hf-eb -"""]] -where -eb means endianness big, hf is hardware floating point support, and earm is the modern "extended" ABI for ARM CPUs, and finally v7 is version 7 of the supported instruction set. +## Pinebook function keys + +The sleep (Fn+Esc), home (Fn+F1), volume down (Fn+F3), volume up (Fn+F4), and mute (Fn+F5) keys on the keyboard are mapped to uhid(4) devices. -# FEX scripts +Create the following config file: -Board configuration scripts can be found here: . You can compile them with the "fex2bin" tool found here: . +[[!template id=filecontent name="/etc/usbhidaction.conf" text=""" +Consumer:Consumer_Control.Consumer:Volume_Up 1 + mixerctl -n -w outputs.master++ +Consumer:Consumer_Control.Consumer:Volume_Down 1 + mixerctl -n -w outputs.master-- +Consumer:Consumer_Control.Consumer:Mute 1 + mixerctl -n -w outputs.mute++ +Consumer:Consumer_Control.Consumer:AC_Home 1 + /etc/powerd/scripts/hotkey_button AC_Home pressed +Generic_Desktop:System_Control.Generic_Desktop:System_Sleep 1 + /etc/powerd/scripts/sleep_button System_Sleep pressed +"""]] -To use, copy the compiled FEX to your MS-DOS partition, load it with U-Boot, and then tell the kernel where to find it with the "sysconfig=" boot option. For example, uEnv.txt on a Cubieboard2 might look like this: +Then start two copies of usbhidaction: [[!template id=programlisting text=""" -bootargs=root=ld0a sysconfig=0x43000000 -uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 43000000 cubieboard2.bin; fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000 +# /usr/bin/usbhidaction -c /etc/usbhidaction.conf -f /dev/uhid0 -i -p /var/run/usbhidaction-uhid0.pid +# /usr/bin/usbhidaction -c /etc/usbhidaction.conf -f /dev/uhid1 -i -p /var/run/usbhidaction-uhid1.pid """]] -Some pre-compiled .bin files can be found here: - -# Framebuffer console +## Pinebook keyboard -To use HDMI for the console device, add *console=fb* to bootargs in uEnv.txt. +The new 11" 1080p model has a slightly different keyboard layout to the 14". +Using wscons it works perfectly, but using X the \ key next to left shift will display > when pressed. +To solve this, you need to change the keyboard layout to altgr-intl. This can be done system wide by creating the file: -If the connected display does not let you disable overscan, you can add a margin to the framebuffer by with the *fb.margin* bootargs option. For example, to set a 25-pixel margin around the screen, add *fb.margin=25* to uEnv.txt +[[!template id=filecontent name="/etc/X11/xorg.conf.d/00-system-keyboard.conf" text=""" +Section "InputDevice" + Identifier "Pinebook 1080p keyboard" + Driver "kbd" + Option "XkbLayout" "us" + Option "XkbVariant" "altgr-intl" +EndSection +"""]] -# HDMI audio +## Pinebook touchpad -The default audio device is the analog audio codec. To change the default device, use the *audiocfg* command: +To fix jittery touch input on the touchpad, you can adjust the input sensitivity by creating the file: -[[!template id=programlisting text=""" -a31# audiocfg list -0: [*] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels -1: [ ] audio1 @ awinhdmiaudio0: Allwinner HDMI 1.4, 2 playback channels -a31# audiocfg default 1 -setting default audio device to audio1 -a31# audiocfg list -0: [ ] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels -1: [*] audio1 @ awinhdmiaudio0: Allwinner HDMI 1.4, 2 playback channels +[[!template id=filecontent name="/etc/X11/xorg.conf.d/00-system-touchpad.conf" text=""" +Section "InputDevice" + Identifier "Pinebook touchpad" + Driver "mouse" + Option "AccelerationProfile" "2" + Option "AdaptiveDeceleration" "1" + Option "ConstantDeceleration" "2.4" # Pinebook 14" + #Option "ConstantDeceleration" "1.2" # Pinebook 11" +EndSection """]] -# Board specific notes +## Pinebook screen -## Merrii Hummingbird A31 +X11 currently cannot work out the size of the screen, resulting in a very small DPI on a very small screen. +This file configures X to use an 11.6" screen, which results in very readable a DPI of 190. -There doesn't appear to be a meaningful way to generate a MAC address on these boards. U-Boot from the A31 SDK and from the u-boot-sunxi tree both lack GMAC support, and the Security ID registers (at 0x01c23800) appear to be empty. +[[!template id=filecontent name="/etc/X11/xorg.conf.d/01-pinebook-11-screen.conf" text=""" +Section "Monitor" + Identifier "Pinebook 11.6 inch monitor" + DisplaySize 256.8 144.5 # millimeters, 11.6 inch screen +EndSection -To overcome this, you can specify your own MAC address in *uEnv.txt*: -[[!template id=programlisting text=""" -bootargs=root=ld0a awge0.mac-address=02:a0:3d:88:1a:1e +Section "Screen" + Identifier "Default Screen" + Monitor "Pinebook 11.6 inch monitor" +EndSection """]] + + +# Links + +- [[NetBSD/evbarm install via sysinst(8) on a SATA hard disk, USB stick or (u)SD card|ports/evbarm/install_using_sysinst]]