如何在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。
答案 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构建时自动选择正确的位置。
手动构建内核模块:
KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make
然而,这将失败,因为无法找到fixdep。我们会手动修复此问题。cd <sdk-install-path>/sysroots/<mach>/usr/src/kernel
make silentoldconfig scripts
如果需要使用sudo运行,请务必在sudo环境中获取环境文件:sudo bash -c "source <sdk-install-path>/environment-setup-<mach> && make silentoldconfig scripts"
KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make
现在应该允许您构建模块。
如果您没有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"