国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2018-01-06 08:20張朝元邵高平
電子科技 2018年1期
關(guān)鍵詞:內(nèi)核串口嵌入式

張朝元,邵高平,汪 洋

(信息工程大學(xué) 信息系統(tǒng)工程學(xué)院,河南 鄭州 450000)

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

張朝元,邵高平,汪 洋

(信息工程大學(xué) 信息系統(tǒng)工程學(xué)院,河南 鄭州 450000)

針對(duì)Zynq-7000平臺(tái)在無操作系統(tǒng)情況下,開發(fā)應(yīng)用程序需對(duì)處理器硬件結(jié)構(gòu)有一定的了解,存在開發(fā)難度大的問題。從全可編程器件的角度提出了一種Vivado+SDK+Linux的嵌入式系統(tǒng)移植方法。構(gòu)建了基于Zynq-7000的Linux系統(tǒng)移植環(huán)境,生成Linux鏡像并進(jìn)行系統(tǒng)啟動(dòng)。結(jié)果表明,該方法提升了系統(tǒng)靈活性,降低了應(yīng)用開發(fā)難度。

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

隨著全可編程SoC容量和性能的不斷提高,全可編程技術(shù)在通信、汽車電子、機(jī)器學(xué)習(xí)等領(lǐng)域得到了廣泛的應(yīng)用[1]。Zynq-7000全可編程SoC以FPGA為基礎(chǔ),將雙核的ARM Cortex-A9處理器(Processing System,PS)和可編程邏輯(Programmable Logic,PL)集成在單個(gè)芯片中,使得嵌入式系統(tǒng)的設(shè)計(jì)結(jié)構(gòu)更加靈活,體積顯著縮小,系統(tǒng)整體性能明顯提高[2-4]。同時(shí),設(shè)計(jì)的復(fù)雜度也不斷提高。

傳統(tǒng)的嵌入式Linux系統(tǒng)移植主要是針對(duì)SoC產(chǎn)品[5],已經(jīng)不能夠遷移到全可編程SoC上。本文提出一種基于Zynq-7000的嵌入式Linux系統(tǒng)的移植方法,針對(duì)不同的應(yīng)用,進(jìn)行靈活的硬件配置和Linux內(nèi)核裁剪,定制嵌入式系統(tǒng),提升系統(tǒng)靈活性。降低在PS部分開發(fā)應(yīng)用的難度。

1 硬件平臺(tái)環(huán)境

硬件平臺(tái)環(huán)境如圖1所示,平臺(tái)核心處理器采用Zynq-702全可編程SoC,PS部分的每個(gè)Cortex-A9處理器都有一個(gè)高性能、低功耗的內(nèi)核,支持虛擬內(nèi)存,Linux系統(tǒng)的移植主要圍繞這部分展開;內(nèi)部總線AXI[6]為PS與PL的數(shù)據(jù)交互提供高速的鏈路接口;PL部分是Xilinx的7系列FPGA,提供硬件加速和靈活的可擴(kuò)展的能力[7-8];板卡外圍配置DDR3高速緩存、SD卡、Flash存儲(chǔ)及串口、JTAG等接口,提升系統(tǒng)整體性能,同時(shí)為系統(tǒng)的啟動(dòng)和調(diào)試提供硬件接口。

圖1 硬件系統(tǒng)框圖

2 移植過程分析

基于SoC的嵌入式Linux系統(tǒng)移植方法是修改和移植Bootloader引導(dǎo)程序(通常是U-boot[9]),編譯Linux內(nèi)核,生成內(nèi)核鏡像,制作文件系統(tǒng),然后燒寫到板子上進(jìn)行啟動(dòng)。在Zynq-7000上移植Linux操作系統(tǒng)要相對(duì)復(fù)雜,圖2所示為移植Linux到Zynq-7000的原理框圖。系統(tǒng)硬件設(shè)計(jì)作為L(zhǎng)inux系統(tǒng)運(yùn)行的基礎(chǔ),主要完成PS部分的硬件配置和針對(duì)特定應(yīng)用的PL邏輯的開發(fā),生成硬件配置bit文件。系統(tǒng)軟件開發(fā)是Linux系統(tǒng)移植的核心,主要完成U-boot、Linux內(nèi)核、設(shè)備樹和文件系統(tǒng)的編譯,第一階段啟動(dòng)程序(First Stage Boot Loader,F(xiàn)SBL)的生成,創(chuàng)建啟動(dòng)鏡像文件。

