前言
笔者之前从事的是imx平台的linux开发,之后工作需求转到Xilinx推出的zynq系列芯片的开发,以下内容是笔者在适用zynq平台中遇到的不同于传统linux开发的内容,期间踩了不少坑,笔者希望能够帮助读者理解zynq的开发,少走弯路。
平台简介
zynq是xilinx推出的一款集成arm核以及fpga可编程逻辑器件的soc芯片,使得它不仅拥有 ASIC 在能耗、性能和兼容性方面的优势,而且具有FPGA 硬件可编程性的优点。zynq主要分为两端,首先是pl端,属于像fgpa开发一样的纯逻辑开发。然后是ps端,我把它类比成是单片机的裸机开发,通过操作库函数配置寄存器等,它的优势是可以将pl端当成是外设,pl端写好的东西可以被ps端直接调用。然后ps端是属于arm-A核,是可以跑系统的(linux等)。
开发方式
zynq的linux在开发方式上有两种,一种是全程使用petalinux开发,还有一种是自行选择自己的 uboot、kernel、rootfs、设备树进行开发。
使用petalinux直接配置
使用工具开发可以参考以下的文章: 使用petalinux定制自己的linux 使用petalinux虽然是方便了开发人员的开发,但是,它的编译速度会很慢,因为编译了大量的内容,这个工具可以在软件内定制自己的内核和根文件系统等,省去了自己移植的繁琐步骤。但是我不建议使用这种方式开发,效率比较低。
使用源码工程传统开发
这种方式比较靠近我们传统的linux开发,这种方式需要自行到Xilix下载制作相应的 uboot、kernel、rootfs,使用这种方式开发可以单独操作linux的每个部分,按照自己的开发板进行相应的驱动移植,单独编译出镜像,在进行开发的时候效率会高很多。但是和传统linux开发不同的是,它的编译也是需要借助petalinux工具的,所以说zynq开发时离不开petalinux的。
启动linux文件的区别
相比于常用平台的linux开发,所需要制作的启动文件也是不一样的。常规的启动需要的文件是:Zimage镜像、dtb设备树文件、根文件系统、uboot.bin引导文件。
zynq启动文件类型需要按照开发方式划分:在这里首先建议大家先基本了解一下zynq的启动流程:zynq启动流程分析
1.patelinux配置开发
使用petalinux开发的时候,编译成功后会产生如下两种类型文件: image.ub 这个文件的本质包括内核镜像、 dtb 以及根文件系统。 BOOT.BIN 文件是 fsbl 镜像、 u-boot 镜像以及 pl 端 bit 文件集合在一起的。 本文件夹中的两个文件是完全由petalinux定制出来的,image.ub文件中集成了一个定制出来 的小文件系统,便于对开发板进行测试。 使用方法:直接将image.ub和BOOT.BIN文件复制到sd卡的fat格式分区后插入开发板
2.使用源码工程开发
源码工程开发,根据uboot等每一个部分的编译都会产生相应的文件,如下: 相比熟悉linux开发的同学已经熟悉其中的三个文件了吧!这里的文件和使用petalinux开发不同的是,使用 .bit .dtb .zimage文件替换了 .ub 文件。其实可以说是吧.ub文件拆解了。这样的话,我们就可以分别调试编译不同的部分了,不用修改一次就把所有部分重新编译,非常耗时间。还有根文件系统,也不需要集成进去了,可以通过制作根文件系统在sd卡的不同分区去挂载,这样就可以使用自己制作的不同的根文件系统啦!
pinctrl 子系统
对于 ZYNQ 来说, 我们使用了 vivado 图形化完成了对 PIN 的配置并在 fsbl 阶段将配置信息写入了硬件寄存器中(具体的过程就不分析了),所以不需要在内核阶段进行配置,对于 ZYNQ 来说,我们可以忽略它!
文章未更新完,持续踩坑中…
|