CH02基於ZYNQ的嵌入式LINUX移植
1.1概述
實驗環境:
- Windows 10 專業版
- Vmware workstation 14.1.1
- Ubuntu 16.04.3
- Xilinx SDx 2017.4
實驗內容:
很多人問我怎么不用petalinux,說實話小編不會,記得之前有幾個LINUX大神說petalinux四不像,不建議准備深入LINUX的學習者學習,所以小編就老老實實學習通用的LINUX方法。畢竟以后說不定就要搞其他不是XILINX的嵌入式平台了。
對於學習LINUX掌握移植的方法是非常重要的事情,本章的教程可以教會大家如何在ZYNQ的平台上移植LINUX系統,基本上目前市場主流的開發板都可以使用本章的方法,所以只要你有一個ZYNQ開發板就可以和我們一起來學習如何移植LINUX系統,本教材適合LINUX零基礎入門,趕快加入我們吧(小編同樣是一名初學者,以初學者的角度寫這篇教程)。
2.1 開發環境的熟悉
2.1.1 解壓開發包
由於是第一個example,壓縮包包含的內容比較多,首先解壓你下載的本章節開發板,然后復制到虛擬機workspace目錄解壓,解壓后的目錄。
2.1.2 目錄介紹
本節主要介紹工程的相關目錄,對於一個Linux開發者,至少要掌握bash編程,而本實驗使用shell來工作的,所有的shell都存放在scripts目錄下,如果對哪個腳本有疑問,請自行閱讀腳本內容,如果需要覺得哪個腳本還不能滿足你的需求或者發現在你的系統中運行有問題,可以自行修改腳本。請注意,每天工作前請切換到scripts目錄下執行source settings64.sh腳本,以初始化實驗所需要的環境變量,這樣,你將可以在任意目錄下執行scripts目錄下的腳本。
$ ls
backup boards documents packages scripts sources tools
-
在boards/miz7x目錄下存放的是基於mz7x(mz7x包括 MIZ702N\MZ701A\MZ701Amini\MZ702B\MZ702N\MIZ7035\MZ7100以及后面發布的板子,或者你自己的開發板,我們為每個板子配套的具體的代碼)實驗板子的相關實驗,為什么要這么做呢,主要是因為uboot、內核、文件系統等這些源碼是通用的,而對於不同的廠家板子,不同的實驗,所需要的FPGA、內核模塊、應用程序等是不一樣的,為了統一管理不同廠家板子的不同實驗,我們通過目錄來區分他們。另外,我在scripts目錄里提供了backup.sh腳本用於打包實驗的所有源碼,該腳本執行后把打包后的文件放在backup目錄下。這樣,我們是以實驗為單位來備份,這樣只要你獲得一個實驗的源碼包,解包后即可進行實驗,不再為缺失哪些源碼而煩惱。
-
Documents目錄主要是用於存放一些公共的文件,比如Zynq-7000的相關文檔,該目錄不會被backup.sh腳本所打包,如果需要將其也添加到打包文件里的話,請修改backup.sh腳本。
-
Packages目錄主要是存放從網絡下載的原始資源,而backup.sh僅僅會將buildroot目錄添加到打包文件,該目錄是編譯根文件系統時,buildroot從網絡下載的源代碼。
-
Sources目錄主要是存放uboot、kernel、rootfs等源碼。
-
Tools目錄主要存放交叉編譯器等,但backup.sh打包時僅打包交叉編譯器。
-
注意:如果你喜歡使用老版本的腳本進行工作,可以把所需要的源碼放到老版本的相應位置即可,新腳本在不斷優化着,如果對腳本不理解,請認真查看腳本內容。
2.2 創建用於移植LINUX的VIVADO工程
2.2.1 VIVAO硬件工程功能介紹
本項目硬件上需要實現支持 usb otg、uart串口、支持網絡、EMMC(注意有的板子沒有EMMC)、(TF卡)SD卡、HDMI輸出,所以我們要設計這么一個VIVADO工程。
2.2.2 VIVAO硬件工程搭建
找到路徑/mnt/workspace/osrc/boards/mz7x/mylinux/fpga/system/system.xpr,你會發現你熟悉的vivado工程,沒錯,在一堆眼花繚亂的文件夾中,我們找到了。讀者可能會很奇怪,干嘛搞這么復雜,又是批處理命令,又是這么多文件夾。小編也問過,LINUX大神,大神告訴我,為了管理項目方便,而且利用批處理命令,都是自動化管理的,實際上更加規范。雖然小編剛開始有一百個不情願,還是老老實實得學習大神的經驗吧。不過小編要告訴讀者,雖然利用了批處理命令方便了,但是作為學習者,一定要花費一些時間,把所有批處理命令看一遍,最好能自己寫一遍。打好基礎才能為自己以后在LINUX方面的深耕做好知識准備。小編現在大概介紹下,各個文件夾的功能。
Dts管理dts文件
FPGA管理VIVADO工程
Images管理最終編譯好的系統文件,讀者可以自己打開看下,里面有很多類型
Outpu 管理中間編譯過程的文件
Standalone管理SDK工程方便以后需要用到的時候可以直接導入
創建以上的文件夾如果人工一個個手動操作,累都要累死,還不能確保不出錯,所以這些就交給批處理命令來吧。
Ctrl +ALT 打開linux控制台
輸入
cd /mnt/workspace/osrc/scripts
ls
可以看到一堆批處理命令,簡直無從下手。不用擔心,小編以一個初學者的方式,來實現我們第一個LINUX的實驗。
先打開settings64.sh
輸入 gedit settings64.sh
打開settings64.sh文件后
下圖中紅色方框內的就是定義板子的名字,你可以根據需要改為自己的名字,不管你買的什么型號的開發板,本教程中,全部以mz7x命名。本項目是一個Linux工程所以定義為mylinux。當然你如果是學習,建議保持我們一致,畢竟你還是一個初學者嘛,還沒學會走路,不要先想着會跑。圖片中還有一些獲取路徑的信息,讀者需要弄明白。settings64.sh具有非常多的路徑信息讀者需要詳細閱讀的,打開閱讀,小編這里只是拿出一些重點截圖說明下,方便大家入門。
下圖中,就是管理mz7x文件夾里面的,文件夾的路徑了。
自動化創建所有的文件夾
設置交叉編譯工具
由於vivado自帶了交叉編譯工具,所以就不要單獨安裝了,很早以前,大概2015年剛開始弄zynq的時候,參考zedboard得單獨安裝交叉編譯工具。現在方便了,一步到位。
關閉settings64.sh文件
2.2.2 安裝下載器驅動
和windows里面一樣安裝下載器驅動的時候要拔掉下載器。
在剛才打開的控制台里面輸入
./ install_cable_drivers.sh
2.2.3 打開VIVADO軟件
當然如果你准備全部自己實現一遍,建議吧boards文件夾里面的mz7x換個名字,這樣執行批處理命令的時候會重頭創建一遍文件夾,否則會默認不創建已經存在的文件夾。在學習本章課程的時候,小編認為你應該具備了,使用vivado軟件的能力,所以vivado如何創建工程,如何設置,的問題小編就不說了。
在前天打開的控制台中輸入
Source settings64.sh
如何你的文件夾都是空的就會創建以上的所有路徑和文件夾。
小編用的是項目例子自帶的已經創建好的。所以vivado工程就不重頭搭建了。
繼續在控制台輸入
./run_vivado.sh
Vivado啟動大概需要20s以上耐心等下,啟動后就可以和windows下一樣使用了。打開已經做好的工程。下面的界面大家一定很熟悉了。
2.2.3硬件構架設計
可以看到這是一個基於ZYNQ平台的構架,顯示輸出主要使用了VMDA IP 和 HDMI的輸出IP。
為了讓能夠支持USB OTG、UART串口、以太網、EMMC、TF卡、QSPI FLASH,還要正確配置ZYNQ IP的設置。
注意:MZ7100開發板的配置頁面有比較大的差異,讀者做MZ7100的實驗的時候不要把本截圖設置成一樣,否則你就不能成功移植LINUX了。
2.2.4 SDK工程
編譯好VIVADO后倒入到SDK工程,以下圖片是已經做好的SDK工程,可以看到有3類
-
System_wrapper_hw_platform_0
是從VIVADO導入進來的硬件工程,里面包含了,SDK所需要的硬件信息。
-
IMAGE工程 是裸機下測試HDMI輸出到顯示器是否正常的工程,我們測試看下輸出結果,證明VDMA輸出到HDMI部分的硬件搭建設計正確,展示圖片是MZ7X系列的最新款MZ702N開發板。
-
Fsbl 是啟動文件里面文件,這個文件不用多介紹了,ZYNQ芯片必不可少的文件。
-
Device_tree_bsp_0是導入的設備樹,這個LINUX驅動部分要用到,這里的VMDA是需要驅動的。下面下如何導入並且產生PL部分的設備樹。
1)、在菜單中選擇Xilinx->Repositories
2)、導入設備樹的源文件路徑就可以了,如下圖
2.3編譯LINUX
硬件搭建好后,就可以編譯了,在剛才的控制台中輸入
make_all.sh就可以了
2.4測試
2.4.1復制嵌入式系統到TF卡
之后把TF卡通過讀卡器插入電腦,並且連接到虛擬機中
執行
deploy_sdcard_image.sh
這樣就把編譯好的文件復制到了TF卡了,現在只要把TF卡插入開發板。
通電之前做幾件事情
2.4.2查看串口設備
串口接到電腦,並且在控制台輸入ls/dev查看串口設備,一般是ttySUB0,我這里是ttyUSB1,入下圖。
開發板模式開關切換到SD模式(所有綠色板子,模式開關1腳切換到OFF 2腳無所謂)
在虛擬機打開putty軟件,串口號設置以上你查到的串口號
2.4.3通電啟動系統
2.4.4 查看設備
輸入
root
/ls /dev
查看設備
2.4.5 EMMC測試 (必須有EMMC)
EMMC分區
給eMMC分區
當然,如果只分為一個分區的話,其它也可以不分區。在命令行下運行fdisk /dev/mmcblk1來對emmc進行分區。這里需要注意,確認有沒有SD卡插入,也就是說確認當前eMMC是/dev/mmcblk1還是/dev/mmcblk0,還有對於有多個分區的,可能存在/dev/mmcblk0p1、/dev/mmcblk0p2等等。
fdisk /dev/mmcblk1mnp1回車
m
w將分區格式化為ext2格式
mkfs.ext2 /dev/mmcblk1p1
ls /mntmount /dev/mmcblk1p1 /mnt
測試emmc的性能
在Linux下,既可以使用dd命令來低格U盤等,也可以用來復制文件(類似於windows下的ghost功能),當然也可以用來測試硬盤等的性能,雖然沒有專業軟件的測試得准確,但用來對比性能已經足夠了。對於/dev/zero和/dev/null兩個設備的說明,可以google一下(需要說明下,估計是系統問題,測試的速度沒有顯示出來,但是文件讀寫是正常的,后面解決了再告訴大家)。
寫性能下面使用dd命令將從/dev/zero設備中產生一個1GB的文件。寫性能
dd if=/dev/zero of=/mnt/test.img bs=1M count=1024
讀性能
dd if=/mnt/test.img of=/dev/null bs=1M count=1024
讀寫性能
dd if=/mnt/test.img of=/mnt/test.copy.img2.4.6 以太網測試
輸入ifconfig eth0 192.168.1.199 設置開發板的 IP
設置電腦的網口IP是 192.168.1.100 並且設置
2.4.7 HDMI測試
-