当前位置:   article > 正文

ZYNQ7000搭建嵌入式Linux操作系统---基础篇_linaro-vivid-gnome-20151215-714.tar.gz

linaro-vivid-gnome-20151215-714.tar.gz

ZYNQ7000搭建嵌入式Linux操作系统

分享下自己在搭建嵌入式操作系统的过程与心得。
使用平台:ALINX ZYNQ 7010(任意一款ZYNQ7000的板子都可以)
软件版本:VIVADO 2019.1 & SDK 2019.1
内核版本:linux-xlnx v2019.1
uboot版本:uboot-xlnx v2019.1
设备树工具:device-tree-xlnx v2019.1
linaro文件系统:linaro-vivid-gnome-20151215-714.tar.gz
之所以用2019.1,是因为后面的SDK被集成到vitis里了,不会用hhh。

一、VIVADO工程的建立

1.打开vivado,显示下面界面
1
点击create project;
2
点击next;
3
选择你要保存工程的路径和工程名,点击next;
4
点击next;
5
点击next;
6
在add constraints这个界面,单击create file;
7
在file name对约束文件进行命名,单击ok后窗口关闭,单击next;
8
在search里面输入你的zynq的型号,alinx的是xc7z010clg400-1,单击选择,再单击next;
9
10
单击finish,就完成了工程的建立。

二、VIVADO工程设置

执行完上一步骤后,进入下面的界面;
1
界面内容不介绍了,想学习vivado的朋友可以找找相关的资料。
单击左侧 PROJECT MANAGER里的IP INTEGATOR的create block design;
2
使用默认选项,单击ok;
稍等片刻,vivado界面显示了BLOCK DESIGN;
3
单击右侧Diagram窗口中的加号,两个加号都可以;
4
在窗口中输入zynq,显示如下;
5
双击中间的ZYNQ7 Processing System,稍等片刻,Diagram窗口中出现了zynq的ip核;
6
双击该ip核,进行配置;(p.s.:如果觉得配置zynq核很麻烦的话…可以直接点presets,在弹出的菜单中选择apply configuration,然后选择我分享的配置,zc010-simple.tcl这个文件)
7
选择左边page navigator中的MIO Configuration,并按照下图进行配置;
8

这里要注意下MDIO,默认是EMIO,要选择MIO52-53
9
11
12
然后要对DDR进行配置,更改DDR Configuration中的DDR controller configuration中的Memory part 为 MT41J128M16 HA-125;(这里是ALINX上带的DDR的型号)
13
再选择PS-PL Configuration 取消选中AXI NON Secure enablement中的GP master AXI interface中的M axi gp0 interface;
14
再选择PS-PL Configuration 取消选中general中的enable clock resets中的FCLK_RESET0_N;
15
再选择Clock Configuration,取消选中PL Fabric Clocks中的FCLK_CLK0;
16
单击ok,完成配置。
现在单击Diagram窗口中的Run Block Automation,在弹出的窗口中,不做任何修改,直接单击ok;
17
18
至此,完成ZYNQ的配置;
单击Sources,右键单击design_1,出现下面窗口;
19
单击 Create HDL Wrapper,在弹出的窗口选择第二个;
20
单击ok,稍等片刻,在sources窗口能看到创造了一个design_1_wrapper的verilog文件;
21
Ctrl+s保存,然后单击左下角的PROGRAM AND DEBUG中的Generate Bitstream,直接跑完综合,布线,生成bit流文件;如果遇到选项直接使用默认选项,点ok就完事。
22
最终出现下面的窗口;
23
单击cancel;
单击左上角的file,出现菜单;
24

选择Export中的Export Hardware,出现下面窗口;
25
勾选上include bitstream,单击ok;
再点击file,出现菜单;
26
选择Launch SDK;
27

出现的窗口中,单击ok;
稍等片刻,SDK 2019.1(Windows环境)就启动了。

三、在虚拟机环境下生成内核镜像uImage和uboot.elf

现在转到虚拟机下进行操作,
虚拟机使用的是Ubuntu 16.04 64位,虚拟机的安装与使用就不赘述了。主要讲述如何使用交叉编译器编译linux内核和uboot源码。
我使用的是VM16,Ubuntu16.04

在Linux下安装SDK

下载Linux下的SDK2019.1,后并安装;我建议使用Xilinx的软件和FPGA的朋友都去注册一个Xilinx账号,网上都有教程,甚至都不用输入自己的真实信息hhhh,从官方下载比从网盘啥的下载的更快更放心。
帮找了个教程,参照着弄就可以。
1
安装过程不赘述了,和Windows没什么区别。
Ctrl+Alt+T,进入Terminal,获取root权限

sudo su 
<输入用户密码>
cd <安装包所在路径>
chmod 777 ./Xilinx_SDK_2019.1_0524_1430_Lin64.bin
./Xilinx_SDK_2019.1_0524_1430_Lin64.bin
  • 1
  • 2
  • 3
  • 4
  • 5

