Rockchip RK3036 Kernel

From Rockchip open source Document
Jump to: navigation, search

Download Kernel

You can clone the rockchip kernel repository from github which is kernel 4.4 based:

git clone https://github.com/rockchip-linux/kernel.git

 

Configure and Build

You will need to use rockchip_linux_defconfig for Linux OS

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rockchip_linux_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

 

Then you can get Image/zImage and dtb file.

 

Install Boot/kernel

We use distro boot in U-Boot, so we need to make a boot partition for U-Boot with kernel image and dtb inside.

mkdir boot
cp arch/arm/boot/dts/rk3036-kylin.dtb boot/rk3036-kylin.dtb
cp arch/arm/boot/zImage boot/

Add extlinux/extlinux.conf for distro boot.

mkdir boot/extlinux
cat >> boot/extlinux/extlinux.conf << EOF
label kernel-4.4
    kernel /zImage
    fdt /rk3036-kylin.dtb
    append  earlyprintk console=tty1 console=ttyS2,115200n8 rw root=PARTUUID=69dad710-2c rootfstype=ext4 init=/sbin/init rootwait 
EOF

 

Generate ext2fs boot partition

by genext2fs:

genext2fs -b 32768 -B $((32*1024*1024/32768)) -d boot/ -i 8192 -U boot_rk3036.img

According to Rockchip partition definition, you need to flash this image to boot partiton which offset is 0x8000.

sudo rkdeveloptool wl 0x8000   boot_rk3036.img

Then, how to generate boot.img? Please have a look at the following:

Generate fatfs boot partition

Generate boot.img in fatfs

Below commands can generate a fatfs boot.img

dd if=/dev/zero of=boot.img bs=1M count=32
sudo mkfs.fat boot.img
mkdir tmp
sudo mount boot.img tmp/
cp -r boot/* tmp/
umount tmp

Done!

Flash this boot.img to boot partition, which is offset 0x8000 in Rockchip partition definition.

sudo rkdeveloptool wl 0x8000 boot.img

Update boot.img via U-Boot in target

After flash and boot the U-Boot, write the gpt table from default partition table

gpt write mmc 0 $partitions
gpt verify mmc 0 $partitions

connect target to PC and start the ums in command line:

ums mmc 0

We should able to see a device connect to PC, formate and copy data into the partition(dev/sdb6 for example).

cp -r boot/* /media/machine/9F35-9565/

Done!

 

Boot from U-Boot

If you are using genext2fs to genarate the boot.img, you need write the gpt table in U-Boot command line:

gpt write mmc 0 $partitions

Then boot from eMMC or reset:

boot

If everything is OK, you should able to see the U-Boot log like this:

switch to partitions #0, OK
mmc0(part 0) is current device
Scanning mmc 0:4...
Found /extlinux/extlinux.conf
Retrieving file: /extlinux/extlinux.conf
reading /extlinux/extlinux.conf
192 bytes read in 4 ms (46.9 KiB/s)
1:      kernel-4.4
Retrieving file: /zImage
reading /zImage
7810312 bytes read in 726 ms (10.3 MiB/s)
append: earlyprintk console=tty1 console=ttyS2,115200n8 rw root=PARTUUID=69dad710-2c rootfstype=ext4 init=/sbin/init rootwait
Retrieving file: /rk3036-kylin.dtb
reading /rk3036-kylin.dtb
23641 bytes read in 6 ms (3.8 MiB/s)
Kernel image @ 0x62000000 [ 0x000000 - 0x772d08 ]
## Flattened Device Tree blob at 61f00000
   Booting using the fdt blob at 0x61f00000
   Loading Device Tree to 7df52000, end 7df5ac58 ... OK

Starting kernel ...

 

DEBUG Kernel

if you have some issues on bringup kernel, you can enable the earlyprintk configs for rockchip_linux_defconfig

For example:

cat >> arch/arm/configs/rockchip_linux_defconfig << EOF 
CONFIG_DEBUG_LL=y
CONFIG_DEBUG_RK29_UART2=y
CONFIG_EARLY_PRINTK=y
EOF

Then build and re-install kernel for debug.