Author:Gary
Data:2019-12-24
Ref:
ug1144-petalinux-tools-reference-guide.pdf
https://www.cnblogs.com/vacajk/p/6146146.html
https://www.cnblogs.com/likaiwei/p/10223354.html
https://blog.csdn.net/mcupro/article/details/91973744
https://blog.csdn.net/lulugay/article/details/99715402
https://www.shuzhiduo.com/A/ke5jxXQOzr/
http://www.openssd.io/
由于项目所需,我需要在Cosmos开发板上运行Linux系统。Cosmos是一块用于开发SSD的开发板,开发板的主要部件是一颗ZYNQ芯片和两块OpenChannelSSD,Cosmos项目主页:http://www.openssd.io/。Cosmos上所搭载的ZYNQ型号为Xilinx Zynq-7000 AP SoC (XC7Z045-FFG900-3)
,上面包含了一颗Kintex系列的FPGA以及一颗双核 ARM A9的硬核。开发板上还有1GB的DDR3内存,以及SD卡、串口、以太网口以及QSPI等等外设,可以满足用于运行Linux的条件。
在ZYNQ上编译运行Linux主要有手动编译以及使用PetaLinux。PetaLinux是Xilinx推出的用于快速编译、打包Linux镜像的程序,相比手动编译十分方便,本文使用PetaLinux进行编译。
PS:FPGA上的Linux编译真的是坑多多,我搞了好多好多天才成功运行,中途想放弃过N次,建议大家做好心理准备。
本文主要是参考ug1144,也就是PetaLinux的官方说明文档进行操作的,强烈建议大家下载下来对照着做,我最后发现我踩的好多坑都是因为没有按照说明文档的要求来弄导致的。大家记得软件和文档版本要匹配,下载链接
一.PetaLinux安装
- 系统可以选择Ubuntu16.04或者Ubuntu18.04,实测都可以用。
- 去Xilinx官网下载PetaLinux,这里要注意,Vivado和PetaLinux的版本要完全匹配才行,因为PetaLinux所接收的.hdf文件一定要是相对应的Vivado编译出来的。本文的Vivado和PetaLinux都采用2019.1版本。下载链接,下载速度很慢。。。下载完成后得到一个petalinux-v2019.1-final-installer.run文件。
- 安装所需的库文件,安装指令在UG1144的第二章的Quick Installation of Packages 里面有写,但是这个指令我运行不了,其中有个库它写的-dev,我在另外一篇文章里面找到了安装指令,如下:
sudo apt install chrpath socat autoconf libtool git texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev xvfb libssl-dev libncurses5-dev zlib1g:i386 diffstat build-essential
,实测可以满足整个编译过程的需要。 - PetaLinux需要在bash中运行,但是Ubuntu默认的是dash,切换方法可以参考我的博客:https://blog.csdn.net/m0_37340681/article/details/103453096
- 新建一个文件夹用于PetaLinux的安装,
sudo mkdir -p /opt/pkg/petalinux/2019.1
;给安装路径授权:sudo chmod 777 -R /opt/pkg/petalinux/2019.1
;给petalinux安装路径文件授权,UG1144中说的不能给PetaLinux授775权限,说会导致什么Bitbake错误,但是我不授权又安装不了,授权之后实测完全没毛病,先不管这么多了,给安装文件授权:sudo chmod 775 -R petalinux-v2019.1-final-installer.run
- 安装:
./petalinux-v2019.1-final-installer.run /opt/pkg/petalinux/2019.1
,安装过程中需要先按回车键,然后按q退出许可协议浏览,按y进行协议许可确认;然后再按q,按y,按q,按y,一共三遍。 - 安装完成后需要配置环境变量:
source /opt/pkg/petalinux/2019.1/settings.sh
,配置完成后输入peta按Tab键就可以自动补全了 - 到这里PetaLinux就安装成功了
二.PetaLinux编译配置
- 获取开发平台的.bsp文件或者.hdf文件,这一步每个人的情况都不同我也没法给出每个人的解决方法,我只说下我自己的,由于我没找到Cosmos的.bsp文件,于是我去Cosmos的Git主页可以找到Predefine Vivado工程,在Vivado中打开后进行综合、实现,生成比特流。然后导出硬件平台,导出的时候注意要勾选包含比特流,最后得到了平台的.hdf文件。这一步可以参考Cosmos的官方文档
- 如果能获取.bsp文件的这一步参考UG1144中第三章的PetaLinux BSP Installation建立工程文件;没有的就使用ZYNQ工程模板创建工程:
petalinux-create -t project --template zynq --name <工程名>
,创建完成后进入工程目录,然后将上一步得到的.hdf文件拷贝进工程目录中。 - 开始进行配置,输入
petalinux-config --get-hw-description=<上一步创建工程的绝对路径>
,它会自动识别出拷贝的hdf文件。然后会进入一个配置界面如下图所示: - 配置项之前被一个文档误导了,导致最后一切都编译好了但是进不了Kernel,提示找不到SD卡分区。这里只需要配置如下几项就可以了:
- 将Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> boot image settings 中 ‘image storage media’ 更改为 ‘primary sd’;(默认就为primary sd)
- 将Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> kernel image settings 中 ‘image storage media’ 更改为 ‘primary sd’;(默认也为primary sd)
- 将选项:Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> dtb image settings 中 ‘image storage media’ 更改为 ‘from boot image’(我之前就是改了这里为primary sd结果进不了系统)
- 将选项:Image Packaging Configurations 中 ‘Root filesystem type’ 更改为 ‘SD card’
- 退出后会自动保存配置,配置完成
三.PetaLinux编译
- 这里编译不需要像别的博客写的那样需要先编译内核什么的,直接
petalinux-build
即可,根据UG1144第四章的Build System Image所说,这一步会自动编译DTB、FSBL、UBOOT、内核以及根文件系统。编译过程大约一个小时,编译完成后会在images/linux目录下生成所需的文件 - 上一步编译完成后需要将编译出来的结果打包,这一步也参考第四章的Generate Boot Image for Zynq-7000 Devices,进入images/linux目录,打包指令如下:
petalinux-package --boot --fsbl zynq_fsbl.elf --fpga system.bit --uboot --force
,打包完成后会在该目录下生成BOOT.BIN
四.PetaLinux镜像部署
这里主要参考UG1144第七章的Configuring SD Card ext File System Boot就可以了,步骤如下:
- 对SD卡进行分区,这里可以用Linux分区也可以用Windows。出于方便我就用了Windows上的DiskGenius,先删除SD卡的所有分区,然后分2个主分区,第一个分区取名为BOOT,文件系统选择FAT32,容量需要大于60MB;第二个分区取名为RootFS,占有剩余的全部容量,文件系统选择EXT4。如果无法删除分区,可以参考这篇文章,用Windows的diskpart工具进行强制删除:参考链接
- 将SD卡插到Linux上,然后可以在
/media/<user>
目录中看到刚刚分的BOOT分区和RootFS分区。然后进入工程的images/linux目录,拷贝文件:
cp BOOT.BIN /media/<user>/BOOT/
cp image.ub /media/<user>/BOOT/
- 复制根文件系统:
sudo tar xvf rootfs.tar.gz -C /media/<user>/RootFS
- 到这里镜像文件就部署完成了
五.Cosmos上电启动
- 将SD卡插入开发板,然后将开发板配置为从SD卡启动模式,参考Cosmos的Tutorial和Boot Guide,将开关配置如下图:
我们需要从SD卡启动的话将SW5的3和4向下掰即可。 - 连接串口。这里可以选择的工具就太多了,只有终端的话可以用minicom,可以用GUI的话推荐putty,安装指令如下:
sudo apt install putty
。安装后打开,记得一定要用管理员权限:sudo putty
,我这里不用的话就不能打开串口。 - 打开后按下图进行配置:
配置完成后可以在Saved Sessions里面取个名字然后点Save,以后双击即可连接了。
这里注意串口断开的话putty也不会主动退出的,所以可以先打开一下开发板然后连上串口,然后重启一下开发板即可看到从头打印的信息了,当然如果你手速够快的话当我没说( ̄~ ̄;)
- 开机后即可在putty中看到Linux启动了,输入用户名root和密码root即可进入系统了,能看到这个界面的话就祝贺你安装成功了!:
如果你没有一次成功的话也不要慌,我这篇文章里面的每一步都是我踩了无数坑才总结出来的教程,可以多看看官方文档,其实很多问题官方文档已经写出来了的,很多问题其实都是由于没按照官方文档的要求来的;遇到问题可以多上谷狗查查,百度这方面的资料太少了。加油 (ง •̀_•́)ง