1)摘自【正點原子】領航者 ZYNQ 之Linux驅動開發指南
2)實驗平臺:正點原子領航者ZYNQ開發板
3)平臺購買地址:https://item.taobao.com/item.htm?&id=606160108761
4)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html
5)對正點原子FPGA感興趣的同學可以加群討論:876744900
6)關注正點原子公眾號,獲取最新資料
第七章使用XSDK開發Linux應用
上一章我們成功使用Petalinux搭建了Linux系統,有了系統就可以在上面運行應用程式。本章我們以創建「Hello World」工程為例學習如何使用XSDK(Xilinx SDK)工具開發Linux應用並運行在我們上一章搭建好的Linux系統上。運行方式本章介紹了三種,可根據個人喜好選擇。
7.1創建XSDK工程
雙擊Ubuntu桌面的Xilinx SDK 2018.3圖標打開XSDK工具,彈出圖 18.1.1所示的Lancher界面:
圖 18.1.1 打開XSDK工具
圖 18.1.2 創建應用工程
工作空間Workspace的位置任意,此處我們選擇/home/zynq/work/linux_app目錄作為Linux應用工程的目錄。點擊該界面右下角的「OK」按鈕,進入圖 18.1.2所示界面。
單擊「Create Application Project」,即創建應用工程,進入下圖所示界面:
圖 18.1.3 工程配置選項
「Project name」欄輸入工程名「hello_world」,「OS Platform」選擇「linux」,然後單擊底部的「Next >」,進入下一頁面,如圖 18.1.4所示。
可以看到有兩個模板,第一個是空應用工程模板,第二個是「Linux Hello World」工程模板。我們選擇「Linux Hello World」工程模板,點擊底部的「Finish」。進入圖 18.1.5所示界面。
圖 18.1.4 工程模板
圖 18.1.5 XSDK界面
感覺界面是不是很熟悉,跟《領航者嵌入式開發指南》中的SDK軟體沒什麼區別。確實如此,關於XSDK的使用想必就不用多介紹了。我們展開左側的「hello_world」下的src,可以看到HelloWorld.c文件,雙擊可以看到右側的源碼,是不是很簡單,跟我們平時寫的C應用沒區別。
至此,XSDK工程的創建就完成了。下面我們將介紹如何將該工程的elf文件運行在我們上一章搭建的Linux上。
有兩種方式,一種是通過XSDK軟體自帶的TCF Agent,另一種是通過其他方式如NFS、ssh等將文件共享到或傳到開發板上的Linux系統中。
注意無論使用什麼方式,都需要開發板連接網線,且最好與Ubuntu系統處於同一網絡。
說一下運行前的準備工作:
先在開發板上運行我們第六章搭建的Linux系統,並接上網線,在Putty串口上位機中輸入ifconfig命令或「ip a s」命令查看乙太網的IP位址,從下圖可見筆者使用的開發板的IP位址為192.168.2.124,該地址後面會使用到。
圖 18.1.6 開發板的IP位址
完成準備工作後,我們先來看下TCF Agent方式,然後試下NFS方式和SSH方式。
7.2使用TCF Agent方式運行
在XSDK界面,展開Linux TCF Agent,如圖 18.2.1所示。
圖 18.2.1 雙擊「Linux Agent[defalut]」
雙擊「Linux Agent[defalut]」, 彈出下圖所示界面:
圖 18.2.2 輸入Host的IP 地址
輸入Host的IP 地址,也就是開發板的IP位址,筆者的為192.168.2.124。輸入IP位址完成後,點擊「Test Connection」,如果出現下圖所示的結果,表示連接測試成功, Linux TCF Agent服務運行正常,可以與主機(開發板)連接。
圖 18.2.3 連接測試成功
在XSDK的「Project Explorer」欄滑鼠右鍵點擊hello_world工程,在彈出的菜單欄中選擇Run as > 1 Launch on Hardware (sysntem Debugger),如下圖所示:
圖 18.2.4 運行
在Console終端可以看到Hello World輸出,表明程序在Linux上運行成功,如下圖所示:
圖 18.2.5 Console終端輸出運行結果
7.3使用NFS共享方式運行
在4.3.1節我們使用/home/zynq/linux/nfs文件夾供nfs伺服器使用。所以首先我們將工程的elf文件複製到該文件夾下。在Ubuntu主機終端中輸入如下命令將工程的elf文件拷貝到nfs使用的目錄:
現在我們在領航者開發板上掛載Ubuntu 主機的 NFS目錄,在掛載之前先要知道Ubuntu 主機的IP位址,使用ifconfig命令或「ip a s」命令查詢到筆者的Ubuntu 主機的IP位址為192.168.2.172。在連接到領航者開發板的串口上位機如Putty中輸入如下命令進行掛載:
其中192.168.2.172為筆者的Ubuntu主機IP位址,/mnt為掛載到開發板的目錄。
在串口終端中輸入」ls /mnt」可以看到hello_world.elf文件,輸入「/mnt/hello_world.elf」會執行該elf文件,執行結果如下圖所示:
圖 18.3.1 執行elf文件
可以看到列印出「Hello World」信息,表明運行成功。
7.4使用SSH方式運行
SSH方式是將工程的elf文件傳到開發板上的Linux系統中,在Ubuntu主機終端中輸入如下命令將elf文件傳到領航者開發板的Linux系統中:
上面命令的192.168.2.124為筆者使用的領航者開發板的IP位址,/home/root表示傳到開發板的該目錄下,也就是root用戶所在的目錄。
執行結果如下圖所示:
圖 18.4.1 scp命令傳輸文件
需要輸入領航者開發板上Linux系統的root用戶密碼,默認為」root」。傳輸完成後,在串口終端中輸入「ls」會看到有一個hello_world.elf文件。輸入「./hello_world.elf」會列印出「Hello World」信息,表明運行成功。在串口上位機中輸入的命令及結果如下圖所示:
圖 18.4.2 命令及結果