BusyBox'ta başlatma komut dosyaları oluşturma ve denetleme


11

BusyBox'ta özel bir linux çekirdeği derledim. BusyBox init, çalışma seviyelerini desteklemez. Çekirdek BusyBox'ta önyüklendiğinde, önce initbelirtilen çalışma seviyesini arayan çalıştırılır /etc/inittab. BusyBox initolmadan iyi çalışır /etc/inittab. Hayır inittabbulunduğunda aşağıdaki davranışa sahiptir:

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

Bu kısım benim için çok açık, ama ağ kurmaya, seri portlar oluşturmaya veya javasüreçleri başlatmaya çalışan cinleri nasıl yöneteceğimizi bilmek istiyorum . İçerideki senaryolara baktım /etc/init.d/ama onları nasıl yöneteceğimizi anlamıyorum. Bu hizmetleri kendim gibi otomatik bir araç olmadan kontrol etmek için iyi bir öğretici veya çözüm arıyorum buildroot. Bu betiklerin nasıl çalıştığını ve cihazların nasıl oluşturulacağını anlamak istiyorum /dev/(şu anda sadece consoleve var ttyAM0).

Yanıtlar:


9

Buildroot için, $path_to_buildroot/output/target/etc/init.dresim oluşturmadan önce tüm komut dosyalarınızın yerleştirilmesi gerekir . Benim durumumda bu dizin rcSve S [0-99] script_name adlı az sayıda betik içeriyor . Böylece kendi start \ stop komut dosyanızı oluşturabilirsiniz.

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

ve örneğin 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_namedosyaadı sözdizimi S10*önce çalışır S2*ve betiği bozar.
Tim

@ Zaman mutlaka "komut dosyasını kırmak" değil, sadece sıfır-pad. Tabii S20*çalışır sonra S10*, daha önce bir şey gelmek istiyorsanız S10onu aramak gerekir S01*, S02*vb NBD.
thom_nic

5

"Target" klasöründeki fs'nizi değiştirmek kötü bir fikirdir. Bunun nedeni, değişikliklerin komuttan output/target/sağ make cleançıkamamasıdır.

Buildroot kılavuzda doğru bir şekilde nasıl yapılacağını açıkladı

Dizin, kısmen dosya sistemini kaplayan bir yerde oluşturmalısınız. Örneğin, bu yapıyı oluşturduğunuz buildroot dizininde dir "your-overlay" oluşturabilirsiniz.

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

Daha sonra defconfig içinde bu yer paylaşımının yolunu ayarlamanız gerekir

System configuration > Root filesystem overlay directories

(veya BR2_ROOTFS_OVERLAY'i bulun)

Ayrıca, bu yer paylaşımı için önerilen yol board/<company>/<boardname>/rootfs-overlay


Buildroot'u bir alt modül olarak kullanırken örnek kurulum: github.com/cirosantilli/linux-kernel-module-cheat/blob/…
Ciro Santilli 4 病毒 审查 六四 事件

1
OP sadece BusyBox kullanıyor ve hedefine buildroot olmadan ulaşmak istediğini gösteriyor. Bu cevabı soru ile alakalı görmüyorum. Bu daha çok kabul edilen cevaba bir yorum.
Tim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.