使用populate_sdk包含内核头文件

时间:2015-07-06 22:30:39

标签: linux-kernel yocto

如何在Yocto中将Linux内核头文件包含在SDK包中?

我在嵌入式项目中使用Yocto 1.8(fido),并希望进行树外核心模块开发。目前,我可以通过在运行make时将$KERNEL_PATH指向poky/build/tmp/work-shared/<machine>/kernel-source/目录来构建我的内核模块(除了bitbake)。但是,我不想长期这样做,因为其他人需要轻松构建模块而无需安装和构建bitbake的完整图像。

我可以使用bitbake myimage -c populate_sdk生成SDK。但是,这不包括内核头文件(我所见过的只有sysroots/<mach>/usr/include/linux)。如何使内核头文件包含在SDK包中?另外,我不希望内核头部显示为目标图像的一部分。

[编辑] 我的图像配方如下:

EXTRA_IMAGE_FEATURES_append = " eclipse-debug debug-tweaks"
TOOLCHAIN_HOST_TASK_append = " nativesdk-cmake"
IMAGE_INSTALL = "packagegroup-core-boot  ${CORE_IMAGE_EXTRA_INSTALL} util-linux kernel-modules netbase busybox base-passwd base-files sysvinit initscripts bash gdbserver strace sysfsutils dtc gawk ethtool grep sed wget  iptables oprofile net-tools dropbear rsync stress-ng rt-tests i2c-tools"
inherit core-image

我在meta-altera层中使用的内核是linux-altera-ltsi-rt

3 个答案:

答案 0 :(得分:14)

fido版本开始,内核版本的处理已经改变。在以前的版本中,您通常可以跳到下面的使用示例。

fido或任何1.8+中,如果您希望SDK中提供内核src和构建系统,则应添加

TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc"

到您的图像配方。这将确保将新的kernel-devsrc包安装到您的工具链中。

以下程序只是为了确保完全理解工作流程的其余部分(即使它不是原始问题的严格部分)。

使用示例

让我们假设一个模块Makefile如下:

obj-m += hello-1.o
all:
    make -C  $(KERNEL_SRC) M=$(PWD) modules

clean:
    make -C  $(KERNEL_SRC) M=$(PWD) clean

取自Linux内核模块编程指南的示例(请注意,实际命令需要有缩进的制表符)。

然后,你必须在Makefile或make调用中将KERNEL_SRC定义为sysroots/<mach>/usr/src/kernel/。 (使用像KERNEL_SRC这样的变量将确保您的模块配方在使用bitbake构建时自动选择正确的位置。

手动构建内核模块:

  1. 获取SDK的environment- *文件。
  2. 转到模块目录。
  3. KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make然而,这将失败,因为无法找到fixdep。我们会手动修复此问题。
  4. cd <sdk-install-path>/sysroots/<mach>/usr/src/kernel
  5. make silentoldconfig scripts

    如果需要使用sudo运行,请务必在sudo环境中获取环境文件:sudo bash -c "source <sdk-install-path>/environment-setup-<mach> && make silentoldconfig scripts"

  6. 返回您的模块目录。
  7. KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make
  8. 现在应该允许您构建模块。

    如果您没有ysroots/<mach>/usr/src/kernel/下的内核源代码,我们就必须深入研究。

答案 1 :(得分:1)

anders answer很好,但是在yocto的最新版本中,添加kernel-devsrc的方法似乎是

IMAGE_INSTALL += "kernel-devsrc"

我在这里找到的:https://www.mail-archive.com/yocto@yoctoproject.org/msg36448.html

答案 2 :(得分:0)

使用 Yocto Zeus (3.0.x) 将此添加到您的图像配方中:

    TOOLCHAIN_TARGET_TASK += "kernel-devsrc"