以下内容完全是参考网上大佬,再结合自己摸索得到,不确保用法的官方性,可能是野路子。
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这两个代码模块。