在BusyBox中创建和控制启动脚本


11

我已经在BusyBox中编译了一个自定义linux内核。BusyBox init不支持运行级别。当内核在BusyBox中启动时,它首先执行init,在中寻找指定的运行级别/etc/inittab。没有,BusyBox init可以正常工作/etc/inittab。如果inittab找不到,则具有以下行为:

::sysinit:/etc/init.d/rcS

这部分对我来说很清楚,但是我想知道如何管理启动网络,创建串行端口或启动java进程的守护程序。我查看了驻留的脚本,/etc/init.d/但不了解如何管理它们。我正在寻找一个很好的教程或解决方案来自己控制这些服务,而无需使用诸如的自动化工具buildroot。我想了解这些脚本的工作方式以及如何在其中创建设备/dev/(现在我只有consoleand ttyAM0)。

Answers:


9

对于buildroot,必须将所有脚本放在$path_to_buildroot/output/target/etc/init.d构建映像之前。在我的情况下,该目录包含rcS一些脚本,它们名为S [0-99] script_name。因此,您可以创建自己的开始\停止脚本。

rcS:

#!/bin/sh

# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
    *.sh)
        # Source shell script for speed.
        (
        trap - INT QUIT TSTP
        set start
        . $i
        )
        ;;
    *)
        # No sh extension, so fork subprocess.
        $i start
        ;;
    esac
done

例如S40network:

#!/bin/sh
#
# Start the network....
#

case "$1" in
  start)
    echo "Starting network..."
    /sbin/ifup -a
    ;;
  stop)
    echo -n "Stopping network..."
    /sbin/ifdown -a
    ;;
  restart|reload)
    "$0" stop
    "$0" start
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart}"
    exit 1
esac

exit $?

S[0-99]script_name文件名语法将在脚本S10*之前运行S2*并中断脚本。
蒂姆(Tim)

@Tim不一定“破坏脚本”,只是零填充。当然S20*运行后S10*,如果你想要的东西来之前,S10你需要调用它S01*S02*等NBD。
thom_nic

5

在“目标”文件夹中更改fs是个坏主意。这是因为更改output/target/不能在make clean命令中保留。

在buildroot手册中描述了如何 正确执行

您应该在部分覆盖文件系统的某个地方创建目录。例如,您可以在创建此结构的buildroot目录中创建目录“ your-overlay”

your-overlay/etc/init.d/<any_file>

然后,您应该在defconfig中设置此叠加层的路径

System configuration > Root filesystem overlay directories

(或者找到BR2_ROOTFS_OVERLAY)

另外,此叠加层的建议路径为 board/<company>/<boardname>/rootfs-overlay



1
OP仅使用BusyBox,并表示他希望在没有buildroot的情况下实现目标。我认为此答案与问题无关。它更多地是对已接受答案的评论。
蒂姆(Tim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.