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 this repository by running:
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.|
|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.
The fastest way to compile a kernel is to cross-compile on a powerful PC. For that, you first need to install a suitable toolchain and you need to add its location to your PATH. Then you can proceed as follows:
- Clone the sunxi kernel repository, and descend into the resulting directory:
git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi.git cd linux-sunxi
- Configure your kernel, depending on the SoC you have:
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
At this point you can fine-tune your kernel configuration by running:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- Now you can build the kernel image and the modules:
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 CPUs available.
- To complete compilation, you need to create a full module tree:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install
- 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's 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.