booti,引导ARM64 kernel image----Image;
bootz,引导ARM kernel image----zImage;
bootm,引导u-boot自定义的kernel image----uImage。
booti ${loadaddr} ${rdaddr}:0x${filesize} ${fdtaddr}
rockchip开发板引导openwrt镜像,引导第三方固件。rockchip刷openwrt
需要编译uboot,去掉OPTEE安全验证,否则镜像加载会报证书错误等。
在分局表内,配置一个ex2分区,作为镜像分区,把未压缩的kernel镜像,设备树文件,直接以文件模式直接拷贝到分区内,
在uboot内加载镜像和设备树到可用的内存地址。然后可以直接用booti命令直接引导。
/* 在设备树中确保MMC启用 */
&sdmmc {
status = "okay";
/* 如果px30.dtsi中已有配置,这里可以省略 */
};
# 编译内核和设备树
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- px30-evb.dtb
uboot编译过程
mkdir -p ../prebuilts/gcc/linux-x86/aarch64/
624 cd ../prebuilts/gcc/linux-x86/aarch64/
625 wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
626 tar -xf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
630 cd ~/u-boot/
以下是编译命令:
631 ./make.sh px30
修改配置文件:去掉以下命令查询到的安全属性:
grep -n "OPTEE\|TEE\|TRUSTZONE" ./configs/px30_defconfig
chosen {
linux,initrd-end = < 0x00 0x31dc830b >;
bootargs = "root=/dev/mmcblk2p10 rootwait earlycon=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 mode=normal sn= hardware=HW20C04-P1-ECUBE-ECO-CG type=WG name=ECUBE-ECO-CG model=ecube-eco net.ifnames=0";
linux,initrd-start = < 0x00 0x316cc000 >;
};
openwrt引导测试
ext2load mmc 0:8 0x02080000 vmlinux
ext2load mmc 0:8 0x02000000 second.dtb
把root.ex4刷新到mmc 0:10后,root挂载成功
ext2load mmc 0:8 0x02080000 Image
ext2load mmc 0:8 0x02000000 px30-evb.dtb
fdt addr 0x02000000
fdt resize 4000
fdt addr 0x02000000
fdt resize 4000
fdt set /chosen bootargs "root=/dev/mmcblk1p10 console=ttyFIQ0 earlycon=uart8250,mmio32,0xff160000 swiotlb=1 mode=normal net.ifnames=0"
booti 0x02080000 - 0x02000000
fdt set /chosen stdout-path "/serial@ff160000"
# 在U-Boot命令行中执行
fdt set /chosen bootargs "earlycon=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 mode=normal"
booti 0x02080000 - 0x02000000
fdt print /chosen
fdt print /uartfiq
setenv console ttyFIQ0
stdout-path = "serial5:115200n8";
fdt print /chosen
No FDT memory address configured. Default at 0x3bb3c1e8
chosen {
u-boot,spl-boot-order = "/dwmmc@ff390000", "/dwmmc@ff370000";
stdout-path = "/serial@ff160000";
};
矫正串口为:
fdt set /chosen stdout-path "/serial@ff160000"
以下成功引导原有rk固件kernel:
我的设备树内置了引导参数,所以我fdt set修改设备树内置的引导参数。
ext2load mmc 0:8 0x02080000 vmlinux
ext2load mmc 0:8 0x02000000 px30.dtb
fdt addr 0x02000000
fdt set /chosen bootargs " root=/dev/mmcblk0p10 ro rootwait earlycon=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 mode=normal net.ifnames=0"
booti 0x02080000 - 0x02000000
ext2load mmc 0:8 0x02080000 Image
ext2load mmc 0:8 0x02000000 px30-evb.dtb
ext2load mmc 0:8 0x02800000 ramdisk2
fdt addr 0x02000000
fdt set /chosen bootargs " system=/dev/mmcblk0p9 rdinit=/init root=/dev/ram0 rootwait ro initrd=0x02800000 earlycon=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 mode=normal net.ifnames=0"
booti 0x02080000 0x02800000 0x02000000
ext2load mmc 0:8 0x03a80000 Image
ext2load mmc 0:8 0x01f00000 px30.dtb
ext2load mmc 0:8 0x02800000 ramdisk2
fdt addr 0x01f00000
fdt set /chosen bootargs " system=/dev/mmcblk0p9 rdinit=/init root=/dev/ram0 rootwait ro initrd=0x02800000 earlycon=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 mode=normal net.ifnames=0"
booti 0x03a80000 - 0x01f00000
这个可以引导:
setenv fdt_addr_r 0x01f00000
mmc dev 0; mmc read 0x03a80000 0x10000 0x014000
fdt addr 0x01f00000
fdt set /chosen bootargs " system=/dev/mmcblk0p9 earlycon=uart8250,mmio32,0xff160000 swiotlb=1 console=ttyFIQ0 mode=normal net.ifnames=0"
bootm 0x03a80000 - 0x01f00000
这个可以引导:
setenv fdt_addr_r 0x01f00000
mmc dev 0; mmc read 0x03a80000 0x10000 0x014000; bootm 0x03a80000 - 0x01f00000
mmc dev 0;mmc read 0x00280000 0x10000 0x014000;bootm 0x00280000
加载FIT镜像
U-Boot的gpio命令需要编译时开启:
# U-Boot配置
CONFIG_CMD_GPIO=y
CONFIG_GPIO_HOG=y
# 在U-Boot命令行(需要新版U-Boot支持)
gpio clear 62 # 释放gpio1-30
gpio set 62 2 # 强制设置为功能2(SDMMC)
dts路径:
/home/huawei/op2410/openwrt/build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/linux-6.6.119/arch/arm64/boot/dts/rockchip
/home/huawei/openwrt/build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/linux-6.6.104/arch/arm64/boot/dts/rockchip
/home/huawei/openwrt/build_dir/target-aarch64_generic_musl/u-boot-2024.07/dts/upstream/src/arm64/rockchip
镜像路径:
~/openwrt/build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/
设备树引用的文件位置
./build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/linux-6.6.104/include/dt-bindings/gpio/gpio.h
rootfs路径:
编译镜像路径:
/home/huawei/op2410/openwrt/build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/Image
/home/huawei/openwrt/build_dir/target-aarch64_generic_musl/linux-rockchip_armv8/Image
这个目录下有设备树格式镜像,和配置文件
firefly_roc-rk3328-cc-kernel.bin.its
firefly_roc-rk3328-cc-kernel.bin
openwrt编译命令:
make CROSS_COMPILE=aarch64-linux-gnu- V=s -j72