एक एम्बेडेड डिवाइस के साथ कर्नेल पर कैसे काम करें? - लिनक्स, डीबगिंग, लिनक्स-कर्नेल, एम्बेडेड

अभी, मैं संकलित कर रहा हूँ printk"एस, परिणामी कर्नेल को यूएसबी स्टिक पर कॉपी करें, डिवाइस पर यूएसबी स्टिक को घुमाएं, कर्नेल वाले विभाजन को आरोहित करें, यूएसबी स्टिक से नए कर्नेल को विभाजन में कॉपी करें, rebootआईएनजी, फिर कैप्चर करके ट्रेस का निरीक्षण dmesg एक फाइल के लिए आउटपुट।

वर्कस्टेशन पर:

make my-kernel
cp new_kernel /path/to/usb/stick

एम्बेडेड डिवाइस पर:

mount /dev/sda1/ /mnt
mount kernelpartition /tmp/kernel
cp /mnt/new_kernel /tmp/kernel
sync
umount /tmp/kernel
umount /dev/sda1
reboot

dmesg > mytrace
less mytrace

क्या यह विकसित करने के लिए यह दर्दनाक माना जाता है? मैं समझ नहीं पा रहा हूं कि कैसे गैर-तुच्छ कर्नेल कोड का कोई अर्थपूर्ण मात्रा विकसित किया गया है।

उत्तर:

उत्तर № 1 के लिए 4

सबसे अच्छा वर्कफ़्लो उस डिवाइस की क्षमताओं पर निर्भर करेगा जो आप काम कर रहे हैं। अक्सर उनके पास नेटवर्क या सीरियल पोर्ट से बूट करने के विकल्पों के साथ बूटलोडर होगा।

मैं कुछ एम्बेडेड विकास भी कर रहा हूं, औरयहां मैं जिस चीज के साथ आया था। जिस डिवाइस के साथ मैं काम कर रहा हूं वह कुछ फ़्लैश में बनाया गया है, जो डिफ़ॉल्ट रूप से बूट हो जाता है, लेकिन इसमें एक यूएसबी पोर्ट और एक एसडी कार्ड स्लॉट भी है। इसमें काफी प्राचीन बूटलोडर है।

  • यूएसबी पोर्ट पर मैंने वाईफाई डोंगल को जोड़ा है। मैं सुनिश्चित करता हूं कि यूएसबी डोंगल को चलाने और चलाने के लिए मैं आवश्यक मॉड्यूल के साथ कर्नल संकलित करता हूं।

  • मैंने एक न्यूनतम कर्नेल और रूट फाइल सिस्टम बनाया है जिसे मैंने डिवाइस पर फहराया है। इस कर्नेल में विकल्प है CONFIG_KEXEC सक्षम होना चाहिए। रूट फाइल सिस्टम में kexec उपकरण हैं। मैं सिस्टम का उपयोग कर निर्माण buildroot

  • जब यह सिस्टम शुरू होता है, तो यह एसडीकार्ड को माउंट करने का प्रयास करता है और यह देखने के लिए जांच करता है कि क्या यह रूट निर्देशिका में कर्नेल पा सकता है या नहीं। यदि यह कर सकता है, तो यह उपयोग करता है kexec इस दूसरे कर्नेल को बूट करने के लिए। यह एक कस्टम init स्क्रिप्ट का उपयोग कर किया गया है जो मैंने लिखा है।

अगर आपके डिवाइस पर एसडी कार्ड स्लॉट नहीं है, तो आप शायद यूएसबी मेमोरी स्टिक के साथ कुछ ऐसा कर सकते हैं।

इस सेटअप के साथ, मैं sdp पर एक नई कर्नेल छवि को स्थानांतरित करने के लिए sftp का उपयोग कर सकता हूं, और इसे बूट करने के लिए kexec। जब भी मैं कर्नेल बदलता हूं, यह डिवाइस को रिफ्लैश करने की परेशानी बचाता है।


संबंधित सवाल
सबसे लोकप्रिय