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



相关文章
|
Linux 开发工具 C语言
【Linux操作系统】自动化编译make和Makefile
【Linux操作系统】自动化编译make和Makefile
119 0
【Linux操作系统】自动化编译make和Makefile
|
Linux C语言
【Linux操作系统】程序的编译和动静态链接
【Linux操作系统】程序的编译和动静态链接
99 0
【Linux操作系统】程序的编译和动静态链接
|
Java iOS开发 MacOS
优雅地在Mac OS Catalina下 编译 Open JDK 13(下)
优雅地在Mac OS Catalina下 编译 Open JDK 13(下)
85 0
优雅地在Mac OS Catalina下 编译 Open JDK 13(下)
|
Oracle Java 关系型数据库
优雅地在Mac OS Catalina下 编译 Open JDK 13(上)
优雅地在Mac OS Catalina下 编译 Open JDK 13(上)
131 0
优雅地在Mac OS Catalina下 编译 Open JDK 13(上)
|
机器学习/深度学习 TensorFlow 算法框架/工具
全图化引擎(AI·OS)中的编译技术
全图化引擎又称算子执行引擎,它的介绍可以参考从HA3到AI OS -- 全图化引擎破茧之路。本文从算子化的视角介绍了编译技术在全图化引擎中的运用。主要内容有: 通过脚本语言扩展通用算子上的用户订制能力,目前这些通用算子包括scorer算子,filter算子等。
10565 0
|
Web App开发 分布式计算 关系型数据库
mac OS X Yosemite 上编译hadoop 2.6.0/2.7.0及TEZ 0.5.2/0.7.0 注意事项
1、jdk 1.7问题 hadoop 2.7.0必须要求jdk 1.7.0,而oracle官网已经声明,jdk 1.7 以后不准备再提供更新了,所以趁现在还能下载,赶紧去down一个mac版吧 http://www.
1257 0
|
C# Windows
C#开源的操作系统与C# il编译成本地机器码
最近看到两个比较好的系统,都是开源的,第一个是开源的windows的系统,类似windows xp的这样的一个系统 第二个是C#写的操作系统 第一个是reactos这是一个从新写的类似的xp的系统,他的目的是从新写一个与nt相兼容的一个系统,这里边模拟的是微软的里边还有loadlibrary这样的动态加载dll的函数 http://www.reactos.org/zh-hans/
971 0

热门文章

最新文章