圖2 嵌入式Linux系統(tǒng)移植原理框圖

2.1 系統(tǒng)硬件配置

PS處理器部分集成的控制器和大量的外設(shè)具有硬件可編程特性,移植操作系統(tǒng)或者開發(fā)裸跑程序之前,都需在Vivado中對(duì)控制器和外設(shè)進(jìn)行選擇配置,生成硬件配置bit文件。圖3為PS部分提供的所有IO和存儲(chǔ)控制器。根據(jù)Linux啟動(dòng)要求,配置SD卡、Flash,這是系統(tǒng)啟動(dòng)的兩種方式;配置串口控制器[10-11](UART),串口是Linux系統(tǒng)在板卡上啟動(dòng)后,用戶和平臺(tái)進(jìn)行數(shù)據(jù)交互的通道。配置外部存儲(chǔ)器DDR3,選擇和平臺(tái)上DDR3一致的型號(hào),否則系統(tǒng)將無法正常啟動(dòng)。這是不針對(duì)確定應(yīng)用的前提下,確保Linux在平臺(tái)上正常啟動(dòng)的最少配置。此外,PL可編程邏輯可進(jìn)行自定義接口開發(fā),滿足不同的應(yīng)用需求。

圖3 PS部分可編程外設(shè)結(jié)構(gòu)圖

2.2 系統(tǒng)軟件編譯

將生成的硬件bit文件導(dǎo)入到SDK中,在SDK中可根據(jù)bit文件自動(dòng)生成FSBL。FSBL與Zynq-7000的啟動(dòng)密切相關(guān),系統(tǒng)上電后自動(dòng)執(zhí)行片內(nèi)BootROM中的代碼,根據(jù)外部啟動(dòng)引腳配置從外部存儲(chǔ)器引導(dǎo)FSBL到內(nèi)存。FSBL根據(jù)硬件配置bit文件對(duì)PS部分進(jìn)行初始化,配置PL邏輯部分,加載第二階段引導(dǎo)程序(Second Stage Boot Loader,SSBL)或者裸跑程序到內(nèi)存空間,文中設(shè)計(jì)為加載U-boot。因此,F(xiàn)SBL是U-boot的引導(dǎo)程序,U-boot又作為L(zhǎng)inux內(nèi)核的引導(dǎo)程序。

(1)編譯U-boot。U-boot是在操作系統(tǒng)運(yùn)行之前執(zhí)行的一小段程序[12]。其主要任務(wù)是將Linux系統(tǒng)和硬件平臺(tái)銜接在一起,通過初始化硬件設(shè)備、建立內(nèi)存空間映射,建立正確的系統(tǒng)運(yùn)行環(huán)境,引導(dǎo)Linux系統(tǒng)到內(nèi)存。本文使用Ubuntu-14.04-i386桌面系統(tǒng),交叉編譯工具是Xilinx網(wǎng)站上提供的gcc,文件名為xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,U-boot版本為u-boot-v2016.03。Ubuntu系統(tǒng)下,進(jìn)入U(xiǎn)-boot文件夾,刪除和Zynq-7000無關(guān)的處理器架構(gòu)源碼和其它開發(fā)板源碼,輸入make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_702_defconfig命令,生成Makefile文件。Makefile定義了U-boot和Linux內(nèi)核的編譯規(guī)則,執(zhí)行編譯命令CROSS_COMPILE=arm -xilinx-linux-gnueabi-,生成u-boot.elf文件;

