Diff for /wikisrc/ports/evbarm/allwinner.mdwn between versions 1.47 and 1.104

version 1.47, 2015/02/03 10:11:59 version 1.104, 2019/11/24 14:45:36
Line 1 Line 1
 [[!meta title="NetBSD/evbarm on Allwinner Technology SoCs"]]  [[!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.
   <img src="https://pbs.twimg.com/media/DIRGmsOXcAEJu-j.jpg" width="300">
   <img src="https://pbs.twimg.com/media/DJYA7SCXUAEvEQk.jpg" width="300">
 [[!toc levels=2]]  [[!toc levels=2]]
 # Supported boards  # Supported SoCs
  - [Banana Pi](http://www.bananapi.org/p/product.html) (BPI)  
  - Cubieboard 2 (CUBIEBOARD)  <table>
  - [Cubieboard 4](http://cubieboard.org/model/cb4/) (ALLWINNER_A80) *NetBSD-current*    <thead>
  - Cubietruck (CUBIETRUCK)      <tr>
  - [Merrii Hummingbird A31](http://www.merrii.com/en/pla_d.asp?id=172) (HUMMINGBIRD_A31)        <th>Family</th>
         <th>NetBSD version</th>
         <th>Example boards</th>
       <tr><td>sun4i</td><td>A10</td><td>9.0</td><td><a href="https://www.olimex.com/Products/OLinuXino/A10/A10-OLinuXino-LIME/open-source-hardware">Olimex A10-OLinuXino-LIME</a><td></td></tr>
       <tr><td>sun5i</td><td>A13</td><td>9.0</td><td><a href="https://www.olimex.com/Products/OLinuXino/A13/A13-OLinuXino/open-source-hardware">Olimex A13-OLinuXino</a>, <a href="https://www.olimex.com/Products/OLinuXino/A13/A13-OLinuXino-MICRO/open-source-hardware">Olimex A13-OLinuXino-MICRO</a></td></tr>
       <tr><td>sun5i</td><td>GR8</td><td>9.0</td><td><a href="https://getchip.com/pages/chippro">C.H.I.P. Pro</a></td><td></td></tr>
       <tr><td>sun5i</td><td>R8</td><td>9.0</td><td><a href="https://getchip.com/pages/chip">C.H.I.P.</a>, <a href="https://getchip.com/pages/pocketchip">Pocket C.H.I.P.</a></td><td></td></tr>
       <tr><td>sun6i</td><td>A31</td><td>7.0</td><td><a href="http://linux-sunxi.org/Merrii_Hummingbird_A31">Merrii Hummingbird A31</a></td><td></td></tr>
       <tr><td>sun7i</td><td>A20</td><td>7.0</td><td><a href="https://linux-sunxi.org/Cubietech_Cubieboard2">Cubietech Cubieboard 2</a>, <a href="https://linux-sunxi.org/Cubietruck">Cubietech Cubietruck</a>, <a href="http://linux-sunxi.org/LeMaker_Banana_Pi">LeMaker Banana Pi</a></td><td></td></tr>
       <tr><td>sun8i</td><td>A33</td><td>-</td><td><a href="https://www.olimex.com/Products/OLinuXino/A33/A33-OLinuXino/open-source-hardware">Olimex A33-OLinuXino</a></td></tr>
       <tr><td>sun8i</td><td>R40</td><td>-</td><td><a href="http://www.banana-pi.org/m2u.html">Sinovoip Banana Pi BPI-M2U</a></td></tr>
       <tr><td>sun8i</td><td>A83T</td><td>8.0</td><td><a href="http://www.banana-pi.org/m3.html">Sinovoip Banana Pi BPI-M3</a></td><td></td></tr>
       <tr><td>sun8i</td><td>H2+</td><td>8.0</td><td><a href="http://www.orangepi.org/orangepizero/">Xunlong Orange Pi Zero</a></td><td></td></tr>
       <tr><td>sun8i</td><td>H3</td><td>8.0</td><td><a href="http://nanopi.io/nanopi-neo.html">FriendlyARM NanoPi NEO</a>, <a href="http://www.orangepi.org/orangepiplus2e/">Xunlong Orange Pi Plus 2E</a></td><td></td></tr>
       <tr><td>sun8i</td><td>V3s</td><td>-</td><td><a href="https://www.indiegogo.com/projects/licheepi-zero-6-extensible-linux-module-on-finger-wifi-diy#/">Lichee Pi Zero</a></td><td></td></tr>
       <tr><td>sun9i</td><td>A80</td><td>8.0</td><td><a href="http://linux-sunxi.org/Cubietech_Cubieboard4">Cubietech Cubieboard 4</a></td><td></td></tr>
       <tr><td>sun50i</td><td>A64</td><td>9.0</td><td><a href="https://www.pine64.org/?page_id=1194">Pine64</a>, <a href="https://www.pine64.org/?page_id=3707">Pinebook</a></td><td></td></tr>
       <tr><td>sun50i</td><td>H5</td><td>9.0</td><td><a href="http://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=180">FriendlyARM NanoPi NEO2, <a href="http://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=196">FriendlyARM NanoPi NEO Plus2</a></td><td></td></tr>
       <tr><td>sun50i</td><td>H6</td><td>9.0</td><td><a href="http://www.orangepi.org/OrangePiOneplus/">Orange Pi One Plus</a>, <a href="https://www.pine64.org/?product_cat=pine-h64-boards">Pine H64</a></td></tr>
 # Supported hardware  # Supported hardware
  - SoCs  
    - Cortex-A7: A20 (2-core), A31 (4-core), A80  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.
    - Cortex-A7/A15: A80 (4-core A7 + 4-core A15)  
  - SD/MMC controller (DMA)  <table>
  - DMA controller    <thead>
  - GPIO      <tr>
    - Configuration using FEX scripts is supported        <th>Device</th>
  - UART        <th>Supported</th>
  - I2C        <th>Notes</th>
  - P2WI (A31) / RSB (A80)      </tr>
  - PMU    </thead>
    - AXP209 (A20)    <tbody>
    - AXP221 (A31)      <tr><td>Audio codec</td><td>Yes</td><td>Supported on sun4i, sun5i, sun6i, sun7i, sun8i-h2+, sun8i-h3, sun50i-h5, sun50i-a64</td></tr>
    - AXP806 (A80)      <tr><td>CAN controller</td><td>Yes</td><td></td></tr>
    - AXP809 (A80)      <tr><td>Crypto engine</td><td>-</td><td></td></tr>
  - Watchdog timer      <tr><td>CSI</td><td>-</td><td></td></tr>
  - RTC      <tr><td>DMA</td><td>Yes</td><td></td></tr>
    - A20/A31: integrated RTC, PCF8563      <tr><td>Fast Ethernet (sun4i/sun5i/sun7i)</td><td>Yes</td><td></td></tr>
    - A80: AC100      <tr><td>Framebuffer</td><td>Yes</td><td>Uses simplefb configured by bootloader</td></tr>
  - Audio codec (A20/A31)      <tr><td>Gigabit Ethernet (sun6i/sun7i/sun9i)</td><td>Yes</td><td></td></tr>
  - USB host      <tr><td>Gigabit Ethernet (sun8i/sun50i)</td><td>Yes</td><td></td></tr>
    - OHCI      <tr><td>GPIO</td><td>Yes</td><td></td></tr>
    - EHCI      <tr><td>GPU</td><td>-</td><td></td></tr>
    - OTG (A20)      <tr><td>I2C</td><td>Yes</td><td></td></tr>
  - SATA (A10/A20)      <tr><td>I2S/PCM</td><td>Experimental</td><td></td></tr>
  - Gigabit Ethernet (GMAC)      <tr><td>IR transceiver</td><td>-</td><td></td></tr>
  - HDMI      <tr><td>NAND</td><td>Yes</td><td></td></tr>
    - DDC / EDID mode detection (A20/A31)      <tr><td>P2WI/RSB</td><td>Yes</td><td></td></tr>
    - Audio support (A20/A31)      <tr><td>PCIe</td><td>-</td><td>H6</td></tr>
  - Framebuffer (A20/A31/A80)      <tr><td>PWM</td><td>Yes</td><td></td></tr>
  - IR receiver (A20/A31/A80)      <tr><td>RTC</td><td>Yes</td><td></td></tr>
 # TODO      <tr><td>SD/MMC</td><td>Yes</td><td></td></tr>
  - A10      <tr><td>SMP</td><td>Yes</td><td></td></tr>
    - Interrupt controller      <tr><td>SPDIF</td><td>-</td><td></td></tr>
    - EMAC      <tr><td>SPI</td><td>Yes</td><td></td></tr>
  - A31      <tr><td>Thermal sensors</td><td>Yes</td><td></td></tr>
    - OTG      <tr><td>Touch screen</td><td>Yes</td><td></td></tr>
    - IR transmitter      <tr><td>UART</td><td>Yes</td><td></td></tr>
    - 3G module      <tr><td>USB 2.0</td><td>Yes</td><td></td></tr>
    - TV input      <tr><td>USB 3.0</td><td>Yes</td><td></td></tr>
  - A80      <tr><td>USB OTG</td><td>Experimental</td><td></td></tr>
    - MP      <tr><td>Watchdog timer</td><td>Yes</td><td></td></tr>
    - big.LITTLE support    </tbody>
    - USB3 (OTG and XHCI)  </table>
    - IR transmitter  
    - HDMI (DDC and mode setting; currently relies on U-Boot for setup)  
    - Audio codec  
  - All  
    - USB device mode  
    - SD/MMC UHS-I support (needs sdmmc(4) changes)  
    - SDIO (Bluetooth / WiFi)  
    - NAND  
    - VGA (Cubietruck, Hummingbird A31, Cubieboard4)  
 # Installation  # 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-<boardname>` packages):
     **dd if=/usr/pkg/share/u-boot/&lt;boardname&gt;/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*  If your SoC has a SATA controller and you would like to install on
 * Download a U-Boot build for your board  an hard disk and use a SD card only for u-boot please give a look
   * A10/A20: Download from the linux-sunxi web site <http://dl.linux-sunxi.org/nightly/u-boot-sunxi/u-boot-sunxi-mainline/u-boot-sunxi-mainline-latest/>  to
   * A31: The standard u-boot-sunxi tree doesn't support A31 yet. Until sun6i support is merged, a build is available at <http://www.invisible.ca/allwinner/a31/  [[NetBSD/evbarm install via sysinst(8) on a SATA hard disk, USB stick or (u)SD card|ports/evbarm/install_using_sysinst]].
 * Write the *u-boot-sunxi-with-spl.bin* loader to the empty space at the start of 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 on the SD card.  
 * Create or edit uEnv.txt on the MS-DOS partition:  
 [[!template  id=programlisting text="""  
 uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000  
 ## A80 based boards  # Tips and tricks
 * Cubieboard 4 SDK (lubuntu) U-Boot env:  ## Video overscan compensation
 [[!template  id=programlisting text="""  
 boot_normal=fatload mmc 0:1 20007800 uimage;bootm 20007800  
 bootcmd=run setargs_cubie boot_normal  
 setargs_cubie=setenv bootargs console=${console1} console=${console} root=${mmc_root} loglevel=${loglevel}  
 # 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)      setenv video-mode sunxi:1280x720-24,overscan_x=32,overscan_y=20
 or with a big endian kernel and userland. However, kernel and userland endianness needs to match.      saveenv
 To build a big endian release (or sets) use   ## Pinebook function keys
 [[!template  id=programlisting text="""  
 ./build.sh -m evbearmv7hf-eb   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.
 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.  
 # FEX scripts  Create the following config file:
 Board configuration scripts can be found here: <https://github.com/linux-sunxi/sunxi-boards/blob/master/sys_config>. You can compile them with the "fex2bin" tool found here: <https://github.com/linux-sunxi/sunxi-tools>.  [[!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="""  [[!template  id=programlisting text="""
 bootargs=root=ld0a sysconfig=0x43000000  # /usr/bin/usbhidaction -c /etc/usbhidaction.conf -f /dev/uhid0 -i -p /var/run/usbhidaction-uhid0.pid 
 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/uhid1 -i -p /var/run/usbhidaction-uhid1.pid 
 """]]  """]]
 Some pre-compiled .bin files can be found here: <http://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/allwinner/fex/>  ## Pinebook keyboard
 # Framebuffer console  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:
 To use HDMI for the console device, add *console=fb* to bootargs in uEnv.txt.  [[!template  id=filecontent name="/etc/X11/xorg.conf.d/00-system-keyboard.conf" text="""
   Section "InputDevice"
 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          Identifier "Pinebook 1080p keyboard"
           Driver     "kbd"
           Option     "XkbLayout"  "us"
           Option     "XkbVariant" "altgr-intl"
 # 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="""  [[!template  id=filecontent name="/etc/X11/xorg.conf.d/00-system-touchpad.conf" text="""
 a31# audiocfg list  Section "InputDevice"
 0: [*] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels          Identifier "Pinebook touchpad"    
 1: [ ] audio1 @ awinhdmiaudio0: Allwinner HDMI 1.4, 2 playback channels          Driver "mouse"
 a31# audiocfg default 1          Option "AccelerationProfile" "2"
 setting default audio device to audio1          Option "AdaptiveDeceleration" "1"
 a31# audiocfg list          Option "ConstantDeceleration" "2.4" # Pinebook 14"
 0: [ ] audio0 @ awinac0: Allwinner CODEC A31, 2 playback channels          #Option "ConstantDeceleration" "1.2" # Pinebook 11"
 1: [*] audio1 @ awinhdmiaudio0: Allwinner HDMI 1.4, 2 playback channels  EndSection
 """]]  """]]
 # MAC address  ## Pinebook screen
 On boards where the ethernet MAC address cannot be determmined, a random MAC address will be generated every boot. You can override this behaviour by specifying a MAC address in *uEnv.txt*:  X11 currently cannot work out the size of the screen, resulting in a very small DPI on a very small screen.
 [[!template  id=programlisting text="""  This file configures X to use an 11.6" screen, which results in very readable a DPI of 190.
 bootargs=root=ld0a awge0.mac-address=02:a0:3d:88:1a:1e  
   [[!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
   Section "Screen"
           Identifier      "Default Screen"
           Monitor         "Pinebook 11.6 inch monitor"
 """]]  """]]
   # Links
   - [[NetBSD/evbarm install via sysinst(8) on a SATA hard disk, USB stick or (u)SD card|ports/evbarm/install_using_sysinst]]

Removed from v.1.47  
changed lines
  Added in v.1.104

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb