Manual build howto

(Redirected from FirstSteps)
Jump to: navigation, search

This page describes the process to combine sunxi U-Boot, linux kernel and other bits together to create a useful SD-card from scratch, the basis for further hacking.

This page is only suited for A10, A13/A10s and A20 based devices. The manual build howtos for other SoCs are at the end of this page.

We of course do not build a whole distribution, we only build U-Boot, the kernel and a handful of tools, and then use an existing rootfs to get a useful system. Depending on the rootfs size, you might want to use a 2GB or larger SD Card. SD-card partitioning and formatting will be taken care of later.


Getting a cross toolchain

For this part, you need to refer to our toolchain page.

Building u-boot

Please refer to U-Boot#Compilation

Building script.bin

First, get the following repositories:

git clone git://
git clone git://

Descend into sunxi-tools and run the command 'make fex2bin'.

Then, get into the sunxi-board tree and find the fex file for your board. You also need to find out the MAC Address of Ethernet adapter, as you will need to fix the MAC in the [dynamic] section of the fex file, to match the one for your device:

MAC = "000000000000"

to, for example:

MAC = "0123456789AB"

Note: If the [dynamic] section does not exist in your .fex file, you can just add it with your MAC address.

For more information see Ethernet.

Now you can create the script.bin file:

../../../sunxi-tools/fex2bin <your-board>.fex script.bin

You will need this later on when finishing u-boot installation.

Building the kernel

Please refer to our Kernel compilation guide.

Setting up the boot partition

install bootloader and partition card

Please execute commands in Bootable_SD_card#Cleaning, Bootable_SD_card#Bootloader, Bootable_SD_card#Partitioning

Mount your boot or root partition again:

mount /dev/${card}1 /mnt

install kernel and script.bin

Now you can install your built kernel into the boot partition:

cp /home/user/dir/linux-sunxi/arch/arm/boot/uImage /mnt

Same for the script.bin:

cp /home/user/dir/sunxi-boards/sys_config/aXX/script.bin /mnt


Now create boot.cmd in /mnt or /mnt/boot with the following content:

kernel arguments

For traditional layout with separate boot partition the kernel will use the second partition (mmcblk0p2) for root:

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 ${extra}

With single partition use the first:

setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rootwait panic=10 ${extra}

You may want to add more arguments to set up display, etc

load kernel

These commands load the script.bin and kernel from the first partition.

fatload mmc 0 0x43000000 script.bin || ext2load mmc 0 0x43000000 boot/script.bin
fatload mmc 0 0x48000000 uImage     || ext2load mmc 0 0x48000000 boot/uImage
bootm 0x48000000


Now you can generate boot.scr:

mkimage -C none -A arm -T script -d /mnt/boot.cmd /mnt/boot.scr


Unmount the partition again.

umount /mnt

Setting up the rootfs

Please refer to Bootable_SD_card#Rootfs

As a last step you need to copy the kernel modules into the newly created rootfs. Change into the top level directory of the newly created rootfs and run:

mount ${cardroot} /mnt
mkdir -p /mnt/lib/modules
rm -rf /mnt/lib/modules/
cp -r <PATH_TO_KERNEL_TREE>/output/lib /mnt/
umount /mnt

(Replace <PATH_TO_KERNEL_TREE> with the directory you have built your kernel in as described above.)


Now you should be able to unmount your SDCard filesystems, and you should be able to boot your brand new installation.

See also

We have Manual build howtos for all SoCs:

Personal tools