Difference between revisions of "Rockchip Kernel"
Line 1: | Line 1: | ||
− | + | == Contents == | |
− | <pre> | + | |
+ | [[[hide]]] | ||
+ | |||
+ | *[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Download_Kernel 1Download Kernel] | ||
+ | *[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Supported_SoCs_and_Devices 2Supported SoCs and Devices] | ||
+ | *[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Configure_and_Build 3Configure and Build] | ||
+ | *[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Install_Boot.2Fkernel 4Install Boot/kernel] | ||
+ | **[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Generate_ext2fs.C2.A0boot_partition 4.1Generate ext2fs boot partition] | ||
+ | **[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Generate_fatfs_boot_partition 4.2Generate fatfs boot partition] | ||
+ | ***[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Generate_boot.img_in_fatfs 4.2.1Generate boot.img in fatfs] | ||
+ | ***[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Update_boot.img_via_U-Boot_in_target 4.2.2Update boot.img via U-Boot in target] | ||
+ | **[http://opensource.rock-chips.com/index.php?title=Rockchip_Kernel&oldid=1742#Boot_from_U-Boot 4.3Boot from U-Boot] | ||
+ | |||
+ | = Download Kernel = | ||
+ | |||
+ | You can clone the rockchip kernel repository from github which is kernel 4.4 based: | ||
+ | <pre>git clone https://github.com/rockchip-linux/kernel.git</pre> | ||
+ | |||
+ | | ||
+ | |||
+ | = Supported SoCs and Devices = | ||
+ | |||
+ | Rockchip kernel 4.4 supports: | ||
+ | |||
+ | RK3036, RK3066, RK312X, RK3188, RK322X,[http://opensource.rock-chips.com/wiki_RK3288 RK3288], [http://opensource.rock-chips.com/wiki_RK3328 RK3328], RK3368, [http://opensource.rock-chips.com/wiki_RK3399 RK3399] | ||
+ | |||
+ | | ||
+ | |||
+ | = Configure and Build = | ||
+ | |||
+ | You will need to use rockchip_linux_defconfig for Linux OS | ||
+ | |||
+ | For ARM v7 | ||
+ | <pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rockchip_linux_defconfig | ||
+ | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 | ||
</pre> | </pre> | ||
− | + | For ARM V8 | |
+ | <pre>make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_linux_defconfig | ||
+ | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4</pre> | ||
+ | |||
+ | 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. | ||
+ | <pre>mkdir boot | ||
+ | cp arch/arm64/boot/dts/rockchip/rk3399-evb.dtb boot/rk3399.dtb | ||
+ | cp arch/arm64/boot/Image boot/</pre> | ||
+ | |||
+ | Add [http://opensource.rock-chips.com/images/6/60/Boot_extlinux.zip extlinux/extlinux.conf] for distro boot. | ||
+ | <pre>mkdir boot/extlinux | ||
+ | vi boot/extlinux/extlinux.conf</pre> | ||
+ | |||
+ | | ||
+ | <pre>label rockchip-kernel-4.4 | ||
+ | kernel /Image | ||
+ | fdt /rk3399.dtb | ||
+ | append earlycon=uart8250,mmio32,0xff1a0000 root=PARTUUID=B921B045-1D rootwait rootfstype=ext4 init=/sbin/init</pre> | ||
+ | |||
+ | For armv7 | ||
+ | <pre>label rockchip-kernel-4.4 | ||
+ | kernel /zImage | ||
+ | fdt /rk3288.dtb | ||
+ | append earlyprintk console=ttyS2,1500000n8 rw root=PARTUUID=69dad710-2c rootwait rootfstype=ext4 init=/sbin/init</pre> | ||
+ | |||
+ | You need to change the base address of debug UART, root partition for your board. | ||
+ | |||
+ | Pls reference to [http://opensource.rock-chips.com/wiki_Partitions rockchip Linux parttion definition] for rootfs partition and where boot to flash. | ||
+ | |||
+ | After all these files prepare completely, we write the file to the boot partition | ||
+ | |||
+ | | ||
+ | |||
+ | == Generate ext2fs boot partition == | ||
+ | |||
+ | by genext2fs: | ||
+ | <pre>genext2fs -b 32768 -B $((32*1024*1024/32768)) -d boot/ -i 8192 -U boot_rk3399.img</pre> | ||
+ | |||
+ | According to Rockchip partition definition, you need to flash this image to boot partiton which offset is 0x8000. | ||
− | + | | |
− | <pre> | + | |
− | </pre> | + | == Generate fatfs boot partition == |
+ | |||
+ | === Generate boot.img in fatfs === | ||
+ | |||
+ | Below commands can generate a fatfs boot.img | ||
+ | <pre>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</pre> | ||
+ | |||
+ | Done! | ||
− | + | Flash this boot.img to boot partition, which is offset 0x8000 in Rockchip partition definition. | |
− | |||
− | |||
− | + | === Update boot.img via U-Boot in target === | |
− | |||
− | |||
− | + | After flash and boot the U-Boot, write the gpt table from default partition table | |
− | <pre> | + | <pre>gpt write mmc 1 $partitions |
− | </pre> | + | gpt verify mmc 1 $partitions</pre> |
− | + | connect target to PC and start the ums in command line: | |
− | <pre> | + | <pre>ums 0 mmc 1:6</pre> |
− | </pre> | ||
− | + | We should able to see a device connect to PC, formate and copy data into the partition(dev/sdb6 for example). | |
− | <pre> | + | <pre>sudo mkfs.fat /dev/sdb6 |
+ | cp -r boot/* /media/machine/9F35-9565/ | ||
</pre> | </pre> | ||
− | + | 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: | |
+ | <pre>gpt write mmc 0 $partitions</pre> | ||
− | + | Then boot from eMMC or reset: | |
+ | <pre>boot</pre> | ||
− | + | If everything is OK, you should able to see the U-Boot log like this: | |
+ | <pre>switch to partitions #0, OK | ||
+ | mmc0(part 0) is current device | ||
+ | Scanning mmc 0:6... | ||
+ | Found /extlinux/extlinux.conf | ||
+ | Retrieving file: /extlinux/extlinux.conf | ||
+ | 205 bytes read in 82 ms (2 KiB/s) | ||
+ | 1: upstream-4.10 | ||
+ | Retrieving file: /Image | ||
+ | 13484040 bytes read in 1833 ms (7 MiB/s) | ||
+ | append: earlycon=uart8250,mmio32,0xff1a0000 console=ttyS2,1500000n8 rw root=/dev/mmcblk0p7 rootwait rootfstype=ext4 init=/sbin/init | ||
+ | Retrieving file: /rk3399.dtb | ||
+ | 61714 bytes read in 54 ms (1.1 MiB/s) | ||
+ | ## Flattened Device Tree blob at 01f00000 | ||
+ | Booting using the fdt blob at 0x1f00000 | ||
+ | Loading Device Tree to 000000007df14000, end 000000007df26111 ... OK | ||
− | + | Starting kernel ...</pre> |
Revision as of 06:24, 11 May 2018
Contents
Contents
[[[hide]]]
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
Supported SoCs and Devices
Rockchip kernel 4.4 supports:
RK3036, RK3066, RK312X, RK3188, RK322X,RK3288, RK3328, RK3368, RK3399
Configure and Build
You will need to use rockchip_linux_defconfig for Linux OS
For ARM v7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rockchip_linux_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
For ARM V8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_linux_defconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -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/arm64/boot/dts/rockchip/rk3399-evb.dtb boot/rk3399.dtb cp arch/arm64/boot/Image boot/
Add extlinux/extlinux.conf for distro boot.
mkdir boot/extlinux vi boot/extlinux/extlinux.conf
label rockchip-kernel-4.4 kernel /Image fdt /rk3399.dtb append earlycon=uart8250,mmio32,0xff1a0000 root=PARTUUID=B921B045-1D rootwait rootfstype=ext4 init=/sbin/init
For armv7
label rockchip-kernel-4.4 kernel /zImage fdt /rk3288.dtb append earlyprintk console=ttyS2,1500000n8 rw root=PARTUUID=69dad710-2c rootwait rootfstype=ext4 init=/sbin/init
You need to change the base address of debug UART, root partition for your board.
Pls reference to rockchip Linux parttion definition for rootfs partition and where boot to flash.
After all these files prepare completely, we write the file to the boot partition
Generate ext2fs boot partition
by genext2fs:
genext2fs -b 32768 -B $((32*1024*1024/32768)) -d boot/ -i 8192 -U boot_rk3399.img
According to Rockchip partition definition, you need to flash this image to boot partiton which offset is 0x8000.
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.
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 1 $partitions gpt verify mmc 1 $partitions
connect target to PC and start the ums in command line:
ums 0 mmc 1:6
We should able to see a device connect to PC, formate and copy data into the partition(dev/sdb6 for example).
sudo mkfs.fat /dev/sdb6 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:6... Found /extlinux/extlinux.conf Retrieving file: /extlinux/extlinux.conf 205 bytes read in 82 ms (2 KiB/s) 1: upstream-4.10 Retrieving file: /Image 13484040 bytes read in 1833 ms (7 MiB/s) append: earlycon=uart8250,mmio32,0xff1a0000 console=ttyS2,1500000n8 rw root=/dev/mmcblk0p7 rootwait rootfstype=ext4 init=/sbin/init Retrieving file: /rk3399.dtb 61714 bytes read in 54 ms (1.1 MiB/s) ## Flattened Device Tree blob at 01f00000 Booting using the fdt blob at 0x1f00000 Loading Device Tree to 000000007df14000, end 000000007df26111 ... OK Starting kernel ...