首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用populate_sdk包含内核头

使用populate_sdk包含内核头
EN

Stack Overflow用户
提问于 2015-07-06 22:30:39
回答 3查看 19.3K关注 0票数 13

如何将linux内核头作为Yocto中SDK包的一部分?

我在一个嵌入式项目中使用Yocto1.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包中?另外,我不希望内核头显示为目标映像的一部分。

编辑我的图像食谱如下:

代码语言:javascript
复制
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层中的linux-altera-ltsi-rt

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-07 06:35:57

fido版本中,内核构建的处理方式已经改变。在以前的版本中,您通常可以跳过下面的用法示例。

fido或任何1.8+中,如果要在SDK中使用内核src和构建系统,则应该添加

代码语言:javascript
复制
TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc"

你的形象食谱。这将确保将新的kernel-devsrc包安装到您的工具链中。

下面的过程只是为了确保完全理解工作流的其余部分(尽管它严格地不是原始问题的一部分)。

使用实例

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

代码语言:javascript
复制
obj-m += hello-1.o
all:
    make -C  $(KERNEL_SRC) M=$(PWD) modules

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

示例摘自指南(注意,实际命令需要有一个缩进字符)。

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

要手动构建内核模块,请执行以下操作:

  1. 为SDK提供环境-*文件。
  2. 转到模块目录。
  3. 然而,KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make将失败,因为无法找到修复程序。我们会手工解决这个问题。
  4. cd <sdk-install-path>/sysroots/<mach>/usr/src/kernel
  5. make modules_prepare 如果这需要与sudo一起运行,请确保在sudo环境中获取环境文件:sudo bash -c "source <sdk-install-path>/environment-setup-<mach> && make modules_prepare"
  6. 返回到模块目录。
  7. KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make

现在,这应该允许您构建模块。

如果您在sysroots/<mach>/usr/src/kernel/下没有内核源代码,我们将不得不对此进行调查。

票数 24
EN

Stack Overflow用户

发布于 2020-11-20 14:06:08

anders answer非常好,但是在yocto的最新版本中,添加内核-devsrc的方式似乎是

IMAGE_INSTALL += "kernel-devsrc"

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

票数 1
EN

Stack Overflow用户

发布于 2021-04-30 15:14:54

使用Yocto Zeus (3.0.x)将其添加到您的图像食谱中:

代码语言:javascript
复制
    TOOLCHAIN_TARGET_TASK += "kernel-devsrc"

编辑: Gatesgarth (3.2.x)也是如此,但是make scripts命令对libyaml-dev有一个新的主机依赖项

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31256770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档