BusyBoxでカスタムLinuxカーネルをコンパイルしました。 BusyBox init
はランレベルをサポートしていません。カーネルがBusyBoxで起動すると、最初にinit
が実行され、/etc/inittab
で指定されたランレベルが検索されます。 BusyBox init
は/etc/inittab
がなくても問題なく動作します。 inittab
が見つからない場合、次の動作をします:
::sysinit:/etc/init.d/rcS
この部分は非常に明確ですが、ネットワークを起動するデーモンを管理する方法、シリアルポートを作成する方法、またはJava
プロセスを開始する方法を知りたいのです。 /etc/init.d/
にあるスクリプトを確認しましたが、それらの管理方法がわかりません。 buildroot
のような自動化ツールなしで自分でこれらのサービスを制御するための優れたチュートリアルまたはソリューションを探しています。これらのスクリプトのしくみと/dev/
でデバイスを作成する方法を理解したい(現在、console
とttyAM0
しかありません)。
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 $?
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