如何通过Yocto将自定义头文件目录纳入rootfs
解决Yocto配方中头文件目录未纳入镜像的问题
核心问题分析
- 头文件属于开发类文件,Yocto规范中这类文件应归到
${PN}-dev包,而非主包${PN}。原配方用FILES_${PN}包含头文件目录,不符合打包规则,导致文件未被纳入镜像。 do_install逻辑冗余,手动创建目录后再复制,既繁琐又容易出错。
修正后的配方内容
SRC_URI += "file://maindir/" S = "${WORKDIR}" do_install () { # 直接递归复制整个maindir目录到目标路径,自动创建所需子目录 install -d ${D}${includedir} cp -a ${WORKDIR}/maindir ${D}${includedir}/ } # 将头文件目录归到开发包 FILES_${PN}-dev += "${includedir}/maindir/"
关键说明
- 使用
cp -a而非cp -r:-a参数会保留文件权限、时间戳等属性,更符合Yocto的打包要求。 - 必须用
FILES_${PN}-dev:Yocto的包管理体系中,主包${PN}仅包含运行时必需文件,开发文件(头文件、静态库、pkg-config文件等)必须放到${PN}-dev包中,这样在构建镜像时,只要包含${PN}-dev包,头文件就会被纳入rootfs。 - 简化
do_install:install -d只需要创建顶层的${includedir},cp -a会自动创建maindir及其子目录,无需手动逐个创建。
内容的提问来源于stack exchange,提问作者Samhitha
相关产品推荐
相关产品推荐

