Linux内核模块(LKM)B依赖于LKM A提供的符号。
因此,需要以下内容来构建LKM B:
我使用BitBake配方来构建LKM A和B.我做了什么:
${STAGING_INCDIR}
。KBUILD_EXTRA_SYMBOLS
变量
LKM B的Makefile 示例:
#BB-recipe for LKM A
# Staging of .h files and symbol-table
do_install_append () {
install -d ${STAGING_INCDIR}
install ${WORKDIR}/${PN}/src/*.h ${STAGING_INCDIR}/
install ${WORKDIR}/${PN}/Module.symvers ${STAGING_INCDIR}/rtserial.symvers
}
#BB-recipe for LKM B
do_compile () {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS CC LD CPP
cd "${WORKDIR}/mstp"
oe_runmake KDIR="${KERNEL_SOURCE}" \
ARCH="${ARCH}" \
CROSS_COMPILE="${CROSS_COMPILE}" \
IDIR="${STAGING_INCDIR}" \
KBUILD_EXTRA_SYMBOLS="${STAGING_INCDIR}/rtserial.symvers" \
build
}
问题:
感谢您提供最佳实践提示。
答案 0 :(得分:1)
使用当前的OpenEmbedded和非“遗留”分段,不再直接进行分段。使用do_install将所有内容安装到标准位置(即相对于$ {D}而不是分段位置),系统会根据该位置自动填充sysroot。所以,我建议将KVM A的标题安装到$ {D} $ {includedir} / $ {PN},并将符号表安装到$ {D} $ {datadir} / $ {PN},然后KVM B仍然看起来在STAGING_INCDIR和STAGING_DATADIR获取这些文件。您可能需要设置NATIVE_INSTALL_WORKS =“1”以让它知道修改后的do_install可以安全地用于新样式的分段。