कर्नेल हैकिंग पर्यावरण


22

मैं यूसीओएस, थ्रेडएक्स जैसे एम्बेडेड ओएस में काम कर रहा हूं। जबकि मेरे पास लिनक्स में एप्स कोडित हैं, अब मैं लिनक्स कर्नेल सीखना शुरू करने की योजना बना रहा हूं। पर्यावरण के संबंध में मेरे कुछ प्रश्न हैं।

  1. सबसे अच्छा डिस्ट्रो कौन सा है, जिसमें कर्नेल विकास के लिए टूल का उपयोग करना आसान है? (अब तक मैंने आरएचईएल और फेडोरा का इस्तेमाल किया था। जबकि मैं इनसे सहज हूं, ऐसा भी लगता है कि उबंटू में आसान कर्नेल संकलन जैसे make_kpkg, आदि के लिए अंतर्निहित स्क्रिप्ट हैं)

  2. क्या आप कर्नेल डीबगिंग के लिए सर्वश्रेष्ठ सेटअप का वर्णन कर सकते हैं? अन्य एम्बेडेड OS को डीबग करते समय, मैंने प्रगति, जेटीएजी आदि को डंप करने के लिए सीरियल पोर्ट का उपयोग किया है, लिनक्स कर्नेल देवों का किस तरह का सेटअप उपयोग करता है? (सीरियल पोर्ट के साथ मेरा टेस्ट किया गया पीसी मेरी जरूरतों के लिए पर्याप्त है? यदि हां, तो कर्नेल को सीरियल पोर्ट पर डंप करने के लिए कैसे कॉन्फ़िगर किया जाए?) मैं सीरियल कंसोल को उन संदेशों को पुनर्निर्देशित करने की योजना बना रहा हूं जो मेरे लैपटॉप में पढ़े जाएंगे।

  3. डिबगिंग और कर्नेल कोड को ट्रेस करने के लिए कौन सा टूल सबसे अच्छा है? जैसा कि पहले उल्लेख किया गया है, क्या सीरियल कंसोल एकमात्र तरीका है? या पीसी के लिए कोई आईडीई / जेटीजी इंटरफ़ेस मौजूद है?


3
# 1 के लिए, लिनस खुद फेडोरा का उपयोग करता है, ताकि संभवतः कुछ कह सके। मैं वास्तव में एक जवाब देने के लिए इस विषय पर पर्याप्त नहीं जानता, लेकिन मैं अन्य लोगों के क्या कहना चाहूंगा।
जोंसकब

1
make_kpkg डेबियन से आता है, जो उबंटू और मेरे fav distro;) पर आधारित है
नष्ट किया गया खाता

जवाबों:


14

लिनक्स कर्नेल विकास के लिए मेरा व्यक्तिगत स्वाद डेबियन है। अब आपके अंक के लिए:

  1. जैसा कि आप शायद अनुमान लगाते हैं कि उबंटू विकास afaik को कम करने के लिए कर्नेल में कुछ भी नया नहीं लाता है, इसके अलावा जो कि डेबियन में पहले से उपलब्ध है। उदाहरण के लिए make_kpkg एक डेबियन सुविधा है और उबंटू नहीं है। डेबियन में सामान्य लिनक्स कर्नेल विकास कार्यों पर आपको आरंभ करने के लिए कुछ लिंक दिए गए हैं:

  2. कर्नेल डिबगिंग करने का सबसे आसान तरीका QEMU और GDB है। आपको शुरू करने के लिए कुछ लिंक:

    हालाँकि, आपको इस बात की जानकारी होनी चाहिए कि विशिष्ट हार्डवेयर समस्याओं जैसे डीबगिंग और ऐसे कुछ परिदृश्यों के लिए यह विधि व्यवहार्य नहीं है, जिसके लिए आप भौतिक सीरियल डीबगिंग और वास्तविक हार्डवेयर का उपयोग करना बेहतर होगा। इसके लिए आप KGDB का उपयोग कर सकते हैं (यह ईथरनेट का उपयोग करके भी काम करता है)। केडीबी भी एक अच्छा विकल्प है। ओह, और वैसे, KGDB और KDB दोनों को लिनक्स कर्नेल में मिला दिया गया है। उन दो के बारे में अधिक यहाँ । एक और शांत विधि, जो गैर-हार्डवेयर संबंधित मुद्दों के लिए अद्भुत रूप से काम करती है, उपयोगकर्ता-मोड लिनक्स कर्नेल का उपयोग कर रही है । उपयोगकर्ता-मोड में कर्नेल को किसी अन्य प्रक्रिया के रूप में चलाना आपको किसी अन्य प्रोग्राम ( उदाहरण ) की तरह ही डिबग करने की अनुमति देता है । उपयोगकर्ता-मोड लिनक्स पर अधिकयहाँ । यूएमएल 2.6.0 के बाद से लिनक्स कर्नेल का हिस्सा है, इस प्रकार आप इन चरणों का पालन करके यूएमएल मोड में उपरोक्त किसी भी आधिकारिक कर्नेल संस्करण का निर्माण कर सकते हैं ।

  3. आइटम देखें 2. दुर्भाग्य से यहां कोई अंतिम सर्वोत्तम विधि नहीं है, क्योंकि प्रत्येक उपकरण / विधि में इसके समर्थक और शंकु हैं।