(2)編譯Linux內(nèi)核。Linux內(nèi)核是操作系統(tǒng)的核心,U-boot加載Linux鏡像的部分內(nèi)核到內(nèi)存后,將控制權(quán)交給這部分內(nèi)核,隨后Linux會(huì)將剩余的代碼加載到內(nèi)存,并對(duì)所有設(shè)備進(jìn)行初始化,建立數(shù)據(jù)結(jié)構(gòu),最后內(nèi)核會(huì)啟動(dòng)init進(jìn)程[13],根據(jù)配置文件加載文件系統(tǒng),完成系統(tǒng)啟動(dòng)。Linux內(nèi)核選用Linux-v4.0版本,進(jìn)入內(nèi)核目錄,在xilinx_zynq_defconfig文件下修改處理器架構(gòu)ARCH=arm,交叉編譯工具改為本文安裝的gcc,保留平臺(tái)上的串口、SD卡、Flash等信息,刪除不用的多余接口,使編譯的內(nèi)核更加精煉。在命令行輸入make ARCH=arm CROSS_COMPILE= arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig,生成Makefile文件。輸入make ARCH=arm CROSS_COMPILE =arm-xilinx-linux-gnueabi-命令進(jìn)行內(nèi)核編譯,生成 Linux內(nèi)核鏡像zImage;

(3)建立設(shè)備樹文件。設(shè)備樹文件為U-boot和Linux內(nèi)核之間提供了一個(gè)動(dòng)態(tài)的接口,降低了內(nèi)核對(duì)系統(tǒng)硬件的嚴(yán)重依賴,提高代碼的重用率,使內(nèi)核的設(shè)計(jì)和編譯更為簡(jiǎn)單。設(shè)備樹文件由zynq-7000.dts文件生成。該文件在SDK中和FSBL一起生成,通過dtc -O dtb -I dts -o devicetree.dtb zynq-7000.dts[14]命令,生成devicetree.dtb;

(4)生成文件系統(tǒng)。文件系統(tǒng)為操作系統(tǒng)提供在儲(chǔ)存設(shè)備上存儲(chǔ)數(shù)據(jù)的方法。文件系統(tǒng)采用Xilinx網(wǎng)站上提供的amdisk.image.gz文件,通過mkimage -A arm -T ramdisk -C gzip damdisk.image.gz uramdisk.image.gz命令生成。

通過以上分析,嵌入式Linux系統(tǒng)在Zynq-7000上的啟動(dòng)整個(gè)過程是:系統(tǒng)上電后,加載FSBL到內(nèi)存,完成PS處理器部分的初始化,根據(jù)bit文件配置PL邏輯,引導(dǎo)U-boot到內(nèi)核,U-boot完成硬件初始化,引導(dǎo)Linux內(nèi)核到內(nèi)存,通過設(shè)備樹文件將硬件設(shè)備樹信息傳遞給內(nèi)核,最后把控制權(quán)交給Linux系統(tǒng)內(nèi)核。Linux系統(tǒng)初始化所有設(shè)備,加載文件系統(tǒng),完成系統(tǒng)啟動(dòng)。

3 移植過程具體實(shí)現(xiàn)

在SDK中選擇Xilinx Tools下的Greate Zynq Boot Image工具,如圖4所示,依次按順序添加FSBL、硬件配置bit文件和編譯后的U-boot文件u-boot.elf3個(gè)文件,完成boot.bin鏡像文件的創(chuàng)建。

圖4 建立SD卡啟動(dòng)鏡像BOOT.BIN

將生成的BOOT.BIN和編譯后的Linux內(nèi)核zImage、設(shè)備樹文件devicetree.dtb、文件系統(tǒng)uramdisk.image.gz拷貝到FAT格式的SD卡中,插入到Zynq-7000平臺(tái),設(shè)置從SD卡方式啟動(dòng),連接好串口線,設(shè)置串口波特率為115 200,上電后在串口終端可以看到Linux系統(tǒng)的啟動(dòng)信息。

4 實(shí)驗(yàn)驗(yàn)證

