લિનુસ ટોરવાલ્ડ્સનું અનુકરણ: શરૂઆતથી તમારી પોતાની operatingપરેટિંગ સિસ્ટમ બનાવો (VIII)

આપણે આપણી operatingપરેટિંગ સિસ્ટમ કેવી રીતે બનાવવી તેના પરના ટ્યુટોરિયલ્સની શ્રેણીમાં પાછા ફરો. હું માનું છું કે તમને આ પ્રકરણ ખૂબ ગમશે કારણ કે અમે આખરે અમારી operatingપરેટિંગ સિસ્ટમ સાથે સંપર્ક કરી શકીએ. આજે આપણે કીબોર્ડ ઇનપુટ વાંચીશું. આ માટે, યોજના ટાઈમર જેવી જ છે. અમારે કોઈપણ રીતે આઈઆરક્યુનો ઉપયોગ કરવો પડશે જેથી અમે ટાઈમરની જેમ જ પ્રારંભ કરીશું.

ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);

અમારું કીબોર્ડ હેન્ડલર, જોકે, કંઈક વધુ જટિલ છે કારણ કે આપણે કીઓ વાંચીએ છીએ અને તેને બફરમાં જમા કરીએ છીએ.

બાહ્ય "સી" રદબાતલ ND_Keyboard_Handler (સ્ટ્રક્ટ regs * r) {હસ્તાક્ષર કર્યા વિના ચાર સ્કેનકોડ = ND :: કીબોર્ડ :: ગેટચાર (); if (સ્કેનકોડ! = 255) {એનડી :: સ્ક્રીન :: પુટચાર (સ્કેનકોડ); શબ્દમાળા બફર [શબ્દમાળા] = સ્કેનકોડ; શબ્દમાળાઓ ++; }

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

આપણે તપાસ કરી શકીએ કે આપણે એનડી :: કીબોર્ડ :: ગેટચાર નામના ફંક્શનને કેવી રીતે ક callલ કરીએ છીએ. ત્યાં આપણે પાત્ર પ્રાપ્ત કરીએ છીએ અને પછી જો તે ખાલી પાત્ર નથી (અહીં મેં 255 નો ઉપયોગ કર્યો છે, આપણે વધુ સારી સિસ્ટમનો ઉપયોગ કરવો પડશે) અમે પાત્રને સ્ક્રીન પર મૂકીએ છીએ અને તેને અક્ષરોના સરળ બફરમાં સંગ્રહિત કરીએ છીએ (આ પણ સુધારણાને આધિન છે, વર્તમાન સિસ્ટમ ઓવરફ્લો થઈ શકે છે).

એન સાઇન્ડ ચાર એનડી :: કીબોર્ડ :: ગેટચાર () {સહી વગરનાં ચાર સ્કેનકોડ; સ્કેનકોડ = (સહી ન કરેલા ચાર) એનડી :: બંદરો :: ઇનપુટબી (0x60); જો (સ્કેનકોડ & ND_KEYBOARD_KEY_RELEASE) {પરત 255; } બીજું {પરત en_US [સ્કેનકોડ]; }} ચાર * એનડી :: કીબોર્ડ :: ગેટસ્ટ્રિંગ () {જ્યારે (શબ્દમાળા બફર [શબ્દમાળા પોસ -1]! = '\ n') {} સ્ટ્રિંગપોસ = 0; રીટર્ન સ્ટ્રિંગબફર; }

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

અહીં આપણે જોઈ શકીએ છીએ કે દબાયેલી ચાવી કેવી રીતે પ્રાપ્ત થાય છે. 0x60 પર હંમેશાં દબાવવામાં આવતી છેલ્લા કી રહેશે. હકીકતમાં, IRQ નો ઉપયોગ કર્યા વિના તે સીધા વાંચી શકાય છે, પરંતુ પછી જ્યારે ફેરફાર થયો છે ત્યારે ઓળખ કેવી રીતે કરવી તે આપણે જાણતા નથી. ત્યાં અમે એએનએડીએ (O& ઓપરેશન) તપાસીએ છીએ કે અમને પ્રાપ્ત કરેલો કોડ રીલીઝ થયેલ કી સાથે સંબંધિત છે.

તે સ્થિતિમાં અમે 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, / * કેપ્સ લ lockક * / 0,0,0,0,0,0,0,0,0,0, / * F1-F10 કીઓ * / 0, / * સંખ્યા લ *ક * / 0, / * સ્ક્રોલ લ *ક * / 0, / * હોમ કી * / 0, / * ઉપર એરો * / 0, / * પેજ અપ * / '-', 0, / * ડાબો એરો * / 0, 0, / * જમણો એરો * / '+', 0, / * અંત કી * / 0, / * ડાઉન એરો * / 0, / * પેજ ડાઉન * / 0, / * કી શામેલ કરો * / 0, / * કી કા Deleteી નાખો * / 0,0,0, 0, 0, 11, / * એફ 12-એફ 0 કી * / XNUMX};

http://gist.github.com/bf52085aec05f3070b65

ત્યાં એક વ્યાખ્યાયિત કાર્ય પણ હતું જે એક વાક્ય મેળવ્યો. ઉદ્દેશ્ય ફક્ત તે જ એપ્લિકેશનની જરૂરિયાતવાળા એપ્લિકેશનમાંથી વધુ સરળતાથી સહેલાઇથી accessક્સેસ કરવાનો છે. હું નેક્સ્ટશેલલાઈટ વિશે વાત કરું છું, નેક્સ્ટડેવેલ પાસેના સંભવિત ભાવિ શેલનું ઓછું સંસ્કરણ. નેક્સ્ટશેલલાઈટનો ઉદ્દેશ ફક્ત નવી સુવિધાઓનું ધીમે ધીમે પરીક્ષણ કરવા માટે ઘટાડેલા શેલ પ્રદાન કરવાનો છે. હું અહીં શેલ કોડ મૂકવા જઇ રહ્યો નથી પણ મેં તેને નેક્સ્ટડેવિલ કોડમાં સમાવ્યો છે.

