为Zedboard编译u-boot并运行linux操作系统

这几天比较闲,正好我新买的SD卡也到了,花了两天的时间摸索,编译好了运行于zedboard上的u_boot,uImage,并将其存放到到SD卡中在zedboard上成功启动了linux

不得不吐槽一下我参考的网上教程没有一份从开始到最后都是准的。。出了好多的错误,我都是费劲的一个个错误进行调试的,以本人的低水平,最终能调好已经是万幸了,最后以此文记载一下过程,以免新手继续走弯路。

首先是linux编译环境,我这里用的不是大多数人所用的虚拟机,是用的学校的服务器,这台服务器装的是Redhat操作系统,而且由于我在上面安装过很多东西,所以并不缺库,所以安装相关的软件就被我直接省略掉了。

第一步:下载并安装arm-xilinx-linux-gnueabi-工具链。

直接从网盘下载https://pan.baidu.com/s/1pLlVcaJ,下载到linux系统中,直接./运行即可。运行后会出来安装界面

这个很简单,正常安装好就行,然后将其安装目录下bin文件夹添加到自己的PATH路径中,这样交叉工具链就安装好了。

第二步,下载并编译U-boot

选用的U-boot的网站为https://github.com/Xilinx/u-boot-xlnx,直接命令git clone https://github.com/Xilinx/u-boot-xlnx,下载完成后

cd u-boot-xlnx

确保交叉编译链在环境变量中:export CROSS_CONPILE=arm-xilinx-linux-gnueabi-

然后输入命令

make arch=ARM CROSS_CPMPILE=arm-xilinx-linux-gnueabi- zynq_zed_config
成功执行后 再输入命令

 make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
若出现问题

*** Your GCC is older than 6.0 and is not supported
解决方法如下

vim arch/arm/config.mk

将64,65,68-73行注释掉,如图所示

执行成功后,目录下出现u-boot.bin 将其更名为u-boot.elf

mv u-boot.bin u-boot.elf

第三步,生成BOOT.bin文件

上面生成的u-boot是不可以单独使用的,必须配合vivado的fsbl,和配置fpga的文件.bit一起使用。

我的vivado是2018.1版本的,其余版本可能也是大同小异。

首先打开vivado,新建一个工程,选择器件的时候选择开发板zedboard,点击Create Block Design,添加一个ZYNQ Processing System,如图所示就可以

然后在Source栏里,右键这个Block,选择Create HDL Wrapper,生成好wrapper之后,生成bitstream,生成完事后,File->Export->Export Hardware,勾中Include bitstream。然后File->Launch SDK登录SDK界面。

在SDK界面里 File->New->Application Project,设置如下:

注意!!名字随便取,但是那个Hardware Platform一定要选 zed_hw_platform(pre-defined),否则不好使

Next后选择Zynq FSBL

Finish后,等待系统编译生成fsbl.elf文件,若工程名字不是fsbl,则该文件为工程名.elf

然后选择Xilinx->Create Boot Image

随便选一个输出路径,然后在底下将三个文件填加进去,注意顺序不能错。分别是fsbl.elf(bootloader) .bit(datafile) u-boot.elf(datafile)。

然后Create即可。生成出来的BOOT.bin放在SD卡中,即可在zedboard上启动u-boot了。

附一张我的SD卡分区图,分两块,第一块文件格式fat32,标签为boot,用于存放本文所有文件,我给的大小是256M,第二块分区是ext4文件系统,标签为rootfs,用于linux系统解压文件系统。BOOT文件放置在fat32分区上即可。

第4步,制作内核文件

网址:https://github.com/Digilent/linux-digilent-Dev(我也不到当时为什么u-boot用xilinx,内核用digilent的。。能用就行)

git clone https://github.com/Digilent/linux-digilent-Dev 

下载完成后

cd linux-digilent-Dev

检查环境变量CROSS_COMPILE,若没有则添加上,同u-boot添加方法。继续

make ARCH=arm CROSS-COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig

make ARCH=arm CROSS-COMPILE=arm-xilinx-linux-gnueabi- 

在arch/arm/boot文件夹中生成了zImage。

将刚才的u-boot文件夹下的tool文件夹配置到环境变量PATH中(需要里面的mkimage工具)

export PATH=$PATH:~/zedboard/u-boot-xlnx/tools/

make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage

若执行无误,在arch/arm/boot文件夹中生成了uImage,这个文件是我们最后需要的文件。

第五步,生成设备树和下载文件系统

cd arch/arm/boot/dts

dtc -I dts -O dtb -o devicetree.dtb zynq-zed.dts 

生成的devicetree.dtb即我们需要的文件

文件系统没有编译,直接下载的官方的,以后有空补上

网址 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842473/Build+and+Modify+a+Rootfs

注意,该文件系统不能直接使用,要对其进行包装,确定刚才添加的mkimage在环境变量中,执行命令

mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz

生成可以使用的文件系统。

第六步,运行Linux系统

将四个文件,分别是BOOT.bin uImage devicetree.dtb uramdisk.image.gz拷贝到SD卡中的fat32分区中。

上电运行zedboard。

串口输出

至此,linux系统被成功运行在zedboard之上。

四个文件的下载地址https://download.csdn.net/download/dongze2/10720546

猜你喜欢

转载自blog.csdn.net/dongze2/article/details/83053581