This is an old revision of the document!
Table of Contents
Installing required packages
You will need install required packages before you start to build Linux kernel on your Ubuntu desktop.
$ sudo apt-get update $ sudo apt-get install git lzop build-essential gcc libncurses5-dev
Kernel
This page introduce how you can download and compile the Linux kernel for ODROID-C2.
Toolchain (4.9.2)
Click one of the site to download toolchain to build Linux kernel.
Once the download is done, extract the tarball to /opt/toolchains/.
$ sudo mkdir -p /opt/toolchains $ sudo tar xvf gcc-linaro-aarch64-none-elf-4.9-2014.09_linux.tar.xz -C /opt/toolchains/
In order to add the toolchain path to PATH, paste below lines to $HOME/.bashrc.
export ARCH=arm64 export CROSS_COMPILE=aarch64-none-elf- export PATH=/opt/toolchains/gcc-linaro-aarch64-none-elf-4.9-2014.09_linux/bin/:$PATH
You can apply the change if you login again or import to apply this change, login again or evaluate $HOME/.bashrc with source command.
$ source ~/.bashrc
You can check if the toolchain installed above works properly while checking the version of toolchain. If you can find gcc version 4.9.2 20140904 (prerelease) at the end of the line, the toolchain is well installed.
$ aarch64-none-elf-gcc -v Using built-in specs. COLLECT_GCC=aarch64-none-elf-gcc COLLECT_LTO_WRAPPER=/opt/toolchains/gcc-linaro-aarch64-none-elf-4.9-2014.09_linux/bin/../libexec/gcc/aarch64-none-elf/4.9.2/lto-wrapper Target: aarch64-none-elf Configured with: /cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/src/gcc-linaro-4.9-2014.09/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=aarch64-none-elf --prefix=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/install --with-local-prefix=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/install/aarch64-none-elf --without-headers --with-newlib --enable-threads=no --disable-shared --with-pkgversion='crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --with-arch=armv8-a --disable-__cxa_atexit --with-gmp=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/aarch64-none-elf/build/static --with-mpfr=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/aarch64-none-elf/build/static --with-mpc=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/aarch64-none-elf/build/static --with-isl=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/aarch64-none-elf/build/static --with-cloog=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/aarch64-none-elf/build/static --with-libelf=/cbuild/slaves/oorts/crosstool-ng/builds/aarch64-none-elf-linux/.build/aarch64-none-elf/build/static --enable-lto --enable-linker-build-id --disable-libmudflap --disable-libgomp --disable-libssp --disable-libstdcxx-pch --enable-multiarch --disable-multilib --enable-languages=c,c++,fortran Thread model: single gcc version 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09)
Checkout
You can checkout Linux kernel source tree from Hardkernel's Github, please note that we distribute the Linux kernel in different branches for Android and other Linux distributions.
Android
$ git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidc2-3.14.y-android $ cd linux
Compile
Note
- If you want to download & build only Android Linux kernel source code without another Android BSP, you face the error message as below:
- drivers/amlogic/wifi/Kconfig:26: can't open file “../hardware/wifi/realtek/drivers/8192cu/rtl8xxx_CU/Kconfig”
- Please delete the last line as below in 'drivers/amlogic/wifi/Kconfig' file if you will build only Android Linux kernel.
source “../hardware/wifi/realtek/drivers/8192cu/rtl8xxx_CU/Kconfig”
You must do kernel configuration for ODROID-C2, then start to build. Adding -j option on make command will help you to finish compiling faster.
$ make odroidc2_defconfig $ make <-j8> Image dtbs modules
You have done to compile the Linux kernel (Image), the device tree file (.dtb) and kernel modules (.ko).
Custom Kernel Build
If you have some kernel drivers wish to include for your custom build, you can select the drivers easily in Linux kernel tree. make menuconfig will show you text based menus help you to select kernel drivers.
$ make menuconfig
Once you done selecting the drivers, exit from the menu screen. Then you can start kernel build with make again.
$ make <-j4> Image modules
When you exit from kernel menu screen, you will have .config in the current directory what have changes for your custom build. You can back up this as a file, my_kernel.config for example, or can make a patch if you manage your own git.
$ cp .config arch/arm64/configs/odroidc2_defconfig $ git add arch/arm64/configs/odroidc2_defconfig $ git commit -s -m "Change the kernel config file for ODROID-C2" $ git push
Installation
There are different instructions to install Linux kernel image and device tree for Android and Linux. Since Android loads both from a boot partition, we have to use fastboot to install into the dedicated partition. Please refer the partition table from here. In contrast, Linux boots by the instructions described in boot.ini the 1st FAT partition.
Android
This is the instruction to install kernel image, Image, to the boot card.
$ fastboot flash boot <path/of/your/Image>
This is to install a device tree file, meson64_odroidc2.dtb.
$ fastboot flash dtb <path/of/your/meson64_odroidc2.dtb>