文章目錄
前言
本文介紹兩種安裝Ubuntu的方法
- 手動編譯源文件,使得Zybo啓動到shell(無圖形輸出,能聯網)
- 利用現成編譯好的文件進入Ubuntu系統(有圖形輸出,能聯網,沒聲音)
我會先介紹第二種方法,比較簡單,適合於伸手黨。最後再介紹第一種方法。
這兩種方法都搬運自國外教程(文末放原文鏈接)。
本文所使用的開發板
名稱:Zybo:Zynq-7000 ARM, FPGA SoC訓練板
主要參數如下:
名稱 | 說明 |
---|---|
SOC | 667Mhz雙核 Cortex A9 |
內存 | 512MB DDR3 |
USB-OTG | 2.0 |
接口 | 16bit VGA、HDMI、1G以太網RJ45、micro SD卡槽等 |
法一:利用預編譯好的文件與系統點亮Zybo
可直接參考這篇教程,基本是拿來即用了。
Installing Xillinux on Zybo
法二:手動編譯啓動文件
- 以下方法搬運國外朋友的教程
- 這份教程沒有打包進顯示驅動,所以是沒有顯示輸出的,只有命令行
- 由於沒有進行充分測試,只可保證可玩性。若要追求一些可用性,可參考法一。如果有異常情況歡迎在評論區提出,一起討論解決~
準備
軟件環境
- 系統:Ubuntu 14.04
- 編程環境:
- Vivado Design Suite 2016.1
- u-boot-Digilent-Dev master 提取碼:yker
- zybo base system 提取碼:wqxv
- linux-Digilent-Dev-master提取碼:c29k
步驟
Step1: 配置環境變量
在一個新的shell控制檯運行以下語句,後面所有的命令行操作都在這個已經設置環境變量的shell中進行:
$ export ARCH=arm
$ export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
# settings64.sh文件所在位置,如果沒有改變Vivado開發套件的安裝位置的話,默認在此位置
$ source /opt/Xilinx/Vivado/2016.1/settings64.sh
# u-boot-Digilent-Dev-master所在路徑
$ export PATH=/home/martinhuang/Desktop/blog/u-boot-Digilent-Dev-master/tools/:$PATH
Step2:爲zybo配置U-Boot
搜索zynq_zybo.h
,使用文本編輯器打開
在文本編輯器中搜索loadbootenv
,將紅框處代碼進行修改,並保存
修改前:
"run uenvboot; " \
"echo Copying Linux from SD to RAM... && " \
"fatload mmc 0 0x3000000 ${kernel_image} && " \
"fatload mmc 0 0x2A00000 ${devicetree_image} && " \
"fatload mmc 0 0x2000000 ${ramdisk_image} && " \
"bootm 0x3000000 0x2000000 0x2A00000; " \
修改後:
"run uenvboot; " \
"echo Copying Linux from SD to RAM... && " \
"fatload mmc 0 0x3000000 ${kernel_image} && " \
"fatload mmc 0 0x2000000 ${ramdisk_image} && " \
"bootm 0x3000000 - 0x2A00000; " \
這麼做的主要目的是防止板子在啓動的時候加載ramdisk,我們希望能夠加載根文件系統。
Step3:編譯U-Boot
$ cd /Desktop/blog/u-boot-Digilent-Dev-master
$ make zynq_zybo_config
$ make
Step4:爲U-Boot增加Elf後綴
如果你在上一步編譯失敗,很可能是因爲在第一步的環境變量中配置不對,導致無法找到編譯工具。如果你編譯成功,那麼你會在u-boot的最上層目錄找到一個名爲`u-boot``的二進制文件。
我們在計算機中的適當位置新建一個名爲sd_boot
的文件夾,用於存放最後所有生成的二進制文件。
將生成的u-boot
放入該文件夾中,併爲其增加.elf
後綴
Step5:在Vivado 2016.1中更新IP
在剛纔的shell窗口輸入vivado
$ vivado
在vivado中打開工程文件,文件路徑在zybo_base_system/source/vivado/hw/zybo_bsd/zybo_bsd.xpr
如果你是用的Vivado不是base_system工程創建時的版本,首先會提示你工程升級到用戶所使用的當前版本,如果你使用的Vivado剛好是工程創建版本的話,可跳過以下設置工程升級的內容。
出現第一個提示,保持默認選項,然後選擇ok
緊接着會出現第二個提示,選擇ok
最後出現第三個提示,選擇 Report IP Status
選擇 Upgrade Selected進行更新
然後會跳出一個對話框,讓你確認是否繼續,選擇ok
點擊Generate
Step6:爲SDK導出硬件信息 bitstream
選擇左下腳的Generate Bitstream
,在彈出的對話框中選擇Yes
可以直接關閉
選擇file Export Export Hardware
勾選nclude bitstream
,然後點擊ok
導出位置可以自行選擇
Step7:SDK工程
在之前的shell中輸入xsdk打開Xilinx sdk
$ xsdk
創建名爲fsbl的Application Project工程
單擊new,將我們上一步導出的硬件信息加載進來。
加載完成後,按以下選擇
Properties | Value |
---|---|
Hardware platform | system_wrapper_hw_platform_0 |
Processor | ps7_cortex9_0 |
然後點擊下一步,選擇Zynq FSBL
將zybo_base_system/source/vivado/SDK/fsbl\fbsl_hooks.c
複製進剛纔創建好的工程中進行替換
然後對工程進行清理並重編譯。
Step8:生成Boot.bin
在Xilinx Tools
菜單中選擇Create Boot Image
然後依次按順序添加如下文件:
文件位置已在圖中。
注:
- 可以把我的blog目錄當作根目錄,前面的可忽略
- 有
system_wrapper_hw_platform_1
的原因應該是我加載過兩次system_wrapper.hdf
然後點擊生成鏡像即可。
Step9:編譯Linux內核
在之前的shell中進入linux-Digilent-Dev-master
目錄
運行
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
$ ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
Step10:修改設備樹
找到zynq-zybo.dts
文件,用文本編輯器打開
大約在45行
修改前
cpus {
#address-cells = <1>;
#size-cells = <0>;
ps7_cortexa9_0: cpu@0 {
bus-handle = <&ps7_axi_interconnect_0>;
clock-latency = <1000>;
clocks = <&clkc 3>;
compatible = "arm,cortex-a9";
device_type = "cpu";
interrupt-handle = <&ps7_scugic_0>;
operating-points = <666667 1000000 333334 1000000 222223 1000000>;
reg = <0x0>;
} ;
ps7_cortexa9_1: cpu@1 {
bus-handle = <&ps7_axi_interconnect_0>;
clocks = <&clkc 3>;
compatible = "arm,cortex-a9";
device_type = "cpu";
interrupt-handle = <&ps7_scugic_0>;
reg = <0x1>;
} ;
} ;
修改後
cpus {
#address-cells = <1>;
#size-cells = <0>;
ps7_cortexa9_0: cpu@0 {
bus-handle = <&ps7_axi_interconnect_0>;
clock-latency = <1000>;
clocks = <&clkc 2>;
compatible = "arm,cortex-a9";
device_type = "cpu";
interrupt-handle = <&ps7_scugic_0>;
operating-points = <666667 1000000 333334 1000000 222223 1000000>;
reg = <0x0>;
} ;
ps7_cortexa9_1: cpu@1 {
bus-handle = <&ps7_axi_interconnect_0>;
clocks = <&clkc 2>;
compatible = "arm,cortex-a9";
device_type = "cpu";
interrupt-handle = <&ps7_scugic_0>;
reg = <0x1>;
} ;
} ;
主要修改CPU時鐘,目的是防止進入root shell時報錯
Setp 11 生成設備樹
在linux-Digilent-Dev-master
目錄下運行
martinhuang@ubuntu:~/Desktop/blog/linux-Digilent-Dev-master$ ./scripts/dtc/dtc -I dts -O dtb -o ./devicetree.dtb arch/arm/boot/dts/zynq-zybo.dts
然後通過搜索即可找到devicetree.dtb
文件
將它拷貝進sd_boot文件夾中
部署
- 磁盤格式化和文件系統部署同步可參考ZYBO入門指導(一)——Vivado.PDF附錄二中相關內容
- Ubuntu系統可以從【入門必看】史上最全 Zybo-Z7 / Zybo 官方社區學習資料彙總貼(ZYNQ7000入門福音)中獲取 找到
Zybo項目案例
下載即可,系統文件在Linaro文件系統
目錄下