Linuカーネルは起動時にinitコマンドを実行し、initプロセスが起動されます。

initプロセスは、/etc/inittab の記述内容でシステムの初期化を行います。

従って、/etc/inittab の内容がシステム初期化において、重要なポイントになっています。

Busyboxでは以下のように inittab のテンプレートを提供しています。

# /etc/inittab init(8) configuration for BusyBox
#
# Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
#
#
# Note, BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use sysvinit.
#
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# <id>: WARNING: This field has a non-traditional meaning for BusyBox init!
#
#	The id field is used by BusyBox init to specify the controlling tty for
#	the specified process to run on.  The contents of this field are
#	appended to "/dev/" and used as-is.  There is no need for this field to
#	be unique, although if it isn't you may have strange results.  If this
#	field is left blank, then the init's stdin/out will be used.
#
# <runlevels>: The runlevels field is completely ignored.
#
# <action>: Valid actions include: sysinit, wait, once, respawn, askfirst,
#                                  shutdown, restart and ctrlaltdel.
#
#	sysinit actions are started first, and init waits for them to complete.
#	wait actions are started next, and init waits for them to complete.
#	once actions are started next (and not waited for).
#
#	askfirst and respawn are started next.
#	For askfirst, before running the specified process, init displays
#	the line "Please press Enter to activate this console"
#	and then waits for the user to press enter before starting it.
#
#	shutdown actions are run on halt/reboot/poweroff, or on SIGQUIT.
#	Then the machine is halted/rebooted/powered off, or for SIGQUIT,
#	restart action is exec'ed (init process is replaced by that process).
#	If no restart action specified, SIGQUIT has no effect.
#
#	ctrlaltdel actions are run when SIGINT is received
#	(this might be initiated by Ctrl-Alt-Del key combination).
#	After they complete, normal processing of askfirst / respawn resumes.
#
#	Note: unrecognized actions (like initdefault) will cause init to emit
#	an error message, and then go along with its business.
#
# <process>: Specifies the process to be executed and it's command line.
#
# Note: BusyBox init works just fine without an inittab. If no inittab is
# found, it has the following default behavior:
#	::sysinit:/etc/init.d/rcS
#	::askfirst:/bin/sh
#	::ctrlaltdel:/sbin/reboot
#	::shutdown:/sbin/swapoff -a
#	::shutdown:/bin/umount -a -r
#	::restart:/sbin/init
#	tty2::askfirst:/bin/sh
#	tty3::askfirst:/bin/sh
#	tty4::askfirst:/bin/sh
#
# Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
#
::sysinit:/etc/init.d/rcS

# /bin/sh invocations on selected ttys
#
# Note below that we prefix the shell commands with a "-" to indicate to the
# shell that it is supposed to be a login shell.  Normally this is handled by
# login, but since we are bypassing login in this case, BusyBox lets you do
# this yourself...
#
# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# Start an "askfirst" shell on /dev/tty2-4
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
tty4::askfirst:-/bin/sh

# /sbin/getty invocations for selected ttys
tty4::respawn:/sbin/getty 38400 tty5
tty5::respawn:/sbin/getty 38400 tty6

# Example of how to put a getty on a serial line (for a terminal)
#::respawn:/sbin/getty -L ttyS0 9600 vt100
#::respawn:/sbin/getty -L ttyS1 9600 vt100
#
# Example how to put a getty on a modem line.
#::respawn:/sbin/getty 57600 ttyS2

# Stuff to do when restarting the init process
::restart:/sbin/init

# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

一般的なLinuxディストーションでは、inittab でランレベルの記述をしますが、上記のコメント欄でランレベルの記述を無視するとコメントされています。

従って、busyboxにおける inittab の記述はランレベルでなく、アクション欄の記述が重要なポイントとなります。

上記のテンプレートをSH7706に合わせて以下の inittab を作成してみました。

::sysinit:/etc/rc.d/rcS
::respawn:/sbin/getty -L ttySC1 115200 vt100
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/etc/rc.d/rc0

sysinit のアクションは、システム初期化のスクリプトである /etc/rc.d/rcS を指定しています。

respawn は、繰り返し実行するコマンドを指定し、上記ではシリアルターミナルでマルチユーザーモードでログイン制御をするgetty を指定しています。
シングルユーザーモードにしたい場合や組み込みボードで自動起動させたい場合は、respawn の内容を書き換えます。

それ以外は、テンプレートの内容をそのまま参考にしてあります。

ただし、スワップファイルを使用しないため、swapoff でなく、終了処理のスクリプトである /etc/rc.d/rc0 を指定しました。

システム初期化のスクリプトである /etc/rc.d/rcS は以下のとおりです。

#!/bin/sh

/bin/mount -t proc proc /proc
/bin/mount -o rw,remount /
mke2fs -q /dev/ram1
mount /dev/ram1 /tmp
umount /proc
/bin/mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts

hostname shlinux

sysinit のアクションは、システム初期化のスクリプトである /etc/rc.d/rcS を指定しています。

終了処理のスクリプトである /etc/rc.d/rc0 は以下のとおりです。

#!/bin/sh

sync
/bin/umount -a