इमुलेटिंग लिनस टोरवाल्ड्स: स्क्रॅच वरून आपली स्वतःची ऑपरेटिंग सिस्टम तयार करा (आठवी)

आम्ही स्वतःची ऑपरेटिंग सिस्टम कशी तयार करावी यासाठी शिकवण्याच्या मालिकांकडे परत जाऊ. मला असे वाटते की आपल्याला हा धडा खूप आवडेल कारण आम्ही शेवटी आमच्या ऑपरेटिंग सिस्टमसह संवाद साधू शकतो. आज आपण कीबोर्ड इनपुट वाचू. त्यासाठी ही योजना टायमरप्रमाणेच आहे. आम्हाला तरीही आयआरक्यू वापरावे लागेल जेणेकरुन आम्ही टाइमर प्रमाणेच प्रारंभ करू.

एनडी_आयआरक्यू_इन्स्टॉलहँडलर (1, & एनडी_केबोर्ड_हँडलर);

आमचे कीबोर्ड हँडलर काहीसे जटिल आहे कारण आपण की वाचत आहोत आणि त्या बफरमध्ये जमा करीत आहोत.

बाह्य "सी" रिकामे एनडी_केबोर्डबोर्डहँडलर (स्ट्रक्टेज रेज * आर) {स्वाक्षरीकृत चार स्कॅनकोड = एनडी :: कीबोर्ड :: गेटचर (); if (स्कॅनकोड! = 255) {एनडी :: स्क्रीन :: पुटचर (स्कॅनकोड); स्ट्रिंगबफर [स्ट्रिंगपोज] = स्कॅनकोड; स्ट्रिंगपॉस ++; }}

http://gist.github.com/634afddcb3e977ea202d

एनडी :: कीबोर्ड :: गेटचर या नावाच्या फंक्शनला आपण कसे कॉल करू ते तपासू शकतो. तिथे आपण पात्र मिळवितो आणि मग ते रिक्त वर्ण नसल्यास (येथे मी 255 वापरलेले आहे, आम्हाला एक चांगली प्रणाली वापरावी लागेल) आम्ही वर्ण स्क्रीनवर ठेवतो आणि त्यास अक्षरांच्या साध्या बफरमध्ये संचयित करतो (हे देखील आहे सुधारण्याच्या अधीन, सद्य प्रणाली ओव्हरफ्लो होऊ शकते).

एन साइन्ड चार एनडी :: कीबोर्ड :: गेटचर () {स्वाक्षरीकृत चार स्कॅनकोड; स्कॅनकोड = (स्वाक्षरीकृत चार्ट) एनडी :: पोर्ट्स :: इनपुटबी (0x60); if (स्कॅनकोड & ND_KEYBOARD_KEY_RELEASE) {परतावा 255; } अन्यथा en en_US [स्कॅनकोड] परत करा; }} चार * एनडी :: कीबोर्ड :: गेटस्ट्रिंग () {जबकि (स्ट्रिंगबफर [स्ट्रिंगपॉस -1]! = '\ एन') {} स्ट्रिंगपॉस = 0; रिटर्न स्ट्रिंगबफर; }

http://gist.github.com/2d4f13e0b1a281c66884

येथे आपण दाबलेली की कशी मिळविली ते पाहू शकतो. 0x60 वाजता नेहमी दाबली जाणारी शेवटची की असेल. खरं तर हे आयआरक्यू न वापरता थेट वाचता येते, परंतु मग बदल केव्हा होईल ते कसे ओळखावे हे आम्हाला कळणार नाही. तेथे आम्ही प्राप्त केलेला कोड रिलीझ केलेल्या कीशी संबंधित आहे की आम्ही ऑन्ड ऑपरेशनसह तपासतो.

त्या प्रकरणात आम्ही 255 परत करतो (कारण आम्ही नंतर त्याकडे दुर्लक्ष करू) आणि अन्यथा की दाबली गेली आहे. अशावेळी आम्ही en_US नावाच्या अ‍ॅरेची स्थिती परत करतो. या अ‍ॅरेमध्ये कोणती माहिती आहे? हा अ‍ॅरे म्हणजे आपण कीमॅप किंवा कॅरेक्टर मॅपला कॉल करू. आपल्याला माहिती आहेच की भिन्न भाषांमध्ये वेगवेगळे कीबोर्ड असतात आणि ते की अधिलिखित केल्यामुळे समर्थित नाहीत. म्हणून en_US आम्हाला प्रत्येक कोडशी संबंधित की देईल आणि ते अमेरिकन कीबोर्डवर कार्य करेल.

