Ukulinganisa iLinus Torvalds: yenza eyakho inkqubo yokusebenza ukusuka ekuqaleni (VIII)

Sibuyela kuthotho lwezifundo ngendlela yokwenza eyethu inkqubo yokusebenza. Ndicinga ukuba ungasithanda kakhulu esi sahluko kuba ekugqibeleni sinokunxibelelana nenkqubo yethu yokusebenza. Namhlanje siza kufunda igalelo lekhibhodi. Kule nto, isikimu siyafana nesibali xesha. Kufuneka sisebenzise i-IRQs nangona kunjalo ke siza kuqala ngokufana nesibali xesha.

ND_IRQ_InstallHandler (1, & ND_Keyboard_Handler);

Isiphatho sethu sekhibhodi, nangona kunjalo, sinzima ngakumbi kuba sifunda izitshixo kwaye sizifaka kwisikhuseli.

ngaphandle "C" akukho ND_Keyboard_Handler (struct regs * r) {unsigned char scancode = ND :: Keyboard :: GetChar (); ukuba (scancode! = 255) {ND :: Screen :: PutChar (scancode); umtyaBuffer [umtyaPos] = skancode; umtyaPos ++; }}

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

Singajonga ukuba siwubiza njani umsebenzi obizwa ngokuba yi-ND :: Keyboard :: GetChar. Apho sifumana umlinganiswa kwaye ukuba ayingomlinganiswa ongenanto (apha ndisebenzise ama-255, kuya kufuneka sisebenzise inkqubo ebhetele) sibeka umlinganiswa kwiscreen kwaye siyigcina kwisikhombisi esilula seetshathi (oku kunjalo ngokuxhomekeke kuphuculo, inkqubo yangoku inokugcwala).

Itshati esayiniweyo :: Ikhibhodi :: GetChar () {unsigned char scancode; scancode = (itshathi engatyikitywanga) ND :: Amazibuko :: InputB (0x60); ukuba (scancode & ND_KEYBOARD_KEY_RELEASE) {buyela 255; } enye {buyela en_US [scancode]; }} itshathi * ND :: Ikhibhodi :: GetString () {ngelixa (umtyaBuffer [umtyaPos-1]! = '\ n') {} umtyaPos = 0; umtya wokubuyaBuffer; }

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

Apha siyabona ukuba isitshixo esicinezelweyo sifunyanwa njani. Ku-0x60 kuya kuhlala kukho iqhosha lokugqibela elicinezelweyo. Ngapha koko, inokufundwa ngokuthe ngqo ngaphandle kokusebenzisa i-IRQ, kodwa ke ngekhe sazi ukuba sichonga njani xa utshintsho lwenzekile. Apho sijonga ngo-AND ukusebenza ukuba ikhowudi esiyifumeneyo iyahambelana nesitshixo esele sikhutshiwe.

Kwimeko apho sibuyisa ama-255 (kuba siyakuhoya kamva) kwaye kungenjalo isitshixo sicofiwe. Kwimeko apho sibuyisa indawo yoluhlu olubizwa ngokuba yi-en_US. Loluphi ulwazi olu luqulathe olu luhlu? Olu luhlu yinto esinokuyibiza ngokuba yimephu ephambili okanye imephu yomlinganiswa. Njengoko usazi, iilwimi ezahlukeneyo zineekhibhodi ezahlukeneyo kwaye azixhaswanga njengoko zibhala ngaphezulu amaqhosha. Ke i-en_US iya kusinika isitshixo esihambelana nekhowudi nganye kwaye iya kusebenza kwikhibhodi yaseMelika.

