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

简介: petalinux的编译使用

上篇讲的官方推荐的编译方式,由于前面我们一直都是使用 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出来,

  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 文件,将设备树添加上去,如下:

1002  wm8850-w70v2.dtb  
1003 dtb-$(CONFIG ARCH ZYNQ) += \
1004  zynq-cc108.dtb \  
1005  zynq-microzed.dtb \ 
1006  zynq-parallella.dtb \ 
1007  zynq-zc702.dtb\ 
1008  zynq-zc706.dtb \  
1009  zynq-zc770-xm010.dtb \  
101日  zynq-zc770-xm011.dtb /  
1011  zynq-zc770-xm012.dtb  
1012  zynq-zc770-xm013.dtb \  
1013  zynq-zed.dtb\ 
1014  zyng-zybo.dtb 
1015  system-top.dtb  
1017  1016 dtb-$(CONFIG MACH ARMADA_370)+= \  armada-370-db.dtb \ Hx--1024

修改完成之后保存退出即可

  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也是可以直接生成的,毕竟现在还在初级阶段,先用着官方的简易模式吧,虽然效率上确实是差了一点



相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
Linux 索引 Perl
zynq操作系统: Linux驱动开发Bram篇
zynq操作系统: Linux驱动开发Bram篇
1148 0
|
2月前
|
Ubuntu Java iOS开发
MacOS环境-手写操作系统-19-编译自动化
MacOS环境-手写操作系统-19-编译自动化
29 0
|
4月前
|
Linux C语言
深度探索Linux操作系统 —— 编译过程分析
深度探索Linux操作系统 —— 编译过程分析
39 2
|
7月前
|
NoSQL Ubuntu Linux
【操作系统】实验三 编译 Linux 内核
【操作系统】实验三 编译 Linux 内核
351 1
|
存储 NoSQL 网络协议
关于操作系统、计算机组成原理、编译系统、数据库原理、计算机网络原理总结
关于操作系统、计算机组成原理、编译系统、数据库原理、计算机网络原理总结
170 0
|
机器学习/深度学习 Ubuntu 算法
操作系统原理实验2:进程调度(在Ubuntu虚拟机gcc编译环境下
操作系统原理实验2:进程调度(在Ubuntu虚拟机gcc编译环境下
226 0
|
存储 Linux 内存技术
|
Linux 测试技术 API
zynq操作系统: Linux下异步通知的应用
在使用阻塞或者非阻塞的方式来读取驱动中某些值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据。 Linux 提供了异步通知这个机制来完成此功能
235 0
|
存储 Ubuntu 安全