ZYNQ系列(四) 将文件打包进文件系统

第一章 Petalinux创建工程
第二章 Petalinux-config配置说明
第三章 QSPI自启动工程
第四章 将文件打包进文件系统




前言

linux开发过程中,都会涉及交叉编译app程序,zynq提供SDK软件进行编译,但一般情况下都是使用虚拟机进行交叉编译,使用虚拟机交叉编译的情况下,将编译后的app打包进zynq的文件系统成为了一个问题。
解决这个问题有很多办法,这里提供2种办法:

  1. 通过tftp,将app程序放入上一章提到的spiflash中。(这种办法不做介绍了,网上太多tftp)
  2. 将app程序直接打包进zynq的rootfs中。(本章内容介绍的就是这种方法)
    不仅仅是app程序,任何文件都可通过此方式放入文件系统。

一、创建应用文件工程

1. 确保已经有预编译的app

2. 使用以下命令创建应用程序

	$ petalinux-create -t apps --template install --name myapp --enable

3. 进入新创建的应用工程目录

	$ cd <plnx-proj-root>/project-spec/meta-user/recipes-apps/myapp/files/

4. 删除现有的myapp app,并将预建的myapp复制到myapp/files目录下

	$ rm myapp
	$ cp <path-to-prebuilt-app> ./

二、rootfs配置

可以通过以下命令配置是否将应用文件工程编译至rootfs

$ petalinux-config -c rootfs

选择apps —> 下的自己刚建立的模块即可。

三、 编译

$ petalinux-build -c rootfs
$ petalinux-build

四、myapp.bb文件解读

  1 #
  2 # This file is the myapp recipe.
  3 #
  4 
  5 SUMMARY = "Simple myapp application"
  6 SECTION = "PETALINUX/apps"
  7 LICENSE = "MIT"
  8 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
  9 
 10 SRC_URI = "file://myapp \
 11                   "
 12 
 13 S = "${WORKDIR}"
 14 
 15 do_install() {
 16              install -d ${D}${bindir}/myapp
 17              install -m 0755 ${S}/myapp ${D}${bindir}/myapp
 18 }

前9行默认。
第10行,将file/myapp文件放入 SRC_URI中。
第13行,S变量就是目前应用工程的目录
第15-18行,do_install函数作用就是在zynq的rootfs中创建个myapp文件夹,并将myapp文件放入该文件夹下。

其中${D}为rootfs的根目录,即’‘\’目录。
${bindir} 为/usr/bin目录
其他已知目录
${sysconfdir}为 /etc目录

想把文件放入其他目录 使用${D}/xxx即可。

如果想增加其他文件

  1. 首先将文件放入file目录下,更改本行内容为,youfile为要添加的文件
SRC_URI = "file://myapp \
		   file://youfile \
                   "
  1. 更改do_install内容
do_install() {
              install -d ${D}${bindir}/myapp
              install -d ${D}${bindir}/youfile
	          install -m 0755 ${S}/myapp ${D}${bindir}/myapp
	          install -m 0755 ${S}/youfile ${D}${bindir}/myapp
  }

特殊情况说明

若添加的app程序需要用到QT的库,需要配置中打开关于QT的,否则会出现找不到库的错误。

$  petalinux-config -c rootfs 
Filesystem Packages ---> 
	misc ---> 
		qtbase ---> 
			[*] qtbase 
			// qt 
			[*] qtbase-plugins // qt 相关插件

其他动态库是否需要额外配置暂不清楚。

总结

使用此方法即可将文件打包进rootfs中,可以通过解压rootfs.tar.gz 查看文件系统的具体内容。

tar -vxf <plnx-proj-root>/project-spec/image/linux/rootfs.tar.gz

该方法只能一个文件一个文件的进行添加、打包,无法打包整个文件夹,需要打包大量文件的慎用。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