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条)