為進(jìn)一步驗(yàn)證系統(tǒng)的正確性和靈活性,如圖5所示,在Linux PC機(jī)上編譯和鏈接OpenCV庫,開發(fā)基于OpenCV的圖像邊緣檢測(cè)代碼,將編譯后的可執(zhí)行代碼、源圖像和OpenCV庫拷貝到SD卡,掛載OpenCV庫到Zynq-702平臺(tái)的Linux系統(tǒng)/usr/lib目錄下,執(zhí)行檢測(cè)代碼,結(jié)果如圖6所示。實(shí)驗(yàn)表明,在PS上運(yùn)行Linux后,對(duì)于特定的應(yīng)用只需專注于C代碼的實(shí)現(xiàn)和相應(yīng)的庫函數(shù)的編譯,省去了在無操作系統(tǒng)情況下對(duì)硬件板級(jí)支持包的理解和修改,降低了二次開發(fā)的難度。此外,PL部分可通過SD卡的靈活插拔實(shí)現(xiàn)動(dòng)態(tài)可重構(gòu)和部分動(dòng)態(tài)可重構(gòu),雖然時(shí)間較長(zhǎng),但具有較好的靈活性。

圖5 OpenCV邊緣檢測(cè)流程

圖6 邊緣檢測(cè)效果圖

5 結(jié)束語

本文闡述了在Zynq-7000平臺(tái)上移植嵌入式Linux系統(tǒng)的方法和實(shí)現(xiàn)過程,降低了在PS上開發(fā)應(yīng)用的難度,并以圖像邊緣檢測(cè)為例驗(yàn)證系統(tǒng)的正確性。但所選應(yīng)用沒有用到PL部分,未能體現(xiàn)軟硬件協(xié)同設(shè)計(jì)的優(yōu)勢(shì),需進(jìn)一步驗(yàn)證。

[1] 陸佳華,江舟,馬岷.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,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高速圖像采集與實(shí)時(shí)處理系統(tǒng)[J].電子科技,2014,27(7):151-154.

[5] 丁鵬仁.基于ZYNQ的軟件無線電平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),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嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2016.

[8] 陸啟帥,陸彥婷,王地.Xilinx Zynq SoC與嵌入式Linux設(shè)計(jì)實(shí)戰(zhàn)指南[M].北京:清華大學(xué)出版社,2014.

[9] 武杰.基于ARM9的嵌入式Linux移植[J].自動(dòng)化技術(shù)與應(yīng)用,2014,33(3):38-40.

[10] 夏柯.基于ZYNQ-7000 DMA控制器的UART數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)與實(shí)現(xiàn)[J].信息系統(tǒng)工程,2014,9(20):113-114.

[11] 黨俊博,李哲,李雅俊.基于FPGA的串口通信電路設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技,2016,29(7): 106-110.

[12] 金剛,吳軍,馬鵬,等.嵌入式Linux系統(tǒng)移植中SMP的實(shí)現(xiàn)研究[J].信息技術(shù),2016,10(8):93-96.

[13] 劉慧雙.Linux實(shí)時(shí)操作系統(tǒng)定制及設(shè)備驅(qū)動(dòng)開發(fā)[D].武漢:華中科技大學(xué),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

國(guó)家自然科學(xué)基金(61271101)

張朝元(1990-),男,碩士研究生。研究方向:電子系統(tǒng)設(shè)計(jì)。邵高平(1964-),男,教授。研究方向:電子系統(tǒng)設(shè)計(jì)。汪洋(1979-),男,副教授。研究方向:平臺(tái)技術(shù)。

TP316.81

A

1007-7820(2018)01-009-03

猜你喜歡
內(nèi)核串口嵌入式
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
搭建基于Qt的嵌入式開發(fā)平臺(tái)
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
微生物內(nèi)核 生態(tài)型農(nóng)資
數(shù)字電源內(nèi)部數(shù)據(jù)傳輸?shù)拇谕ㄐ欧椒▽?shí)現(xiàn)
USB接口的多串口數(shù)據(jù)并行接收方法探索
基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無線通信