Mainline Kernel
Update time:2018-03-13 Views:4591
1 Prebuilt Firmware
We provide an prebuilt Ubuntu 14.04 firmware, armed with mainline kernel, with features listed below:
Builtin Mali kernel/user drivers, and compiled OpenGL ES demos from SDK.
Use internal eMMC storage, instead of extra TF card.
HDMI display support.
and flash the firmware with this guide.
2 Preparation
The working directory below is assumed to be "~/proj/linux-rockchip":
mkdir -p ~/proj/linux-rockchip
2.1 Install Development Packages
Install development packages:
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev # If using 64 bits Ubuntu, you need also: sudo apt-get install libc6:i386
2.2 Cross Compiling Toolchain
We use the Android SDK's prebuilt cross compiling toolchain.
Copy Android SDK's prebuilt to the working directory:
cd ~/proj/linux-rockchip cp -rl ANDROID_SDK/prebuilts .
arm-eabi-4.6 and arm-eabi-4.7 are required in "prebuilts/gcc/linux-x86/arm/". arm-eabi-4.7 is used to compile U-boot, while arm-eabi-4.6 is used to compile kernel.
2.3 Tools
Install some tools in the stock ANDROID SDK to system for convenience:
cd ANDROID_SDK cp ./kernel/mkkrnlimg /usr/local/bin cp ./RKTools/linux/Linux_Upgrade_Tool_v1.2/upgrade_tool /usr/local/bin
rkflashkit is recommended to install: https://github.com/linuxerwang/rkflashkit
3 parameter
Here's the content of parameter file used in the prebuilt firmware, with essential info of partition scheme:
kernel: flashed with kernel.img (RK KNRL format, packed with mkkrnlimg)
boot: flashed with boot.img (RK KNRL format, packed with mkkrnlimg)
linuxroot: flashed with linuxroot.img (ext4fs format)
FIRMWARE_VER:4.4.2 MACHINE_MODEL:rk30sdk MACHINE_ID:007 MANUFACTURER:RK30SDK MAGIC: 0x5041524B ATAG: 0x60000800 MACHINE: 3066 CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1 #KERNEL_IMG: 0x62008000 #FDT_NAME: rk-kernel.dtb #RECOVER_KEY: 1,1,0,20,0 CMDLINE:console=ttyS2,115200 earlyprintk root=/dev/block/mtd/by-name/linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00008000@0x00002000(kernel),0x00008000@0x0000A000(boot),0x00002000@0x00012000(misc),0x00001000@0x00014000(backup),-@0x00015000(linuxroot)
Flash parameter file to device:
sudo rkflashkit flash @parameter parameter.txt
To fetch parameter file from device, run:
sudo rkflashkit backup @parameter parameter.txt
4 U-Boot
Mainline kernel needs modified U-Boot, instead of the one in the SDK.
4.1 Compile U-Boot
Download and compile U-Boot:
cd ~/proj/linux-rockchip git clone -b u-boot-rk3288 https://github.com/linux-rockchip/u-boot-rockchip.git u-boot cd u-boot make rk3288_defconfig make -j4
If U-Boot is built succeesfully, the last lines of the build process are:
LD u-boot OBJCOPY u-boot.bin OBJCOPY u-boot.srec ./tools/boot_merger --subfix ".01.bin" ./tools/rk_tools/RKBOOT/RK3288.ini out:RK3288UbootLoader.bin fix opt:RK3288UbootLoader_V2.19.01.bin merge success(RK3288UbootLoader_V2.19.01.bin)
"RK3288UbootLoader_V2.19.01.bin" is the newly built u-boot image which is ready to flash using upgrade_tool:
4.2 Flash U-Boot
sudo upgrade_tool ul RK3288UbootLoader_V2.19.01.bin
5 Kernel
Pace of mainline kernel development is fast. Up till now, our test branch is based on v4.0-rc1 .
The test branch is at:
https://github.com/TeeFirefly/linux-rockchip/tree/firefly
This branch is based on:
https://git.kernel.org/cgit/linux/kernel/git/mmind/linux-rockchip.git/log/?h=v4.1-armsoc/dts
And import Mali kernel drive code from:
https://github.com/mmind/linux-rockchip/tree/devel/mali-workbench
Since support of command line parameter "mtdparts=" is added, eMMC partition scheme can be specified in the parameter file, which is RK SDK's traditional way.
5.1 Compile Kernel
First, fetch the source code:
cd ~/proj/linux-rockchip git clone -b firefly https://github.com/TeeFirefly/linux-rockchip.git kernel
Then make kernel.img and modules using following commands:
cd ~/proj/linux-rockchip/kernel export ARCH=arm export CROSS_COMPILE=$PWD/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- make rk3288_firefly_defconfig make -j4 zImage make rk3288-firefly.dtb cat arch/arm/boot/zImage arch/arm/boot/dts/rk3288-firefly.dtb > zImage-dtb mkkrnlimg zImage-dtb kernel.img # compile and install modules make -j4 modules [ -d install_mod ] && rm -rf install_mod make INSTALL_MOD_PATH=$PWD/install_mod modules_install # Install the files in install_mod to the root filesystem.
5.2 Flash Kernel
sudo rkflashkit flash @kernel /path/to/kernel.img
6 Initramfs
6.1 Create boot.img
cd ~/proj/linux-rockchip git clone https://github.com/TeeFirefly/initrd.git make -C initrd mkkrnlimg initrd.img boot.img # pack as RK KRNL format
6.2 Flash boot.img
sudo rkflashkit flash @boot /path/to/boot.img
7 Root Filesystem
To create the Linux root filesystem, please refer to Build Ubuntu Rfs.
Flash linuxroot.img:
sudo upgrade_tool di linuxroot /path/to/linuxroot.img
8 FAQ
8.1 Known Issues
VGA: VGA display support not added.
WiFi:AP6335 driver not ported.
Mainline kernel support of RK3288 is constantly improving, but not stable yet. You may encounter slow refreshness of HDMI display, not perfect support of USB devices, etc.
8.2 What Is zImage-dtb ?
zImage-dtb appends the dtb to the kernel image, which works only if CONFIG_ARM_APPENDED_DTB turns on.