„Linux“ branduolys

„Linux“ įrenginio tvarkyklės pamoka

„Linux“ įrenginio tvarkyklės pamoka

„Linux“ įrenginio tvarkyklė Pamoka Pradedantiesiems


„Linux“ operacinėje sistemoje yra 3 pagrindiniai skyriai: „Root File System“, „Branduolys“ ir „Bootloader“.

Šaknų failų sistema:

Šioje OS dalyje yra programų dvejetainiai failai, bibliotekos, scenarijai, konfigūracijos failai ir branduolio įkeliami modulio failai ir kt

Branduolys:

Ši dalis yra OS pagrindas, branduolys yra atsakingas už visų operacijų, reikalingų OS paleisti, valdymą, pvz., Atminties valdymą, procesų valdymą ir įvesties / išvesties aparatinės įrangos operacijas ir kt

Įkrovos krautuvas:

Tai yra pirmoji dalis, kurią centrinis procesorius turi atlikti paleidimo metu. „Bootloader“ yra šaltinio kodas, kad būtų galima inicijuoti sistemą ir pradėti vykdyti branduolį, ir komandos, skirtos derinti ir modifikuoti branduolio aplinką, taip pat yra komandos, skirtos atsisiųsti ir atnaujinti branduolį ir sistemos vaizdus į „flash“ atmintį.

Tvarkyklės veikia kaip tiltas tarp aparatūros ir vartotojo programos, branduolys pateikia mechanizmą, vadinamą sistemos iškvietimais, kad galėtų kalbėtis su branduoliu.  „Linux“ tvarkykles galima diegti dviem būdais: viena yra tvarkykles galima kompiliuoti kaip branduolio dalį, kita - tvarkykles galima kompiliuoti kaip modulius ir įkelti vykdymo metu.

Pradėkime nuo paprasto „Hello world“ branduolio modulio. Čia yra paprasto „Hello world“ branduolio modulio šaltinio kodas.

Sveiki.c

# įtraukti // reikalingas modulio_init ir modulio_eiliui # įtraukti // reikalinga KERN_INFO #include // reikia makrokomandoms __init hw_init (void) printk (KERN_INFO "Sveikas pasaulis \ n"); grąžinti 0;  void __exit hw_exit (void) printk (KERN_INFO "Iki pasimatymo pasaulio \ n");  MODULE_LICENSE ("GPL"); module_init (hw_init); module_exit (hw_exit); 

„Makefile“

obj-m: = labas.o visi: make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) moduliai švarūs: make -C / lib / modules / $ (shell uname -r) / build M = $ ( PWD) švarus 

Sukurkite aplanką pavadinimu Sveiki ir tada padėkite Sveiki.c ir „Makefile“ jo viduje. Atidaryk terminalas programą ir pakeiskite katalogą į labas. Dabar paleiskite komandą padaryti ir jei jis bus sėkmingas, jis turėtų generuoti įkeliamą branduolio modulio failą, vadinamą Sveiki.ko.

Kai paleisite „make“, jei gausite išvestį padaryti: nieko nereikia daryti „visiems“.  Tada įsitikinkite, kad „Makefile“ įvedėte skirtuką (be tarpų) prieš padarydami -C. Jei „make“ pavyksta, turėtumėte gauti išvestį, kaip parodyta žemiau.

make [1]: Įvedamas katalogas '/ usr / src / linux-headers-3.13.0–128-bendrasis „CC [M] / home / John / Desktop / labas / labas.o Statybos moduliai, 2 etapas. MODPOST 1 moduliai CC / home / John / Desktop / hello / hello.mod.o LD [M] / home / John / Desktop / mvs / pers / kern / labas / labas.ko make [1]: išeinant iš katalogo '/ usr / src / linux-headers-3.13.0–128 - bendrasis “ 

Dabar patikrinkime modulį įkeldami jį į branduolį. Norint pakrauti ir iškrauti branduolio modulius, reikia turėti naudotojo leidimą. Norėdami įkelti branduolio modulį į branduolį, naudokite šią komandą.

sudo insmod labas.ko

