准备

toolchain

请看友善 som-rk3399 uboot 移植

linux kernel

kernel 下载

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

编译 kernel

1
2
3
make distclean ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
make rockchip_linux_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
make -j12 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

编译 Rockchip RKIMG format image

1
make rk3399-evb-ind-lpddr4-linux.img

编译完成输出以下文件

1
2
3
4
kernel/
├── boot.img
├── kernel.img
└── resource.img

安装发行版的引导/内核

我们在 U-Boot 中使用 distro 启动,因此我们需要为 U-Boot 制作一个启动分区,其中包含内核映像和 dtb。

1
2
cp arch/arm64/boot/dts/rockchip/rk3399-evb-ind-lpddr4-linux.dtb boot/rk3399.dtb
cp arch/arm64/boot/Image boot/

添加 extlinux/extlinux.conf 到 distro boot.

1
2
mkdir boot/extlinux
vi boot/extlinux/extlinux.conf

输入下面这段保存退出

1
2
3
4
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

现在的 boot 文件夹目录架构为

1
2
3
4
5
boot
├── extlinux
│ └── extlinux.conf
├── Image
└── rk3399.dtb

生成 ext2fs 启动分区

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

生成 fatfs 启动分区

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