就能进入安装的界面了。
截一些图作为参考吧。。
2
3
4
5
6
7
8
等待下载和安装完成即可。网速快的话十分钟就装好了hhh。

安装依赖包

安装完SDK后,在命令行下(root用户下)

apt-get install bison -y
apt-get install flex -y
apt-get install u-boot-tools -y
apt-get install device-tree-compiler -y
apt-get install libssl-dev -y
  • 1
  • 2
  • 3
  • 4
  • 5

编译内核

将从XilinxGithub上下载的Linux内核源码放到/home/<用户名>/Dowloads下,并解压;
9
进入linux-xlnx-xilinx-v2019.1,右键单击空白处;
10
选择open in Terminal;
输入下面命令;

sudo su
<输入密码>
source /tools/Xilinx/SDK/2019.1/settings64.sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig //这里是拷贝zynq的默认内核配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage LOADADDR=0x8000
  • 1
  • 2
  • 3
  • 4
  • 5

等待一段时间,让内核完成编译,最后在/home/<用户名>/Downloads/linux-xlnx-xilinx-v2019.1/arch/arm/boot/下能看到生成的内核文件uImage。
11
将生成的uImage拷贝到/home/<用户名>/Documents里

编译uboot

将从XilinxGithub上下载的uboot源码放到/home/<用户名>/Dowloads下,并解压;
12
进入u-boot-xlnx-xilinx-v2019.1。
搜索找到zynq-common.h;路径为:/home/<用户名>/Downloads/u-boot-xlnx-xilinx-v2019.1/include/configs/zynq-common.h
13
双击此文件,进行编辑;
14
修改为下图:
在这里插入图片描述

1.删除"load mmc 0 ${ramdisk_load_address} ${ramdisk_image} && " \
2.将 ${ramdisk_load_address} 替换为 - 
  • 1
  • 2

回到/home/<用户名>/Downloads/u-boot-xlnx-xilinx-v2019.1目录下,空白处右键单击选择open Terminal,进入Terminal。
输入命令

source /tools/Xilinx/SDK/2019.1/settings64.sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zed_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  • 1
  • 2
  • 3

稍等片刻,uboot就编译完成,在/home/<用户名>/Downloads/u-boot-xlnx-xilinx-v2019.1下,有uboot.elf文件,把这个文件拷贝到Windows环境下。在SDK生成BOOT.bin的时候会用到。

四、使用SDK生成BOOT.bin、设备树

完成vivado工程部分的内容后,SDK就启动了;
1
单击上面的Xilinx,选择repositories;
2
出现窗口;
3
单击Global Repositories里面的new,出现浏览文件夹的界面。
把下载的设备树工具解压到某目录,然后选择到这个解压出来的文件夹;(我的是D:\device-tree-xlnx-xilinx-v2019.1)
4
单击确定,可以看到Global Repositories窗口下多了个路径,这就是设备树工具的路径。
5
单击下面的ok。
单击file,出现窗口;
6
选择Board Support Package,出现下面的窗口;
7
在左下角的Board Support Package OS中选择下面的device_tree,单击finish;
8
单击device_tree,在bootargs的一行里的value添加下面内容:

console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
  • 1

9
单击下面的ok,完成设备树的生成。
左边窗口的device_tree_bsp_0中能看到几个后缀为dts或dtsi的文件;
10
点击左上角的file,出现窗口
11
选择new中的Application Project,出现窗口;
12
在project name中输出zynq,单击下面的next;
13
出现下面的窗口,选择zynq fsbl
14
单击finish;稍等片刻,在左边project explorer中能看到多了两个文件夹zynq和zynq_bsp;
15
单击上面的Xilinx,出现窗口;
16
选择create boot image,出现窗口;
17
单击output bif file path右侧的browse…,选择BOOT.bin的存储文件夹;我选择了工程存放的文件夹。
单击Boot image partitions的add,出现窗口;
18
这里注意,第一次add,partition type为bootloader,必须选择刚刚生成的zynq.elf文件。
单击file path的browse…,前往工程文件夹下的project_1\project_1.sdk\zynq\Debug\zynq.elf,(我的是F:\chitanda_eru\project_1\project_1.sdk\zynq\Debug\zynq.elf)选择这个文件,单击打开,该文件就会被导入,Boot image partitions下可以看到该文件的目录。
19
再次单击的Boot image partitions的add,出现窗口;
20
这次变为了datafile,单击file path的browse…,找到bit流文件,路径为工程文件夹下的project_1\project_1.sdk\design_1_wrapper_hw_platform_0\design_1_wrapper.bit,(我的是F:\chitanda_eru\project_1\project_1.sdk\design_1_wrapper_hw_platform_0\design_1_wrapper.bit),双击design_1_wrapper.bit,导入该文件。单击ok,发现在Boot image partitions下可以看到该文件的目录。
21
再次单击的Boot image partitions的add,出现窗口;
22
单击file path的browse…,找到之前生成的uboot.elf文件,双击选择后点击ok,发现在Boot image partitions下可以看到该文件的目录。
23
点击create image,在下方的控制台能看到BOOT.bin生成了。
24
将这个BOOT.bin拷贝到虚拟机下,存放到/home/<用户名>/Documents里

