将新内核参数添加到 Yocto 生成的自定义 Linux 图像
Add New Kernel Parameter To Custom Linux Image Generated By Yocto
我正在试验 Yocto project 为我的嵌入式设备生成自定义 Linux 图像。
我需要将持久的自定义内核参数添加到生成图像的 /etc/sysctl.conf
。
即
kernel.core_pipe_limit = 1
/etc/sysctl.conf
由 Yocto
基本系统 (meta/recipes-extended/procps/procps/sysctl.conf
) 附带的 procps
软件包生成。但是,我认为在基本系统中编辑 sysctl.conf
不是推荐的方法。
我正在使用一个新层来定义我的自定义配置。我希望有一种方法可以在部署基础层后通过自定义层将补丁应用到基础包。
我该怎么做?
我知道如何通过更新 /etc/sysctl.conf
(或者最好是 /etc/sysctl.d/xxx.conf
)来持续更改内核变量。我的问题是,如何生成应用了必要更新的 Linux 图像?
只需在 /etc/sysctl.d
下创建一个扩展名为 .conf
的文件即可。
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
语法文件相同。
您可以在图像配方中添加类似的内容或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/
我认为上面的答案是错误的。已经有食谱提供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 步骤,并在您的文本后附加回显。
我正在试验 Yocto project 为我的嵌入式设备生成自定义 Linux 图像。
我需要将持久的自定义内核参数添加到生成图像的 /etc/sysctl.conf
。
即
kernel.core_pipe_limit = 1
/etc/sysctl.conf
由 Yocto
基本系统 (meta/recipes-extended/procps/procps/sysctl.conf
) 附带的 procps
软件包生成。但是,我认为在基本系统中编辑 sysctl.conf
不是推荐的方法。
我正在使用一个新层来定义我的自定义配置。我希望有一种方法可以在部署基础层后通过自定义层将补丁应用到基础包。
我该怎么做?
我知道如何通过更新 /etc/sysctl.conf
(或者最好是 /etc/sysctl.d/xxx.conf
)来持续更改内核变量。我的问题是,如何生成应用了必要更新的 Linux 图像?
只需在 /etc/sysctl.d
下创建一个扩展名为 .conf
的文件即可。
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
语法文件相同。
您可以在图像配方中添加类似的内容或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/
我认为上面的答案是错误的。已经有食谱提供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 步骤,并在您的文本后附加回显。