build
Armbian Linux build framework generates custom Debian or Ubuntu image for x86, aarch64, riscv64 & armhf
Top Related Projects
Buildroot, making embedded Linux easy. Note that this is not the official repository, but only a mirror. The official Git repository is at https://gitlab.com/buildroot.org/buildroot/. Do not open issues or file pull requests here.
This repository is a mirror of https://git.openwrt.org/openwrt/openwrt.git It is for reference only and is not active for check-ins. We will continue to accept Pull Requests here. They will be merged via staging trees then into openwrt.git.
Craft and deploy bulletproof embedded software in Elixir
Quick Overview
Armbian/build is an open-source project that provides a build framework for creating custom Linux distributions for various ARM-based single-board computers (SBCs). It allows users to generate tailored operating systems for a wide range of ARM devices, including popular boards like Raspberry Pi, Orange Pi, and many others.
Pros
- Supports a wide variety of ARM-based devices
- Highly customizable, allowing users to create tailored distributions
- Active community and regular updates
- Comprehensive documentation and user guides
Cons
- Steep learning curve for beginners
- Build process can be time-consuming and resource-intensive
- Some devices may have limited support or require additional configuration
- Requires Linux environment for building (not natively supported on Windows or macOS)
Getting Started
To get started with Armbian/build:
-
Clone the repository:
git clone https://github.com/armbian/build.git
-
Install dependencies (Ubuntu/Debian example):
sudo apt-get install -y build-essential bc bison flex libssl-dev python3 swig
-
Configure your build:
cd build ./compile.sh
-
Follow the interactive prompts to select your target board and desired options.
-
Wait for the build process to complete. The resulting image will be in the
output/images
directory.
For more detailed instructions and advanced usage, refer to the official documentation at https://docs.armbian.com/.
Competitor Comparisons
Buildroot, making embedded Linux easy. Note that this is not the official repository, but only a mirror. The official Git repository is at https://gitlab.com/buildroot.org/buildroot/. Do not open issues or file pull requests here.
Pros of Buildroot
- More flexible and customizable for a wider range of embedded systems
- Supports a larger number of architectures and platforms
- Extensive documentation and active community support
Cons of Buildroot
- Steeper learning curve for beginners
- Longer build times for complex configurations
- Less focus on specific single-board computers (SBCs)
Code Comparison
Armbian build script example:
compile_uboot() {
local uboot_dir="$SRC/u-boot"
cd "${uboot_dir}" || exit_with_error "Cannot change directory to u-boot"
make ARCH=arm CROSS_COMPILE="$CCACHE $UBOOT_COMPILER" "$UBOOT_TARGET" -j${NCPU}
}
Buildroot Makefile example:
define UBOOT_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(UBOOT_MAKE_OPTS)
endef
Both projects use build scripts, but Buildroot's approach is more generalized and integrated into its build system, while Armbian's scripts are more specific to its supported platforms.
This repository is a mirror of https://git.openwrt.org/openwrt/openwrt.git It is for reference only and is not active for check-ins. We will continue to accept Pull Requests here. They will be merged via staging trees then into openwrt.git.
Pros of OpenWrt
- More focused on networking and router-specific features
- Larger community and ecosystem of packages
- Better support for a wide range of network devices
Cons of OpenWrt
- Steeper learning curve for non-networking enthusiasts
- Less flexible for general-purpose computing tasks
- More complex build system for custom images
Code Comparison
OpenWrt (Makefile):
include $(TOPDIR)/rules.mk
PKG_NAME:=example
PKG_VERSION:=1.0
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
define Package/example
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Example package
endef
define Package/example/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/example $(1)/usr/bin/
endef
$(eval $(call BuildPackage,example))
Armbian (build.sh):
#!/bin/bash
set -e
# build
compile_uboot
compile_kernel
compile_rootfs
# create image
create_image
# cleanup
cleanup
Both projects use different build systems and approaches, reflecting their distinct focuses on networking (OpenWrt) and general-purpose Linux distributions (Armbian).
Craft and deploy bulletproof embedded software in Elixir
Pros of Nerves
- Focused on embedded systems and IoT applications, providing a more specialized environment
- Utilizes Elixir, offering functional programming benefits and concurrency features
- Streamlined firmware creation and OTA updates for embedded devices
Cons of Nerves
- Limited to Elixir ecosystem, potentially restricting language choices
- Steeper learning curve for developers not familiar with Elixir or functional programming
- Smaller community compared to Armbian, potentially resulting in fewer resources and support options
Code Comparison
Nerves (mix.exs):
def deps do
[
{:nerves, "~> 1.7", runtime: false},
{:nerves_system_rpi3, "~> 1.13", runtime: false, targets: :rpi3}
]
end
Armbian (build-all.sh):
for board in "${BOARD[@]}"; do
./compile.sh BOARD="$board" BRANCH="$BRANCH" RELEASE="$RELEASE" \
BUILD_MINIMAL="yes" BUILD_DESKTOP="no" KERNEL_ONLY="no" \
KERNEL_CONFIGURE="no" COMPRESS_OUTPUTIMAGE="sha,gpg,7z"
done
The Nerves code snippet shows dependency management for a Nerves project, while the Armbian code demonstrates a build script for compiling multiple board configurations.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
What does this project do?
- Builds custom kernel, image or a distribution optimized for low-resource hardware,
- 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
Requirements for self hosted
- x86_64 / aarch64 machine
- at least 2GB of memory and ~35GB of disk space for VM, container or bare metal installation
- Armbian / Ubuntu Jammy 22.04.x for native building or any Docker capable Linux for containerised
- Windows 10/11 with WSL2 subsystem running Ubuntu Jammy 22.04.x
- Superuser rights (configured sudo or root access).
- Make sure your system is up-to-date! Outdated Docker binaries, for example, can cause trouble.
For stable branch use --branch=v25.02
apt-get -y install git
git clone --depth=1 --branch=main https://github.com/armbian/build
cd build
./compile.sh
- Interactive graphical interface.
- Prepares the workspace by installing the necessary dependencies and sources.
- It guides the entire process and creates a kernel package or a ready-to-use SD card image.
Build parameter examples
Show work-in-progress areas in interactive mode:
./compile.sh EXPERT="yes"
Build minimal CLI Armbian Jammy for Bananapi M5 with LTS kernel:
./compile.sh \
BOARD=bananapim5 \
BRANCH=current \
RELEASE=jammy \
BUILD_MINIMAL=yes \
BUILD_DESKTOP=no \
KERNEL_CONFIGURE=no
Build with GitHub actions: (advanced version)
name: "Build Armbian"
on:
workflow_dispatch:
jobs:
build-armbian:
runs-on: ubuntu-latest
steps:
- uses: armbian/build@main
with:
armbian_token: "${{ secrets.GITHUB_TOKEN }}" # GitHub token
armbian_release: "jammy" # userspace
armbian_target: "build" # build=image, kernel=kernel
armbian_board: "bananapim5" # build target
Generated image will be uploaded to your repository release. Note: GitHub upload file limit is 2Gb.
More information:
- Building Armbian (how to start)
- Build commands and switches (build options)
- User configuration (how to add packages, patches, and override sources config)
- System config (menu driven utility to setup OS and HW features)
Download prebuilt images releases
Point
- manually released standard supported builds (quarterly)
Rolling
- automatically released staging and standard supported builds (daily)
- automatically released community maintained builds (weekly)
Compared with industry standards
Expand
Check similarities, 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
Expand
âââ cache Work / cache directory
â  âââ aptcache Packages
â  âââ ccache C/C++ compiler
â  âââ docker Docker last pull
â  âââ git-bare Minimal Git
â  âââ git-bundles Full Git
â  âââ initrd Ram disk
â  âââ memoize Git status
â  âââ patch Kernel drivers patch
â  âââ pip Python
â  âââ rootfs Compressed userspaces
â  âââ sources Kernel, u-boot and other sources
â  âââ tools Additional tools like ORAS
â  âââ utility
âââ 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
â  âââ functions
â  â  âââ artifacts
â  â  âââ bsp
â  â  âââ cli
â  â  âââ compilation
â  â  âââ configuration
â  â  âââ general
â  â  âââ host
â  â  âââ image
â  â  âââ logging
â  â  âââ main
â  â  âââ rootfs
â  âââ tools
âââ 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
Want to help?
We always need those volunteering positions:
Just apply and follow!
Support
For commercial or prioritized assistance:
- Book an hour of professional consultation
- Consider becoming a project partner
- Contact us!
Free support:
Find free support via general project search engine, documentation, community forums or IRC/Discord. Remember that our awesome community members mainly provide this in a best-effort manner, so there are no guaranteed solutions.
Contact
- Forums for Participate in Armbian
- IRC:
#armbian
on Libera.chat / oftc.net - Matrix: https://forum.armbian.com/topic/40413-enter-the-matrix/
- Discord: https://discord.gg/armbian
- Follow @armbian on ð (formerly known as Twitter), Mastodon or LinkedIn.
- Bugs: issues / JIRA
- Office hours: Wednesday, 12 midday, 18 afternoon, CET
Contributors
Thank you to all the people who already contributed to Armbian!
Also
- Current and past contributors, our families and friends.
- Support staff that keeps forums usable.
- Friends and individuals who support us with resources and their time.
- The Armbian Community helps with their ideas, reports and donations.
Armbian Partners
Armbian's partnership program helps to support Armbian and the Armbian community! Please take a moment to familiarize yourself with our Partners:
Star History
License
This software is published under the GPL-2.0 License license.
Top Related Projects
Buildroot, making embedded Linux easy. Note that this is not the official repository, but only a mirror. The official Git repository is at https://gitlab.com/buildroot.org/buildroot/. Do not open issues or file pull requests here.
This repository is a mirror of https://git.openwrt.org/openwrt/openwrt.git It is for reference only and is not active for check-ins. We will continue to accept Pull Requests here. They will be merged via staging trees then into openwrt.git.
Craft and deploy bulletproof embedded software in Elixir
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot