आम्ही स्वतःची ऑपरेटिंग सिस्टम कशी तयार करावी यासाठी शिकवण्याच्या मालिकांकडे परत जाऊ. मला असे वाटते की आपल्याला हा धडा खूप आवडेल कारण आम्ही शेवटी आमच्या ऑपरेटिंग सिस्टमसह संवाद साधू शकतो. आज आपण कीबोर्ड इनपुट वाचू. त्यासाठी ही योजना टायमरप्रमाणेच आहे. आम्हाला तरीही आयआरक्यू वापरावे लागेल जेणेकरुन आम्ही टाइमर प्रमाणेच प्रारंभ करू.
एनडी_आयआरक्यू_इन्स्टॉलहँडलर (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 चा उद्देश हळूहळू नवीन कार्यक्षमता तपासण्यासाठी कमी शेल प्रदान करणे आहे. मी येथे शेल कोड ठेवणार नाही परंतु मी हा नेक्स्टडिव्हल कोडमध्ये समाविष्ट केला आहे.
याक्षणी हे स्वतंत्र प्रोग्राम म्हणून कार्य करत नाही परंतु कर्नलद्वारे कार्य केलेल्या फंक्शनच्या रूपात कार्य करते, मुख्यतः कारण आम्ही अद्याप एक्झिक्युटेबल्स चालविण्याचा पर्याय जोडला नाही. आणि अर्थातच, नवीन कीबोर्ड इनपुट फंक्शन्ससह शेल कसे कार्य करते त्याची काही छायाचित्रे.
उत्कृष्ट शिक्षक! धन्यवाद 🙂
सत्य हे आहे की मी ट्यूटोरियलचे कधीच अनुसरण केले नाही कारण संकलित करण्याचा प्रयत्न करताना पहिल्या भागात मला त्रुटी मिळाली परंतु ती कोणती त्रुटी होती हे मला आठवत नाही
माझ्या क्रॅस अज्ञानाबद्दल क्षमस्व ... हे कोड कोठून लिहिले गेले आहेत? टर्मिनल मधून ??
कोड स्त्रोत कोडचा एक भाग आहेत. मी ते पूर्ण ठेवत नाही कारण अन्यथा पोस्ट सर्व कोड आहे आणि काहीही स्पष्टीकरण नाही. आपण शिफारस करतो की आपण पाठाचे अनुसरण करू इच्छित असल्यास आपण सुरुवातीपासूनच ट्यूटोरियल्स वाचा. आपण येथे संपूर्ण स्त्रोत कोड देखील तपासू शकता (http://github.com/AdrianArroyoCalle/next-divel)
अतिप्रवाह उद्भवू नये म्हणून सुधारणा कशी होईल?
काडी, आपण अद्याप रेपॉजिटरी कोड तपासला आहे? तेथे जास्तीत जास्त आकार स्थापित केला जाईल, तसेच त्यावर नियंत्रण ठेवण्यासाठी कार्ये देखील तेथे आपण आकारात बदल करू शकता किंवा बफर संतृप्त झाल्यावर मुक्त करण्याचा एक वाजवी मार्ग अंमलात आणू शकता.
ती तपासण्यासाठी मी तुमच्यासाठी लिंक सोडतो https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp
हॅलो अतिशय रंजक, आपण इनुलेटिंग लिनस टॉर्व्हल्सची ही «मालिका? सुरू ठेवणार आहात काय?
आपण अशा प्रकारे कर्नल तयार करण्यासाठी काही पुस्तक, माहितीची शिफारस करू शकता?
ग्रीटिंग्ज!
हाय. प्रशिक्षण दिल्याबद्दल धन्यवाद. कृपया, आपण यावर तयार केलेल्या पुस्तकाची शिफारस करू शकता जे ताननबॉमचे "ऑपरेटिंग सिस्टम" नाही? आगाऊ धन्यवाद.
ग्रीटिंग्ज