五、设备树的生成

将SDK(Windows环境)生成的设备树文件夹传入虚拟机中;
我的文件夹路径为:F:\chitanda_eru\project_1\project_1.sdk\device_tree_bsp_0(工程路径\project_1\project_1.sdk\device_tree_bsp_0)
文件夹下有几个文件:
1
我们需要用到的文件有:

pcw.dtsi
zynq-7000.dtsi
system-top.dts
  • 1
  • 2
  • 3

如果你在PL端搭建了一些ip的话,那么还会有一个pl.dtsi的文件,这个后面有时间我会写一个搭pl的过程。
SDK生成的设备树格式有问题;双击打开system-top.dts

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version: XSCT 2019.1
 * Today is: Mon Apr 19 17:45:40 2021
 */


/dts-v1/;
#include "zynq-7000.dtsi"
#include "pcw.dtsi"
/ {
	chosen {
		bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0 earlycon";
		stdout-path = "serial0:115200n8";
	};
	aliases {
		ethernet0 = &gem0;
		serial0 = &uart1;
		spi0 = &qspi;
	};
	memory {
		device_type = "memory";
		reg = <0x0 0x20000000>;
	};
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

应该把include前的#删掉,然后写成/include/这样的格式,如下:

/*
 * CAUTION: This file is automatically generated by Xilinx.
 * Version: XSCT 2019.1
 * Today is: Mon Apr 19 17:45:40 2021
 */


/dts-v1/;
/include/ "zynq-7000.dtsi"
/include/ "pcw.dtsi"
/ {
	chosen {
		bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0 earlycon";
		stdout-path = "serial0:115200n8";
	};
	aliases {
		ethernet0 = &gem0;
		serial0 = &uart1;
		spi0 = &qspi;
	};
	memory {
		device_type = "memory";
		reg = <0x0 0x20000000>;
	};
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

然后在这个文件夹界面下的空白处,单击右键,选择open Terminal,进入Terminal。
输入命令

dtc -I dts -O dtb -o devicetree.dtb system-top.dts
  • 1

就能在当前目录下发现生成的devicetree.dtb了。
将生成的devicetree.dtb拷贝到/home/<用户名>/Documents里
至此,第一分区的准备工作就全部做完了。

六、linaro文件系统

SD卡分区

在虚拟机下,使用读卡器将microSD卡连接到电脑
按下Ctrl+Alt+T,进入Terminal,输入下面的命令

sudo apt-get install gparted -y
<输入密码>
gparted
  • 1
  • 2
  • 3

就能弹出gparted工具的窗口;
1
点击左上角GParted,在弹出的菜单中Devices–><你的SD卡>
2
3
右键单击这个黄条,出现菜单,选择unmount;
4
再右键单击这个黄条,出现菜单,选择Delete
5
6
现在我们要创建两个分区,一个FAT32,用于存放启动文件BOOT.bin、devicetree.dtb和uImage;一个EXT4,用于存放文件系统。
再右键单击这个黄条,出现菜单,选择new
7
在弹出的窗口中这样进行配置
8
9
再右键单击这个黄条,出现菜单,选择new
按照下图进行配置;
10
点击Add,完成配置。
11
点击上方的绿色对勾,在弹出的窗口中选择Apply,稍等片刻,SD卡就完成了分区操作。
关闭gparted,在Ubuntu左侧就能看到有两个USB设备了。
12
将之前放入Documents的三个文件拷入名为BOOT的分区
13
将下载的linaro文件系统解压到rootfs,建议在命令行下进行解压,否则启动时可能会出现奇奇怪怪的问题hhhh。
将linaro-vivid-gnome-20151215-714.tar.gz拷贝到/home/<用户名>/Downloads下,使用下面的命令

tar -xvf /home/<用户名>/Downloads/linaro-vivid-gnome-20151215-714.tar.gz -C /media/<用户名>/rootfs
  • 1

然后在rootfs下能看到生成了一个binary的文件夹,然后也可以看到binary下面有所有的根目录下的文件
14
15
使用下面命令把文件移动到rootfs下

mv /media/<用户名>/rootfs/binary/* /media/<用户名>/rootfs
  • 1

这样SD卡就准备完成了,现在把SD卡插到开发板的SD卡插槽中,连接USB串口,上电启动。

七、系统启动

在putty中设置串口的参数(串口名在设备管理器中查看,波特率为115200)就可以看到系统正常启动了。
16

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/485696
推荐阅读
相关标签
  

闽ICP备14008679号