将新的内核参数添加到 Yocto 生成的自定义 Linux 映像中

Sum*_*udu 7 linux linux-kernel embedded-linux procps yocto

我正在尝试使用Yocto 项目为我的嵌入式设备生成自定义 Linux 映像。

我需要向/etc/sysctl.conf生成的图像添加持久的自定义内核参数。

IE

kernel.core_pipe_limit = 1
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.conf由基础系统( )procps自带的包生成。但是,我认为在基本系统中编辑不是推荐的方法。Yoctometa/recipes-extended/procps/procps/sysctl.confsysctl.conf

我正在使用一个新层来定义我的自定义配置。我希望有一种方法可以在部署基础层后通过自定义层将补丁应用到基础包。

我怎样才能做到这一点?


我知道如何通过更新/etc/sysctl.conf(或者最好是/etc/sysctl.d/xxx.conf)来持久更改内核变量。我的问题是,如何生成应用了必要更新的 Linux 映像?

Nay*_*yfe 5

您可以在图像配方中添加类似的内容或local.conf

set_kernel_opt(){
    mkdir -p ${IMAGE_ROOTFS}/etc/sysctl.d
    echo 'kernel.core_pipe_limit = 1' > ${IMAGE_ROOTFS}/etc/sysctl.d/kernel_core_pipe_limit.conf
}

ROOTFS_POSTPROCESS_COMMAND += "set_kernel_opt;"
Run Code Online (Sandbox Code Playgroud)

如果你想覆盖/etc/sysctl.conf文件,你可以meta-custom/recipes-extended/procps/procps_%.bbappend使用以下命令创建一个文件:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
Run Code Online (Sandbox Code Playgroud)

然后创建一个文件夹meta-custom/recipes-extended/procps/files并将您的自定义sysctl.conf文件复制到其中。


最后,您可以meta-custom/recipe-custom/custom-config/custom-config.bb使用以下命令创建菜谱:

LICENSE = "CLOSED"

SRC_URI = " \
   file://kernel_core_pipe_limit.conf \
"

PV = "1.0"

S = "${WORKDIR}"

inherit allarch

do_install() {
    install -d ${D}${sysconfdir}/sysctl.d
    install -m 0644 ${B}/kernel_core_pipe_limit.conf ${D}${sysconfdir}/sysctl.d/
}

do_configure[noexec] = "1"
do_compile[noexec] = "1"
Run Code Online (Sandbox Code Playgroud)

并复制你kernel_core_pipe_limit.confmeta-custom/recipe-custom/custom-config/files/