移植QT程序到petalinux平台

背景

petalinux是xilinx为其旗下嵌入arm硬核或软核的FPGA芯片(zynq microblaze等)开发的linux distribution制作工具,基于yocoto构建系统。
该工具制作FSBL、uboot、linux内核和rootfs还行,但制作用户自己的QT等C/C++应用程序就比较麻烦了,需要自己写recipe,因为它的rootfs里不包含g++、gcc、make等开发工具。

解决

思路1 交叉编译

如果不想研究yocoto的recipe语法,又想编译QT程序,该咋办呢?我第一时间想到的解决办法是交叉编译,但稍微思考下就觉得不太可行:
首先QT程序不像内核或驱动,没有或很少有库依赖,QT应用首先依赖一堆QT内置库和模块,然后还可能依赖FFMPEG等第三方库,用交叉编译来搞实在是太麻烦了。

思路2 在桌面arm上编译,在petalinux上部署QT@ARM

考虑搭建一台arm版ubuntu虚拟机,然后在上面编译出QT应用,最后将QT应用及其所有依赖库都部署到petalinux上。
在x86物理机上,VMware不能运行arm虚拟机,能选择的只有QEMU了,所以可行的做法是

  1. 在VMware里安装x86的ubuntu
  2. 在x86 ubuntu上安装qemu-system-aarch64
  3. 用qemu-system-aarch64安装arm64版ubuntu,注意ubuntu是桌面系统,需要UEFI启动,所以要从linaro下载arm64版的UEFI固件
  4. 在arm64版ubuntu上搭建QT开发环境,注意修改apt源为国内镜像,华为云的镜像有arm64的软件源
  5. 编译并调试运行QT应用
  6. 将QT应用及其依赖的库 部署到petalinux

注意事项

ubuntu版本选择

首先确保你选的ubuntu上的QT版本版本不能高于petalinux的,否则可能无法运行。例如我的petalinux是2019.2,上面的QT是5.11,那我的ubuntu就不能是20.04,因为20.04的QT版本是5.12
其次,ubuntu版本也不能太老,如果你的QT应用用到了charts模块(负责绘制饼图、柱状图等图表),则强烈建议选择18.04(QT版本5.9),因为charts模块从QT 5.7开始免费,而16.04的QT版本是5.5,其apt源根本搜不到charts,只能手工back port

ubuntu分区方案选择

安装ubuntu时,默认分区方案是LVM,这里强烈建议改成普通分区,LVM的好处是分区可伸缩,但这对嵌入式系统毫无用处,而且其操作的复杂性和CPU开销也不低,强烈不推荐。

怎么进入EFI shell了?

一般是UEFI没找到虚拟磁盘上的ESP分区(EFI System Partition),此时可以执行下面2条命令

fs0:    #手工进入ESP分区
efi\ubuntu\grub.efi    #加载ESP分区的GRUB

中文字体部署

如果你的QT应用界面有中文,则需要将中文字体也部署到petalinux,建议选择fonts-noto-cjk等轮廓字体,千万不要选择xfonts-intl-chinese等点阵字体!
部署字体时不光要把ttc文件拷贝到/usr/share/fonts下对应目录,还要把对应的字体配置文件也拷贝到相应位置,并创建到/etc/fonts的符号连接,总之跟桌面ubuntu保持一致就行。

总结

该方法的最大缺点是无法工程化管理QT应用源码,所以有时间的话,还是用recipe方案吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值