在ZYNQ-ZEDBOARD上搭建LINARO文件系统
本文记录如何在ZEDBOARD上搭建LINARO文件系统,目前还不支持HDMI输出,只能够在串口打印下测试,由于修改了默认的RAMDISK文件系统,中间遇到很多问题,中间从网上找了很多博文,尝试的方式也换了很多。
主要的参考资料:
何宾《XILINX ZYNQ-7000嵌入式系统设计与实现》
http://www.openhw.org/topic-1403
http://blog.csdn.net/yake827/article/details/51980181 雅克的博客
准备的工具(软件版本基本按照何宾的例子,VIVADO 2015.4,)
1、虚拟机VMWARE 12
2、ubuntu 14.04
3、GITHUB工具
4、SDK (LINUX)
5、LINARO文件系统
1)UBUNTU的安装,参考何宾书,操作非常详细
注意:不要添加607页的搜索链接资源,更新包很大,会导致UBOOT编译不出来
2)FTP安装
随便找一个FTP工具就可以了
3)UBUNTU下安装FTP工具
按照书上的即可
4)安装SSH /GIT
按照书上即可
5)安装交叉编译环境SDK
按照书上即可,此外也可以不用SDK自带的,另一种方式的文件很小,不像SDK有1G那么大。
主要包含4个操作过程:
1、制作UBOOT
2、制作内核文件和设备树文件
3、SD卡的准备
4、载入文件系统
这四个操作过程基本在网上都可以找到,但是参差不齐,主要是UBOOT和内核文件不统一,GIT的文件不一样,加载的文件有uImage 也有 zImage ,这里还没有搞清楚区别,暂时忽略。
书上对于操作过程以及软件安装说的比较详细,软件安装一切顺利,文件选择也基本都对,但是,最后输出的配图用的uImag,但前面却用的zImage , UBOOT的启动过程文件、设备树文件也没有修改,因此是不太可能在HDMI上显示的,也基本不能打印,因此第26章的实验是做不出来的。
本书能给一个比较正统的方式,交叉编译命令正确,整体过程没错,但缺乏一些必要改动,此章前面几章解释比较详细,可以按照步骤来做。
1、uboot编译不过
修改.config 文件 ,注释掉SIGNATURE那一行,即注释掉 报错行的宏定义 ;
2、 uboot 执行错误 :BOOTM地址错误
由于板子默认是采用RAMDISK的方式,采用默认的例子比较容易做,但采用LINARO的文件系统,在uboot导入文件的时候需要修改地址,如下:
这里的 - 号,左右都要有空格,意思是替代的地址,那么就要把 - 作为一个地址,需要空格,没有空格直接错误,在串口打印下会有错误,BOOT阶段无法进行下去。
3、内核文件,内核采用uimage,其编译的命令要注意加上地址
内核文件GIT时候需要按照参考资料里的,不清楚何宾书上的是否也可以。
内核文件较大解压时候,编译有可能编译不出来,需要重新解压,再次编译
4、设备树文件
设备树文件需要增加文件系统的挂载点,按照网上的名字,不是查看的盘符的名字,在虚拟机下看到SD卡的名字是dev/sdd1 ,sdd2,这里不能这么写,会导致无法引导文件系统;
5、SD卡制作和文件系统
制作SD卡按照参考文档即可,注意文件系统导入到EXT4 正常,此处导入错误的文件,导致无法启动。
版本都是采用2015.4 ,GIT的UBOOT、内核版本也尽量使这个版本。
1、搭建最小的ARM系统,除了基本的UART、SD、USB外其余均不需要。
红框的都去掉。
2、导出文件和WRAPPER后,直接编译BIT文件;
3、然后导入SDK,建立FSBL工程。
在SDK中点击菜单File->New->ApplicationProject。项目名fsbl(可以更改),OS平台standalone,语言为C,点击Next,Templates选项选择ZynqFSBL。
点击Finish,SDK会自动编译FSBL代码,并在工程Debug下生成fsbl.elf目标文件。Project Explorer –》binaries–》fsbl.elf。
此处需要保留FPGA部分综合的BIT文件以及FSBL.elf文件,用于生成UBOOT。
首先需要git uboot源码:
地址:https://github.com/Xilinx/u-boot-xlnx选择2015.4的版本,个人是在Windows下安装的Github 软件,在网址上敲入该地址即可,点击RELEASE,回退版本即可。
修改内容:
解压后,配置交叉编译环境后编译即可,其过程为:
1、安装DTC工具
apt-getinstall device-tree-compiler
2、进入到UBOOT文件下
source /Xilinx/SDK/2015.4/settings64.sh
make CROSS_COMPILE=arm-xilinx-linux-gnueabi-zynq_zed_defconfig
(这里可以查看交叉编译环境有没有准备好 如果没有需要重新配置)
生成.config 文件,改版本编译需要注释掉SIGNATURE那一行。
make CROSS_COMPILE=arm-xilinx-linux-gnueabi- 后就产生了UBOOT文件
改名字:mv u-boot u-boot.elf
制作U-BOOT.bin文,在SDK下:
点击菜单Xilinx Tools >Create Zynq Boot Image
首先设置BIF文件路径。BIF文件用于指定当前boot.bin制作过程中用到的三个文件的路径,相当于一个项目配置文件。
设置好后我们先按顺序添加三个文件,显示FSBL文件
FSBL的在弹出对话框中的Partitiontype是bootloader,而bitstream(如果有)和uboot都是datafile。此处一定要注意,否则会出现问题。添加正确的话,修改输出路径中文件名为boot.bin(也可以不修改)
点击Create Image创建boot.bin,成功的话会在输出路径生成相应文件。
(该部分不容易出错)
文件地址:
https://github.com/Digilent/linux-Digilent-Dev
(该文件编译后续未采用,2016.4编译难以编过)
采用雅可的参考内核:
https://github.com/Xilinx/linux-xlnx
采用2015.4版本。
过程:
1、安装u-boot-tools : apt-get install u-boot-tools
进入内核文件夹:
2、编译:
1)source /xilinx/SDK/2015.4/settings64.sh
2)make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zunq_defconfig
3) make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-uImage LOADADDR=0x8000
生成的内核存在于/arch/arm/boot。
注意上面的dev/mmcblk0p2 是指mmcblk0 的p1 p2,可能在虚拟机上看到的不是这个名字,这个是相对嵌入式系统的名字。
(本部分直接按照参考即可)
将U-BOOT.bin,devicetree.dtb,uImage 文件拷入到FAT32部分。
文件系统下载地址:
releases.linaro.org/archive
选择12.09->ubuntu->précises-images->Ubuntu-desktop->linaro-precise-unbutu-desktio-20120923-436.tar.gz
(上图是参考的截图,只有解压以及拷贝的操作)
本文拷贝点:
sudo rsync –a –progress ./ media/本人名字/rootfs
到目前为止,所有的文件均准备完成。
目前,还不能从HDMI输出,后面需要增加该部分的功能。