在Xilinx Zybo上安装Ubuntu系统

前言

本文介绍两种安装Ubuntu的方法

  • 手动编译源文件,使得Zybo启动到shell(无图形输出,能联网)
  • 利用现成编译好的文件进入Ubuntu系统(有图形输出,能联网,没声音)

我会先介绍第二种方法,比较简单,适合于伸手党。最后再介绍第一种方法。
这两种方法都搬运自国外教程(文末放原文链接)。

本文所使用的开发板

名称:Zybo:Zynq-7000 ARM, FPGA SoC训练板

主要参数如下:

名称说明
SOC667Mhz双核 Cortex A9
内存512MB DDR3
USB-OTG2.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,将我们上一步导出的硬件信息加载进来。

加载完成后,按以下选择

PropertiesValue
Hardware platformsystem_wrapper_hw_platform_0
Processorps7_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文件夹中

部署

参考资料

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值