धन्यवाद! विस्तृत उत्तर के लिए। BTW मैं कर्नेल में एफएस और जैव उपप्रणाली में घुसपैठ कर रहा हूं। मेरे लिए कौन सा सेटअप सबसे अच्छा होगा?
राजगनेश87

यूएमएल और क्यूईएमयू शायद जाने का रास्ता है, क्योंकि आप बिना किसी लागत के फाइल सिस्टम के साथ आसानी से खेल सकते हैं।
शिनोक

बहुत अच्छे लिंक, बस एक बात। मेरा पसंदीदा डेबियन भी है, लेकिन कर्नेल डेवलपमेंट किसी भी डिस्ट्रो के साथ किया जा सकता है। हो सकता है कि स्लैक सबसे अच्छा तरीका है यदि आप शुद्ध हैं क्योंकि यह एक वेनिला कर्नेल का उपयोग करता है, लेकिन कॉन्फ़िगर खराब सामान नहीं हैं, तो आप अपना सर्वश्रेष्ठ पाएंगे।
D4RIO

कुछ और उपयोगी लिंक मिले: [लिंक 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [लिंक 2] ( ibm.com/developerworks/linux/in/sutorials/l-kernelhack2/index। html )
rajaganesh87

6

यदि आप एक एम्बेडेड प्लेटफ़ॉर्म के लिए विकसित कर रहे हैं जो i386 हार्डवेयर पर आधारित नहीं है, तो आपको क्रॉस-कंपाइल करने की आवश्यकता होगी। Emdebian परियोजना पीसी पर कई आर्किटेक्चर (एआरएम, m68k, MIPS और अधिक) (i386 या amd64) के लिए विकसित करने के लिए toolchains प्रदान करता है। इसका मतलब है कि डेबियन के तहत, आप बस अपनी पसंद के लक्ष्य (ओं) के लिए रिपॉजिटरी और एप-गेट स्थापित कर सकते हैं।


3

JTAG जांच मौजूद है, लेकिन ये काफी महंगे हैं (और इन्हें बनाने वाली कंपनियों के पास विशेष अनुबंध हैं)। कर्नेल कोड को डीबग करने का सबसे अच्छा तरीका यह है कि इसे kvm या qemu में प्रारंभ करें, अनुकरण के अंदर gdbserver के साथ।


और भी बेहतर, उपयोगकर्ता मोड लिनक्स का उपयोग करें। नियमित उपयोगकर्ता प्रक्रिया के रूप में लिनक्स।
वॉनब्रांड

0

अनिवार्य रूप से किसी भी मेनलाइन वितरण को इसके लिए ठीक काम करना चाहिए (वे उस पर हैक करने के लिए अपने स्वयं के वितरण का उपयोग करते हैं)। जो भी अधिक आरामदायक लगता है उसका उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.