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. Thanks to Tim Bird for his suggestion to include support for rc.local by default. Signed-off-by: Darren Hart <dvh...@linux.intel.com> CC: Tim Bird <tim.b...@am.sony.com> --- meta-yocto/conf/distro/poky-tiny.conf | 2 +- meta-yocto/recipes-core/tiny-init/files/init | 21 ++++++++++++++++ .../recipes-core/tiny-init/files/rc.local.sample | 23 +++++++++++++++++ meta-yocto/recipes-core/tiny-init/tiny-init.bb | 26 ++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletions(-) create mode 100644 meta-yocto/recipes-core/tiny-init/files/init create mode 100644 meta-yocto/recipes-core/tiny-init/files/rc.local.sample create mode 100644 meta-yocto/recipes-core/tiny-init/tiny-init.bb diff --git a/meta-yocto/conf/distro/poky-tiny.conf b/meta-yocto/conf/distro/poky-tiny.conf index d6295f7..541e194 100644 --- a/meta-yocto/conf/distro/poky-tiny.conf +++ b/meta-yocto/conf/distro/poky-tiny.conf @@ -93,7 +93,7 @@ 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 diff --git a/meta-yocto/recipes-core/tiny-init/files/init b/meta-yocto/recipes-core/tiny-init/files/init new file mode 100644 index 0000000..bf2817d --- /dev/null +++ b/meta-yocto/recipes-core/tiny-init/files/init @@ -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 diff --git a/meta-yocto/recipes-core/tiny-init/files/rc.local.sample b/meta-yocto/recipes-core/tiny-init/files/rc.local.sample new file mode 100644 index 0000000..d9e198a --- /dev/null +++ b/meta-yocto/recipes-core/tiny-init/files/rc.local.sample @@ -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. diff --git a/meta-yocto/recipes-core/tiny-init/tiny-init.bb b/meta-yocto/recipes-core/tiny-init/tiny-init.bb new file mode 100644 index 0000000..1cf46ed --- /dev/null +++ b/meta-yocto/recipes-core/tiny-init/tiny-init.bb @@ -0,0 +1,26 @@ +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" + +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" -- 1.7.5.4 _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto