版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Markus_xu/article/details/112555169
一、使用Petalinux自带工具
本文使用官方BSP,直接创建工程。此步骤根据自己的需求进行建立
切换到工程目录,创建应用程序,输入:
petalinux-create -t apps -n myapp --enable
其中myapp是你应用程序的名字。而--enable参数则是使能对你的应用程序的编译,这样就不用再次去rootfs下再次启动配置。
打开目录<工程根目录>/project-spec/meta-user/recipes-apps/myapp,可以看到file下存放着你的源码,可以根据自己的需求,直接替换里面的内容。本文就以示例中的Hello World直接进行编译。
1.2 编译与运行
切换回工程根目录,重新编译整个工程,输入:
petalinux-build
你也可以单独编译你的应用程序
petalinux-build -c <你的应用程序名字>
此时应用程序仅仅只是单独编译,并没有安装到系统中;如果要将应用程序安装到系统中,输入:
petalinux-build -c <你的应用程序名字> -x do_install petalinux-build -c rootfs petalinux-build -x package
第一行将应用程序安装到目标的根文件系统主机副本中<TMPDIR>/work/<MACHINE_NAME>-xilinx-linux/petalinux-image-minimal/1.0-r0/rootfs/.
TMPDIR可以在petalinux-config → Yocto-settings → TMPDIR中找到。如果项目在本地存储,TMPDIR为<工程根目录>/build/tmp/.
第二、三行将应用程序编译入系统镜像。
1.3 测试
ZYNQ有多种启动方式,本文采用以SD卡启动方式为例子;
先生成工程的镜像文件,在工程根目录输入:
petalinux-package --boot --format BIN --fsbl <FSBL的ELF目录> --fpga <FPGA硬件描述bit目录> --u-boot --force
将<工程根目录>/image/linux下的 BOOT.bin、boot.scr、image.ub这三个文件拷贝到SD卡中,然后调整器件为以SD卡模式启动。
等待进入系统后,输入你的应用程序名字来检测是否添加成功;如本文测试程序myapp
使用如下命令可以查看所有已安装的应用程序
cd /usr/bin/ ls
比较多一页放不下,同时也可以找到我们的应用程序(红框)
1.4 后记
最好不要使用已有程序作为名字,否则会有冲突以至于发生未知问题。本人曾以test作为名字,与已有test重复,导致无法运行。
推荐使用本地编译工具速度会大大提高。
二、使用交叉编译工具
首先确定你所使用的器件的架构,与其对应的编译工具
本文使用的是ZynqMP系列器件,所以使用aarch64-linux-gnu-gcc/g++(注:最后一个破折号需要自己确定具体编译工具类型)
下载和安装aarch64-linux-gnu-gcc,输入:
sudo apt-get install gcc-aarch64-linux-gnu
如果你同时安装有Petalinux,安装过程中需要注意: 由于兼容性问题,该安装会卸载gcc-multilib,而此库为Petalinux必备运行库,使用Petalinux必须重新安装,且重新安装gcc-multilib会导致gcc-aarch64-linux-gnu被卸载
2.2 编译
编译没有特别需要强调的,按照正常的交叉编译工具使用就可以了。
如本文新建一个HelloWorld模板的test.c,输入如下命令编译成二进制文件:
aarch64-linux-gnu-gcc test.c -o test
2.3 测试
把输出的文件(test)导入到系统,本文是直接复制到启动的SD卡上。
切换到SD卡目录,运行文件
cd <SD卡挂载点> ./test
2.4 后记
【未尝试】添加已经编译好的文件到PetaLinux根文件系统中
确保已经你以PetaLinux(器件)的目标架构去编译你的代码
用以下命令新建一个应用程序
petalinux-create -t apps --template install --name <应用程序名字> --enable
rm myapp cp <预编译好的应用程序目录> ./
注意:需要确保安装模板应用程序安装到目标文件系统中的二进制数据与系统的底层硬件实现兼容。
总结
实际创建APP方法不止文中这两种,可以根据自己的喜好自由选择。
参考文章