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

2018-01-06 08:20张朝元邵高平
电子科技 2018年1期
关键词:内核串口嵌入式

张朝元,邵高平,汪 洋

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

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

张朝元,邵高平,汪 洋

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

针对Zynq-7000平台在无操作系统情况下,开发应用程序需对处理器硬件结构有一定的了解,存在开发难度大的问题。从全可编程器件的角度提出了一种Vivado+SDK+Linux的嵌入式系统移植方法。构建了基于Zynq-7000的Linux系统移植环境,生成Linux镜像并进行系统启动。结果表明,该方法提升了系统灵活性,降低了应用开发难度。

Zynq-7000;嵌入式Linux;U-boot;全可编程SoC

随着全可编程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 硬件平台环境

硬件平台环境如图1所示,平台核心处理器采用Zynq-702全可编程SoC,PS部分的每个Cortex-A9处理器都有一个高性能、低功耗的内核,支持虚拟内存,Linux系统的移植主要围绕这部分展开;内部总线AXI[6]为PS与PL的数据交互提供高速的链路接口;PL部分是Xilinx的7系列FPGA,提供硬件加速和灵活的可扩展的能力[7-8];板卡外围配置DDR3高速缓存、SD卡、Flash存储及串口、JTAG等接口,提升系统整体性能,同时为系统的启动和调试提供硬件接口。

图1 硬件系统框图

2 移植过程分析

基于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)的生成,创建启动镜像文件。

图2 嵌入式Linux系统移植原理框图

2.1 系统硬件配置

PS处理器部分集成的控制器和大量的外设具有硬件可编程特性,移植操作系统或者开发裸跑程序之前,都需在Vivado中对控制器和外设进行选择配置,生成硬件配置bit文件。图3为PS部分提供的所有IO和存储控制器。根据Linux启动要求,配置SD卡、Flash,这是系统启动的两种方式;配置串口控制器[10-11](UART),串口是Linux系统在板卡上启动后,用户和平台进行数据交互的通道。配置外部存储器DDR3,选择和平台上DDR3一致的型号,否则系统将无法正常启动。这是不针对确定应用的前提下,确保Linux在平台上正常启动的最少配置。此外,PL可编程逻辑可进行自定义接口开发,满足不同的应用需求。

图3 PS部分可编程外设结构图

2.2 系统软件编译

将生成的硬件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,文件名为xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,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-,生成u-boot.elf文件;

(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内核之间提供了一个动态的接口,降低了内核对系统硬件的严重依赖,提高代码的重用率,使内核的设计和编译更为简单。设备树文件由zynq-7000.dts文件生成。该文件在SDK中和FSBL一起生成,通过dtc -O dtb -I dts -o devicetree.dtb zynq-7000.dts[14]命令,生成devicetree.dtb;

(4)生成文件系统。文件系统为操作系统提供在储存设备上存储数据的方法。文件系统采用Xilinx网站上提供的amdisk.image.gz文件,通过mkimage -A arm -T ramdisk -C gzip damdisk.image.gz uramdisk.image.gz命令生成。

通过以上分析,嵌入式Linux系统在Zynq-7000上的启动整个过程是:系统上电后,加载FSBL到内存,完成PS处理器部分的初始化,根据bit文件配置PL逻辑,引导U-boot到内核,U-boot完成硬件初始化,引导Linux内核到内存,通过设备树文件将硬件设备树信息传递给内核,最后把控制权交给Linux系统内核。Linux系统初始化所有设备,加载文件系统,完成系统启动。

3 移植过程具体实现

在SDK中选择Xilinx Tools下的Greate Zynq Boot Image工具,如图4所示,依次按顺序添加FSBL、硬件配置bit文件和编译后的U-boot文件u-boot.elf3个文件,完成boot.bin镜像文件的创建。

图4 建立SD卡启动镜像BOOT.BIN

将生成的BOOT.BIN和编译后的Linux内核zImage、设备树文件devicetree.dtb、文件系统uramdisk.image.gz拷贝到FAT格式的SD卡中,插入到Zynq-7000平台,设置从SD卡方式启动,连接好串口线,设置串口波特率为115 200,上电后在串口终端可以看到Linux系统的启动信息。

4 实验验证

为进一步验证系统的正确性和灵活性,如图5所示,在Linux PC机上编译和链接OpenCV库,开发基于OpenCV的图像边缘检测代码,将编译后的可执行代码、源图像和OpenCV库拷贝到SD卡,挂载OpenCV库到Zynq-702平台的Linux系统/usr/lib目录下,执行检测代码,结果如图6所示。实验表明,在PS上运行Linux后,对于特定的应用只需专注于C代码的实现和相应的库函数的编译,省去了在无操作系统情况下对硬件板级支持包的理解和修改,降低了二次开发的难度。此外,PL部分可通过SD卡的灵活插拔实现动态可重构和部分动态可重构,虽然时间较长,但具有较好的灵活性。

图5 OpenCV边缘检测流程

图6 边缘检测效果图

5 结束语

本文阐述了在Zynq-7000平台上移植嵌入式Linux系统的方法和实现过程,降低了在PS上开发应用的难度,并以图像边缘检测为例验证系统的正确性。但所选应用没有用到PL部分,未能体现软硬件协同设计的优势,需进一步验证。

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

[2] Xilinx Company.Zynq-7000 all programmable SoC technical reference manual[M].San Jose:Xilinx Company,2016.

[3] Xilinx Company.Zynq-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 al.Embedded 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 Jr.Linux命令行大全[M].郭光伟,郝记生,译.北京:人民邮电出版社,2013.

The Transplanting of embedded Linux Based on Zynq-7000

ZHANG Chaoyuan,SHAO Gaoping,WANG Yang

(School of Information System Engineering,Information Engineering University,Zhengzhou 450000,China)

In order to develop the application program under the condition of no operating system, it is necessary to understand the hardware structure of the Zynq-7000 platform. From the point of all programmable devices, the article presents the embedded system portability method named Vivado+SDK+Linux, creates Linux system portability environment based on Zynq-7000, and generate Linux image which can start up system. The result indicates that the method improves the flexibility of the system and reduces the difficulty of application development.

Zynq-7000; embedded Linux; U-boot; all programmable SoC

2017- 03- 05

国家自然科学基金(61271101)

张朝元(1990-),男,硕士研究生。研究方向:电子系统设计。邵高平(1964-),男,教授。研究方向:电子系统设计。汪洋(1979-),男,副教授。研究方向:平台技术。

TP316.81

A

1007-7820(2018)01-009-03

猜你喜欢
内核串口嵌入式
强化『高新』内核 打造农业『硅谷』
浅谈AB PLC串口跟RFID传感器的通讯应用
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
微生物内核 生态型农资
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信