यह पूरी तरह से इस बात पर निर्भर करता है कि आप अपने डिवाइस में कौन सी सेवाएं लेना चाहते हैं।
कार्यक्रम
तुम एक में सीधे लिनक्स बूट कर सकते हैं खोल । यह उत्पादन में बहुत उपयोगी नहीं है - जो सिर्फ एक खोल के साथ बैठे रहना चाहते हैं - लेकिन यह एक हस्तक्षेप तंत्र के रूप में उपयोगी है जब आपके पास एक इंटरैक्टिव बूटलोडर है: init=/bin/sh
कर्नेल कमांड लाइन को पास करें। सभी लिनक्स सिस्टम (और सभी यूनिक्स सिस्टम) में एक बॉर्न / POSIX- शैली शेल है /bin/sh
।
आपको शेल उपयोगिताओं के एक सेट की आवश्यकता होगी । बिजीबॉक्स एक बहुत ही आम विकल्प है; यह फ़ाइल और पाठ हेरफेर (के लिए एक खोल और आम उपयोगिताओं शामिल cp
, grep
नेटवर्किंग सेटअप,, ...) ( ping
, ifconfig
, ...), प्रक्रिया में गड़बड़ी ( ps
, nice
, ...), और विभिन्न अन्य प्रणाली उपकरण ( fdisk
, mount
, syslogd
, ...)। बिजीबॉक्स अत्यंत विन्यास योग्य है: आप अपने एप्लिकेशन के लिए सही आकार / कार्यक्षमता समझौता प्राप्त करने के लिए, कौन से उपकरण चाहते हैं और यहां तक कि व्यक्तिगत सुविधाओं का भी संकलन समय पर चयन कर सकते हैं। इसके अलावा sh
, न्यूनतम है कि तुम सच है के बिना कुछ भी नहीं कर सकते mount
, umount
और halt
, लेकिन यह भी नहीं करने के लिए असामान्य होगा cat
, cp
, mv
, rm
,mkdir
, rmdir
, ps
, sync
और कुछ और। बिजीबॉक्स एक एकल बाइनरी नामक busybox
एक उपयोगिता के लिए एक प्रतीकात्मक लिंक के साथ स्थापित करता है ।
एक सामान्य यूनिक्स प्रणाली पर पहली प्रक्रिया को कहा जाता है init
। इसका काम अन्य सेवाओं को शुरू करना है। बिजीबॉक्स में एक init सिस्टम होता है। init
बाइनरी के अलावा (आमतौर पर स्थित /sbin
), आपको इसकी कॉन्फ़िगरेशन फ़ाइलों की आवश्यकता होगी (आमतौर पर कहा जाता है /etc/inittab
- कुछ आधुनिक इनिट प्रतिस्थापन उस फ़ाइल के साथ दूर करते हैं लेकिन आप उन्हें एक छोटे एम्बेडेड सिस्टम पर नहीं पाएंगे) जो इंगित करते हैं कि क्या सेवाएं शुरू करनी हैं और कब। बिजीबॉक्स के लिए, /etc/inittab
वैकल्पिक है; यदि यह गायब है, तो आपको कंसोल पर एक रूट शेल मिलता है और स्क्रिप्ट /etc/init.d/rcS
(डिफ़ॉल्ट स्थान) को बूट समय पर निष्पादित किया जाता है।
यह सब आप की जरूरत है, निश्चित रूप से उन कार्यक्रमों से परे है जो आपके डिवाइस को कुछ उपयोगी बनाते हैं। उदाहरण के लिए, मेरे होम राउटर पर ओपेनवर्ट वैरिएंट चलाने पर , केवल प्रोग्राम्स बिजीबॉक्स, nvram
(एनवीआरएएम में सेटिंग्स को पढ़ने और बदलने के लिए), और नेटवर्किंग यूटिलिटीज हैं।
जब तक आपके सभी निष्पादनों को सांख्यिकीय रूप से जोड़ा नहीं जाता है, आपको डायनेमिक लोडर ( ld.so
, जिसे libc की पसंद और प्रोसेसर आर्किटेक्चर पर निर्भर करता है) के आधार पर और सभी डायनामिक लाइब्रेरी ( /lib/lib*.so
, शायद इनमें से कुछ में /usr/lib
) की आवश्यकता होती है। इन निष्पादन योग्य।
निर्देशिका संरचना
फ़ाइल-सिस्टम अनुक्रम स्टैंडर्ड Linux सिस्टम के आम निर्देशिका संरचना का वर्णन है। यह डेस्कटॉप और सर्वर इंस्टॉलेशन के लिए तैयार किया गया है: इसमें से बहुत कुछ एक एम्बेडेड सिस्टम पर छोड़ा जा सकता है। यहाँ एक न्यूनतम है।
/bin
: निष्पादन योग्य कार्यक्रम ( /usr/bin
इसके बजाय कुछ हो सकते हैं )।
/dev
: डिवाइस नोड्स (नीचे देखें)
/etc
: विन्यास फाइल
/lib
: डायनामिक लोडर (जब तक सभी निष्पादक सांख्यिकीय रूप से जुड़े नहीं हैं) सहित साझा पुस्तकालय
/proc
: proc फाइल सिस्टम के लिए आरोह बिंदु
/sbin
: निष्पादन योग्य कार्यक्रम। के साथ अंतर /bin
यह है कि /sbin
उन कार्यक्रमों के लिए है जो केवल सिस्टम प्रशासक के लिए उपयोगी हैं, लेकिन यह अंतर एम्बेडेड उपकरणों पर सार्थक नहीं है। आप /sbin
एक प्रतीकात्मक लिंक बना सकते हैं /bin
।
/mnt
: रखरखाव के दौरान एक स्क्रैच माउंट बिंदु के रूप में रीड-ओनली रूट फाइल सिस्टम पर काम करना आसान है
/sys
: Sysfs फाइल सिस्टम के लिए आरोह बिंदु
/tmp
: अस्थायी फ़ाइलों के लिए स्थान (अक्सर एक tmpfs
माउंट)
/usr
: उपनिर्देशिकाएँ शामिल हैं bin
, lib
और sbin
। /usr
अतिरिक्त फ़ाइलों के लिए मौजूद हैं जो रूट फाइल सिस्टम पर नहीं हैं। यदि आपके पास ऐसा नहीं है, तो आप /usr
रूट डायरेक्टरी का प्रतीकात्मक लिंक बना सकते हैं ।
डिवाइस फ़ाइलें
यहाँ कुछ विशिष्ट प्रविष्टियाँ न्यूनतम हैं /dev
:
console
full
(इसे लिखना हमेशा रिपोर्ट करता है "डिवाइस पर कोई स्थान नहीं बचा है")
log
(एक सॉकेट जो प्रोग्राम लॉग प्रविष्टियों को भेजने के लिए उपयोग करता है), यदि आपके पास एक syslogd
डेमॉन है (जैसे कि बिजीबॉक्स के) इसे पढ़ने से
null
(हमेशा खाली रहने वाली फ़ाइल की तरह काम करता है)
ptmx
और एक pts
निर्देशिका , यदि आप छद्म टर्मिनलों का उपयोग करना चाहते हैं (यानी कंसोल के अलावा कोई भी टर्मिनल) - जैसे कि यदि डिवाइस नेटवर्क है और आप टेलनेट या ssh में करना चाहते हैं
random
(यादृच्छिक बाइट्स लौटाता है, जोखिम अवरुद्ध)
tty
(हमेशा कार्यक्रम के टर्मिनल को नामित करता है)
urandom
(बेतरतीब बाइट्स लौटाता है, कभी ब्लॉक नहीं करता लेकिन हौसले से बूट डिवाइस पर गैर-यादृच्छिक हो सकता है)
zero
(नल बाइट्स का एक अनंत क्रम होता है)
इसके अलावा आपको अपने हार्डवेयर के लिए प्रविष्टियों की आवश्यकता होगी (नेटवर्क इंटरफेस को छोड़कर, इनमें प्रविष्टियां नहीं मिलती हैं /dev
): सीरियल पोर्ट, स्टोरेज, आदि।
एम्बेडेड उपकरणों के लिए, आप सामान्य रूप से सीधे रूट फाइल सिस्टम पर डिवाइस प्रविष्टियां बनाएंगे। हाई-एंड सिस्टम में एक स्क्रिप्ट होती है जिसे प्रविष्टियां MAKEDEV
बनाने के लिए कहा जाता है /dev
, लेकिन एक एम्बेडेड सिस्टम पर स्क्रिप्ट को अक्सर छवि में नहीं बांधा जाता है। यदि कुछ हार्डवेयर को हॉटप्लग किया जा सकता है (जैसे यदि डिवाइस में USB होस्ट पोर्ट है), तो udev/dev
द्वारा प्रबंधित किया जाना चाहिए (आपके पास अभी भी रूट फाइल सिस्टम पर न्यूनतम सेट हो सकता है)।
बूट-टाइम क्रियाएं
रूट फाइल सिस्टम से परे, आपको सामान्य ऑपरेशन के लिए कुछ और माउंट करने की आवश्यकता है:
- procfs पर
/proc
(काफी अपरिहार्य)
- sysfs पर
/sys
(काफी अपरिहार्य)
tmpfs
फ़ाइल सिस्टम पर /tmp
(रूट फ़ाइलों में हो सकता है या केवल पढ़ने के लिए हो सकता है) जो रूट फाइल सिस्टम पर बजाय रैम में होगा अस्थायी फ़ाइलों को बनाने के लिए अनुमति देने के लिए)
/dev
यदि गतिशील हो तो tmpfs, devfs या devtmpfs (ऊपर "डिवाइस फ़ाइलों में देखें")
- devpts पर
/dev/pts
आप [छद्म टर्मिनलों उपयोग करना चाहते हैं (के बारे में टिप्पणी को देखने के pts
ऊपर)
आप एक /etc/fstab
फ़ाइल और कॉल कर सकते हैं mount -a
, या mount
मैन्युअल रूप से चला सकते हैं ।
यदि आपके पास लॉग लिखने के लिए कोई जगह है, तो एक syslog डेमॉन (और साथ ही klogd
कर्नेल लॉग्स के लिए भी शुरू करें syslogd
)।
इसके बाद, डिवाइस एप्लिकेशन-विशिष्ट सेवाओं को शुरू करने के लिए तैयार है।
रूट फाइलसिस्टम कैसे बनाया जाए
यह एक लंबी और विविधतापूर्ण कहानी है, इसलिए मैं यहां जो कुछ भी करूंगा वह कुछ संकेत देता है।
रूट फाइलसिस्टम को RAM में रखा जा सकता है (ROM या फ़्लैश में (आमतौर पर संपीड़ित) छवि से लोड), या डिस्क-आधारित फाइल सिस्टम (ROM या फ़्लैश में संग्रहीत) पर, या नेटवर्क से लोड किया जाता है (अक्सर TFTP पर ) यदि लागू हो । यदि रूट फाइलसिस्टम रैम में है, तो इसे इनट्रामेफ्स बनाएं - एक रैम फाइलसिस्टम जिसकी सामग्री बूट समय पर बनाई गई है।
एम्बेडेड सिस्टम के लिए रूट इमेज असेंबल करने के लिए कई चौखटे मौजूद हैं। बिजीबॉक्स एफएक्यू में कुछ संकेत हैं । बिल्डरोट एक लोकप्रिय है, जो आपको लिनक्स कर्नेल और बिजीबॉक्स के समान सेटअप के साथ पूरी रूट छवि बनाने की अनुमति देता है। OpenEmbedded एक और ऐसा ढांचा है।
विकिपीडिया में लोकप्रिय एम्बेडेड लिनक्स वितरण की एक (अपूर्ण) सूची है । आपके पास हो सकता है एम्बेडेड लिनक्स का एक उदाहरण नेटवर्क उपकरणों के लिए ऑपरेटिंग सिस्टम का ओपनवर्ट परिवार है (टिंकरर्स होम रूटर्स पर लोकप्रिय)। यदि आप अनुभव से सीखना चाहते हैं, तो आप स्क्रैच से लिनक्स की कोशिश कर सकते हैं , लेकिन यह एम्बेडेड उपकरणों की बजाय हॉबीस्ट के लिए डेस्कटॉप सिस्टम की ओर है।
लिनक्स बनाम लिनक्स कर्नेल पर एक नोट
लिनक्स कर्नेल में बेक किया जाने वाला एकमात्र व्यवहार वह पहला प्रोग्राम है जो बूट समय पर लॉन्च किया जाता है। (मैं यहाँ initrd और initramfs सूक्ष्मता में नहीं जाऊँगा ।) इस कार्यक्रम, जिसे पारंपरिक रूप से init कहा जाता है , की प्रक्रिया ID 1 है और इसमें कुछ विशेषाधिकार ( KIL संकेतों के लिए प्रतिरक्षा ) और जिम्मेदारियाँ ( अनाथ अनाथ ) हैं। आप लिनक्स कर्नेल के साथ एक सिस्टम चला सकते हैं और जो कुछ भी आप चाहते हैं उसे पहली प्रक्रिया के रूप में शुरू कर सकते हैं, लेकिन तब आपके पास लिनक्स कर्नेल के आधार पर एक ऑपरेटिंग सिस्टम होता है, न कि सामान्य रूप से जिसे "लिनक्स" कहा जाता है - लिनक्स , सामान्य अर्थ में शब्द का, एक यूनिक्स की तरह ऑपरेटिंग सिस्टम है जिसका कर्नेल लिनक्स कर्नेल है। उदाहरण के लिए, एंड्रॉइड एक ऑपरेटिंग सिस्टम है जो यूनिक्स जैसा नहीं है लेकिन लिनक्स कर्नेल पर आधारित है।