gpt4 book ai didi

linux-kernel - 使用 populate_sdk 包含内核头文件

转载 作者:行者123 更新时间:2023-12-03 11:09:53 30 4
gpt4 key购买 nike

如何在 Yocto 中包含 linux 内核头文件作为 SDK 包的一部分?

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

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

最佳答案

来自 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
取自 The Linux Kernel Module Programming Guide 的示例(请注意,实际命令需要有一个制表符用于缩进)。
然后您必须将 KERNEL_SRC 定义为 sysroots/<mach>/usr/src/kernel/ ,无论是在 Makefile 中,还是来自您的 make 调用。 (使用像 KERNEL_SRC 这样的变量将确保您的模块配方在使用 bitbake 构建时自动选择正确的位置)。
要手动构建内核模块:
  • 为您的 SDK 获取 environment-* 文件。
  • 转到您的模块目录。
  • KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make但是,这将失败,因为无法找到 fixdep。我们将手动解决此问题。
  • cd <sdk-install-path>/sysroots/<mach>/usr/src/kernel
  • make modules_prepare如果需要使用 sudo 运行,请务必在 sudo 环境中 source 环境文件:sudo bash -c "source <sdk-install-path>/environment-setup-<mach> && make modules_prepare"
  • 返回到您的模块目录。
  • KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make

  • 这现在应该允许您构建您的模块。
    如果您在 sysroots/<mach>/usr/src/kernel/ 下没有内核源,我们将不得不对此进行调查。

    关于linux-kernel - 使用 populate_sdk 包含内核头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31256770/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com