Crear y controlar scripts de inicio en BusyBox

11

He compilado un kernel de Linux personalizado en BusyBox. BusyBox initno admite niveles de ejecución. Cuando el kernel se inicia en BusyBox, primero se ejecuta inity busca el nivel de ejecución especificado /etc/inittab. BusyBox initfunciona bien sin él /etc/inittab. Cuando no inittabse encuentra, tiene el siguiente comportamiento:

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

Esta parte es muy clara para mí, pero me gustaría saber cómo administrar demonios que inician redes, crean puertos seriales o inician javaprocesos. He buscado en los scripts que residen /etc/init.d/pero no entiendo cómo administrarlos. Estoy buscando un buen tutorial o solución para controlar estos servicios yo mismo sin una herramienta automatizada como buildroot. Quiero entender cómo funcionan estos scripts y cómo crear dispositivos /dev/( en este momento solo tengo consoley ttyAM0).

Shantanu Banerjee
fuente

Respuestas:

9

Para buildroot, todos sus scripts deben colocarse $path_to_buildroot/output/target/etc/init.dantes de construir la imagen. En mi caso, este directorio contiene rcSalgunos scripts llamados S [0-99] script_name. Para que pueda crear su propio script de inicio \ parada.

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

y por ejemplo 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 $?
Renat Zaripov
fuente
S[0-99]script_nameLa sintaxis del nombre de archivo se ejecutará S10*antes S2*y romperá el script.
Tim
@Tim no necesariamente "rompe el guión", solo cero pad. Claro S20*carreras después S10*, si quieren algo para venir antes de S10lo necesario para llamarlo S01*, S02*etc. NBD.
thom_nic
5

Es una mala idea cambiar su fs en la carpeta "target". Esto se debe a que los cambios output/target/no sobreviven al make cleancomando.

En el manual de buildroot se describe cómo hacerlo correctamente

Debe crear un directorio en algún lugar que superponga parcialmente el sistema de archivos. Por ejemplo, puede crear el directorio "your-overlay" en el directorio buildroot donde crea esta estructura

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

Entonces debe establecer la ruta a esta superposición en defconfig

System configuration > Root filesystem overlay directories

(o, encuentre BR2_ROOTFS_OVERLAY)

Además, la ruta recomendada para esta superposición es board/<company>/<boardname>/rootfs-overlay

Kenjy Minamori
fuente
Ejemplo de configuración al usar Buildroot como submódulo: github.com/cirosantilli/linux-kernel-module-cheat/blob/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
1
OP usa solo BusyBox e indica que quiere lograr su objetivo sin buildroot. No veo esta respuesta relevante a la pregunta. Es más un comentario a la respuesta aceptada.
Tim