使用Openembedded烘焙具有依赖性的Linux内核模块

时间:2011-01-19 19:27:01

标签: cross-compiling linux-device-driver embedded-linux

Linux内核模块(LKM)B依赖于LKM A提供的符号。

因此,需要以下内容来构建LKM B:

我使用BitBake配方来构建LKM A和B.我做了什么:

  • 我将LKM A的头文件和符号表传播到登台包含目录${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
 }

问题:

  • do_install_append是正确的任务来分阶段共享资源吗?我读到do_staging()是somewhat deprecated ...
  • 在哪里上演符号表?

感谢您提供最佳实践提示。

1 个答案:

答案 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可以安全地用于新样式的分段。