कस्टम ओएस बनाने के लिए लिनक्स सोर्स कोड को कैसे बदलना शुरू करें? [बन्द है]


15

मैंने सुना है कि हम लिनक्स को बदल सकते हैं (उबंटू कह सकते हैं) जैसा कि हम इसके सोर्स कोड को बदलकर पूरी तरह से नया ओएस बना सकते हैं। मैंने www.kernel.org वेबसाइट से लिनक्स कर्नेल का स्रोत कोड डाउनलोड किया है। लेकिन इसे देखकर, मैं कुछ भी नहीं समझ पा रहा हूं, फाइलों के भीतर बहुत सारी निर्देशिकाएं, फाइलें हैं (जैसा कि मुझे लगता है कि एक ही बड़ा कार्यक्रम होगा)। मैं इसे एक कॉलेज प्रोजेक्ट के रूप में करना चाहता हूं और मैं इसमें आवश्यक परिवर्तन करके लिनक्स में योगदान करना चाहता हूं। लेकिन कुछ साइट पर यह सवाल पूछने के बाद, उन्होंने कहा कि लिनक्स स्रोत कोड बहुत बड़ा है। आप मिनिक्स आज़मा सकते हैं। अब मैं बहुत उलझन में हूं।

कृपया मुझे इस बारे में विस्तार से सुझाव दें कि मुझे कुछ शुरुआती पुस्तकों के साथ आवश्यक चरणों के साथ इस यात्रा (लिनक्स को अनुकूलित करने के लिए बदलते स्रोत कोड) को कैसे शुरू करना चाहिए।


आपका लक्ष्य क्या है? आप कैसे योगदान देना चाहेंगे?
स्पाइडी

अपना स्वयं का कस्टम OS बनाने के लिए इसके (linux) स्रोत कोड को बदलकर ... और सीखें कि OS कैसे काम करता है और मज़े के लिए भी
dubex

लिनक्स नाम का कर्नेल Gnu / Linux (Ubuntu, Debian, RedHat, Suse, आदि distrowatch.com ) नहीं है, हालाँकि अधिकांश लोग भ्रमित करने के लिए लिनक्स शब्द का प्रयोग GNU / Linux + X11 + करते हैं। हालाँकि लिनक्स केवल गुठली में से एक है, जिसका उपयोग GNU और अन्य ऑपरेटिंग सिस्टम के साथ किया जा सकता है। यदि आप उबंटू या समान को संशोधित करना चाहते हैं, तो यह लिनक्स नाम के कर्नेल को संशोधित करने के समान नहीं है।
ctrl-alt-delor-

जवाबों:


29

आपका स्वागत है unix.stackexchange.com पर!

वहाँ अपने प्रश्न का कोई आसान जवाब है, और अब तक मुझे की तुलना में बेहतर लोगों को सामान्य रूप में लिनक्स कर्नेल के विषय पर पूरी किताबें और ऑपरेटिंग सिस्टम में लिखा है।

परियोजना के दायरे के बारे में: एक ऑपरेटिंग सिस्टम लिखना एक सरल काम नहीं है! यहां तक ​​कि मिनिक्स की तरह एक उद्देश्यपूर्ण न्यूनतम ओएस एक बहुत जटिल चीज है! आपको लिनक्स के बारे में एक विचार देने के लिए, उन सी कार्यक्रमों के बारे में सोचें जो आपने अब तक लिखे हैं। औसत विश्वविद्यालय के पाठ्यक्रम में सी की कुछ हजार लाइनें सबसे अधिक होती हैं। मुझे लगता है कि मेरी अंतिम वर्ष की परियोजना C ++ की 30-35,000 पंक्तियों के आसपास थी। लिनक्स कर्नेल सी कोड की लगभग 13,000,000 लाइनें हैं।

यह सब अलग-अलग फाइलों में क्यों है? बड़े पैमाने पर परियोजनाओं को तार्किक और व्यावहारिक कारणों से अलग-अलग फ़ाइलों में संग्रहीत किया जाता है। बस एक संपादक में एक 13,000,000 लाइन फ़ाइल लोड करने पर विचार करें! लिनक्स जैसी विशाल परियोजना से निपटने से पहले, आपको निश्चित रूप से अपने सी कौशल को उस बिंदु पर ले जाना चाहिए जहां multiple क्यों कई फाइलें ’सवाल का जवाब देती है। आपको सी कोड को पढ़ने में भी सक्षम होना चाहिए , न कि इसे लिखना चाहिए। (पहले लगता है की तुलना में कठिन)

