openbmc镜像添加应用软件过程

        本文基于nf5180m7项目记录了如何在openbmc镜像中添加自己开发的应用软件,这对于开发openbmc下的一些工具类应用软件并将它们添加到openbmc镜像中来讲,是十分有帮助的。

       下面以新建并添加程序员最拿手的helloworld工具打印输出“Hello World!!!”的应用软件为例进行说明这一过程。

第一部分:添加c语言文件

这部分主要是在openbmc的recipes-phosphor包中新增c语言文件并创建cmake的过程。

1.在openbmc/meta-inspur/meta-nf5180m7/recipes-phosphor新建hello文件夹,用于存放要开发开的程序文件夹和该应用软件的.bb文件,其中.bb文件是Yocto的配方文件,在hello文件夹下再新建一个files文件夹,用于存放源码文件夹和CMakeLists.txt编译配置文件,在files文件夹下再新建src文件夹,用于存放.c源码程序文件及其.h文件,在本示例中新建了helloworld.c、helloworld.h以及main.c文件,编译这些文件的CMakeLists.txt,Yocto的配方文件hellocmake.bb,如图1和图2所示。

图1
图1
图2

其中需要注意的是:

①CMakeLists.txt文件的文件名和后缀都是固定的,不能出错;

②.bb文件的文件名即是应用包的名称,在配置镜像生成文件时要用到,而且要保持一致。

第二部分:编写与编译程序源码

这部分主要是介绍程序源码的编写,以程序员最拿手的打印输出“Hello World!!!”为例,在第一部分中的main.c中包含helloworld.h,并编写main函数,如图3所示。

就简单的一个打印输出为什么要搞3个文件来说明?因为本示例是要说明如何将多个程序源码文件的应用软件编译、配置并添加到openbmc镜像中的,这也是常用的一种场景。

图3

编写helloworld.h头文件的内容,如图4

图4

编写helloworld.c源码文件的内容,如图5

图5

 编写hellocmake.bb配方文件,内容如图6所示

需要注意的是,不论是.c文件还是.h文件,凡是编译用到的文件,都要添加到.bb文件的SRC_URI文件清单中,否则会有bitbake报错。

图6

 编写CMakeLists.txt编译文件的内容,如图7

这里说明一下,采用的是cmake的方式,cmake编译文件的编写规则需要查询资料去学习,但并不是很难,就本示例中的CMakeLists.txt文件中用到的一些变量和语法来讲:

cmake_minimum_required:设置cmake的版本

project:设置工程的名称

set(SRC_LIST …...):设置源码文件的名称清单

add_executable:编译为可执行文件(源文件 依赖文件)

install:将编译出的文件安装到哪里

这里需要注意的是不论是源码文件中的.c还是.h文件,凡是编译用到的文件都要添加到CMakeLists.txt文件中的SRC_LIST源码清单中,否则会有bitbake编译报错.

图7

 由以上CMakeLists.txt文件中的内容可知:

cmake的版本为:3.0

工程名称为:hellocmake

源码文件清单为:./src/helloworld.c ./src/main.c文件

编译成执行文件hellocmake,依赖文件为源码清单中的文件

安装目标文件hellocmake到相对路径${CMAKE_INSTALL_PREFIX}/sbin中

到hello/files路径下打开终端,执行cmake .命令进行cmake编译,成功后会产生很多cmake相关的文件以及文件夹,编译输出信息如图8

图8

 cmake编译后生成的文件以及文件夹如图9所示,其中对我们有用的文件就是Makefile,因为我们需要用它进行make应用软件。

关于${CMAKE_INSTALL_PREFIX}到底是指向哪个相对路径,可以打开生成的cmake_install.cmake文件,可以看到图10所示内容,意思是若没有对CMAKE_INSTALL_PREFIX进行定义,则设置CMAKE_INSTALL_PREFIX"/usr/local",并且用CMAKE_INSTALL_PREFIX替换原文件中的${CMAKE_INSTALL_PREFIX},所以生成的hellocmake就安装到了/usr/local/sbin路径下。

图9

 

图10

 cmake命令执行成功后,再执行make命令,输出信息如图11

图11

 cmake和make生成的文件以及文件夹如图13所示,通过与图8对比,比较明显的就是生成了hellocmake文件,而该文件就是我们的可执行文件,执行的效果如图12所示

图12

 

图13

 

第三部分 添加到镜像文件中

在第二部分编译完成并成功后,进入到openbmc路径下执行. setup建立编译环境,使用bitbake -s | grep hellocmake查看该配方是否已经加入到了工程中,如图14

图14

 然后执行bitbake hellocmake命令编译hellocmake包,如图15

图15

 编译成功后,使用find . -type d -name "hellocmake"命令查询是否已经有了hellocmake包,查询结果如图16

图16

 查看tmp/work/armv7ahf-vfpv4d16-openbmc-linux-gnueabi/hellocmake/1.0-r0/image/usr/local/sbin/中是否已经有hellocmake可执行文件,结果如图17

图17

 

可以看到,在image/usr/local/sbin路径下并没有hellocmake文件,也就是我们的可执行文件hellocmake应用软件并没有被打包到openbmc镜像中。经查找资料,发现openbmc/meta-inspur/meta-nf5180m7/conf/layer.conf文件中需要添加应用打包的语句:

IMAGE_INSTALL:append += "hellocmake"

其中"hellocmake"就是我们的新配方名称。添加后的layer.conf文件内容如图18所示,完成添加后删除build/conf文件夹,然后重新在openbmc路径下执行. setup nf5180m7创建项目编译环境,再执行bitbake obmc-phosphor-image命令对openbmc镜像进行编译,最终编译结果如图19所示,有IMAGE_INSTALL:append += is not a recommended operator combination, please replace it.的警告,原因是这个命令的版本比较旧,在新版本的Yocto中不推荐使用了,但并不影响最终的结果,新版本的命令我没有查到,所以选择了忽略它。编译Success之后使用qemu模拟器启动镜像或烧录到对应的办卡上,查看是否有了hellocmake可执行文件,结果如图20所示。

图18

 

图19

 

图20

 通过图20可见,新添加的hellocmake可执行文件,也即新加的应用软件已经成功的添加到了openbmc镜像中,并能成功正确的执行。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值