在Xilinx Zybo上安裝Ubuntu系統

前言

本文介紹兩種安裝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

法二:手動編譯啓動文件

  • 以下方法搬運國外朋友的教程
  • 這份教程沒有打包進顯示驅動,所以是沒有顯示輸出的,只有命令行
  • 由於沒有進行充分測試,只可保證可玩性。若要追求一些可用性,可參考法一。如果有異常情況歡迎在評論區提出,一起討論解決~

準備

軟件環境

步驟

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\Rightarrow Export \Rightarrow 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文件夾中

部署

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章