Bonvenon al alia afiŝo pri kiel krei nian propran operaciumon (Antaŭaj artikoloj en la serio: 1, 2, 3, 4, 5 y 6). Pasis longa tempo de la lasta afiŝo, ĉefe pro cimo, kiun mi trovis en tio, kion ni havas hodiaŭ. Ni vidos kiel pritrakti la horloĝon sur x86-arkitekturoj.
Antaŭe ni aktivigis la IRQojn senmarke, sed estis eta problemo, ĉar ni ne aktivigis ilin ĝuste kaj ni transdonis kromajn datumojn. Ni finfine riparas ĝin karlosorta kaj mi kaj mi povas plu komenti kiel daŭrigi.
Nu, la horloĝo estas IRQ, specife la unua. Por agordi ĝin ni uzos la funkcion, kiun ni antaŭe difinis, por generike instali la IRQ-ojn, la ND_IRQ_InstallHandler.
int ND_TIMER_TICKS = 0; malplena ND :: Tempigilo :: Fazo (int hz) {int dividanto = 1193180 / hz; ND :: Havenoj :: EligoB (0x43,0x36); ND :: Havenoj :: EligoB (0x40, dividanto & 0xFF); ND :: Havenoj :: EligoB (0x40, divizoro >> 8); } void ND :: Timer :: Atendu (int tiktakoj) {sensignaj longaj etiketoj; eticks = ND_TIMER_TICKS + tiktakoj; while (ND_TIMER_TICKS <etiketoj) {void ND :: Timer :: Setup () {ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Ekrano :: PutString ("\ nSetup-tempigilo ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); ND :: Ekrano :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); ND :: Ekrano :: PutString ("farita"); } extern "C" void ND_Timer_Handler (struct regs * r) {ND_TIMER_TICKS ++; if (ND_TIMER_TICKS% 18 == 0) {// ND :: Screen :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BROWN); // ND :: Ekrano :: PutString ("\ nUnu plian sekundon"); NI DEVU FARI FRESKAN ekranon}}
La kodo funkcias jene: la komenca sistemo vokas ND :: Tempilo :: Agordo, kiu vokas ND_IRQ_InstallHandler por enmeti en la unuan pozicion, la IRQ0, revokfunkcion kiam la evento okazas, tio estas ND_Timer_Handler tio pliigas la tokoj. Ĉar ni fiksis la horloĝan rapidon al 18 Hz, kiel ni vidos poste, se ni dividus ĝin per 18 kaj donus al ni entjeron, sekundo pasus.
La funkcio ND :: Tempigilo :: Fazo Ĝi helpas nin ĝustigi la rapidon de la temporizilo, tiu ekstravaganca nombro estas 1.19 MHz kiu estas komuna valoro. Nu, ni nomu ĉi tiun funkcion se ni volas ŝanĝi la rapidon de la temporizilo, defaŭlte ĝi iras al 18,22 Hz, aparta valoro, kiun iu certe decidis IBM kaj ĝi restis ĝis hodiaŭ.
La funkcio ND :: Tempigilo :: Atendu ĝi estas sufiĉe simpla, nur atendu per buklo dum ĝis la tokoj necesa por daŭrigi.
En la bildo ni povas vidi, ke se ni komentas la kodon ene de la ND_Timer_Handler, ni ricevas ĉi tion:
En la sekva ĉapitro ni vidos kiel legi klavaran enigon kaj iom krei ŝelo interagi kun nia sistemo. Kiel ĉiam, la kodo estas havebla en GitHub sub la permesilo GNU GPL v2.
14 komentoj, lasu la viajn
Tre interesa serio de lerniloj, persone mi ne vidis multajn pri kreado de Linuksa distribuo de nulo, kaj eĉ malpli en la hispana kaj tiel kompleta. Mi pensas, ke vi povas lerni multon de ĉi tio kaj tuj kiam mi havos tempon, mi esperas povi fari ĉi tiujn lernilojn.
Mi nur petas, ke vi ne senkuraĝiĝu kaj finu la lernilon, ĉar mi trovis multajn bonajn lernilojn, kiuj neniam finiĝis.
Saluton kaj dankon :).
Ĝi ne estas linuksa distribuo, ĝi estas kerno 😛.
Vi malpravas. Krei linux-distro ne implicas programi ion ajn, ekzemple en linux de nulo vi ne programas, kion vi faras estas instali (surbaze de kompilado), bazajn pakojn, kiuj formas distron. Ĉi tio estas tre malsama. Ĝi kreas vian propran operaciumon. Ĝi havas nenion komunan kun linukso. Jen kion torvalds siatempe inspiris per minix, kaj kun tiu varmega kaj populara diskuto inter torvalds kaj andrews. tanenbaum sur monolita kerno kontraŭ mikrokerno.
Saluton!
Dankon che. Ĝis nun mi ne multe atentis vian afiŝon, sed mi estas en projekto, do mi rigardos ilin.
Salutojn.
Indas mencii, ke aliaj lingvoj povas esti uzataj, kiel Objective-C (++), C ++, D aŭ Rust.
Ĉi tio estas en C ++, ne C. Tamen, estas malfacile vidi la diferencojn, ĉar multaj C ++-operatoroj postulas bibliotekan subtenon, kiel la nova kaj foriga operatoroj. Estus tre interese krei operaciumon en Rust. Fakte ekzistas IRC-kanalo dediĉita al operaciumoj sur Rust (# rust-osdev ĉe irc.mozilla.net). Ĉiu, kiu kompilas al maŝina kodo, vere indas, inkluzive Java, se ni uzas GCJ.
Jes, efektive, Rust estas tre interesa lingvo por operaciumoj, ĉar ĝi estas ne nur pli facile lernebla ol C aŭ C ++ (ĝi daŭre daŭras per kontinuaj ŝanĝoj, sed ĝi estas pli facila), sed ĝi estas multe pli sekura.
En la 70-aj jaroj estis sufiĉe ofte programi rekte sur la aparataro, sen OS.
Bonega ... nun mi nur bezonas kompreni: 3 ...
Saluton. Koran dankon pro ĉi tiuj artikoloj. Sed, se mi ne havas programan scion, mi pensas, ke mi ne faru ĝin, ĉu ne? Mi diras, se ne, estus "bona, kaj nun kion mi kopias kaj gluas?" ... kia domaĝo, ke mi ĉiam volis tiom multe scii programi kaj nenion, mi estas pli azeno!
Ne kulpigu vin, vi ne estas azeno. Unue ne ĉiuj programistoj scias kiel verki kernon, ĝi estas tre malgranda simpla tasko, kaj praktike ĝi estas pli granda. Ekzemple, ĉi tie la aŭtoro kreas senmarkajn pelilojn por la klavaro kaj la ekrano, manipulante la ekranan tabelon, kiu estas metodo tute ne uzata hodiaŭ. La tty en linukso hodiaŭ estas tre, tre kompleksa, kaj ne dependas de la ar86itektura arkitekturo havanta ekranan aron je dispono. Krome, multe de la kodo en C dependas de la arkitekturo, kiam la idealo estas krei la arkitekturan kodon en asemblero kaj ke la C-kodo funkcias sur iu ajn procesoro. Tamen mi ne malpliigas la aŭtoron, ĉar kerno akiras la trajtojn, kiujn hodiaŭ ni konsideras normalaj en linukso-kerno, ekzemple, ĝi ne estas facila tasko, kaj estu certaj, ke unu homo absolute ne kapablas fari ĝin. Por io la grandaj projektoj kiel linux, gcc, glibc, ktp, ne estas faritaj de unu homo, sed estas multaj kunlaborantoj.
Ankaŭ, se vi volas komenci programadon, vi havas sufiĉe multajn gvidilojn en la retejo, kvankam vi devas zorgi kaj elekti la bonajn gvidilojn. Mi komencis programi en linukso saltante en la naĝejon kun mia kapo kaj sen akvo (tio estas, kun la amata C-lingvo), kvankam nun mi havas iujn bazajn nociojn pri pitono (kiu ankaŭ estas tre bona lingvo). Estas iuj C-libroj, en kiuj vi rezignas sur paĝo 6 kiel multe da kapdoloro, sed pli ol libroj, ĉi tiuj aferoj estas akiritaj de sperto. Ĝi okazas kiel ĉe la OSI-retmodelo. La dokumentado pri la osi-modelo estas absolute nekomprenebla por la novulo, sed se vi trovas retejon kun bona klarigo pri la retaj tavoloj, vi rapide ricevas la konceptojn por trakti teknikajn dokumentojn kiel RFC-ojn.
Resume, ekzistas bonaj retejoj kaj manlibroj tie, temas pri pripensado kaj trovado de bona materialo.
salutoj
Saluton, post ĉiuj provoj solvi la "eraron: neniu plurnarta kaplinio trovis." kaj «eraro vi bezonas unue ŝarĝi la kernon», ĉar mi ne povis trovi ie ajn la solvon al la problemo de la unua artikolo, kiun iuj kiel mi havis ... jen la solvo, se ĝi funkcias por iu ...
Mi ne scias, ĉu mia teorio pri la kaŭzo de la eraro ĝustas, sed ĉiuokaze la demando estas, ke kiam vi kompilis la dosierojn en 32-bita operaciumo, ĝi ne generis la eraron, sed ĉar mi havas 64-bitan funkciadon sistemo (Gnu / Linukso Debian 7), kaj ke, kiam mi kompilis kaj testis, mi ricevis la eraron "neniu multbota kaplinio trovita", kaj estas dubo, tiam laŭ mi la eraro ŝuldiĝas al la ĉirkaŭaĵo aŭ arkitekturo de la operaciumo en kiu ni kompilas niajn dosierojn ... kaj bone, kion mi faris, estis kompili miajn dosierojn, specifante la ĉirkaŭaĵon aŭ arkitekturon de 32 bitoj ..
* sudo kiel -o kernel.o -c kernel.asm -32
* sudo gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -freestanding -m32
* sudo gcc -m32 -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -stare staranta
La stranga afero estas, ke mi havas iujn dubojn, hahaha, tiam la operaciumo, kiun ni kreas paŝon post paŝo, estas por x86-arkitekturo aŭ ĉu mi eraras ajajaj ...
PS: iu por helpi min pri la dubo, kaj senkulpigi iujn literumajn erarojn aŭ mian malbonan esprimon, kaj nu, mi ne estas perfekta, do «Perfekteco havas sian prezon» .... Kaj plej grave, kopiu 32-bitan operaciumon, sanktan solvon. … .Hahaha
Geniulo! Mi tre volis fari ĉi tiun lernilon kaj mi ekkomencis kun tiu eraro haha
Gratulon, ĝi estas bonega kontribuo. Ekde nun mi dividas kun vi, ke via bona laboro per mi kaj aliaj plilongiĝos;
salutoj