Crea e controlla gli script di avvio in BusyBox


11

Ho compilato un kernel Linux personalizzato in BusyBox. BusyBox initnon supporta i runlevel. Quando il kernel si avvia in BusyBox, viene prima eseguito il initquale cerca il runlevel specificato /etc/inittab. BusyBox initfunziona bene senza /etc/inittab. Quando non inittabviene trovato, ha il seguente comportamento:

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

Questa parte mi è molto chiara, ma vorrei sapere come gestire i demoni che avviano reti, creano porte seriali o avviano javaprocessi. Ho cercato negli script che risiedono /etc/init.d/ma non capisco come gestirli. Sto cercando un buon tutorial o una soluzione per controllare questi servizi da solo senza uno strumento automatizzato come buildroot. Voglio capire come funzionano questi script e come creare dispositivi /dev/(in questo momento ho solo consolee ttyAM0).

Risposte:


9

Per buildroot tutti gli script devono essere inseriti $path_to_buildroot/output/target/etc/init.dprima di creare l'immagine. Nel mio caso questa directory contiene rcSe pochi script chiamati S [0-99] nome_script. Quindi puoi creare il tuo script 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

e ad esempio 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 $?

S[0-99]script_nameLa sintassi del nome file verrà eseguita S10*prima S2*e interromperà lo script.
Tim

@Tim non necessariamente "spezza lo script", solo zero-pad. Certo S20*corre dopo S10*, se si vuole qualcosa di venire prima S10è necessario chiamare S01*, S02*ecc NBD.
Thom_nic,

5

È una cattiva idea cambiare la tua fs nella cartella "target". Questo perché le modifiche in output/target/non sopravvivono al make cleancomando.

Nel manuale buildroot è descritto come farlo correttamente

Dovresti creare dir da qualche parte che sovrapponga parzialmente il file system. Ad esempio, puoi creare dir "tuo-overlay" in dir buildroot dove crei questa struttura

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

Quindi dovresti impostare il percorso per questo overlay in defconfig

System configuration > Root filesystem overlay directories

(oppure, trova BR2_ROOTFS_OVERLAY)

Inoltre, il percorso consigliato per questo overlay è board/<company>/<boardname>/rootfs-overlay


Esempio di configurazione quando si utilizza Buildroot come sottomodulo: github.com/cirosantilli/linux-kernel-module-cheat/blob/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
OP sta usando solo BusyBox e indica che vuole raggiungere il suo obiettivo senza buildroot. Non vedo questa risposta pertinente alla domanda. È più un commento alla risposta accettata.
Tim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.