Створюйте та керуйте сценаріями запуску в BusyBox


11

Я зібрав власне ядро ​​Linux в BusyBox. BusyBox initне підтримує запущені рівні. Коли ядро ​​завантажується в BusyBox, воно спочатку виконує пошук initза вказаним рівнем запуску /etc/inittab. BusyBox initпрацює чудово, без цього /etc/inittab. Коли не inittabзнайдено, воно має таку поведінку:

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

Ця частина мені дуже зрозуміла, але я хотів би знати, як керувати демонами, які запускають мережу, створюють послідовні порти або запускають javaпроцеси. Я роздивився сценарії, які містяться, /etc/init.d/але не розумію, як ними керувати. Я шукаю гарний підручник або рішення, щоб самостійно контролювати ці послуги без автоматизованого інструменту, як-от buildroot. Я хочу , щоб зрозуміти , як ці скрипти працюють і як створити пристрої в /dev/(зараз у мене тільки consoleй ttyAM0).

Відповіді:


9

Для зборки всі ваші сценарії повинні бути розміщені $path_to_buildroot/output/target/etc/init.dперед зображенням збірки. У моєму випадку цей каталог містить rcSдекілька сценаріїв з назвою S [0-99] script_name. Таким чином, ви можете створити власний сценарій 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

і, наприклад, 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_nameсинтаксис імені файлу буде запущений S10*раніше S2*і порушить сценарій.
Тім

@Tim не обов'язково "ламає сценарій", просто нульовий пробіл. Звичайно S20*працює після S10*, якщо ви хочете що - то прийти , перш ніж S10ви повинні назвати його S01*, S02*і т.д. NBD.
thom_nic

5

Неправильно змінити свій FS у папці "target". Це тому, що зміни в команді output/target/не переживають make clean.

У посібнику з buildroot описано, як це зробити правильно

Вам слід десь створити dir, який частково перекриває файлову систему. Наприклад, ви можете створити dir "your-overlay" в dir buildroot dir, де ви створюєте цю структуру

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

Тоді вам слід встановити шлях до цього накладання в defconfig

System configuration > Root filesystem overlay directories

(або знайдіть BR2_ROOTFS_OVERLAY)

Також рекомендований шлях для цього накладання board/<company>/<boardname>/rootfs-overlay


Налаштування зразка під час використання Buildroot як підмодуля: github.com/cirosantilli/linux-kernel-module-cheat/blob/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
OP використовує лише BusyBox і вказує, що хоче досягти своєї мети без вбудованого корінця. Я не бачу цієї відповіді відповідною до питання. Це більше коментар до прийнятої відповіді.
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.