itshathi engabhaliswanga en_US [128] = {0,27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0 ',' - ',' = ',' b ',' t ',' q ',' w ',' e ',' r ',' t ',' y ',' u ',' mna ' ',' o ',' p ',' [','] ',' \ n ', 0, / * Ctrl * /' a ',' s ',' d ',' f ',' g ',' 'h', 'j', 'k', 'l', ';', '\' ',' `, 0, / * Ekhohlo Shift * / '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', ',', ',', 0, / * Ishifti sasekunene * / '*', 0, / * Alt * / '', 0, / * Oonobumba abakhulu / / 0,0,0,0,0,0,0,0,0,0, / * F1-F10 amaqhosha * / 0, / * Num lock * / 0, / * Skrolela isitshixo * / 0, / * Isitshixo sasekhaya * / 0, / * Utolo oluphezulu * / 0, / * Iphepha phezulu * / '-', 0, / * Utolo lwasekhohlo * / 0, 0, / * Utolo lwasekunene * / '+', 0, / * Isiphelo sokugqibela * / 0, / * Utolo olusezantsi * / 0, / * Iphepha ezantsi * / 0, / * Faka isitshixo * / 0, / * Cofa isitshixo * / 0,0,0, 0, 0, 11, / * F12-F0 Keys * / XNUMX};

http://gist.github.com/bf52085aec05f3070b65

Kwakukho nomsebenzi ochaziweyo ofumana ibinzana. Injongo kukuba ngokulula ukufikelela kwimitya evela kwizicelo eziyifunayo, okwangoku kuphela. Ndithetha nge-NextShellLite, uhlobo oluncitshisiweyo lweqokobhe elizayo kwi-NextDivel. Injongo ye-NextShellLite kukubonelela ngeqokobhe elincitshisiweyo lokuvavanya ukusebenza okuncinci kancinci kancinci. Andizukubeka ikhowudi yegobolondo apha kodwa ndiyifakile ngaphakathi kwekhowudi ye-NextDivel.

Okwangoku ayisebenzi njengenkqubo eyahlukileyo kodwa njengomsebenzi obizwa ngokuba yi-kernel, ikakhulu kuba asikongezi ukhetho lokusebenzisa izinto ezinokuphunyezwa. Kwaye ke, eminye imifanekiso yendlela iqokobhe elisebenza ngayo nemisebenzi emitsha yokufaka ikhibhodi.

OkulandelayoShellLite


Shiya uluvo lwakho

Idilesi yakho ye email aziyi kupapashwa. ezidingekayo ziphawulwe *

*

*

  1. Uxanduva lwedatha: UMiguel Ángel Gatón
  2. Injongo yedatha: Ulawulo lwe-SPAM, ulawulo lwezimvo.
  3. Umthetho: Imvume yakho
  4. Unxibelelwano lwedatha: Idatha ayizukuhanjiswa kubantu besithathu ngaphandle koxanduva lomthetho.
  5. Ukugcinwa kweenkcukacha
  6. Amalungelo: Ngalo naliphi na ixesha unganciphisa, uphinde uphinde ucime ulwazi lwakho.

  1.   apho sitsho

    Umqeqeshi obalaseleyo! enkosi 🙂

  2.   IPopArch sitsho

    Inyani yile yokuba andizange ndilandele isifundo kuba kwinxalenye yokuqala indinike impazamo xa ndizama ukwenza kodwa andikhumbuli ukuba yeyiphi impazamo

  3.   Ikati yeLopez sitsho

    Uxolo ngokungazi kwam crass ... zibhalwa phi ezi khowudi? Ukusuka kwisiphelo sendlela?

    1.    AdrianArroyoStreet sitsho

      Iikhowudi ziyinxalenye yekhowudi yomthombo. Andiyibeki igqityiwe kuba kungenjalo iposti iyikhowudi kwaye akukho nto ichazayo. Ndikucebisa ukuba ufunde uqeqesho kwasekuqaleni ukuba ufuna ukuyilandela. Ungajonga ikhowudi yemithombo epheleleyo apha (http://github.com/AdrianArroyoCalle/next-divel)

  4.   kady sitsho

    Ukuphucuka kungabakho njani ukuze ukuphuphuma kungenzeki?

    1.    Ingxowa sitsho

      Kady, ngaba sele uyijongile ikhowudi yokugcina? Apho ubungakanani obuphezulu busekiwe, kunye nemisebenzi yokuyilawula, apho ungenza utshintsho kubungakanani okanye usebenzise indlela efanelekileyo yokukhulula i-buffer xa igcwele.
      Ndishiya ikhonkco ukuze ulijonge https://github.com/AdrianArroyoCalle/next-divel/blob/master/src/start/ND_Keyboard.cpp

  5.   nico sitsho

    Molo unomdla kakhulu, uza kuqhubeka nolu "luchungechunge" lweemodeli zeLinus Torvals?
    Ngaba ungacebisa incwadi, ulwazi ukuze ukwazi ukwenza ikernel ngolu hlobo?

    Saludos !!

  6.   IimpenduloVegan.Org sitsho

    Mholo. Enkosi ngesifundo. Nceda, ungacebisa incwadi malunga nale nto uyenzileyo ingeyiyo "iNkqubo yokuSebenza" yiTanenbaum? Enkosi kakhulu kwangaphambili.
    Ukubulisa