zynq操作系统:petalinux的编译使用(下)灵活编译篇1

本文介绍了如何避开Petalinux的繁琐,通过提取官方kernel源码并交叉编译,同时加入所需的设备树,完成定制内核与设备树的编译,生成image.ub。重点步骤包括设备树文件添加、配置、编译内核与设备树,以及mkimage的使用。
摘要由CSDN通过智能技术生成

   上篇讲的官方推荐的编译方式,由于前面我们一直都是使用 xilinx 的 petalinux 工具编译镜像文件,例如包括 u-boot、 linux 内核、设备树、 ZYNQ PL 端的 bitstream 文件以及 fsbl 等,虽然 petalinux 功能上比较全面,但是在编译速度上太慢了,而且一旦hdf更换会带来整个工程的重新配置和编译,而且像我这种不细看手册的,甚至连kernel的源码都找不到在哪儿,tmp目录下的完全改了不起作用好不好,于是在没有找到本地kernel源码之前 采取了一种非官方的迂回展示(上篇讲到了官方怎么设置本地kernel源码)单独将kernel源码取出来交叉编译,然后利用petalinux的小脚本在和官方生成的设备树和文件系统生成image.ub(基于原子交叉编译kernel的方法加以完善修改,因为至今没找到his命令行的哭泣)
   准备工作 先将之前编译好的任何一个工程里/build/tmp/work-shared/plnx-zynq7/kernel-source的源码压缩copy出来,(github上也能下载,但是本地毕竟省事不是)
   1、添加设备树文件
这里我们直接将前面 U-Boot 源码 arch/arm/dts 目录下的那四个设备树文件( pl.dtsi、pcw.dtsi、 system-top.dts 和 zynq-7000.dtsi)直接拷贝到内核源码目录下的arch/arm/boot/dts 目录中,不用进行修改。 同样我们也需要修改 arch/arm/boot/dts 目录下的 Makefile 文件,将设备树添加上去,如下:
在这里插入图片描述

修改完成之后保存退出即可
   2、 defconfig 配置
   在内核源码目录下执行下面这条命令对内核进行 defconfig 配置:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

   3、 menuconfig 配置
   如果有单独需要配置的执行之后执行menuconfig即可上一步是默认设置
   4、 编译内核
   执行下面这条命令编译内核源码:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10

   编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件,后面我们再用。
   5、编译设备树
   内核与 u-boot 不同的是, U-Boot 的设备树默认是与内核一起编译的,并且产生的 dtb 文件已经与 U-Boot 镜像文件集成在一起了;在内核里边我们需要单独编译出设备树的 dtb 文件,前面已经将我们所需要的设备树文件拷贝到内核的 arch/arm/boot/dts 目录下了,接下来执行这条命令编译 system-top.dtb 文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10

   然后呢我们知道image.ub文件是有mkimage生成的
/build/tmp/deploy/images/plnx_arm/fitimage.its里面的内容


/ {
        description = "U-Boot fitImage for plnx_arm kernel";
        #address-cells = <1>;
 
        images {
                kernel@0 {
                        description = "Linux Kernel";
                        data = /incbin/("/home/flinn/peta/peta_top/build/tmp/deploy/images/plnx_arm/zImage");
                        type = "kernel";
                        arch = "arm";
                        os = "linux";
                        compression = "none";
                        load = <0x8000>;
                        entry = <0x8000>;
                        hash@1 {
                                algo = "sha1";
                        };
                };
                fdt@0 {
                        description = "Flattened Device Tree blob";
                        data = /incbin/("/home/flinn/peta/peta_top/build/tmp/deploy/images/plnx_arm/plnx_arm-system.dtb");
                        type = "flat_dt";
                        arch = "arm";
                        compression = "none";
                        hash@1 {
                                algo = "sha1";
                        };
                };
                ramdisk@0 {
                        description = "ramdisk";
                        data = /incbin/("/home/flinn/peta/peta_top/build/tmp/deploy/images/plnx_arm/petalinux-user-image-plnx_arm.cpio.gz");
                        type = "ramdisk";
                        arch = "arm";
                        os = "linux";
                        compression = "none";
                        hash@1 {
                                algo = "sha1";
                        };
                };
        };
        configurations {
                default = "conf@1";
                conf@1 {
                        description = "Boot Linux kernel with FDT blob + ramdisk";
                        kernel = "kernel@0";
                        fdt = "fdt@0";
                        ramdisk = "ramdisk@0";
                        hash@1 {
                                algo = "sha1";
                        };
                };
                conf@2 {
                        description = "Boot Linux kernel with FDT blob";
                        kernel = "kernel@0";
                        fdt = "fdt@0";
                        hash@1 {
                                algo = "sha1";
                        };
                };
        };
};

   同时还能得出三个来源
/home/flinn/peta/peta_top/build/tmp/deploy/images/plnx_arm/zImage
/home/flinn/peta/peta_top/build/tmp/deploy/images/plnx_arm/plnx_arm-system.dtb
/home/flinn/peta/peta_top/build/tmp/deploy/images/plnx_arm/petalinux-user-image-plnx_arm.cpio.gz
   可以修改.its文件,替换交叉编译生成的zimage和设备树文件,文件系统压缩包可以用原来的之后执行下面的命令就可以生成新的image.ub了!(注意生成的大小哦四兆五兆左右的是不带文件系统的,因为its文件由两种,可以仔细阅读里面包不包括文件系统,正常大小在十兆左右)

mkimage -f fitimage.its image.ub

   其他部分的等到下次用的时候再行补充吧,全部交叉编译也是可以做到的,毕竟petalinux高级于交叉编译的优点就是自己生成的设备树文件了,实际上sdk也是可以直接生成的,毕竟现在还在初级阶段,先用着官方的简易模式吧,虽然效率上确实是差了一点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

快跑bug来啦

创作不易,来点动力

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

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

打赏作者

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

抵扣说明:

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

余额充值