बिजीबॉक्स में स्टार्ट अप स्क्रिप्ट बनाएं और नियंत्रित करें


11

मैंने बिजीबॉक्स में एक कस्टम लिनक्स कर्नेल संकलित किया है। बिजीबॉक्स रनले का initसमर्थन नहीं करता है। जब कर्नेल व्यस्त बॉक्स में बूट होता है, तो यह पहले निष्पादित initहोता है जो निर्दिष्ट रनलेवल के लिए दिखता है /etc/inittab। बिजीबॉक्स 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बिल्ड इमेज से पहले रखा जाना चाहिए । मेरे मामले में इस निर्देशिका में rcSS [0-99] script_name नाम की कुछ स्क्रिप्ट शामिल हैं । तो आप अपनी खुद की start \ stop स्क्रिप्ट बना सकते हैं।

आरसीएस:

#!/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*और स्क्रिप्ट को तोड़ देगा ।
टिम

@ जरूरी नहीं कि "स्क्रिप्ट को तोड़ें", बस जीरो-पैड। ज़रूर S20*रन के बाद S10*, इससे पहले कि आप आने के लिए कुछ करना चाहते हैं S10तो आप इसे कॉल करने की आवश्यकता S01*, S02*आदि NBD।
thom_nic

5

"लक्ष्य" फ़ोल्डर में अपने fs को बदलना बुरा है। ऐसा इसलिए है क्योंकि परिवर्तन कमांड से output/target/नहीं बचते हैं make clean

बिल्डरोट मैनुअल में यह सही ढंग से करने का तरीका बताया गया है

आपको कहीं न कहीं dir बनाना चाहिए जो आंशिक रूप से फ़ाइल सिस्टम को ओवरले करता है। उदाहरण के लिए आप बिल्डरो डॉट में "अपना ओवरले" बना सकते हैं जहां आप यह संरचना बनाते हैं

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

फिर आपको इस ओवरले को डिफॉन्किग में पथ सेट करना चाहिए

System configuration > Root filesystem overlay directories

(या, BR2_ROOTFS_OVERLAY ढूंढें)

साथ ही, इस ओवरले के लिए अनुशंसित पथ है board/<company>/<boardname>/rootfs-overlay


नमूना सेटअप जब एक सबमॉड्यूल के रूप में बिल्डरोट का उपयोग कर रहा है: github.com/cirosantilli/linux-kernel-module-cheat/blob/…
Ciro Santilli 冠状 ro ro 事件 法轮功 法轮功

1
ओपी केवल बिजीबॉक्स का उपयोग कर रहा है और इंगित करता है कि वह बिना बिल्डरो के अपने लक्ष्य को प्राप्त करना चाहता है। मुझे यह उत्तर प्रश्न से संबंधित नहीं दिखता। यह स्वीकृत उत्तर के लिए एक टिप्पणी है।
टिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.