基于Zynq-7000的嵌入式Linux移植

基于Zynq-7000的嵌入式Linux移植


2024年4月6日发(作者:)

基于Zynq-7000的嵌入式Linux移植

张朝元;邵高平;汪洋

【摘 要】针对Zynq-7000平台在无操作系统情况下,开发应用程序需对处理器硬

件结构有一定的了解,存在开发难度大的问题.从全可编程器件的角度提出了一种

Vivado+ SDK+ Linux的嵌入式系统移植方法.构建了基于Zynq-7000的Linux

系统移植环境,生成Linux镜像并进行系统启动.结果表明,该方法提升了系统灵活性,

降低了应用开发难度.

【期刊名称】《电子科技》

【年(卷),期】2018(031)001

【总页数】3页(P9-11)

【关键词】Zyq-7000;嵌入式Linux;U-boot;全可编程SoC

【作 者】张朝元;邵高平;汪洋

【作者单位】信息工程大学 信息系统工程学院,河南郑州450000;信息工程大学 信

息系统工程学院,河南郑州450000;信息工程大学 信息系统工程学院,河南郑州

450000

【正文语种】中 文

【中图分类】TP316.81

随着全可编程SoC容量和性能的不断提高,全可编程技术在通信、汽车电子、机

器学习等领域得到了广泛的应用[1]。Zynq-7000全可编程SoC以FPGA为基础,

将双核的ARM Cortex-A9处理器(Processing System,PS)和可编程逻辑

(Programmable Logic,PL)集成在单个芯片中,使得嵌入式系统的设计结构更加

灵活,体积显著缩小,系统整体性能明显提高[2-4]。同时,设计的复杂度也不断

提高。

传统的嵌入式Linux系统移植主要是针对SoC产品[5],已经不能够迁移到全可编

程SoC上。本文提出一种基于Zynq-7000的嵌入式Linux系统的移植方法,针

对不同的应用,进行灵活的硬件配置和Linux内核裁剪,定制嵌入式系统,提升

系统灵活性。降低在PS部分开发应用的难度。

硬件平台环境如图1所示,平台核心处理器采用Zynq-702全可编程SoC,PS部

分的每个Cortex-A9处理器都有一个高性能、低功耗的内核,支持虚拟内存,

Linux系统的移植主要围绕这部分展开;内部总线AXI[6]为PS与PL的数据交互

提供高速的链路接口;PL部分是Xilinx的7系列FPGA,提供硬件加速和灵活的

可扩展的能力[7-8];板卡外围配置DDR3高速缓存、SD卡、Flash存储及串口、

JTAG等接口,提升系统整体性能,同时为系统的启动和调试提供硬件接口。

基于SoC的嵌入式Linux系统移植方法是修改和移植Bootloader引导程序(通常

是U-boot[9]),编译Linux内核,生成内核镜像,制作文件系统,然后烧写到板

子上进行启动。在Zynq-7000上移植Linux操作系统要相对复杂,图2所示为移

植Linux到Zynq-7000的原理框图。系统硬件设计作为Linux系统运行的基础,

主要完成PS部分的硬件配置和针对特定应用的PL逻辑的开发,生成硬件配置bit

文件。系统软件开发是Linux系统移植的核心,主要完成U-boot、Linux内核、

设备树和文件系统的编译,第一阶段启动程序(First Stage Boot Loader,FSBL)

的生成,创建启动镜像文件。

PS处理器部分集成的控制器和大量的外设具有硬件可编程特性,移植操作系统或

者开发裸跑程序之前,都需在Vivado中对控制器和外设进行选择配置,生成硬件

配置bit文件。图3为PS部分提供的所有IO和存储控制器。根据Linux启动要

求,配置SD卡、Flash,这是系统启动的两种方式;配置串口控制器[10-

11](UART),串口是Linux系统在板卡上启动后,用户和平台进行数据交互的通道。

配置外部存储器DDR3,选择和平台上DDR3一致的型号,否则系统将无法正常

启动。这是不针对确定应用的前提下,确保Linux在平台上正常启动的最少配置。

此外,PL可编程逻辑可进行自定义接口开发,满足不同的应用需求。

将生成的硬件bit文件导入到SDK中,在SDK中可根据bit文件自动生成FSBL。

FSBL与Zynq-7000的启动密切相关,系统上电后自动执行片内BootROM中的

代码,根据外部启动引脚配置从外部存储器引导FSBL到内存。FSBL根据硬件配

置bit文件对PS部分进行初始化,配置PL逻辑部分,加载第二阶段引导程序

(Second Stage Boot Loader,SSBL)或者裸跑程序到内存空间,文中设计为加载

U-boot。因此,FSBL是U-boot的引导程序,U-boot又作为Linux内核的引导

程序。

(1)编译U-boot。U-boot是在操作系统运行之前执行的一小段程序[12]。其主要

任务是将Linux系统和硬件平台衔接在一起,通过初始化硬件设备、建立内存空

间映射,建立正确的系统运行环境,引导Linux系统到内存。本文使用Ubuntu-

14.04-i386桌面系统,交叉编译工具是Xilinx网站上提供的gcc,文件名为

,U-boot版本为u-boot-

v2016.03。Ubuntu系统下,进入U-boot文件夹,删除和Zynq-7000无关的处

理器架构源码和其它开发板源码,输入make CROSS_COMPILE=arm-xilinx-

linux-gnueabi- zynq_702_defconfig命令,生成Makefile文件。Makefile定义

了U-boot和Linux内核的编译规则,执行编译命令CROSS_COMPILE=arm -

