rv1106 内核FIT镜像boot.img生成方式解析

1、boot.img组成

rv1106的SDK中,内核kernel镜像为boot.img,该镜像为FIT镜像,在编译内核的时候,SDK会将生成的多个文件、镜像放入sysdrv/source/kernel/out/路径下:

68095524a8104dc39995192a81212490.png

其中,boot.its是生成FIT镜像的配置文件,fdt为设备树,kernel为内核镜像,resource为与硬件描述相关的镜像。

打开boot.its可看到:

/*
 * Copyright (C) 2021 Rockchip Electronics Co., Ltd
 *
 * SPDX-License-Identifier: GPL-2.0
 */

/dts-v1/;
/ {
    description = "FIT image with Linux kernel, FDT blob and resource";

    images {
        fdt {
            data = /incbin/("fdt");
            type = "flat_dt";
            arch = "arm";
            compression = "none";
            load = <0xffffff00>;

            hash {
                algo = "sha256";
            };
        };

        kernel {
            data = /incbin/("kernel");
            type = "kernel";
            arch = "arm";
            os = "linux";
            compression = "none";
            entry = <0xffffff01>;
            load = <0xffffff01>;

            hash {
                algo = "sha256";
            };
        };

        resource {
            data = /incbin/("resource");
            type = "multi";
            arch = "arm";
            compression = "none";

            hash {
                algo = "sha256";
            };
        };
    };

    configurations {
        default = "conf";

        conf {
            rollback-index = <0x00>;
            fdt = "fdt";
            kernel = "kernel";
            multi = "resource";

            signature {
                algo = "sha256,rsa2048";
                padding = "pss";
                key-name-hint = "dev";
                sign-images = "fdt", "kernel", "multi";
            };
        };
    };
};

最后生成的boot.img,应该是有fdt、kernel、resource组成。

其中,resource对应就是kernel目录生成的resource.img,其组成可以解包方式来分析。

使用resource_tool工具(该工具在luckfox-pico/sysdrv/tools/pc/toolkits/路径下),命令:

./resource_tool --verbose --unpack --image=resource

可看到输出的信息:
cc6db1315e7040e893e85a191493f0c7.png

并且,在resource_tool所在目录下,会有out路径生成,存放着接包后的文件:
065768e98f8148e6a93d72e990d508ae.png

由此可知,resource由logo.bmp、logo_kernel.bmp、rk-kernel.dtb组成,而rk-kernel.dtb就是fdt,也就是设备树。

2、FIT镜像boot.img生成方法

查找网上资料可知,生成FIT镜像方法很简单,需要的就是mkimage工具,以及上述FIT镜像所需的文件。

网上找到的打包FIT镜像的指令为:

./mkimage -l boot.img

通过mkimage工具,直接识别当前位置下的its配置文件,打包生成最终FIT镜像boot.img。

但此时发现,使用上述方法生成的boot.img比SDK中生成的boot.img大小差了2k,并且将该镜像包烧录至开发板,也是报错,无法启动,会提示找不到FIT镜像。

这时候就回头再翻找SDK的脚本,最后发现在/project/scripts/路径下有一个脚本mk-fitimage.sh,该脚本最后第二句:

mkimage -f $target_its_file  -E -p 0x800 $6

该指令即为FIT镜像打包生成boot.img的指令。

其中有一个0x800即2k的偏移量,之前的指令里,没有设置此偏移量,所以最后生成的镜像会小2k。

使用UltraEdit打开fdt可以看到:

0cbdf8f17dec42ae95b90e5571a19cd4.png

使用UltraEdit打开resource可以看到:

b292e4f6c3b84780822e205a00c87a7a.png

此时可看出,设备树是在resource文件中0x800h开始的位置。

最后生成boot.img的指令:

./mkimage -f boot.its -E -p 0x800 boot.img

此时生成的boot.img与SDK原本生成的boot.img大小一致,烧录到开发板中,正常启动。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!QWQ!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值