આ ક્ષણે તે એક અલગ પ્રોગ્રામ તરીકે કામ કરશે નહીં પણ કર્નલ દ્વારા કહેવાતા ફંક્શન તરીકે, મુખ્યત્વે કારણ કે આપણે હજી એક્ઝેક્યુટેબલને ચલાવવાનો વિકલ્પ ઉમેર્યો નથી. અને અલબત્ત, નવા કીબોર્ડ ઇનપુટ કાર્યો સાથે શેલ કેવી રીતે કાર્ય કરે છે તેના કેટલાક ચિત્રો.

NextShellLite


8 ટિપ્પણીઓ, તમારી છોડી દો

તમારી ટિપ્પણી મૂકો

તમારું ઇમેઇલ સરનામું પ્રકાશિત કરવામાં આવશે નહીં. આવશ્યક ક્ષેત્રો સાથે ચિહ્નિત થયેલ છે *

*

*

  1. ડેટા માટે જવાબદાર: મિગ્યુએલ gelંજેલ ગેટóન
  2. ડેટાનો હેતુ: નિયંત્રણ સ્પામ, ટિપ્પણી સંચાલન.
  3. કાયદો: તમારી સંમતિ
  4. ડેટાની વાતચીત: કાયદાકીય જવાબદારી સિવાય ડેટા તૃતીય પક્ષને આપવામાં આવશે નહીં.
  5. ડેટા સ્ટોરેજ: cસેન્ટસ નેટવર્ક્સ (ઇયુ) દ્વારા હોસ્ટ કરેલો ડેટાબેઝ
  6. અધિકાર: કોઈપણ સમયે તમે તમારી માહિતીને મર્યાદિત, પુન recoverપ્રાપ્ત અને કા deleteી શકો છો.

  1.   ડેરિઓ જણાવ્યું હતું કે

    ઉત્તમ શિક્ષક! આભાર 🙂

  2.   પોપઆર્ક જણાવ્યું હતું કે

    સત્ય એ છે કે મેં આ ટ્યુટોરિયલને ક્યારેય અનુસર્યું નહીં કારણ કે કમ્પાઇલ કરવાનો પ્રયાસ કરતી વખતે પ્રથમ ભાગમાં તે મને ભૂલ આપી હતી પરંતુ મને યાદ નથી કે તે કઈ ભૂલ હતી

  3.   લોપેઝની બિલાડી જણાવ્યું હતું કે

    મારી ક્રેશ અજ્oranceાનતા બદલ માફ કરશો ... આ કોડ્સ ક્યાંથી લખાયેલા છે? ટર્મિનલ માંથી ??

    1.    એડ્રિયનઆરોયોસ્ટ્રીટ જણાવ્યું હતું કે

      કોડ્સ સ્રોત કોડનો એક ભાગ છે. હું તેને પૂર્ણ મૂકતો નથી કારણ કે અન્યથા પોસ્ટ એ બધા કોડ છે અને કંઇ સમજૂતી નથી. હું તમને ભલામણ કરું છું કે જો તમે તેને અનુસરવા માંગતા હોવ તો તમે શરૂઆતથી જ ટ્યુટોરિયલ્સ વાંચો. તમે અહીં સંપૂર્ણ સ્રોત કોડ પણ ચકાસી શકો છો (http://github.com/AdrianArroyoCalle/next-divel)

  4.   કેડી જણાવ્યું હતું કે

    સુધારણા કેવી રીતે થશે જેથી ઓવરફ્લો ન થાય?

    1.    પ્લોક જણાવ્યું હતું કે

      કેડી, શું તમે હજી સુધી રીપોઝીટરી કોડ ચકાસી લીધો છે? ત્યાં મહત્તમ કદ સ્થાપિત થયેલ છે, તેમજ તેના નિયંત્રણ માટેના કાર્યો, ત્યાં તમે કદમાં ફેરફાર કરી શકો છો અથવા બફરને સંતૃપ્ત થાય ત્યારે તેને મુક્ત કરવાની એક વ્યાજબી રીતનો અમલ કરી શકો છો.
      હું તમને તે તપાસો માટે લિંક છોડું છું https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   નિકો જણાવ્યું હતું કે

    નમસ્તે ખૂબ જ રસપ્રદ, શું તમે એમ્યુલેટિંગ લિનુસ ટોર્વોલ્સની આ «શ્રેણી with સાથે ચાલુ રાખશો?
    તમે આ જેવા કર્નલ બનાવવા માટે સક્ષમ થવા માટે કોઈપણ પુસ્તક, માહિતીની ભલામણ કરી શકો છો?

    સલાડ !!

  6.   જવાબો વેગનાસ.ઓઆરજી જણાવ્યું હતું કે

    હાય. ટ્યુટોરીયલ માટે આભાર. કૃપા કરી, તમે આના પર કોઈ પુસ્તકની ભલામણ કરી શકો છો કે જે તમે બનાવેલ છે જે તનેનબumમ દ્વારા "ratingપરેટિંગ સિસ્ટમ્સ" નથી? અગાઉથી ખૂબ ખૂબ આભાર.
    શુભેચ્છાઓ.