build/documentation/geek-faq.md

173 lines
7.1 KiB
Markdown
Raw Normal View History

# How to build Armbian? #
You will need to setup development environment within [Ubuntu 14.04 LTS x64 server image](http://releases.ubuntu.com/14.04/) and cca. 20G of free space.
Login as root and run:
apt-get -y -qq install git
git clone --depth 1 https://github.com/igorpecovnik/lib
cp lib/compile.sh .
nano compile.sh # alter if necessary
Make it executable.
chmod +x compile.sh
Run the script
./compile.sh
# What is behind the build process?
Build process summary:
- creates development environment on the top of X86/AMD64 Ubuntu 14.04 LTS,
- download proven sources, applies patches and use tested configurations,
- cross-compile universal boot loader (u-boot), kernel and other tools and drivers,
- pack kernel, uboot, dtb and root customizations into debs,
- debootstrap minimalistic Debian Wheezy, Jessie and Ubuntu Trusty into SD card image,
- install additional packets, apply customizations and shrink image to it's actual size.
Switches clarification:
- **KERNEL_ONLY** - if we want to compile kernel, u-boot, headers and dtbs package only.
- **KERNEL_CONFIGURE** will bring up kernel configurator otherwise kernel will be compiled with script presets located in lib/config/linux-*.config
- **KERNEL\_KEEP\_CONFIG** overwrite kernel config before compilation
- **CLEAN_LEVEL** defines what should be cached. This is useful when we are rebuilind images or builind more than one image.
- 0 = executes make clean and delete previously created deb files [default]
- 1 = executes make clean
- 2 = does nothing
- 3 = provide kernel selection if any present
- 4 = delete all output files (rootfs cache, debs)
- **USE_CCACHE** use a C compiler cache to speed up the build process
- **BUILD_DESKTOP** builds a desktop on the top of the system with hw acceleration for some boards.
- **AFTERINSTALL** is a variable with command executed in a process of building just before closing image to insert some of your custom applications or fixes.
- **FBTFT** is a [driver for small displays](https://github.com/notro/fbtft). Only applicable for old kernels (3.4-3.14)
- **EXTERNAL** compiles custom drivers
- **FORCE** ignore manual changes to source
- **BUILD_ALL** cycle through selected boards and make images
Image compiling example with partial cache:
[su_youtube_advanced url="https:\/\/youtu.be\/zeShf12MNLg" controls="yes" showinfo="no" loop="yes" rel="no" modestbranding="yes"]
## Creating compile environment ##
At first run we are downloading all necessary dependencies.
## Using board configuration ##
We need to get some predefined variables about selected board. Which kernel & uboot source to use, modules to load, which is the build number, do we need to have a single partition or dual with boot on fat, which extra drivers to compile out of the kernel tree, ...
**Board configuration example:**
REVISION="1.1" # Version number is altered by board maintainer
BOOTSIZE="16" # FAT boot partition in MB, 0 for none
BOOTLOADER="https://github.com/UDOOboard/uboot-imx" # Uboot source location
BOOTSOURCE="u-boot-neo" # Local folder where to download it
BOOTCONFIG="udoo_neo_config" # Which compile config to use
CPUMIN="198000" # CPU minimum frequency
CPUMAX="996000" # CPU minimum frequency
MODULES="bonding" # old kernel modules
MODULES_NEXT="" # new kernel modules
LINUXKERNEL="https://github.com/UDOOboard/linux_kernel" # kernel source location
LINUXCONFIG="linux-udoo-neo" # kernel configuration
LINUXSOURCE="linux-neo" # Local folder where to download it
LINUXFAMILY="udoo" # boards share kernel
This **isn't ment to be user configurable** but you can alter variables if you know what you are doing.
## Downloading sources ##
When we know where are the sources and where they need to be the download / update process starts. This might take from several minutes to several hours.
## Patching ##
In patching process we are appling patches to sources. The process is defined in:
lib/patching.sh
## User patching ##
You can add your own patches outside build script. Place your patches inside appropriate directory, for kernel or u-boot. There are no limitations except all patches must have ending **.patch**
userpatches/kernel
userpatches/u-boot
## Compiling or choosing from cache ##
- compile from scratch with additional source cleaning and menu config.
- select cached / already made kernel
## Debootstrap ##
Debootstrap creates fresh Debian / Ubuntu root filesystem templates or use cached under:
output/cache/rootfs/$DISTRIBUTION.tgz
To recreate those files you need to remove them manually.
## Kernel install ##
When root filesystem is ready we need to instal kernel image with modules, board definitions, firmwares. Along with this we set the CPU frequency min/max, hostname, modules, network interfaces templates. Here is also the place to install headers and fix + native compile them on the way.
## Distribution fixes ##
Each distributin has it's own way of doing things:
- serial console
- different packets
- configuration locations
## Board fixes ##
Each board has their own tricks: **different device names, firmware loaders, configuration (de)compilers, hardware configurators**
## Desktop installation ##
You can build a desktop withing the image. Consider this feature as experimental. Hardware acceleration on Allwinner boards is working within kernel 3.4.x only.
## External applications ##
This place is reserved for custom applications. There is one example of application - USB redirector.
## Closing image ##
There is an option to add some extra commands just before closing an image which is also automaticaly shrink to it's actual size with some small reserve.
## Directory structure ##
It will be something like this:
compile.sh compile execution script
lib/bin/ blobs, firmwares, static compiled, bootsplash
lib/config/ kernel, board, u-boot, hostapd, package list
lib/documentation/ user and developers manual
lib/patch/ collection of kernel and u-boot patches
lib/scripts/ firstrun, arm hardware info, firmware loaders
lib/LICENSE licence description
lib/README.md quick manual
lib/boards.sh board specfic installation, kernel install, desktop install
lib/common.sh creates environment, compiles, shrink image
lib/configuration.sh boards presets - kernel source, config, modules, ...
2015-12-09 21:33:59 +03:00
lib/debootstrap.sh basic system template creation
lib/distributions.sh system specific installation and fixes
lib/main.sh user input and script calls
lib/patching.sh board and system dependend kernel & u-boot patch calls
lib/repo-update.sh creates and updates your local repository
lib/repo-show-sh show packets in your local repository
lib/upgrade.sh script to upgrade older images
sources/ source code for kernel, uboot and other utilities
output/repository repository
output/cache cache for root filesystem and headers compilation
output/debs deb packeges
output/images zip packed RAW image
userpatches/kernel put your kernel patches here
userpatches/u-boot put your u-boot patches here
## Additional info ##
- [Allwinner SBC community](https://linux-sunxi.org/)