This page describes how to get the sunxi specific linux kernel built for your device.
Public Linux Kernel support for the sunxi family (Allwinner A10, A13, ...) started with a source drop of 2.6.36 made by Ainol, followed by an official release of 2.6.36 sources by Allwinner. Developement jumped forward after a source release of 3.0.8 made by Qware
The main sunxi kernel repository is available at our projects github.
You can clone the entire (huge) repository by installing the git package and running:
git clone https://github.com/linux-sunxi/linux-sunxi.git
but if you just want to build our kernel, then follow the guide below.
There are several branches in our kernel tree. Unless you wish to do some specific development, you should probably stick to the sunxi-3.4 branch as this will get the most out of your hardware quickly.
|sunxi-3.0||stable||sunxi support initially based on lichee3-3.0.8 and keeping reference-3.0 as it's mainline reference.|
|sunxi-3.4||stable||sunxi support forward ported from sunxi-3.0 and keeping reference-3.4 as it's mainline reference. [PREFERRED]|
|experimental/sunxi-3.10||experimental||sunxi support forward ported from sunxi-3.4, backporting from mainline and keeping reference-3.10 as it's mainline reference.|
|experimental/sunxi-3.14||highly experimental||fix me|
|sunxi-2.6.36||legacy||sunxi support based on the official 2.6.36 release.|
|reference-3.0||reference||merge of mirror/android-3.0 and the latest v3.0.x mainline stable tag. Used to see what of sunxi-3.0 is sunxi specific.|
|reference-3.4||reference||merge of mirror/android-3.4 and the latest v3.4.x mainline stable tag. Used to see what of sunxi-3.4 is sunxi specific.|
|reference-3.10||reference||merge of mirror/android-3.10 and the latest v3.10.x mainline stable tag. Used to see what of sunxi-3.10 is sunxi specific.|
|mirror/allwinner-2.6.36||mirror||mirror of allwinner's official 2.6.36 tree (aka lichee2)|
|mirror/android-2.6.36||mirror||mirror of Android's kernel-common for Android 2.3 (Gingerbread)|
|mirror/android-3.0||mirror||mirror of Android's kernel-common for Android 4.0 (Ice Cream Sandwich), 4.1 (Jelly Bean)|
|mirror/android-3.4||mirror||mirror of Android's 3.4 kernel branch.|
|mirror/android-3.10||mirror||mirror of Android's 3.10 kernel branch.|
|mirror/master||mirror||mirror of Linus Torvalds' master.|
|lichee-3.0.8-sun4i||compat||based on Qware's source release, kept only to let people drop-in new modules into a GPL-violating lichee3/A10 based install.|
|wip/*||WIP||experimental and very likely to 1) be rebased, 2) be seriously broken|
If unsure, use the sunxi-3.4 branch.
Get a toolchain
If you haven't done so before, get a suitable toolchain installed and added to your PATH.
Clone the repository
This command will clone the sunxi-3.4 branch:
git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi.git
If you just want a quick build and do not wish to download a big git repository, then run:
git clone -b sunxi-3.4 --depth 1 https://github.com/linux-sunxi/linux-sunxi.git
This will create a so-called shallow clone (still a 500MB download), which does not allow for much in the way of development or changes.
Set default config
For A10 use:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun4i_defconfig
For A13 use:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun5i_defconfig
For A20 use:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
After you have set a default configuration, you can fine-tune your kernel configuration.
For this you will need ncurses development code installed. So for example, on a system that uses the apt package manager, run the following:
apt-get install libncurses5-dev
Now you can run menuconfig, and edit your configuration:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
Make sure you have the package u-boot-tools installed, then:
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
The -j4 option runs 4 make instances in parallel to speed up compilation. Please adjust this to the number of CPU cores/thread execution units available.
As a final step, create the full module tree:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install
The INSTALL_MOD_PATH option specifies the directory where the full module tree will be made available, in this example, it will be the output directory under the kernel build directory itself.
Now you have the following sitting in your kernel tree:
The uImage file needs to be started by u-boot, and the modules directory needs to be copied to the /lib/modules on the target rootfs.
There is some sunxi code available in Linus' tree. But this is not suited for normal use yet, and will likely need a lot more work to get there. For more information, see our mainline kernel howto.