本帖最后由 希希12308 于 2022-7-23 13:12 编辑
今天Jaya继续上篇硬件的介绍,再说说创龙TLZ7x-EasyEVM Zynq7020开发板软件的部分,额,说软件不是很严谨,毕竟FPGA所使用的语言比较特殊,比如Verilog,VHDL这种实际上来说不算软件,因为是硬件描述型的语言,写出来的代码最终会变成一个实际的电路。 当然我们也不会太深入的聊Verilog,对硬件描述语言感兴趣的童鞋,可以先看看视频直播平台摩尔吧的课程《夏宇闻教授verilog视频教程(上)》和《夏宇闻教授verilog视频教程(下)》,作为Verilog初学者来说,可以称之为圣经。
但是对于创龙TLZ7x-EasyEVM Zynq7020开发板来说,主芯片使用的是ZYNQ系列芯片,仅仅只会Verilog还是不够的,ZYNQ内部还有ARM核心,所以我们还要学会真正的软件部分Linux。
哦,不好意思我们扯远了,本期的分享是以测评为主,我们现在就作为小白来上手实践下创龙TLZ7x-EasyEVM Zynq7020开发板的使用。 我们先来看下创龙为我们学习、开发所提供的资料。再我们购买创龙TLZ7x-EasyEVM Zynq7020开发板的时候,创龙为我们提供了一共三张DVD光盘的开发板相关资料,第一张光盘的内容主要包含,芯片手册,例程Demo,相关工具,以及ZYNQ芯片相关的参考文档,底板原理图、PCB设计和创龙提供的针对板卡的使用手册,第二张光盘和第三张光盘主要包含创龙所提供的SDK(软件开发包),通过SDK我们可以快速搭建板卡的使用、开发的环境,方便我们快速导入开发流程。
OK我开始实际的操作,首先我们需要有一个Linux系统,这个部分就不实际操作,装个Ubuntu 虚拟机或者实体机都可以。我们以Ubuntu为例,开始搭建PetaLinux 的开发环境实际操作如下:
1、 安装依赖:
安装安装 g++编译器:
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install g++
安装依赖库:(PS:不用在乎具体是什么,这一堆就是SDK运行所需要的工具和软件,如果有兴趣仔细研究也可以自己一个一个自行bing)
sudo apt-get install xvfb chrpath socat autoconf libtool texinfo zlib1g-dev
build-essential libsdl1.2-dev libglib2.0-dev libssl-dev gawk git gcc-multilib openssl zlib1g
libncurses5-dev zlib1g:i386
如果缺少依赖库,在安装 PetaLinux 的过程中会报如下的错误,如果安装中还会提示缺少某些库,可以使用"sudo apt-get install"指令来安装缺少的这些库。
2、 将光盘中的Petalinx 文件拷贝到Ubuntu中,并解压。
如果没有解压软件可以在ubuntu中安装unrar,命令如下:
apt-get install unrar
执行如下命令进行解压:
unrar x petalinux-v2017.4-final-installer.part1.rar
执行如下命令进行petalinux的安装
./petalinux-v2017.4-final-installer.run
出现“Press Enter to display the license agreements”提示后按回车键,系统会用 vi 打开一个 license 的说明。按 q 退出,然后输入 y,重复操作,一共输入三个 y。
这样petalinux就安装完毕。可以删除安装包以释放存储空间。命令:
rm petalinux-v2017.4-final-installer.run
3、 设置一下环境变量完成交叉编译工具链的配置。命令如下:
source /home/tronlong/Zynq/PetaLinux/settings.sh
另外可能会出现警告,截图如下:
这种情况是因为Ubuntu默认使用的dash,但是petalinux需要使用bash,这样情况就执行下面的命令来切换Shell:
sudo dpkg-reconfigure bash
OK,至此我们的petalinux 环境已经安装完成。我们再编译一下U-boot,U-boot是什么东西,在嵌入式系统中,U-boot的一个很重要的功能就是引导Linux Kernel的启动,一般的嵌入式系统的启动流程是芯片硬件初始化,这个过程由芯片自行完成一般会很快,然后会将U-boot搬到内存(包括DDR SDRAM等)这样U-boot就会启动,U-boot启动后就会将Kernel搬进内存,再启东Linux Kernel,这样就完成Linux的启动引导,当然中间有很多过程和步骤我们省略掉了,大体的执行结构就这样,linux启动完成加载了rootfs,也就是文件系统,整个系统就进入到我们的命令行界面。 编译U-boot的部分,如果不深入到代码层级来做还是比较简单的,(找元器件现货上唯样商城)首先确认petalinux 的环境变量已经设置好,如果没有设置,执行:
source /home/tronlong/Zynq/PetaLinux/settings.sh 将U-boot源码文件copy到我们的ubunut 中。
解压代码,使用tar命令:
tar -zxvf u-boot-xlnx-gf812dfb-v1.0.tar.gz -C U-Boot-2017.01
-C 参数的作用是解压到指定文件夹。
进入我们解压的文件夹U-Boot-2017.01,清理设定。
cd U-Boot-2017.01
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
这里简短说明下执行清理命令对应功能
make clean:删除大多数的编译生成文件,但会保留.config 内核配置文件
make mrproper:删除所有的编译生成文件,同时删除内核配置文件以及各种备份文件。
make distclean:删除所有的编译生成文件,同时删除内核配置文件以及各种备份文件和补丁文件,清除最完整。 然后就是开始编译了,我们指定工具链为“arm-linux-gnueabihf-”,指定config文件为“zynq_zc702_defconfig”。命令如下:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig
这样我们就可以开始编译了,输入编译命令
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 16
-j 参数可以调用多核编译,效果不是很明显。
编译完成后会在 U-Boot 源码的顶层目录生成 u-boot.bin 文件,u-boot.bin 即为Bootloader 二级引导文件,如下图,至此Uboot 编译已经完成。
对于Zynq系列芯片来说比较特殊一点,因为由FPGA的存在,启动流程上和正常的SoC有些不同,ZYNQ启动分为两个阶段,第一阶段是 BOOT ROM是ZYNQ原厂固化代码,第二阶段是 FSBL (First Stage Bootloader)SDK工具来制作。具体流程:
上电后,Zynq7000 SOC 会首先执行片内 Boot ROM 代码,Boot ROM 代码读取 Boot mode 寄存器来判断是哪一种启动方式,启动方式包括三种,SD card/QSPI Flash/JTAG。确定好启劢方式后,Boot ROM 就会从相应的存储设备启动,并且将执行权交付给 FSBL。
然后第二阶段,首先启动FSBL初始化初始化 CPU,初始化串口,等等完成最底层一些操作,然后会继续根据Boot mode 寄存器,判断是哪种启动方式。
最后才到我们的代码启动,FSBL会初始化将要启动的存储设备,然后从存储设备中拿到system.bit(相当于PL部分的Bitfile)初始化FPGA,再就是开始正常SoC的启动流程,复制u-boot,启动引导kernel那一套,OK 整个系统启动了。
回归正题我们编译了u-boot怎么放到板子上用呢?这就需要创龙提供我们的制卡工具了,文件位置见截图:
将工具copy到我们ubuntu上,同时将SD卡也对接到Ubuntu。
解压工具:
tar -xvf mksdboot_11_10_12_12_13.tar.gz
我们可以看见整体的目录结构如下图:
我们只要将我们的u-boot.bin的文件替换掉boot目录里的u-boot.bin的文件就好了,然后执**(可以放心哦,我们烧录的SD卡,这个卡少错程序导致板子启动不起来,我们只要将卡拔下从烧就好了,对应的板载的EMMC可不要轻易乱烧,烧坏了会比较麻烦,可能要借助SD来恢复)。 只是ZYNQ比较特殊,正常SoC的硬件初始化是由硬件自行完成,而FPGA的硬件初始化由Verilog来做,所以在启动的初期就会多出一个加载硬件bitfile的过程。 然后执**工具中的脚本:
sudo ./mksdboot.sh --device /dev/sdb 这样我们的SD卡就做好,赶快上板使用把,OK能够将SD里原有的linux引导起来。目标达成。
OK,本次测评就到这里了,简单来总结下,创龙的资料还是不错的,基本上可以帮助小白快速入门,当然这里的小白不是一点什么都不懂的小白哦,起码要接触过linux,或者接触过FPGA,知道其中基础的运行到的小白,简单来说,抛去开发,基本的使用创龙的资料已经做的很清晰,步骤也很仔细,如果是有基础的人看,甚至会感觉写的啰嗦。但也正是因为这样,对于小白来说才更加友好,看着资料,不说开发,搭建起来开发环境基本上不是什么难事,有了环境,响应的烧录工具,等等等,虽然创龙TLZ7x-EasyEVM Zynq7020 是一块工业级开发板,但是拿来做新手入门,了解Zynq系列SoC,也是一个不错选择。
|