加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 19:29:21 所属栏目:Linux 来源:网络整理
导读:如何在Yocto中将 Linux内核头文件包含在SDK包中? 我在嵌入式项目中使用Yocto 1.8(fido),并希望进行树外核心模块开发.目前,我可以通过在运行make时将$KERNEL_PATH指向poky / build / tmp / work-shared / machine / kernel-source /目录来构建我的内核模块(
如何在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.

解决方法

从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构建时自动选择正确的位置).

要手动构建内核模块:

>获取SDK的environment- *文件.
>转到模块目录.
> KERNEL_SRC =< sdk-install-path> / sysroots /< mach> /usr/src / kernel LDFLAGS =“”make然而,这将失败,因为无法找到fixdep.我们将手动修复此问题.
> cd< sdk-install-path> / sysroots /< mach> /usr/src / kernel
>制作silentoldconfig脚本

如果需要使用sudo运行,请确保在sudo环境中获取环境文件:sudo bash -c“source< sdk-install-path> / environment-setup-< mach>&& make silentoldconfig脚本”
>返回模块目录.
> KERNEL_SRC =< sdk-install-path> / sysroots /< mach> /usr/src / kernel LDFLAGS =“”make

现在应该允许您构建模块.

如果您没有ysroots /< mach> /usr/src / kernel /下的内核源代码,我们将不得不研究它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读