Создание и управление скриптами запуска в 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

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

Это плохая идея, чтобы поменять фс в папке "target". Это потому, что изменения в output/target/не выживают make cleanкоманды.

В руководстве buildroot описано, как это сделать правильно

Вы должны создать каталог где-то, что частично перекрывает файловую систему. Например, вы можете создать dir "your-overlay" в 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/…
Сиро Сантилли 冠状 病毒 审查 六四 事件 法轮功

1
OP использует только BusyBox и указывает, что хочет достичь своей цели без buildroot. Я не вижу этот ответ, имеющий отношение к вопросу. Это скорее комментарий к принятому ответу.
Тим
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.