tiny-init: Basic init mechanism for poky-tiny

Currently poky-tiny images will boot and run /bin/sh, which results in
error messages to the console about being unable to open the tty and job
control being disabled.

The shell must be session leader to open the tty, and the tty must not
be /dev/console (it should be a vt or a physical tty like ttyS0), the
tty is required for job control (handling signals, etc.).

The goals of poky-tiny are to be an initial starting point from which to
build a distribution that does what you want, and NOTHING more.

This patch results in a system that boots with the virtual filesystems
mounted, the local network interface up, and a shell with job control
running, and a hook (/etc/rc.local) for easy customization. Nothing
else.

Enabling the basic busybox init, including the ability to give the
controlling console to commands starting with a dash in inittab results
in a 5664 byte delta (compared with 2560 bytes for enabling setsid and
cttyhack). Note that the help in busybox suggests the cttyhack may be
more reliable than the init support for handing over the controlling
terminal.

So the difference between using a standard init and just enabling the
two options is about 3k, but enabling setsid and cttyhack may enable
others to things besides what I am looking to do. Enabling init in both
DISTRO_FEATURES and busybox is fairly trivial to do, so I think it's
better to leave that as something to add if needed, rather than
something to remove, as that is more consistent with the goals of
poky-tiny.

Thanks to Tim Bird for his suggestion to include support for rc.local by
default.

(From meta-yocto rev: 5ae60ed46b34cbf4ab17fe7eab3d46e2f78ee7b8)

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
CC: Tim Bird <tim.bird@am.sony.com>
CC: Thomas Frydrych <tf+lists.yocto@r-finger.com>
CC: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
CC: Paul Eggleton <paul.eggleton@linux.intel.com>
CC: Phil Blundell <philb@gnu.org>
CC: Khem Raj <raj.khem@gmail.com>
CC: Koen Kooi <koen@dominion.thruhere.net>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Darren Hart 2012-06-13 21:05:17 -07:00 committed by Richard Purdie
parent 20a426b975
commit bcc04b2880
4 changed files with 73 additions and 1 deletions

View File

@ -95,7 +95,7 @@ DISTRO_FEATURES = "${DISTRO_FEATURES_TINY} \
# Use tmpdevfs and the busybox runtime services
VIRTUAL-RUNTIME_dev_manager = ""
VIRTUAL-RUNTIME_login_manager = ""
VIRTUAL-RUNTIME_init_manager = ""
VIRTUAL-RUNTIME_init_manager = "tiny-init"
VIRTUAL-RUNTIME_keymaps = ""
# FIXME: Consider adding "modules" to MACHINE_FEATURES and using that in

View File

@ -0,0 +1,21 @@
#!/bin/sh
# Mount the Linux kernel virtual filesystems
mount none -t proc /proc
mount none -t sysfs /sys
mkdir /dev/pts
mount none -t devpts /dev/pts
ifup lo
# Allow for distro or local customizations
if [ -f /etc/rc.local ] ; then
source /etc/rc.local
fi
# Become session leader and try to find a real tty (e.g. ttyS0)
while true; do
setsid cttyhack sh
echo "Console sh exited with $?, respawning..."
sleep 1
done

View File

@ -0,0 +1,23 @@
#!/bin/sh
# Start services and customize the boot process here.
echo "Running /etc/rc.local..."
# Use init scripts included with packages such as dropbear
#/etc/init.d/dropbear start
# Spawn a getty manually
#setsid /sbin/getty 115200 ttyS2
# Print a banner
#echo "You are running a poky-tiny image brought to you by the Yocto Project."
# Setup a debugging environment
#mkdir /debugfs
#mount none -t debugfs /debugfs
# Load modules (note: linux-yocto-tiny does not have module support by default)
#modprobe yourdriver
# DO NOT run any long running tasks or loops as these will delay
# the /init script and the console shell.

View File

@ -0,0 +1,28 @@
SUMMARY = "Poky-tiny init"
DESCRIPTION = "Basic init system for poky-tiny"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
PR = "r0"
RDEPENDS_${PN} = "busybox"
SRC_URI = "file://init \
file://rc.local.sample \
"
do_configure() {
:
}
do_compile() {
:
}
do_install() {
install -d ${D}${sysconfdir}
install -m 0755 ${WORKDIR}/init ${D}
install -m 0755 ${WORKDIR}/rc.local.sample ${D}${sysconfdir}
}
FILES_${PN} = "/init ${sysconfdir}/rc.local.sample"