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连上去就可以使用了。
安装依赖包:在开头提到的官方文档中可以找到需要安装的依赖包,为方便大家使用,我在这里贴一下需要用的依赖包。
1
2sudo 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,这时候只要1
2
3sudo 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下。
1
2mkdir /home/xxx/petalinux
./petalinux-v2018.1-final-installer.run /home/xxx/petalinux不用在意
WARNING: No tftp server found,不影响编译,但是可以通过下面的指令消除warning。1
sudo apt-get install tftpd-hpa
修改
/etc/default/tftpd-hpa1
sudo vim /etc/default/tftpd-hpa
为
1
2
3
4TFTP_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工作环境:
1
source /home/xxx/petalinux/settings.sh
建议将这句话加到bashrc中,不然每次都要手动source。最后再执行下面这句话确认下工作环境已经设置完毕,如果结果是
/home/xxx/petalinux说明设置成功!1
echo $PETALINUX
安装Petalinux BSP:这样会生成一个文件夹
xilinx-zcu104-2018.1,当然这个与你安装的BSP版本一致,这个文件夹就是你的project_dir。1
2cd /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"。之后1
2cd <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。编译系统镜像:这个过程稍微有些久,耐心等待即可。为防止遇到奇怪的编码错误,在编译前请加上这三句
1
2
3export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8这时候执行下面的代码即可。
1
2cd <project_dir>
petalinux-build生成固件BOOT.BIN、image.ub:
1 | cd <project_dir> |
- 验证:接下来就是激动人心的时刻了,我们把生成的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的下载路径。
1 | !/bin/sh |