我一直在使用 Yocto 构建系统构建自定义内核映像。现在我想在开始构建之前更改一个文件 /etc/limits/ 但是当我尝试找到这个文件“限制”时,找不到任何文件名限制并且知道这个文件是在构建之后生成的。
我期待在元目录的某个地方找到这个文件(在构建之前),就像在 poky 目录中存在名为“profile”的文件一样。
现在我的问题是 yocto 构建系统如何生成这个文件 /etc/limits 文件,在构建之前我在哪里可以找到这个文件
我一直在使用 Yocto 构建系统构建自定义内核映像。现在我想在开始构建之前更改一个文件 /etc/limits/ 但是当我尝试找到这个文件“限制”时,找不到任何文件名限制并且知道这个文件是在构建之后生成的。
我期待在元目录的某个地方找到这个文件(在构建之前),就像在 poky 目录中存在名为“profile”的文件一样。
现在我的问题是 yocto 构建系统如何生成这个文件 /etc/limits 文件,在构建之前我在哪里可以找到这个文件
我检查了 Danny 分支(Yocto 1.3)和 Dylan 分支(Yocto 1.4),在这两个版本中,文件 /etc/limits 是由影子包生成的。所以我不确定你为什么说文件是在构建之后生成的。通常,当我需要找出文件的来源时,我会搜索生成的二进制包。在您的情况下,在构建 core-image-base 之后,我执行了以下快速搜索:
$ cd tmp/deploy/rpm
$ find . -name '*.rpm' | while read A; do $RPM -qpl $A | grep etc/limits; \
if [ $? -eq 0 ]; then echo $A; fi; done
/etc/limits
./armv7a_vfp_neon/shadow-4.1.4.3-r13.armv7a_vfp_neon.rpm
这告诉我限制文件来自影子包。当 bitbake 为该包执行 do_install() 任务时,包自己的 Makefile 从包含在影子包中的模板安装该文件。
有两种简单的方法可以在文件根文件系统上更改此文件的内容。正确的方法是添加一个带有自定义更改的层:为影子包创建一个 bbappend,使用 SRC_URI = "file://limits" 添加您自己的限制文件,然后添加一个 do_install_append() 方法来安装您的自定义文件包自己的安装方法。在 poky 中有很多使用这种技术的例子。
另一种方法是使用后处理命令。
ROOTFS_POSTPROCESS_COMMAND += "use_my_limits_file; "
其中 use_my_limits_file 只是一个安装自定义限制文件的 bash shell 函数。有关使用 ROOTFS_POSTPROCESS_COMMAND 的结构示例,请参见 poky 的 insserv.bbclass。
希望这可以帮助。快乐黑客!