web-dev-qa-db-ja.com

BusyBoxで起動スクリプトを作成および制御する

BusyBoxでカスタムLinuxカーネルをコンパイルしました。 BusyBox initはランレベルをサポートしていません。カーネルがBusyBoxで起動すると、最初にinitが実行され、/etc/inittabで指定されたランレベルが検索されます。 BusyBox init/etc/inittabがなくても問題なく動作します。 inittabが見つからない場合、次の動作をします:

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

この部分は非常に明確ですが、ネットワークを起動するデーモンを管理する方法、シリアルポートを作成する方法、またはJavaプロセスを開始する方法を知りたいのです。 /etc/init.d/にあるスクリプトを確認しましたが、それらの管理方法がわかりません。 buildrootのような自動化ツールなしで自分でこれらのサービスを制御するための優れたチュートリアルまたはソリューションを探しています。これらのスクリプトのしくみと/dev/でデバイスを作成する方法を理解したい(現在、consolettyAM0しかありません)。

11

Buildrootの場合、すべてのスクリプトはビルドイメージの前に$path_to_buildroot/output/target/etc/init.dに配置する必要があります。私の場合、このディレクトリにはrcSとS [0-99] script_nameという名前のスクリプトがいくつか含まれています。したがって、独自のstart\stopスクリプトを作成できます。

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 $?
9
Renat Zaripov

Fsを「target」フォルダに変更することはお勧めできません。これは、output/target/存続しないmake cleanコマンド。

Buildrootマニュアルで、 それを正しく行う方法を説明しました

ファイルシステムを部分的にオーバーレイするdirをどこかに作成する必要があります。たとえば、この構造体を作成するbuildroot dirにdir "your-overlay"を作成できます。

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

次に、defconfigでこのオーバーレイへのパスを設定する必要があります

System configuration > Root filesystem overlay directories

(または、BR2_ROOTFS_OVERLAYを見つけます)

また、このオーバーレイの推奨パスはboard/<company>/<boardname>/rootfs-overlay

5
Kenjy Minamori