Twórz i kontroluj skrypty startowe w BusyBox

11

Skompilowałem niestandardowe jądro Linuksa w BusyBox. BusyBox initnie obsługuje poziomów pracy. Kiedy jądro uruchamia się w BusyBox, najpierw wykonuje, initktóry szuka określonego poziomu uruchamiania /etc/inittab. BusyBox initdziała dobrze bez /etc/inittab. Gdy nie inittabzostanie znalezione, ma następujące zachowanie:

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

Ta część jest dla mnie bardzo jasna, ale chciałbym wiedzieć, jak zarządzać demonami, które uruchamiają sieć, tworzą porty szeregowe lub uruchamiają javaprocesy. Zajrzałem do skryptów, które się w nich znajdują, /etc/init.d/ale nie rozumiem, jak nimi zarządzać. Szukam dobrego samouczka lub rozwiązania do samodzielnego sterowania tymi usługami bez zautomatyzowanego narzędzia takiego jak buildroot. Chcę zrozumieć, jak działają te skrypty i jak tworzyć urządzenia /dev/(teraz mam tylko consolei ttyAM0).

Shantanu Banerjee
źródło

Odpowiedzi:

9

W przypadku buildroot wszystkie skrypty muszą zostać umieszczone $path_to_buildroot/output/target/etc/init.dprzed kompilacją obrazu. W moim przypadku ten katalog zawiera rcSi kilka skryptów o nazwie S [0-99] nazwa_skryptu. Możesz więc stworzyć własny skrypt 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

i na przykład 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
źródło
S[0-99]script_nameskładnia pliku zostanie uruchomiona S10*przed S2*i zepsuje skrypt.
Tim
@ Czas nie musi „łamać skryptu”, tylko zerowanie. Sure S20*biegnie po S10*, jeśli chcesz coś przyjść wcześniej S10trzeba to nazwać S01*, S02*itp NBD.
thom_nic
5

To zły pomysł na zmianę swojego fs w folderze „docelowym”. Jest tak, ponieważ zmiany w output/target/nie przetrwają make cleanpolecenia.

W buildroot instrukcja opisała jak to zrobić poprawnie

Powinieneś stworzyć katalog gdzieś częściowo nakładający się system plików. Na przykład możesz utworzyć katalog „your-overlay” w katalogu buildroot, w którym utworzysz tę strukturę

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

Następnie powinieneś ustawić ścieżkę do tej nakładki w defconfig

System configuration > Root filesystem overlay directories

(lub znajdź BR2_ROOTFS_OVERLAY)

Zalecana ścieżka dla tej nakładki to również board/<company>/<boardname>/rootfs-overlay

Kenjy Minamori
źródło
Przykładowa konfiguracja przy użyciu Buildroot jako submodułu: github.com/cirosantilli/linux-kernel-module-cheat/blob/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
1
OP używa tylko BusyBox i wskazuje, że chce osiągnąć swój cel bez buildroot. Nie uważam tej odpowiedzi za istotną dla pytania. To bardziej komentarz do zaakceptowanej odpowiedzi.
Tim