如何在Yocto的sysvinit-inittab配方中排除/etc/inittab特定行?
解决Yocto中sysvinit-inittab占用串口的问题
方案1:用sed精准注释目标行(推荐)
在自定义层的recipes-core/sysvinit-inittab/sysvinit-inittab_%.bbappend中添加以下内容,通过sed仅修改指定行,完全保留原inittab的其他配置:
do_install_append() { # 注释掉占用ttyLP2的getty进程行 sed -i '/s2:123:respawn:\/sbin\/getty -L 115200 ttyLP2 linux/s/^/#/' ${D}${sysconfdir}/inittab }
- 原理:在原配方完成inittab文件安装后,追加执行sed命令,精准匹配目标行并在行首添加
#注释,不会改动其他任何配置项。 - 若需要直接删除该行而非注释,将sed命令替换为:
sed -i '/s2:123:respawn:\/sbin\/getty -L 115200 ttyLP2 linux/d' ${D}${sysconfdir}/inittab
方案2:替换自定义inittab文件(适合需多处修改场景)
如果需要对inittab做多处定制,可复制Karo层中原inittab文件到自定义层对应目录,仅注释/删除目标行,然后在bbappend中指定优先使用自定义层的文件:
- 在自定义层创建
recipes-core/sysvinit-inittab/files/inittab,修改其中的ttyLP2行并保留其他配置。 - 在bbappend中添加:
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
- 注意:此方法需要同步原配方inittab的更新,若供应商后续修改inittab,需手动同步自定义文件内容。
验证方法
执行bitbake sysvinit-inittab -c deploy后,查看部署目录下的inittab文件,或烧录镜像后在设备上检查/etc/inittab,确认目标行已被处理且其他配置完整。
内容的提问来源于stack exchange,提问作者A.A.
相关产品推荐
相关产品推荐

