Crie e controle scripts de inicialização no BusyBox

8

Eu compilei um kernel Linux customizado no BusyBox. BusyBox init não suporta runlevels. Quando o kernel inicializa no BusyBox, ele primeiro executa init , que procura o nível de execução especificado em /etc/inittab . BusyBox init funciona muito bem sem /etc/inittab . Quando nenhum inittab é encontrado, ele tem o seguinte comportamento:

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

Esta parte é muito clara para mim, mas eu gostaria de saber como gerenciar daemons que iniciam a rede, criam portas seriais ou iniciam java processos. Eu olhei nos scripts que residem em /etc/init.d/ , mas não entendo como gerenciá-los. Estou procurando um bom tutorial ou solução para controlar esses serviços sem uma ferramenta automatizada como buildroot . Eu quero entender como esses scripts funcionam e como criar dispositivos em /dev/ (agora eu só tenho console e ttyAM0 ).

    
por Shantanu Banerjee 20.12.2012 / 16:54

2 respostas

6

Para o buildroot, todos os seus scripts devem ser colocados em $path_to_buildroot/output/target/etc/init.d antes da criação da imagem. No meu caso, este diretório contém rcS e alguns scripts chamados S [0-99] script_name. Então você pode criar seu próprio 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, por exemplo, 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 $?
    
por 20.12.2012 / 18:48
1

É uma má ideia mudar o seu fs na pasta "target".

No manual do buildroot descrevemos como fazer corretamente

Você deve criar dir em algum lugar que parcialmente sobreponha o sistema de arquivos. Por exemplo, você pode criar dir "seu-overlay" no diretório buildroot onde você cria esta estrutura

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

Então você deve definir o caminho para essa sobreposição no defconfig

System configuration > Root filesystem overlay directories

(ou encontre BR2_ROOTFS_OVERLAY)

Além disso, o caminho recomendado para essa sobreposição é board/<company>/<boardname>/rootfs-overlay

    
por 18.08.2016 / 10:33