आपको निश्चित रूप से सी में बहुत कुशल होना चाहिए। कर्नेल को हजारों लोगों द्वारा बनाए रखा जाता है, और आपको उनमें से प्रत्येक के व्यक्तिगत सी मुहावरों को समझने के लिए बुलाया जाएगा (दी गई, काफी कठोर कर्नेल कोडिंग मानकों के भीतर, लेकिन फिर भी - सभी के पास है उनकी अपनी समस्या सुलझाने की शैली)।

अपना सी फ़्यू प्राप्त करने के बाद, सुनिश्चित करें कि आप ऑपरेटिंग सिस्टम को समझते हैं। इससे आपको कोड को समझने में मदद मिलेगी। सभी लिनक्स आवश्यक नहीं है। कर्नेल उचित बहुत छोटा है! यह क्या है:

  • विभिन्न उपकरणों के लिए हजारों हार्डवेयर ड्राइवर।
  • एपीआई और ड्राइवर लेखन को सरल बनाने के लिए विभिन्न डिवाइस वर्गों के लिए अमूर्त परतें। उदाहरण के लिए, हमारे पास फ़ाइल सिस्टम के लिए VFS, इनपुट डिवाइस के लिए इवेंट लेयर, वगैरह है।
  • लिनक्स को चलाने वाले विभिन्न आर्किटेक्चर को सशर्त संकलित कोड और फाइलों को पूरा करने की मात्रा चौंकाने वाली है (न कि हर लिनक्स मशीन एक इंटेल पीसी है, और कुछ अविश्वसनीय रूप से आप जो उम्मीद कर सकते हैं उससे अलग हैं )। कर्नेल को इन अंतरों से निपटना पड़ता है, और इसका मतलब है कि अधिक कोड।

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

जिन लोगों ने आपको मिनिक्स का सुझाव दिया है वह सरल है: यह एक पूर्ण ऑपरेटिंग सिस्टम है, लेकिन यह लिनक्स की तरह एक सिस्टम की जरूरतों पर बोझ नहीं है। कोड छोटा है, लेकिन फिर भी पूर्ण कार्यक्षमता प्रदान करता है। आखिरकार, लिनक्स के पहले संस्करण मिनिक्स से प्रेरित थे।

निश्चित रूप से, मिनिक्स के पास इन दिनों कम हार्डवेयर सपोर्ट है। तो क्या? यह एक वरदान है! आधुनिक कंप्यूटर बहुत अच्छी तरह से वर्चुअलाइज करते हैं। अपने लाभ के लिए इसका उपयोग करें: Minix चलाने के लिए एक VM इतना हल्का है, यह विकास को एक ख़राब कर देगा।

यदि आपकी परियोजना एक ऑपरेटिंग सिस्टम बनाने की है, तो आप मिनिक्स का अध्ययन करके शुरू करने से भी बदतर कर सकते हैं। आप पुस्तक खरीदना और पढ़ना भी चाह सकते हैं, जिस पुस्तक के लिए मिनिक्स को लिखा गया था, वह थी, ' एंड्रयू टेनबाम के मॉडर्न ऑपरेटिंग सिस्टम '।

आपको अपने लक्ष्य भी निर्धारित करने चाहिए और अपनी शर्तों को सटीक रूप से परिभाषित करना चाहिए । यदि आपकी एक OS की परिभाषा Microsoft की (एक GUI और एक पूर्ण सॉफ्टवेयर सूट वाला OS) है, तो आप बहुत लंबे प्रोजेक्ट के लिए हो सकते हैं! 1960 के दशक के बाद से सैकड़ों लोगों ने काम किया है हमें लाने के लिए कि हम अब कहां हैं, आखिरकार।

अंत में, कंप्यूटर साइंटिस्ट की लड़ाई को याद रखें: ' पहिया को कभी भी मजबूत न करें! '(हम सीखने पर अपवाद बनाना पसंद करते हैं, निश्चित रूप से। और मज़े के लिए :))


1
होगा [लिंक] (www.linuxfromscratch.org) मेरे सपने को पूरा करें ... रुचि दिखाने के लिए धन्यवाद मेरा सवाल
dubex

