怎么在yocto里面添加自己的代码模块

以下内容完全是参考网上大佬,再结合自己摸索得到,不确保用法的官方性,可能是野路子。

yocto里面添加自己的代码模块,主要是添加对应的bb文件以及代码的编译规则。

bb文件里面的内容,我也不是很懂,之前大致研究了以下,bb文件里面支持

do_configure、do_compile、do_install等一系列操作。我最开始就是通过这些操作来实现代码模块的编译、安装。今天我们不介绍这种方式,我们今天使用CMake的方式来完成。

上目录结构:

qidong.liu@cqrnd01:~/..../meta-qti-base-prop/recipes-bsp/mcu_update$ tree
.
├── mcu-update
│   ├── CMakeLists.txt
│   └── src
│       ├── CMakeLists.txt
│       ├── main.c
└── mcu-update_0.1.bb

上bb文件:

inherit cmake

DESCRIPTION = "mcu_update"

LICENSE          = "CLOSED"

INSANE_SKIP_${PN} += " ldflags"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_SYSROOT_STRIP = "1"
SOLIBS = ".so"
FILES_SOLIBSDEV = ""


PR = "r0"

FILESEXTRAPATHS_prepend := "${THISDIR}:"

SRC_URI = "file://${BPN}"

S = "${WORKDIR}/mcu-update"

上mcu_update/CMakeLists.txt

#单行注释:使用“#”
#多行注释:使用“#[[ ]]”
 
#指定cmake的最小版本 这里指定最小版本为 3.1
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
 
#设置工程的名字,这个工程的名字的作用暂时还不清楚
PROJECT(mcu-update)

ADD_SUBDIRECTORY(./src)

上src/CMakeLists.txt

#单行注释:使用“#”
#多行注释:使用“#[[ ]]”
 
#指定cmake的最小版本 这里指定最小版本为 3.1
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)


aux_source_directory(./ DIR_LIB_SRCS)
include_directories(./)

#add_definitions(-D_GNU_SOURCE)

#指定编译目标
ADD_EXECUTABLE(mcu_update ${DIR_LIB_SRCS})
TARGET_LINK_LIBRARIES(mcu_update pthread)

install(TARGETS mcu_update DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

通过如上的添加信息,source对应的环境变量后,我们就可以通过bitbake单独编译我们的代码模块了。相关命令如下:

source环境变量根据自己的实际情况配置

编译模块
bitbake mcu-update

清空模块
bitbake -c cleanall mcu-update

重新编译模块

rebake mcu-update

相关注意事项:

1、bb文件的命名,下划线不用乱使用。只能出现一次下划线,只能在模块名和代码版本之间。

通过上面的操作,我们的代码模块并不能在编译工程的时候,自动被编译进去。

这个时候,你可以参考其他模块怎么被编译进去的,然后依葫芦画瓢完成。

其他模块名你可以找到对应的bb文件,然后就知道模块名字了。

比如:abctl_0.1.bb        模块名就是:abctl

这里以我现有的平台高通为例:

我们新增了一个升级功能(可能包含多个代码模块),所以我在对应的conf文件里面添加了如下配置:

#注意双引号前后最好都留一个空格
DISTRO_FEATURES_append = " bsp_update "

在管理代码模块的bb文件里面添加了如下配置:

RDEPENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'bsp_update', 'ab-sdcard-updater 
 mcu-update', '', d)}"

关于 bb.utils.contains 的解释,可以参考:Yocto 变量选择 bb.utils.contains 使用_渴饮刀头血的博客-CSDN博客_bb.utils.contains

我个人结合实际的解释;

如果DISTRO_FEATURES里面包含了bsp_update,就编译ab-sdcard-updater mcu-update这两个代码模块。

如果DISTRO_FEATURES里面不包含bsp_update,就不编译ab-sdcard-updater mcu-update这两个代码模块。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monkey_llll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值