Leon Anavi
IT Tips && Tricks

Mobile & Embedded

Created: 30.12.2024 05:26 Last Modified: 30.12.2024 05:26 Views: 91
Keywords: A80, Cubieboard 4, Linux, Merrii A80 Optimus, OpenEmbedded, sunxi, systemd, U-Boot, Yocto, Allwinner

Reviving Old and Forgotten Allwinner A80 ARM Boards with Mainline U-Boot and Linux Kernel thanks to the Yocto Project

Recently my friend Lazar Hristov was troubleshooting Cubieboard 4, a very old development board with Allwinner Technology A80 SoC. I stepped in to help and proposed to use the Yocto Project to revive his board and Merrii A80 Optimus board that I have. This blog post documents a successful endeavor to deploy the mainline U-Boot bootloader and mainline Linux kernel on the Merrii A80 Optimus Board, a versatile but now largely overlooked piece of hardware. Using the Yocto Project and OpenEmbedded, a custom image was created leveraging the meta-sunxi BSP layer, which provides tailored support for the board?s hardware features.

The same approach can be extended to the Cubieboard 4, another board powered by the Allwinner A80 SoC. Here?s an overview of the process and insights gained from this project.

Key Highlights of the Project

Supported Branches and Pull Requests

To enable this deployment, new machine definitions for the Merrii A80 Optimus were introduced to the meta-sunxi repository. These are available for both the master and scarthgap branches. The relevant GitHub pull requests are as follows:

Software Versions Tested

  • Master Branch:
    • U-Boot: 2024.10
    • Linux Kernel: 6.6.28
  • Scarthgap Branch:
    • U-Boot: 2024.1
    • Linux Kernel: 6.6.28

Notably, Scarthgap is a long-term supported (LTS) release of the Yocto Project, ensuring maintenance until at least April 2028. Due to the dynamic nature of the master branch, users are encouraged to use the scarthgap branch for stability. Find the scarthgap branch here: meta-sunxi Scarthgap Branch.

Merrii A80 Optimus Board Overview

Powered by the Allwinner A80 SoC, this board combines a big.LITTLE architecture with impressive processing and graphical capabilities:

  • CPU: Octa-core ARM Cortex-A15/A7
  • GPU: PowerVR G6230 with 64 cores
  • Memory: 4GB RAM
  • Storage: 8GB internal storage
  • Connectivity: Bluetooth 4.0, WiFi, HDMI, USB ports (2 host + 1 USB 3.0 OTG)

The board is versatile, with applications ranging from embedded development to multimedia. A key detail is its boot sequence?by default, the board prioritizes booting from a microSD card, which was utilized for this project.

Understanding "sunxi"

The term sunxi originates from Allwinner?s SoC naming convention, where "sun" is a prefix, and "i" a suffix. The placeholder "x" represents the chip generation. For instance, the Allwinner A80 chip is referred to as sun9i (generation 9). This shorthand has been adopted by the open-source community for Allwinner SoCs and their support in tools like mainline Linux and U-Boot.

Building an Image for the Merrii A80 Optimus Board

Follow these steps to build an image using the Scarthgap reference Yocto distribution:

  • Clone the Poky Repository:
    git clone -b scarthgap https://git.yoctoproject.org/poky poky-rauc-sunxi
    cd poky-rauc-sunxi
                
  • Clone Required BSP Layers:
    • meta-arm:
      git clone -b scarthgap git://git.yoctoproject.org/meta-arm
                          
    • meta-sunxi:
      git clone -b scarthgap https://github.com/linux-sunxi/meta-sunxi.git
                          
    • meta-openembedded:
      git clone -b scarthgap git://git.openembedded.org/meta-openembedded
                          
  • Initialize the Build Environment:
    source oe-init-build-env
                
  • Include Layers in conf/bblayers.conf:
    bitbake-layers add-layer ../meta-openembedded/meta-oe
    bitbake-layers add-layer ../meta-openembedded/meta-python
    bitbake-layers add-layer ../meta-arm/meta-arm-toolchain
    bitbake-layers add-layer ../meta-arm/meta-arm
    bitbake-layers add-layer ../meta-sunxi
                
  • Update conf/local.conf:

    Append the following configurations:

    MACHINE = "merrii-a80-optimus"
    INIT_MANAGER = "systemd"
                
  • Optionally, if you have Cubieboard 4 you should replace merrii-a80-optimus with cubieboard4 in the MACHINE variable above.
  • Build the Image:
    bitbake core-image-base
                

Conclusion

This hobby project breathes new life into the Merrii A80 Optimus Board, demonstrating its compatibility with modern mainline software. By leveraging the Yocto Project and OpenEmbedded, it is possible to tailor a robust image for boards powered by the Allwinner A80 SoC. For anyone interested in working with such boards, especially the Merrii A80 Optimus or Cubieboard 4, following the outlined process will set you on the right path.



  Home | About | Contact | Disclaimer | Sitemap © 2009-2022 Leon Anavi. All rights reserved.