स्वाक्षरित चार्ट en_US [128] = {0,27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0 ',' - ',' = ',' \ बी ',' \ टी ',' क्यू ',' डब्ल्यू ',' ई ',' आर ',' टी ',' वाय ',' यू ',' आय ',' ओ ',' पी ',' [','] ',' \ एन ', ०, / * सीटीआरएल * /' अ ',' एस ',' डी ',' एफ ',' जी ', 'एच', 'जे', 'के', 'एल', ';', '\' ',' '', ०, / * डावी शिफ्ट * / '\\', 'झेड', 'एक्स', 'सी', 'व्', 'बी', 'एन', 'मी', ',', '.', '/', ०, / * राइट शिफ्ट * / '*', ०, / * अल्ट * / '', 0, / * कॅप्स लॉक * / 0, / * एफ 0-एफ 0 की * / 0, / * संख्या लॉक * / 0,0,0,0,0,0,0,0,0,0, / * स्क्रोल लॉक * / ०, / * होम की * / ०, / * वर बाण * / ०, / * पृष्ठ अप * / '-', ०, / * डावा बाण * / ०, ०, / * उजवा बाण * / '+', ०, / * समाप्त की * / ०, / * डाऊन बाण * / ०, / * पृष्ठ खाली * / ०, / * घाला की * / ०, / * की हटवा * / ०,०, 1, 10, 0, / * एफ 0-एफ 0 की * / 0};

http://gist.github.com/bf52085aec05f3070b65

तेथे एक परिभाषित कार्य देखील होते ज्यामध्ये एक वाक्यांश प्राप्त झाला. याक्षणी फक्त एक आवश्यक असलेल्या अनुप्रयोगांकडून असलेल्या तारांपर्यंत सहज प्रवेश करणे हाच हेतू आहे. मी नेक्स्टशेललाइट बद्दल बोलत आहे, नेक्स्टडिव्हलकडे असलेल्या संभाव्य भविष्यातील शेलची कमी केलेली आवृत्ती. NextShellLite चा उद्देश हळूहळू नवीन कार्यक्षमता तपासण्यासाठी कमी शेल प्रदान करणे आहे. मी येथे शेल कोड ठेवणार नाही परंतु मी हा नेक्स्टडिव्हल कोडमध्ये समाविष्ट केला आहे.

याक्षणी हे स्वतंत्र प्रोग्राम म्हणून कार्य करत नाही परंतु कर्नलद्वारे कार्य केलेल्या फंक्शनच्या रूपात कार्य करते, मुख्यतः कारण आम्ही अद्याप एक्झिक्युटेबल्स चालविण्याचा पर्याय जोडला नाही. आणि अर्थातच, नवीन कीबोर्ड इनपुट फंक्शन्ससह शेल कसे कार्य करते त्याची काही छायाचित्रे.

NextShellLite


आपली टिप्पणी द्या

आपला ई-मेल पत्ता प्रकाशित केला जाणार नाही. आवश्यक फील्ड चिन्हांकित केले आहेत *

*

*

  1. डेटा जबाबदार: मिगुएल Áन्गल गॅटन
  2. डेटाचा उद्देशः नियंत्रण स्पॅम, टिप्पणी व्यवस्थापन.
  3. कायदे: आपली संमती
  4. डेटा संप्रेषण: कायदेशीर बंधन वगळता डेटा तृतीय पक्षास कळविला जाणार नाही.
  5. डेटा संग्रहण: ओकेन्टस नेटवर्क (EU) द्वारा होस्ट केलेला डेटाबेस
  6. अधिकारः कोणत्याही वेळी आपण आपली माहिती मर्यादित, पुनर्प्राप्त आणि हटवू शकता.

  1.   दरियो म्हणाले

    उत्कृष्ट शिक्षक! धन्यवाद 🙂

  2.   पॉपआर्च म्हणाले

    सत्य हे आहे की मी ट्यूटोरियलचे कधीच अनुसरण केले नाही कारण संकलित करण्याचा प्रयत्न करताना पहिल्या भागात मला त्रुटी मिळाली परंतु ती कोणती त्रुटी होती हे मला आठवत नाही

  3.   लोपेझची मांजर म्हणाले

    माझ्या क्रॅस अज्ञानाबद्दल क्षमस्व ... हे कोड कोठून लिहिले गेले आहेत? टर्मिनल मधून ??

    1.    अ‍ॅड्रियनअरोयोस्ट्रिट म्हणाले

      कोड स्त्रोत कोडचा एक भाग आहेत. मी ते पूर्ण ठेवत नाही कारण अन्यथा पोस्ट सर्व कोड आहे आणि काहीही स्पष्टीकरण नाही. आपण शिफारस करतो की आपण पाठाचे अनुसरण करू इच्छित असल्यास आपण सुरुवातीपासूनच ट्यूटोरियल्स वाचा. आपण येथे संपूर्ण स्त्रोत कोड देखील तपासू शकता (http://github.com/AdrianArroyoCalle/next-divel)

  4.   काडी म्हणाले

    अतिप्रवाह उद्भवू नये म्हणून सुधारणा कशी होईल?

    1.    हलवा म्हणाले

      काडी, आपण अद्याप रेपॉजिटरी कोड तपासला आहे? तेथे जास्तीत जास्त आकार स्थापित केला जाईल, तसेच त्यावर नियंत्रण ठेवण्यासाठी कार्ये देखील तेथे आपण आकारात बदल करू शकता किंवा बफर संतृप्त झाल्यावर मुक्त करण्याचा एक वाजवी मार्ग अंमलात आणू शकता.
      ती तपासण्यासाठी मी तुमच्यासाठी लिंक सोडतो https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   निको म्हणाले

    हॅलो अतिशय रंजक, आपण इनुलेटिंग लिनस टॉर्व्हल्सची ही «मालिका? सुरू ठेवणार आहात काय?
    आपण अशा प्रकारे कर्नल तयार करण्यासाठी काही पुस्तक, माहितीची शिफारस करू शकता?

    ग्रीटिंग्ज!

  6.   उत्तरे वेगानास.ऑर्ग म्हणाले

    हाय. प्रशिक्षण दिल्याबद्दल धन्यवाद. कृपया, आपण यावर तयार केलेल्या पुस्तकाची शिफारस करू शकता जे ताननबॉमचे "ऑपरेटिंग सिस्टम" नाही? आगाऊ धन्यवाद.
    ग्रीटिंग्ज