Petalinux是Xilinx推出的嵌入式Linux开发工具。本篇文章基于Xilinx官方文档Petalinux Tools Documentation,另外在本篇文章中指出了我在编译过程中遇到的一些错误,希望能帮大家节省时间,轻喷。
(如遇到问题请在我的githubsuikammd上提issue,谢谢,还没有搞评论区,拖延症=。=)
环境准备
- Ubuntu虚拟机,我是在Google Cloud Engine上免费申请的虚拟机,区域是台湾,速度比较快,大小是15GB内存、4个vCPU以及60GB硬盘。(不要自己折腾VMware,后续petalinux编译需要翻墙,速度极慢,而且GCE上面可以随便折腾,感谢咕咕!)
- Petalinux SDK Installer、zcu104 BSP file,这两个文件均可以在file download中下载,我下载的版本都是2018.1的。如果需要下载高版本的,请注意查看板子是否支持,SDK installer和BSP的版本必须一致!
安装步骤
GCE账号配置:申请GCE账号就不多说了,记得在申请虚拟机时,在防火墙处勾选允许HTTP流量、允许HTTPS流量,并在SSH密钥处添加你的公钥。这样就会自动生成虚拟机的外部IP,通过ssh连上去就可以使用了。
安装依赖包:在开头提到的官方文档中可以找到需要安装的依赖包,为方便大家使用,我在这里贴一下需要用的依赖包。
sudo apt-get update
sudo apt-get install tofrodos iproute2 gawk gcc git make xvfb net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev screen pax gzip tar在安装过程中发现还需要安装
zlib1g-dev:i386
,这时候只要sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install zlib1g-dev:i386这样我们的依赖包就安装完毕了。
下载Petalinux SDK Installer、zcu104 BSP file:wget一下对应的链接就行了,可能需要重命名下载的文件为相应的名称,可以分别是petalinux-v2018.1-final-installer.run、zcu104.bsp。
安装Petalinux Tools:在安装过程中同意三个协议即可,这样Petalinux Tools就被安装到了/home/xxx/petalinux下。
mkdir /home/xxx/petalinux
./petalinux-v2018.1-final-installer.run /home/xxx/petalinux不用在意
WARNING: No tftp server found
,不影响编译,但是可以通过下面的指令消除warning。sudo apt-get install tftpd-hpa
修改
/etc/default/tftpd-hpa
sudo vim /etc/default/tftpd-hpa
为
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"最后启动tptp server
sudo service tftpd-hpa restart
,再检查下是否启动成功sudo netstat -a | grep tftp
。构建Petalinux工作环境:
source /home/xxx/petalinux/settings.sh
建议将这句话加到bashrc中,不然每次都要手动source。最后再执行下面这句话确认下工作环境已经设置完毕,如果结果是
/home/xxx/petalinux
说明设置成功!echo $PETALINUX
安装Petalinux BSP:这样会生成一个文件夹
xilinx-zcu104-2018.1
,当然这个与你安装的BSP版本一致,这个文件夹就是你的project_dir。cd /home/xxx
petalinux-create -t project -s <path-to-bsp>Enable ffmpeg in rootfs:不需要在petalinux中支持ffmpeg的可以直接跳过此步。
在你的
<project_dir>/project-spec/meta-user/recipes-core/images/petalinux-image.bbappend
文件中增加这句话IMAGE_INSTALL_append = " ffmpeg"
。之后cd <project_dir>
petalinux-config -c rootfs在弹框中选择
user packages
,然后enable ffmpeg即可。U-boot启动自动设置内网ip:
在
<project_dir>
输入petalinux-config
,依次选择Subsystem AUTO Hardware Settings->Ethernet Settings->Obtain IP address automatically
,然后取消Obtain IP address automatically
,会自动出现三行信息来设置IP address/netmask/gateway
。编译系统镜像:这个过程稍微有些久,耐心等待即可。为防止遇到奇怪的编码错误,在编译前请加上这三句
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8这时候执行下面的代码即可。
cd <project_dir>
petalinux-build生成固件BOOT.BIN、image.ub:
cd <project_dir>
petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --fpga ./images/linux/system.bit --pmufw ./images/linux/pmufw.elf --u-boot验证:接下来就是激动人心的时刻了,我们把生成的BOOT.BIN、image.ub拷进SD卡中,放入zcu104板子,选择从SD卡启动,如果能看到linux的操作界面,那就说明你成功啦。若rootfs中包含了ffmpeg,输入ffmpeg验证下ffmpeg是否安装成功。以上。
在写DMA驱动的时候发现了,更简单的验证方法,不需要将数据拷贝到SD卡,直接命令行输入
petalinux-boot --qemu --kernel
可以使用模拟器进行测试,具体需要测试的东西同我上文提到的。
#AWS迁移
然后今天GCE的300刀用完了(还不是因为穷加不记事),于是写了个半自动化的naive脚本帮我在AWS上完成安装petalinux的操作,第一个参数是petalinux installer的下载路径,第二个参数是bsp的下载路径。
!/bin/sh |