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

时间:2019-07-17 07:56:49

标签: linux linux-kernel embedded-linux yocto procps

我正在尝试Yocto project为嵌入式设备生成自定义Linux映像。

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

kernel.core_pipe_limit = 1

/etc/sysctl.confprocps基本系统(Yocto)随附的meta/recipes-extended/procps/procps/sysctl.conf程序包生成。但是,我认为不建议在基本系统中编辑sysctl.conf

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

我该怎么做?


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

3 个答案:

答案 0 :(得分:1)

只需在.conf下创建扩展名为/etc/sysctl.d的文件即可。

echo 'kernel.core_pipe_limit = 1' > /etc/sysctl.d/bla_bla_change_kernel_core_pipe_limit.conf

来自man sysctl

 --system
              Load settings from all system configuration files. Files are
              read from directories in the following list in given order
              from top to bottom.  Once a file of a given filename is
              loaded, any file of the same name in subsequent directories is
              ignored.
              /run/sysctl.d/*.conf
              /etc/sysctl.d/*.conf
              /usr/local/lib/sysctl.d/*.conf
              /usr/lib/sysctl.d/*.conf
              /lib/sysctl.d/*.conf
              /etc/sysctl.conf

在系统启动时应调用sysctl --system 。在具有systemd的系统上,这是通过systemd-sysctl.service服务来完成的。因此,它应该加载所有/etc/sysctl.d。语法与/etc/sysct.conf语法文件相同。

答案 1 :(得分:1)

您可以在图像配方或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;"

如果您要覆盖/etc/sysctl.conf文件,可以使用以下方法创建一个meta-custom/recipes-extended/procps/procps_%.bbappend文件:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

然后创建一个文件夹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"

然后将您的kernel_core_pipe_limit.conf复制到meta-custom/recipe-custom/custom-config/files/

答案 2 :(得分:0)

我认为上面的答案是错误的。已经有提供sysctl.conf的配方。是procps。您需要做的是使用bbappend覆盖默认配置。有关在online Yocto documention

上附加文件的更多信息

在您的图层(如

)中扩展的食谱中,创建一个 procps 文件夹, procps _%。bbappend systctl.conf
meta-my-layer/recipes-extended/
└── procps
    ├── files
    │   └── sysctl.conf
    └── procps_%.bbappend

procps _%。bbappend

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"`

sysctl.conf 的示例):

fs.protected_hardlinks = 1
fs.protected_symlinks = 1

如果您要保留默认配置并附加到默认配置,则只需执行 do_install_append 步骤,并在回显后附加文本即可。