Velkommen til et andet indlæg om hvordan man opretter vores eget operativsystem (Tidligere artikler i serien: 1, 2, 3, 4, 5 y 6). Det har været lang tid siden sidste indlæg, hovedsagelig på grund af en fejl, som jeg fandt i det, vi har i dag. Vi vil se hvordan man håndterer uret på x86-arkitekturer.
Tidligere havde vi aktiveret IRQ'erne på en generisk måde, men der var et lille problem, da vi ikke aktiverede dem korrekt, og vi sendte ekstra data. Vi ordner det endelig carlosorta og jeg og jeg kan fortsætte med at kommentere, hvordan vi fortsætter.
Uret er en IRQ, specifikt den første. For at konfigurere det bruger vi den funktion, som vi definerede ovenfor, til generelt at installere IRQ'erne, ND_IRQ_InstallHandler.
int ND_TIMER_TICKS = 0; ugyldigt ND :: Timer :: Fase (int hz) {int divisor = 1193180 / hz; ND :: Porte :: OutputB (0x43,0x36); ND :: Porte :: OutputB (0x40, divisor & 0xFF); ND :: Porte :: OutputB (0x40, divisor >> 8); } ugyldigt ND :: Timer :: Vent (int kryds) {usignerede lange eticks; eticks = ND_TIMER_TICKS + flåter; mens (ND_TIMER_TICKS <eticks) {ugyldig ND :: Timer :: Opsætning () {ND :: Skærm :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BLACK); ND :: Skærm :: PutString ("\ nSetup timer ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); ND :: Skærm :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); ND :: Skærm :: PutString ("færdig"); } ekstern "C" ugyldig ND_Timer_Handler (struct regs * r) {ND_TIMER_TICKS ++; hvis (ND_TIMER_TICKS% 18 == 0) {// ND :: Skærm :: SetColor (ND_SIDE_FOREGROUND, ND_COLOR_BROWN); // ND :: Skærm :: PutString ("\ nEn sekund mere"); VI SKAL GØRE EN OPFRISKT SKÆRM}}
Koden kører som følger: initialiseringssystemet kalder op ND :: Timer :: Opsætning, der ringer ND_IRQ_InstallHandler at indsætte i den første position, IRQ0, en tilbagekaldsfunktion, når begivenheden finder sted, dvs. ND_Timer_Handler der øger flåter. Da vi har indstillet urets hastighed til 18 Hz, som vi vil se senere, hvis vi delte den med 18 og gav os et heltal, ville et sekund passere.
Funktionen ND :: Timer :: Fase Det hjælper os med at justere hastigheden på timer, det ekstravagante tal er 1.19 MHz, hvilket er en fælles værdi. Denne funktion skal kaldes, hvis vi vil ændre hastigheden på timer, som standard går det til 18,22 Hz, en ejendommelig værdi, som nogen skal have besluttet inden for IBM og det har været den dag i dag.
Funktionen ND :: Timer :: Vent det er ret simpelt, bare vent med en løkke mens indtil flåter nødvendigt for at fortsætte.
På billedet kan vi se, at hvis vi kommenterer koden inde i ND_Timer_Handler, får vi dette:
I det næste kapitel vil vi se, hvordan man læser tastaturinput og laver lidt Shell at interagere med vores system. Som altid koden er tilgængelig i GitHub under licensen GNU GPL v2.
Meget interessant række tutorials, personligt havde jeg ikke set mange om at oprette en Linux-distribution fra bunden, og endnu mindre på spansk og så komplet. Jeg tror, du kan lære meget af dette, og så snart jeg har tid, håber jeg at være i stand til at gøre disse tutorials.
Alt hvad jeg beder om er, at du ikke bliver modløs og afslutter selvstudiet, da jeg har fundet mange gode tutorials, der aldrig er færdige.
Hilsner og tak :).
Det er ikke en Linux-distribution, det er en kerne 😛.
Du tager fejl. Oprettelse af en linux distro indebærer ikke programmering af noget, for eksempel i en linux fra bunden programmerer du ikke, hvad du gør er at installere (baseret på kompilering), grundlæggende pakker, der udgør en distro. Dette er meget anderledes. Det opretter dit eget operativsystem. Det har intet at gøre med linux. Dette gjorde torvalds i sin tid inspireret af minix og med den heftige og populære diskussion mellem torvalds og andrews. tanenbaum på monolitisk kerne vs mikrokernel.
Saludos!
Tak che. Indtil nu har jeg ikke været meget opmærksom på dit indlæg, men jeg er i et projekt, så jeg vil se på dem.
Greetings.
Værd at nævne, at andre sprog kan bruges, såsom Objective-C (++), C ++, D eller Rust.
Dette er i C ++, ikke C. Det er imidlertid vanskeligt at se forskellene, da mange C ++ -operatører kræver biblioteksopbakning, såsom de nye og sletningsoperatorer. Det ville være meget interessant at lave et operativsystem i Rust. Der er faktisk en IRC-kanal dedikeret til operativsystemer på Rust (# rust-osdev på irc.mozilla.net). Enhver, der kompilerer til maskinkode, er virkelig det værd, inklusive Java, hvis vi bruger GCJ.
Ja, ja, Rust er et meget interessant sprog for operativsystemer, fordi det ikke kun er lettere at lære end C eller C ++ (det fortsætter stadig med kontinuerlige ændringer, men det er lettere), men det er meget mere sikkert.
I 70'erne var det ret almindeligt at programmere direkte på hardwaren uden operativsystem.
Fremragende ... nu skal jeg bare forstå: 3 ...
Hej. Mange tak for disse artikler. Men hvis jeg ikke har programmeringsviden, hvad bedre er det ikke at gøre det? Jeg mener, hvis ikke det ville være et "godt, og hvad skal jeg kopiere og indsætte nu?" ... en skam, jeg har altid ønsket at vide, hvordan man programmerer så meget og intet, jeg er mere et æsel!
Giv ikke dig selv skylden, du er ikke noget æsel. Til at begynde med ved ikke alle programmører, hvordan man skriver en kerne, det er en meget lille simpel opgave, og i praksis er den større. For eksempel opretter forfatteren her generiske drivere til tastaturet og skærmen og manipulerer skærmarrayet, hvilket er en metode, der slet ikke bruges i dag. Tty i linux i dag er meget, meget kompleks og afhænger ikke af, at x86-arkitekturen har et skærmarray til rådighed. Derudover afhænger meget af C-koden af arkitekturen, når det ideelle er at lave arkitekturkoden i samler, og at C-koden fungerer på enhver processor. Dog forringer jeg ikke forfatteren, fordi en kerne tilegner sig de egenskaber, som vi i dag anser for normale i en linux-kerne, for eksempel er det ikke en let opgave, og vær sikker på at en enkelt person er absolut ude af stand til at gøre det. For noget er de store projekter som linux, gcc, glibc osv ikke lavet af en enkelt person, men der er mange samarbejdspartnere.
Hvis du også vil starte programmeringen, har du en hel del guider på nettet, selvom du skal være forsigtig og vælge de gode guider. Jeg begyndte at programmere i linux med at hoppe i puljen med hovedet og uden vand (det vil sige med det elskede C-sprog), selvom jeg nu har nogle grundlæggende forestillinger om python (hvilket også er et meget godt sprog). Der er nogle C-bøger, hvor du giver op på side 6 så meget af hovedpinen, du får, men mere end bøger erhverves disse ting af erfaring. Det sker som med OSI-netværksmodellen. Dokumentationen om osi-modellen er helt umulig at forstå for den nye, men hvis du finder et sted med en god forklaring på netværkslagene, får du hurtigt koncepterne til at håndtere tekniske dokumenter som f.eks. RFC'er.
Kort sagt, der er gode hjemmesider og manualer derude, det handler om at komme ned til det og finde godt materiale.
hilsen
Hej, trods alt forsøg på at løse "fejlen: ingen multiboot-header fundet." og «fejl, du skal indlæse kernen først», da jeg ikke kunne finde løsningen på problemet med den første artikel, som nogle som mig havde ... her er løsningen, hvis den fungerer for nogen ...
Jeg ved ikke, om min teori om årsagen til fejlen er korrekt, men alligevel er spørgsmålet, at når jeg kompilerer filerne i et 32-bit operativsystem, genererede det ikke fejlen, men da jeg har en 64-bit operativsystem (Gnu / Linux Debian 7), og at ved kompilering og test kastede fejlen "ingen multiboot header fundet", og der er tvivl, så skyldes fejlen efter min opfattelse miljøet eller arkitekturen i operativsystemet system, hvor vi kompilerer vores filer ... og hvad jeg gjorde, er at kompilere mine filer ved at specificere 32-bit miljø eller arkitektur ..
* sudo som -o kernel.o -c kernel.asm -32
* sudo gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -fritstående -m32
* sudo gcc -m32 -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -fritstående
Den underlige ting er, at jeg er i tvivl hahaha, så er det operativsystem, som vi opretter trin for trin, for en x86-arkitektur, eller har jeg forkert ajajaj….
PS: nogen til at hjælpe mig med tvivlen og undskylde stavefejl eller mit dårlige udtryk, og jeg er ikke perfekt, så «Perfektion har sin pris» ... Og vigtigst af alt skal du efterligne et 32-bit operativsystem, hellig løsning … .Hahaha
Geni ! Jeg ville virkelig gøre denne tutorial, og jeg kom ned i starten med den fejl haha
Tillykke, det er et fremragende bidrag. Fra nu af deler jeg med dig, at dit gode arbejde gennem mig og andre vil blive udvidet;
hilsen