LFS सीखने के लिए शानदार है कि POSIX प्रणाली के उपयोगकर्ता कैसे काम करते हैं। जहां तक ​​मुझे पता है कि यह लिनक्स-विशिष्ट है, इसलिए यह कर्नेल को असामान्य दिशा में संशोधित करने से नहीं निपटता (जैसा कि आप अपना कर्नेल बनाते समय)। लेकिन यह इस बिंदु के अलावा है, क्योंकि एक बार जब आपका कर्नेल POSIX से दूर चला जाता है, तो उपयोगकर्ता स्थान असंगत होगा और उसे पोर्ट या पुन: कार्यान्वित करना होगा।
एलेक्सिस

गलतफहमी के लिए क्षमा करें ... लेकिन मेरा मतलब यह नहीं था कि मैं अपना कर्नेल बनाऊंगा (क्योंकि मैं ज्यादा प्रतिभाशाली नहीं हूं :))। मैं स्रोत कोड में बदलाव करना चाहता हूं कि यह दूसरों से अलग दिख सके और ऐसा लगे कि मेरी खुद की रचनात्मकता है। उदाहरण के लिए: मैं ध्वनि के साथ कुछ प्रकार के एनीमेशन चाहता हूं (जो मैंने बनाया है), स्क्रीन पर जब लिनक्स (कहते हैं कि ubuntu) इसमें स्थापित कुछ आवाज पहचान सॉफ्टवेयर के साथ बूट हो रहा है। एक बार फिर धन्यवाद।
dubex

1
उस स्थिति में, आप लिनक्स का अपना वितरण कर रहे हैं, और एक अलग ऑपरेटिंग सिस्टम नहीं। LFS उसके लिए सही उपकरण है। सौभाग्य!
अलेक्सियो

1
@ एसेक्स, बहुत अच्छा और वर्णनात्मक उत्तर, धन्यवाद।
0xAF

7

स्क्रैच परियोजना से लिनक्स की जाँच करें । जैसा कि नाम से पता चलता है कि इसमें आपके लिनक्स वितरण को बनाने के लिए आवश्यक सभी विवरण शामिल हैं


4

मुझे लगता है कि पहली चीज जिसे आपको परिभाषित करने की आवश्यकता है, वह है "आप ओएस में क्या बदलाव लाना चाहते हैं"। जब तक आप यह तय नहीं करते, तब तक आप वास्तव में कहीं नहीं पहुंचेंगे। सीखने का कोई "एक मार्ग" नहीं है।

इसके अलावा, मुझे लगता है कि आपको ओएस द्वारा बेहतर तरीके से परिभाषित करना चाहिए। उबंटू स्रोत कोड का एक बड़ा हिस्सा (एक बड़ा हिस्सा) लिनक्स के बाहर है। लिनक्स केवल कर्नेल है , (इसे कभी-कभी ऑपरेटिंग सिस्टम के रूप में संदर्भित किया जाता है , विशेष रूप से अकादमिक हलकों में, इसलिए भ्रम), और इसलिए इसमें "सरल" काम है:

  • संसाधनों का प्रबंधन।
  • हार्डवेयर के साथ संचार।

किसी भी अन्य परिवर्तन एक अलग स्तर पर होगा, चाहे वह कोर userland उपयोगिताओं (अक्सर के रूप में भेजा है utils ), जीयूआई, एक distro के बुनियादी क्षुधा, आदि

यदि फिर भी, आप अभी भी कर्नेल पर हैक करने का तरीका सीखने के लिए तैयार हैं, तो आपको शायद इस सवाल से शुरू करना चाहिए , इस साइट पर सबसे अधिक मतदान;)


प्रश्न पूछने में इतना विशिष्ट न होने के लिए खेद है ... लेकिन वास्तव में मुझे इस सब के बारे में विस्तार से पता नहीं है। वास्तव में मुझे स्क्रीन पर कुछ प्रकार के एनीमेशन (ध्वनि के साथ) चाहिए जब लिनक्स (कहते हैं कि ubuntu) बूट हो रहा है ... कृपया मुझे इस सभी क्षेत्रों की खोज करने और किसी भी विशिष्ट क्षेत्र में आगे बढ़ने के बारे में विचार दें (हार्डवेयर के साथ कम्यूनिकेशन के साथ गुई कहें) ) ...
डबक्स

@dubex प्लायमाउथ से शुरू होता है और ध्वनि बजाने के लिए लिनक्स लाइब्रेरी को देखता है। SDL_mixer एक आसान हो सकता है।
sourcejedi

2

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

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