Norėdami pamatyti „printk“ pranešimą, turite patikrinti branduolio žurnalą, norėdami patikrinti branduolio žurnalą naudokite šią komandą.

dmesg

Ši komanda išves branduolio žurnalo pranešimus, pabaigoje turėtumėte pamatyti, kad mūsų pranešimas Labas pasauli atspausdinta.

Norėdami iškrauti modulį, naudokite šią komandą.

sudo rmmod labas

Norėdami pamatyti „printk“ pranešimą dar kartą naudokite komandą „dmesg“, o branduolio žurnale galite pamatyti mūsų pranešimą Iki pasaulio.

Dabar leiskite mums suprasti šaltinio kodą.

Sveiki.c

Norėdami pradėti rašyti branduolio tvarkyklę, galite naudoti bet kurį pasirinktą redaktorių ar ide, bet dažniausiai branduolio kūrėjai nori naudoti vi redaktorius.

Kiekviename branduolio modulyje turėtų būti antraštės failas „Linux“ / modulis.h tai turi deklaracijas ir makrokomandas branduolio funkcijoms, tokioms kaip module_init ir module_exit ir pan.  Dvi būtiniausios branduolio tvarkyklės funkcijos yra „module_init“ ir „module_exit“ funkcijos. Funkcija, kurios žymeklis perduodamas moduliui_init, bus vykdoma, kai įkelsime modulį į branduolį, o funkcija, kurios žymeklis bus perduotas moduliui_exit, bus iškviesta iškraunant arba pašalinant modulį iš branduolio.

Branduolio viduje derinimui ir žurnalo spausdinimui mes naudojame printk funkcija, panaši į „printf“ funkciją, kurią naudojame programoje. Norėdami nurodyti žurnalo lygį, galite naudoti tokias makrokomandas kaip KERN_INFO, KERN_ERR ir kt.

Jei rašome tvarkyklę, kad galėtume pasikalbėti su konkrečia aparatine įranga, „init“ funkcija turėtų turėti kodą aparatinei įrangai inicializuoti prieš pradedant ją naudoti, o išėjimo funkcija turėtų turėti kodą išvalyti išteklius (dinaminę atmintį ir pan.), Kuriuos naudojome tvarkyklėje. prieš išeinant iš branduolio.

Šiame pavyzdyje mes tiesiog spausdiname derinimo pranešimus „Init“ ir „exit“ funkcijose.

„Makefile“

Norėdami sukurti branduolio modulį, turime parašyti „Makefile“, kuris padės padaryti  kaip sudaryti modulį. Sintaksė obj-m yra naudojamas norint pasakyti branduolio makefile, kad tvarkyklę reikia kompiliuoti kaip modulį, naudojant nurodytą objekto failą. Kai tiesiog paleisite komandą padaryti tada kontrolė ateina į visi: skyriuje „Makefile“ ir jei vykdote komandą padaryti švarų tada valdymas pereina į švarus: skyriuje „Makefile“. Iš šio „Makefile“ mes iš tikrųjų vykdome branduolį branduolio šaltinio kataloge naudodami parinktį -C. Įsitikinkite, kad jūsų sistemoje yra įdiegtas branduolio šaltinio katalogas. Šiame pavyzdyje mes naudojome komandą uname -r  norėdami rasti dabartinę savo sistemos Linux branduolio versiją.

Mes naudojome parinktį M = $ (PWD), norėdami nurodyti branduolio makefile, kad tvarkyklės šaltinis yra dabartiniame darbo kataloge, ir mes nurodome žodį moduliai liepti branduolio makefile tiesiog kurti modulius, o ne kurti visą branduolio šaltinio kodą. Į švarus: skyriuje „Makefile“ liepiame branduolio makefile išvalyti objekto failus, sukurtus šiam moduliui sukurti.

Tai turėtų pradėti kompiliuoti ir paleisti pirmąjį branduolio modulį.

„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....
„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...
Vidutinis pelės mygtukas neveikia sistemoje „Windows 10“
The vidurinis pelės mygtukas padeda naršyti ilgus tinklalapius ir ekranus, kuriuose yra daug duomenų. Jei tai sustos, gerai, jūs naudosite klaviatūrą ...