xilinx-linux-gnueabi-,生成文件;

(2)编译Linux内核。Linux内核是操作系统的核心,U-boot加载Linux镜像的部

分内核到内存后,将控制权交给这部分内核,随后Linux会将剩余的代码加载到

内存,并对所有设备进行初始化,建立数据结构,最后内核会启动init进程[13],

根据配置文件加载文件系统,完成系统启动。Linux内核选用Linux-v4.0版本,

进入内核目录,在xilinx_zynq_defconfig文件下修改处理器架构ARCH=arm,

交叉编译工具改为本文安装的gcc,保留平台上的串口、SD卡、Flash等信息,

删除不用的多余接口,使编译的内核更加精炼。在命令行输入make ARCH=arm

CROSS_COMPILE= arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig,生成

Makefile文件。输入make ARCH=arm CROSS_COMPILE =arm-xilinx-linux-

gnueabi-命令进行内核编译,生成 Linux内核镜像zImage;

(3)建立设备树文件。设备树文件为U-boot和Linux内核之间提供了一个动态的

接口,降低了内核对系统硬件的严重依赖,提高代码的重用率,使内核的设计和编

译更为简单。设备树文件由文件生成。该文件在SDK中和FSBL

一起生成,通过dtc -O dtb -I dts -o [14]命令,

生成;

(4)生成文件系统。文件系统为操作系统提供在储存设备上存储数据的方法。文件

系统采用Xilinx网站上提供的文件,通过mkimage -A arm -

T ramdisk -C gzip 命令生成。

通过以上分析,嵌入式Linux系统在Zynq-7000上的启动整个过程是:系统上电

后,加载FSBL到内存,完成PS处理器部分的初始化,根据bit文件配置PL逻辑,

引导U-boot到内核,U-boot完成硬件初始化,引导Linux内核到内存,通过设

备树文件将硬件设备树信息传递给内核,最后把控制权交给Linux系统内核。

Linux系统初始化所有设备,加载文件系统,完成系统启动。

在SDK中选择Xilinx Tools下的Greate Zynq Boot Image工具,如图4所示,

依次按顺序添加FSBL、硬件配置bit文件和编译后的U-boot文件3

个文件,完成镜像文件的创建。

将生成的和编译后的Linux内核zImage、设备树文件

、文件系统拷贝到FAT格式的SD卡中,插

入到Zynq-7000平台,设置从SD卡方式启动,连接好串口线,设置串口波特率

为115 200,上电后在串口终端可以看到Linux系统的启动信息。

为进一步验证系统的正确性和灵活性,如图5所示,在Linux PC机上编译和链接

OpenCV库,开发基于OpenCV的图像边缘检测代码,将编译后的可执行代码、

源图像和OpenCV库拷贝到SD卡,挂载OpenCV库到Zynq-702平台的Linux

系统/usr/lib目录下,执行检测代码,结果如图6所示。实验表明,在PS上运行

Linux后,对于特定的应用只需专注于C代码的实现和相应的库函数的编译,省去

了在无操作系统情况下对硬件板级支持包的理解和修改,降低了二次开发的难度。

此外,PL部分可通过SD卡的灵活插拔实现动态可重构和部分动态可重构,虽然

时间较长,但具有较好的灵活性。

本文阐述了在Zynq-7000平台上移植嵌入式Linux系统的方法和实现过程,降低

了在PS上开发应用的难度,并以图像边缘检测为例验证系统的正确性。但所选应

用没有用到PL部分,未能体现软硬件协同设计的优势,需进一步验证。

【相关文献】

[1] 陆佳华,江舟,马岷.嵌入式系统软硬件协同设计实战指南[M].北京:机械工业出版社,2015.

[2] Xilinx -7000 all programmable SoC technical reference manual[M].San

Jose:Xilinx Company,2016.

[3] Xilinx -7000 all programmable SoC overview[M].San Jose:Xilinx

Company,2014.

[4] 杨晓安.基于Zynq-7000高速图像采集与实时处理系统[J].电子科技,2014,27(7):151-154.

[5] 丁鹏仁.基于ZYNQ的软件无线电平台设计与实现[D].北京:北京邮电大学,2015.

[6] Crockett L H,Elliot R A,Enderwitz M A,et ed processing with the ARM Cortex-

A9 on the Xilinx Zynq-7000 all programmable SoC[M].UK:Strathclyde Academic

Media,2016.

[7] 何宾,张艳辉.Xilinx Zynq-7000嵌入式系统设计与实现[M].北京:电子工业出版社,2016.

[8] 陆启帅,陆彦婷,王地.Xilinx Zynq SoC与嵌入式Linux设计实战指南[M].北京:清华大学出版

社,2014.

[9] 武杰.基于ARM9的嵌入式Linux移植[J].自动化技术与应用,2014,33(3):38-40.

[10] 夏柯.基于ZYNQ-7000 DMA控制器的UART数据传输的设计与实现[J].信息系统工程,

2014,9(20):113-114.

[11] 党俊博,李哲,李雅俊.基于FPGA的串口通信电路设计与实现[J].电子科技,2016,29(7): 106-110.

[12] 金刚,吴军,马鹏,等.嵌入式Linux系统移植中SMP的实现研究[J].信息技术,2016,10(8):93-96.

[13] 刘慧双.Linux实时操作系统定制及设备驱动开发[D].武汉:华中科技大学,2013.

[14] William E,Shotts 命令行大全[M].郭光伟,郝记生,译.北京:人民邮电出版社,2013.


发布者:admin,转转请注明出处:http://www.yc00.com/web/1712379789a2049270.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信