The official build framework for the Armbian Linux distribution. This repository contains the complete toolchain and scripts required to compile custom OS images from source, including kernel configuration, U-Boot handling, and board-specific tweaks for various ARM and ARM64 single-board computers.
Go to file
brentr d3a3afe385
Rockpis wifi fixes (#4008)
* RockPI-S board has no video I/O

* udev rule to fix MAC address of iface based on UUID

Deals with WiFi chip lacking any EEPROM to store its unique Ethernet MAC address
Generic mechanism -- could be utilized for other boards having similar issues

* Handy Device Tree overlays for the RockPI S

Use armbian-add-overlay to install these

Reduce CPU voltage for the RK3308 B-S
  Option to overclock RK3308 B-S to 1.3Ghz

Increase SDIO clock rate from 1Mhz to 10Mhz
  This increases WiFi throughput from 300K bytes/s to 2.4M bytes/s

* corrected comment

* No longer repeat standard opp's in this dts

Require that the standard bs dts already be installed

* User README for adding RockPI-S board variant specific dts overlays

* "enabled" --> "okay"

* added mention of sdnand.dts, fixed typo

* added p2p0 to interfaces whose MAC address should be "fixed"

* RK3308 CPU serial number in nvmem replaces UUID for derivation of fixed MAC addr
Restored use of install utility

* Use RK3308 specific CPU serial number

rather than rootfs UUID

* remove generic fixMACaddress

* Install fixMACaddr file-by-file via install utility

* Drive SDIO bus signals faster

setting RK3308_SOC_CON0_VCCIO3 reduces signal rise/fall times to WiFi SDIO chip
from 30ns to 5ns.
This odd fix forward ported from legacy kernel.
Allows Rock Pi-S WiFi to operate at full speed.

* Set RK3308 I/O voltage domains before SDIO initializes

This patch moves responibility form the io-domain to the pinctrl driver because
the io-domain driver is probed after the SDIO devices are discovered.
This was causing multiple SDIO I/O failures during boot.

A new pinctrl property is added:
io-1v8-domains
is a u32 interpreted as a bit mask where each set bit corresponds to
a 1.8V I/O domain (as opposed to the default of 3.3V for I/O)
The mask is writted to the RK3308_SOC_CON0 GRF register
(once) when the pinctrl driver starts

The default mask is 0x10 where only I/O domain 4 runs at 1.8V

This is necessary for the RockPI-S to run the SDIO clock at high (50Mhz) speed

* align whitespace

* factored rk3308bs overlays out up sdio speedup patch

* factored dts for RK3308 iodomains and pinctrl patches out of speedup patch

* remains of sdio speedup patch merely add iodomains support for rk3308

* factored rockpis dts modification out from rk3308 io voltage domains

replaced rk3308 support from iodomains with
new io-voltage-domains property added to pinctrl
io-voltage-domains specific to rk3308 for now, others SOCs may be added later.

* add sequence numbering to names of rk3308 patches

* corrected tab alignment
2022-10-13 18:34:43 +02:00
.github Update build-images.yml (#4240) 2022-10-07 17:57:08 +02:00
.vscode chore: edit code format config (#3578) 2022-03-26 12:41:25 +01:00
config Rockpis wifi fixes (#4008) 2022-10-13 18:34:43 +02:00
extensions grub: remove unnecessary config (#4277) 2022-10-13 18:17:57 +02:00
lib Rename for typo 2022-10-12 11:20:33 +02:00
packages Rockpis wifi fixes (#4008) 2022-10-13 18:34:43 +02:00
patch Rockpis wifi fixes (#4008) 2022-10-13 18:34:43 +02:00
tools Sunxi 5.18: add megous patches: tag: orange-pi-5.18-20220627-1924 (#3946) 2022-07-01 01:02:59 +02:00
.dockerignore Improve Docker support 2017-08-01 12:30:34 +03:00
.editorconfig armbian-next: a-n's editorconfig with no whitespace trimming 2022-10-08 14:37:21 +02:00
.gitignore Merge desktop branch (#2662) 2021-02-24 18:19:09 +01:00
compile.sh Split /lib/functions/cli/cli-entrypoint.sh from /compile.sh 2022-10-12 11:20:33 +02:00
CONTRIBUTING.md Update CONTRIBUTING.md (#4062) 2022-08-12 14:30:14 +02:00
LICENSE Create LICENSE 2014-10-08 10:14:29 +02:00
README.md Add project office hours (#4259) 2022-10-06 12:52:11 +02:00
VERSION Bump build system version to next release version (#4135) 2022-09-01 15:17:13 +02:00

Armbian logo
Armbian Linux Build Framework

GitHub Workflow Status GitHub Workflow Status GitHub Workflow Status

Twitter Follow Discord Liberapay patrons

Table of contents

What this project does?

  • Builds custom kernel, image or a distribution optimized for low resource HW such as single board computers,
  • Include filesystem generation, low-level control software, kernel image and bootloader compilation,
  • Provides a consistent user experience by keeping system standards across different platforms.

Getting started

Basic requirements

  • x64 or aarch64 machine with at least 2GB of memory and ~35GB of disk space for a virtual machine, container or bare metal installation,
  • Ubuntu Jammy 22.04 x64 or aarch64 for native building or any Docker capable x64 / aarch64 Linux for containerised,
  • Superuser rights (configured sudo or root access).

Simply start with the build script

apt-get -y install git
git clone https://github.com/armbian/build
cd build
./compile.sh

Armbian logo

  • Interactive graphical interface.
  • The workspace will be prepared by installing the necessary dependencies and sources.
  • It guides the entire process until a kernel package or ready-to-use image of the SD card is created.

Build parameter examples

Show work in progress areas in interactive mode:

./compile.sh EXPERT="yes"

Run build framework inside Docker container:

./compile.sh docker

Build minimal CLI Armbian Focal image for Orangepi Zero. Use modern kernel and write image to the SD card:

./compile.sh \
BOARD=orangepizero \
BRANCH=current \
RELEASE=focal \
BUILD_MINIMAL=yes \
BUILD_DESKTOP=no \
KERNEL_ONLY=no \
KERNEL_CONFIGURE=no \
CARD_DEVICE="/dev/sda"

More information:

Download prebuilt images

Compare with industry standards

Check similarity, advantages and disadvantages compared with leading industry standard build software.

Function Armbian Yocto Buildroot
Target general purpose embedded embedded / IOT
U-boot and kernel compiled from sources compiled from sources compiled from sources
Board support maintenance   complete outside outside
Root file system Debian or Ubuntu based custom custom
Package manager APT any none
Configurability limited large large
Initramfs support yes yes yes
Getting started quick very slow slow
Cross compilation yes yes yes

Project structure

├── cache                                Work / cache directory
│   ├── rootfs                           Compressed userspace packages cache
│   ├── sources                          Kernel, u-boot and various drivers sources.
│   ├── toolchains                       External cross compilers from Linaro™ or ARM™
├── config                               Packages repository configurations
│   ├── targets.conf                     Board build target configuration
│   ├── boards                           Board configurations
│   ├── bootenv                          Initial boot loaders environments per family
│   ├── bootscripts                      Initial Boot loaders scripts per family
│   ├── cli                              CLI packages configurations per distribution
│   ├── desktop                          Desktop packages configurations per distribution
│   ├── distributions                    Distributions settings
│   ├── kernel                           Kernel build configurations per family
│   ├── sources                          Kernel and u-boot sources locations and scripts
│   ├── templates                        User configuration templates which populate userpatches
│   └── torrents                         External compiler and rootfs cache torrents
├── extensions                           extend build system with specific functionality
├── lib                                  Main build framework libraries
├── output                               Build artifact
│   └── deb                              Deb packages
│   └── images                           Bootable images - RAW or compressed
│   └── debug                            Patch and build logs
│   └── config                           Kernel configuration export location
│   └── patch                            Created patches location
├── packages                             Support scripts, binary blobs, packages
│   ├── blobs                            Wallpapers, various configs, closed source bootloaders
│   ├── bsp-cli                          Automatically added to armbian-bsp-cli package 
│   ├── bsp-desktop                      Automatically added to armbian-bsp-desktopo package
│   ├── bsp                              Scripts and configs overlay for rootfs
│   └── extras-buildpkgs                 Optional compilation and packaging engine
├── patch                                Collection of patches
│   ├── atf                              ARM trusted firmware
│   ├── kernel                           Linux kernel patches
|   |   └── family-branch                Per kernel family and branch
│   ├── misc                             Linux kernel packaging patches
│   └── u-boot                           Universal boot loader patches
|       ├── u-boot-board                 For specific board
|       └── u-boot-family                For entire kernel family
├── tools                                Tools for dealing with kernel patches and configs
└── userpatches                          User: configuration patching area
    ├── lib.config                       User: framework common config/override file
    ├── config-default.conf              User: default user config file
    ├── customize-image.sh               User: script will execute just before closing the image
    ├── atf                              User: ARM trusted firmware
    ├── kernel                           User: Linux kernel per kernel family
    ├── misc                             User: various
    └── u-boot                           User: universal boot loader patches

🙌 Contribution

You don't need to be a programmer to help!

Want to become a maintainer?

Please review the Board Maintainers Procedures and Guidelines and if you can meet the requirements as well as find a board on the Board Maintainers list which has less than 2 maintainers, then please apply using the linked form.

Want to become a developer?

If you want to help with development, you should first review the Development Code Review Procedures and Guidelines and then you can review the pre-made Jira dashboards and additional resources provided below to find open tasks and how you can assist:

Support

Support is provided in one of two ways:

Contact

Contributors

Thank you to all the people who already contributed Armbian!

Also

Sponsors

Most of the project is sponsored with a work done by volunteer collaborators, while some part of the project costs are being covered by the industry. We would not be able to get this far without their help.

Would you like your name to appear below?

License

This software is published under the GPL-2.0 License license.