Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows 10
  • Izrada operacijskog sustava baziranog na jezgri Linuxa. Od nule

Izrada operacijskog sustava baziranog na jezgri Linuxa. Od nule

Ova serija članaka posvećena je programiranju niske razine, odnosno arhitekturi računala, operativnim sustavima, programiranju na asembleru i srodnim područjima. Do sada se pisanjem bave dva habrauzera - i. Za mnoge srednjoškolce, studente i profesionalne programere ove se teme pokazuju vrlo teškim za naučiti. Postoji mnogo literature i tečajeva o programiranju niske razine, ali je od njih teško dobiti cjelovitu i cjelovitu sliku. Teško je, nakon čitanja jedne ili dvije knjige o asembleru i operacijskim sustavima, barem općenito zamisliti kako zapravo funkcionira ovaj složeni sustav željeza, silicija i mnogih programa – računalo.

Svatko rješava problem učenja na svoj način. Netko čita puno literature, netko se pokušava brzo prebaciti na praksu i usput razumjeti, netko pokušava objasniti prijateljima sve što uči. I odlučili smo kombinirati ove pristupe. Dakle, u ovom tečaju članaka pokazat ćemo korak po korak kako napisati jednostavan operativni sustav. Članci će biti pregledne prirode, odnosno neće sadržavati iscrpne teorijske podatke, no uvijek ćemo nastojati dati poveznice na dobre teorijske materijale i odgovoriti na sva pitanja koja se pojave. Nemamo jasan plan, pa ćemo usput donijeti mnoge važne odluke, uzimajući u obzir vaše povratne informacije.

Možda ćemo proces razvoja namjerno odvesti u zastoj kako bismo vama i sebi omogućili da u potpunosti shvatimo sve posljedice pogrešne odluke, kao i da izbrusimo neke tehničke vještine na njoj. Stoga ne biste trebali naše odluke uzimati kao jedine ispravne i slijepo nam vjerovati. Još jednom naglašavamo da od čitatelja očekujemo da budu aktivni u raspravi o člancima, što bi trebalo snažno utjecati na cjelokupni razvoj i pisanje narednih članaka. U idealnom slučaju, željeli bismo vidjeti neke čitatelje da se s vremenom pridruže razvoju sustava.

Pretpostavit ćemo da je čitatelj već upoznat s osnovama asemblerskih i C jezika, kao i s osnovnim konceptima arhitekture računala. Odnosno, nećemo objašnjavati što je registar ili recimo memorija slučajnog pristupa. Ako nemate dovoljno znanja, uvijek se možete obratiti dodatnoj literaturi. Kratki popis referenci i poveznice na stranice s dobrim člancima nalaze se na kraju članka. Također je poželjno biti u mogućnosti koristiti Linux, jer će sve upute za kompilaciju biti dane posebno za ovaj sustav.

A sada – više do točke. U nastavku članka napisat ćemo klasični program "Hello World". Ispostavit će se da je naš Hello World malo specifičan. Neće se pokretati iz bilo kojeg operativnog sustava, već izravno, da tako kažemo, "na golom metalu". Prije nego što prijeđemo izravno na pisanje koda, shvatimo kako to točno pokušavamo učiniti. A za to morate uzeti u obzir proces pokretanja računala.

Dakle, uzmite svoje omiljeno računalo i pritisnite najveći gumb na jedinici sustava. Vidimo veseli pozdravni zaslon, jedinica sustava veselo pišti zvučnikom, a nakon nekog vremena operativni sustav se učitava. Kao što razumijete, operativni sustav je pohranjen na tvrdom disku i ovdje se postavlja pitanje: kako se operacijski sustav magično pokrenuo u RAM i počeo izvršavati?

Znajte ovo: sustav koji se nalazi na bilo kojem računalu je zaslužan za to, a njegovo ime - ne, ne Windows, pipa vaš jezik - zove se BIOS. Njegovo ime znači Basic Input-Output System, odnosno osnovni ulazno-izlazni sustav. BIOS se nalazi na malom mikro krugu na matičnoj ploči i pokreće se odmah nakon pritiska na veliku tipku ON. BIOS ima tri glavna zadatka:

  1. Otkrijte sve povezane uređaje (procesor, tipkovnicu, monitor, RAM, video karticu, glavu, ruke, krila, noge i repove...) i provjerite njihovu funkcionalnost. Za to je odgovoran POST program (Power On Self Test). Ako se vitalni hardver ne pronađe, tada nikakav softver neće moći pomoći, a u ovom trenutku zvučnik sustava će škripati nešto zlokobno i OS uopće neće doći do OS-a. Nemojmo govoriti o tužnom, pretpostavimo da imamo potpuno radno računalo, radujmo se i prijeđimo na ispitivanje druge funkcije BIOS-a:
  2. Omogućavanje operativnom sustavu osnovnog skupa funkcija za rad s hardverom. Na primjer, putem BIOS funkcija možete prikazati tekst na zaslonu ili čitati podatke s tipkovnice. Stoga se naziva osnovnim I/O sustavom. Operativni sustav obično pristupa tim funkcijama putem prekida.
  3. Pokretanje učitavača operativnog sustava. U ovom slučaju, u pravilu, čita se sektor za pokretanje - prvi sektor nositelja informacija (disketa, tvrdi disk, CD, flash pogon). Redoslijed medija za prozivanje može se postaviti u BIOS SETUP. Sektor za pokretanje sadrži program koji se ponekad naziva primarnim pokretačem. Grubo govoreći, posao bootloadera je pokretanje operativnog sustava. Proces pokretanja operacijskog sustava može biti vrlo specifičan i vrlo ovisan o njegovim značajkama. Stoga, primarni bootloader pišu izravno programeri OS-a i zapisuje se u sektor za pokretanje tijekom instalacije. U trenutku pokretanja bootloadera, procesor je u stvarnom načinu rada.
Tužna vijest: veličina bootloadera trebala bi biti samo 512 bajtova. Zašto tako malo? Da bismo to učinili, moramo se upoznati s uređajem diskete. Evo informativne slike:

Slika prikazuje površinu diskovnog pogona. Disketa ima 2 površine. Svaka površina ima prstenaste staze (trake). Svaka je staza podijeljena na male, lučne dijelove zvane sektori. Dakle, povijesno gledano, sektor diskete ima veličinu od 512 bajtova. Prvi sektor na disku, sektor za pokretanje, BIOS čita u nulti memorijski segment na pomaku 0x7C00, a zatim se kontrola prenosi na ovu adresu. Boot loader obično učitava u memoriju ne sam OS, već drugi loader program pohranjen na disku, ali iz nekog razloga (najvjerojatnije je to veličina) koji ne stane u jedan sektor. A budući da dosad ulogu našeg OS-a igra banalan Hello World, naš glavni cilj je natjerati računalo da vjeruje u postojanje našeg OS-a, pa makar samo na jednom sektoru, i pokrenite ga.

Kako radi boot sektor? Na osobnom računalu, jedini uvjet za sektor za pokretanje je da njegova posljednja dva bajta sadrže vrijednosti 0x55 i 0xAA - potpis sektora za pokretanje. Dakle, već je više-manje jasno što trebamo učiniti. Napišimo kod! Gornji kod je napisan za yasm asembler.

odjeljak. tekst

korištenje 16

org 0x7C00 ; naš program je učitan na 0x7C00

početak:

mov sjekira, cs

mov ds, ax ; odaberite segment podataka



mov si, poruka

cld ; smjer za naredbe niza

mov ah, 0x0E ; Broj funkcije BIOS-a

mov bh, 0x00 ; stranica video memorije

puts_loop:

lodsb ; učitaj sljedeći znak u al

test al, al ; null znak znači kraj reda

jz puts_loop_exit

int 0x10 ; pozovite BIOS funkciju

jmp puts_loop

puts_loop_exit:

jmp $; vječni ciklus



poruka:

db "Hello World!" , 0

Završi:

puta 0x1FE - završetak + početak db 0

db 0x55, 0xAA ; potpis sektora za pokretanje

Ovaj kratki program zahtijeva niz važnih objašnjenja. Redak org 0x7C00 je potreban kako bi asembler (mislim na program, a ne na jezik) ispravno izračunao adrese za oznake i varijable (puts_loop, puts_loop_exit, message). Stoga ga obavještavamo da će se program učitati u memoriju na adresi 0x7C00.
U redovima
mov sjekira, cs

mov ds, ax
segment podataka (ds) je postavljen jednak segmentu koda (cs), budući da su u našem programu i podaci i kod pohranjeni u jednom segmentu.

Zatim se u petlji prikazuje poruka “Hello World!” znak po znak. Za to se koristi funkcija 0x0E prekida 0x10. Ima sljedeće parametre:
AH = 0x0E (broj funkcije)
BH = broj video stranice (nemojte se još truditi, navedite 0)
AL = ASCII kod znakova

U retku "jmp $" program visi. I s pravom, nema potrebe da ona izvršava dodatni kod. Međutim, da bi računalo ponovno radilo, morat ćete ga ponovno pokrenuti.

U retku "puta 0x1FE-završetak + početak db 0", ostatak programskog koda (osim posljednja dva bajta) popunjen je nulama. To je učinjeno tako da se nakon kompilacije potpis sektora za pokretanje pojavi u zadnja dva bajta programa.

Nekako smo shvatili programski kod, pokušajmo sada sastaviti ovu sreću. Za kompilaciju nam je, zapravo, potreban asembler - gore spomenuti

Prvo naučite programirati. Poznavanje asemblera je bitno; Toplo se preporučuje da budete svjesni i drugih dodatnih programskih jezika niže razine kao što je C.

Odlučite na kojem uređaju želite pokrenuti operativni sustav. To može biti CD, DVD, flash pogon, tvrdi disk ili drugo računalo.

Odlučite kako želite da vaš operativni sustav izgleda. Treba li to biti puna verzija OS-a s grafičkim korisničkim sučeljem (GUI), ili možda nešto minimalističkije? Prije početka procesa morate znati u kojem smjeru ići.

Provjerite koju procesorsku platformu podržava vaš operativni sustav. AI-32 i x86_64 su dvije najčešće verzije za osobna računala, pa se mogu smatrati najboljim izborom.

Odlučite želite li sve raditi sami od nule ili postoje kerneli na temelju kojih biste htjeli izgraditi sustav. Linux od nule je projekt za one koji žele, na primjer, stvoriti vlastitu distribuciju Linuxa.

Odaberite hoćete li koristiti vlastiti bootloader ili unaprijed izgrađeni Grand Unified Bootloader (GRUB). Budući da kodiranje vlastitog programa za pokretanje zahtijeva opsežno poznavanje računalnog softvera i BIOS-a, može pomaknuti raspored programiranja za stvarnu kernel.

Odlučite se za programski jezik koji ćete koristiti. Naravno, sasvim je moguće razviti operativni sustav na jeziku kao što je Pascal ili BASIC, ali je poželjno pisati u C ili asembleru. Asembler je apsolutno neophodan, budući da neki važni dijelovi operacijskog sustava zahtijevaju poznavanje ovog jezika. C ++, s druge strane, sadrži ključne riječi potrebne za pokretanje cijelog OS-a.

  • Da biste izgradili OS pomoću C ili C ++ koda, koristit ćete, naravno, jedan ili drugi prevodilac. To znači da morate pročitati priručnik / upute / dokumentaciju za C / C ++ kompajler po vašem izboru koji dolazi sa softverom ili je dostupan na web stranici distributera. Morat ćete naučiti puno kompliciranih stvari o kompajleru, a također ćete morati naučiti shemu i ABI kako biste poboljšali C ++. Od vas se očekuje da razumijete različite formate izvršavanja (ELF, PE, COFF, obične binarne datoteke, itd.) i primijetite da je Windowsov izvorni PE format (.exe) zaštićen autorskim pravima.
  • Odaberite Aplikacijsko programsko sučelje (API). Jedna zbirka dobrih API-ja je POSIX, jer je dobro dokumentiran. Svi Unix sustavi imaju barem djelomičnu podršku za POSIX, tako da bi bilo trivijalno dodati Unix programe svom operativnom sustavu.

    Odlučite se za dizajn. Postoje monolitne jezgre i mikrojezgre. Monolitne jezgre obavljaju sve usluge u kernelu, dok mikrokerneli imaju malu jezgru u kombinaciji s implementacijom prilagođene usluge. Općenito, monolitne jezgre su brže, ali mikrojezgre imaju bolju izolaciju i zaštitu od mogućih kvarova.

    Razmislite o razvoju i timskom radu. Na ovaj način će vam trebati manje vremena za rješavanje velikih problema, što će vam omogućiti da u kraćem vremenskom roku napravite bolji operativni sustav.

    Nemojte potpuno izbrisati svoj tvrdi disk. Zapamtite, formatiranjem diska trajno će se izbrisati svi vaši podaci! Upotrijebite GRUB ili neki drugi upravitelj za dupliciranje podizanja vašeg računala s drugog OS-a dok vaša verzija ne bude potpuno funkcionalna.

    Počnite s malim. Prvo obratite pozornost na male stvari, kao što su prikaz teksta i prekida, prije nego što prijeđete na složene elemente kao što su upravljanje memorijom i multitasking.

    Čuvajte sigurnosnu kopiju najnovije radne verzije. To vam daje određenu dozu mira u slučaju da nešto krene potpuno po zlu s vašom trenutnom verzijom OS-a ili naknadnim dodacima. U slučaju kvara vašeg računala i nemogućnosti pokretanja, kao što i sami razumijete, imati drugu kopiju za rad bit će izvrsna prilika, tako da možete popraviti postojeće greške.

    Testirajte svoj novi operativni sustav na virtualnom stroju. Umjesto ponovnog pokretanja računala svaki put kada unosite promjene ili prenosite datoteke sa svog proizvodnog računala na testni stroj, možete koristiti aplikaciju za pokretanje OS-a na virtualnom stroju dok vaš trenutni OS još uvijek radi. VM aplikacije uključuju VMWare (koji također ima besplatno dostupan poslužitelj), alternativni open source, Bochs, Microsoft Virtual PC (nije kompatibilan s Linuxom) i XVM VirtualBox.

    Objavite verziju izdanja. To će omogućiti korisnicima da vam kažu o mogućim nedostacima u vašem operativnom sustavu.

  • Operativni sustav također mora biti jednostavan za korištenje, stoga svakako dodajte korisne značajke koje će postati sastavni dio vašeg dizajna.

    • Kada je razvoj gotov, razmislite želite li kod učiniti slobodno dostupnim ili uspostaviti privatna prava na njega.
    • Obavezno postavite sigurnosne značajke kao glavni prioritet ako želite da vaš sustav bude održiv.
    • Nemojte pokretati projekt razvoja operativnog sustava u svrhu podučavanja programiranja. Ako ne znate C, C++, Pascal ili bilo koje druge prikladne jezike i svojstva, uključujući vrste pokazivača, operacije bitova niske razine, prebacivanje bitova, inline asembler, itd., tada niste spremni za stvaranje OS.
    • Pregledajte portale kao što su OSDev i OSDever koji će vam pomoći da poboljšate vlastiti operativni sustav. Posebno imajte na umu da za većinu problema OSDev.org zajednica preferira da sami pregledate sadržaj stranice umjesto da se pridružite forumu. Ako se ipak odlučite učlaniti u red članova foruma, za to moraju postojati određeni preduvjeti. Morate temeljito poznavati C ili C++ i x86 asemblerski jezik. Također biste trebali razumjeti opće i složene koncepte programiranja kao što su povezani popisi, redovi itd. OSDev zajednica u svojim pravilima izričito navodi da nitko neće čuvati nove programere. Ako pokušavate razviti OS, podrazumijeva se da ste "bog" u području programiranja. Od vas se također traži da pročitate priručnik procesora za arhitekturu po vašem izboru; na primjer x86 (Intel), ARM, MIPS, PPC, itd. Takva referenca na strukturu procesora može se lako pronaći pretraživanjem Googlea ("Intel Manuals", "ARM manuals" itd.). Nemojte se prijavljivati ​​na forum OSDev.org da biste postavljali očita pitanja. To će samo dovesti do odgovora poput "Pročitajte jebeni priručnik". Za početak pokušajte čitati Wikipediju, vodiče za razne alate koje namjeravate koristiti.
    • Provjerite postoje li potencijalne slijepe točke i druge greške. Nedostaci, slijepe ulice i drugi problemi mogu utjecati na dizajn vašeg operativnog sustava.
    • Ako želite lakši način, zamislite distribucije Linuxa kao što su Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd ili SUSE Studio i SUSE KIWI. Međutim, OS koji izradite u vlasništvu je tvrtke koja je prva uvela uslugu (iako imate prava na slobodnu redistribuciju, modificiranje i pokretanje kako želite pod GPL-om).
    • Dobro rješenje je stvoriti potpuno novu particiju za operativni sustav u razvoju.

    Upozorenja

    • Nepažljivo prepisivanje OS-a na tvrdi disk može ga potpuno oštetiti. budi oprezan
    • Nećete imati kompletan sustav za dva tjedna. Počnite s operativnim sustavom za podizanje sustava, a zatim prijeđite na zanimljiviji materijal.
    • Ako učinite nešto nepromišljeno, kao što je pisanje neurednih bajtova u nasumične ulazno/izlazne portove, tada uništite svoj OS i može (u teoriji) spaliti vaš hardver.
    • Nemojte očekivati ​​da će biti lako izgraditi kvalitetan operativni sustav. Postoje mnoge složene međuovisnosti. Na primjer, da bi OS mogao rukovati s više procesora, vaš upravitelj memorije mora imati mehanizme "zaključavanja" kako bi spriječio nepotrebne procesore da pristupe istom resursu u isto vrijeme. Korišteni "blokovi" pretpostavljaju planer koji osigurava da samo jedan procesor pristupa kritičnom resursu u bilo kojem trenutku, a da su svi ostali mirni. Međutim, planer ovisi o prisutnosti upravitelja memorije. Ovo je primjer ovisnosti o zastoju. Ne postoji standardni način rješavanja ovakvih problema; od svakog kreatora operacijskog sustava se očekuje da bude dovoljno vješt da dođe do vlastitog rješenja.

    Izvori od

    Što trebaš

    • Računalo
    • Procesor na kojem ćete graditi
    • Dovoljna memorija slučajnog pristupa (RAM) za virtualni stroj
    • Primarni OS (koristi se za razvoj izvornog koda asemblerskog jezika (et al.) i rana izrada i pakiranje; na kraju će vaš vlastiti OS postati primarni)
    • Uređivač kodova u boji sintakse (koristi se u nedostatku integriranog razvojnog okruženja)
    • Prevodilac
    • CD/DVD pogon
  • Ilja Aleksandrov

    Stvaramo vlastiti OS baziran na Linuxu

    Postoje stotine Linux distribucija, a ne zna se koliko će se još pojaviti. Deseci tvrtki i tisuće programera natječu se u kreiranju najboljeg Linux projekta, dok svaki iskusni korisnik može postati autor sustava kućnog računala koji može parirati proizvodima IT divova.

    Tijekom godina rada s Linuxom koristio sam ogroman broj različitih distribucija: Mandriva, Fedora, SlackWare, Debian, Ubuntu i mnoge druge. Neki projekt mi se svidio više, neki manje. Ali u svim distribucijama se neizbježno moralo suočiti s ozbiljnim nedostacima koji su jako otežavali rad. Jedan je prezahtjevan za resurse, drugi ne podržava svu potrebnu opremu, treći nedostaje razni softver. Tada sam se sjetio poznate istočnjačke mudrosti: ako trebaš nešto dobro napraviti, učini to sam.

    Linux od nule

    Nisam jedini koji je odlučio krenuti u izgradnju vlastite verzije Linuxa – OS u kojem će se kao osnova uzeti osnovni dio sustava i kernel, ali u kojem neće biti niti jedan dodatni kilobajt od programer, odnosno od vas. Velik broj distribucija Linuxa koje ne zadovoljavaju zahtjeve korisnika potaknuo je Gerarda Beekmansa da stvori distribuciju koja će svakome dati priliku da izgradi sustav samo s komponentama i funkcijama koje su im potrebne.

    Težnja talentiranog programera rezultirala je projektom Linux from Scratch (www.linuxfromscratch.org), ili skraćeno LFS. Ovaj projekt vam omogućuje da izgradite od nule, iz izvornih kodova, svoj operativni sustav baziran na Linuxu. LFS je sastavljen na računalu s već instaliranim Linux sustavom, međutim, "napredni" Live-CD, na primjer, Knoppix, može.

    U ovom slučaju, Linux sustav koji se koristi za izgradnju može biti bilo koji - potrebna je samo prisutnost kompajlera i knjižnica sustava. Linux From Scratch teško se može nazvati distribucijskim kompletom u uobičajenom smislu riječi - to je nešto poput pomoćnog softvera koji će vam, zajedno s osnovnim dijelom operativnog sustava, omogućiti stvaranje vlastite, jedinstvene verzije OS-a.

    Kao što znate, Linus Torvalds je razvio svoj operativni sustav pod motom "Samo za zabavu!" - odnosno samo radi užitka. Moram priznati da se LFS stvarno ne nalazi često na serverima, ovaj sustav obično koriste računalni entuzijasti. Instalacija i rad s Linuxom od nule pomoći će vam razumjeti međusobnu povezanost komponenti OS-a, što će vam dobro doći za vlastiti razvoj distribucije Linuxa, a ne samo na temelju LFS-a. Stoga je LFS u velikoj mjeri namijenjen onim ljudima kojima je proces izgradnje vlastite distribucije zabavan i zanimljiv – a takvih je, vjerujte, mnogo.

    Dakle, ako ste spremni potrošiti cijeli dan (ili čak i više) na izgradnju sustava, onda preporučam da preuzmete LFS-packages-6.0, LFS-book sa stranice (2) i nastavite čitati ovaj članak.

    Particioniranje diska i stvaranje stabla direktorija

    Radi boljeg razumijevanja gradiva, cijeli ćemo proces opisati općenito (vidi sl. 1).

    U prvoj fazi, pomoću već instaliranog distribucijskog kompleta ili LiveCD-a, disk se particionira. Na tvrdom disku je dodijeljena particija za novi sustav. Nakon toga, u ovom odjeljku, morat ćete statički kompajlirati sve potrebne programe i kernel sustava. Zatim se korijenski direktorij mijenja u particiju tvrdog diska dodijeljenu za naš novi OS. Morat ćete ponovno kompajlirati, ali ovaj put softver mora biti preveden dinamički (razlika između dinamičke kompilacije i statičke kompilacije bit će opisana u nastavku). Posljednji korak uključuje izgradnju osnovne glibc biblioteke i konfiguriranje instaliranog OS-a. Kao što vidite, ne morate raditi ništa posebno komplicirano.

    Tijekom cijelog procesa vaš glavni pomoćnik je dokumentacija iz paketa LFS-book, čiji se prijevod na ruski nalazi ovdje: http://multilinux.sakh.com/download/lfsbook.tar.bz2. Knjiga detaljno pokriva svaki korak izgradnje OS-a, stoga svakako pogledajte ovaj vodič u slučaju problema (ovaj članak nije namijenjen zamijeniti tako opsežnu dokumentaciju).

    Napravite novu particiju - u mom slučaju / dev / hda5, budući da je / dev / hda1 particija već zauzeta instaliranim Slackware Linux tvrdim diskom. Preporuča se da prvo napravite sigurnosnu kopiju sustava kako biste ga mogli vratiti u slučaju oštećenja, iako je vjerojatnost za to blizu nule. I ovdje je, mislim, sve jasno: dodjeljujemo potrebnu količinu (dovoljno je 23 GB) za korijenski direktorij, prostor jednak dvostrukoj količini RAM-a - za swap particiju, ako želite, možete stvoriti zasebne particije za početni imenik (/ home) i za / boot. Međutim, popularna opcija particioniranja - dodijeliti sav raspoloživi prostor minus swap za korijenski direktorij i naknadno kreiranje samog swapa - također je sasvim prihvatljiva kada se gradi LFS. Na autorskom računalu i Linuxu Slackware, koji je roditeljski OS, i LFS koriste isti tvrdi disk, međutim, instaliranje LFS-a na drugi tvrdi disk također nije teško.

    Odaberite datotečni sustav po vlastitom nahođenju: nije bilo problema s Ext3 i ReiserFS pod LFS. No, obožavatelji XFS-a morat će se uznemiriti – pokušaji da Linux From Scratch radi s ovim FS-om nisu okrunjeni uspjehom.

    Sada montiramo particiju posvećenu novom OS-u:

    $ mount / dev / hda5 / mnt / mylin

    Radi praktičnosti, definirajmo varijablu MYLIN:

    $ izvoz MYLIN = / mnt / mylin

    Izvrsno, za daljnji rad bolje je stvoriti zaseban korisnički mylin, koji ćemo dodijeliti vlasniku montirane particije.

    $ useradd mylin

    $ chown –R mylin $ MYLIN

    Moramo stvoriti stablo imenika u korijenu novog odjeljka:

    $ cd $ MYLIN

    $ mkdir –p bin boot dev etc home lib mnt opt ​​root sbin usr / (X11R6, lokalni) var

    Napravite potrebnu strukturu u usr, usr / X11R6, usr / lokalnim imenicima: poddirektoriji bin, etc, include, lib, sbin, share, src.

    Zatim ćemo učiniti isto za direktorije / var i / opt budućeg sustava:

    $ mkdir var / (cache, lib, local, lock, log, opt, run, spool)

    $ mkdir opt / (bin, doc, include, info, lib, man)

    Ne zaboravimo da postoje dublje hijerarhije, na primjer / usr / share / man / man1. No, obim članka ne dopušta da se ovdje daju sve informacije o strukturi stabla datoteka, tako da ili trebate koristiti dokument Filesystem Hierarhy Standard (može se naći na: http://linux-ve.net/ MyLDP/file-sys/fhs-2.2-rus) ili pažljivo proučite strukturu OS-a obitelji Linux koji ste već instalirali. Nakon pripreme tvrdog diska, prelazimo na statičku montažu.

    Statička konstrukcija

    Zašto koristimo statičku gradnju? Statička kompilacija pridružuje izvorni kod knjižnice kodu aplikacije, što povećava njegovu veličinu, ali u isto vrijeme održava integritet. S dinamičkom kompilacijom, knjižnica se nalazi u zasebnoj datoteci kojoj po potrebi pristupaju aplikacije. Kao rezultat toga, svi programi rade s jednom verzijom knjižnice.

    Ali kada upotrijebimo naredbu chroot za postavljanje korijenskog direktorija za novoizgrađeni sustav, knjižnice "roditelja", instaliranog sustava koji se nalazi u /lib, /usr/lib i drugi više neće biti dostupni, tako da dinamički kompilirani programi će odbiti raditi, osim toga, kompatibilnost verzija od strane nikome nije zajamčena.

    Kako bismo to izbjegli, prvo ćemo statički prikupiti sav potreban softver za naš budući sustav. Počnimo s bash školjkom. (Ljubitelji ZSH ili TCSH mogu instalirati svoje omiljene interpretatore nakon instalacije sustava, ali u fazi izgradnje njihovo korištenje nije omogućeno od strane autora LFS-a). Trebali biste provjeriti imate li datoteku /usr/lib/libcurses.a, a ako ne, instalirajte paket ncursesdev. Svi paketi moraju biti kompajlirani sa statičkim zastavicama izgradnje: "--enable-static-link", "--disable-shared" ili "--static". Koji je pravi za svaki pojedini slučaj, možete saznati iz dokumentacije za pojedini paket ili iz izlaza konfiguracijske skripte pokrenute s parametrom "--help".

    $ ./configure –-pomoć

    Kako ne biste zamijenili kasnije statički kompilirane programe s "dinamičnim" programima, stvorite poseban direktorij za njih:

    $ mkdir $ MYLIN / stat

    Kada gradite i instalirate pakete, nemojte zaboraviti dodati parametar "--prefix = $ MYLIN / stat" za premještanje datoteka u ovaj određeni direktorij. Na kraju, instaliramo bash:

    $ ./configure –-enable-static-link --prefix = $MYLIN/stat

    $ napraviti

    $ napraviti instalaciju

    Na isti način prikupljamo i ostale potrebne pakete. : binutils, bzip2, textutils, texinfo, tar, sh-utils, gcc, grep, gzip, gawk, diffutils, fileutils, make, patch, sed, i, zapravo, linux-kernel.

    Da, prilikom kompajliranja kernela ne zaboravite da za starije verzije kernela (2.2.x-2.4.x) trebate koristiti gcc 2.95, a za trenutnu verziju 2.6.x preporuča se koristiti gcc 3.x pa da nema problema.

    Ne zaboravite pogledati odgovarajuće odjeljke LFS-knjige, govori o tome i mnogim drugim nijansama. Općenito, sastavljanje kernela u LFS ne razlikuje se od sličnog postupka koji se provodi kada se koristi distribucijski komplet instaliran na HDD. Raspakirajte izvore kernela u $ MYLIN / usr / src / linux-2.6.xx, a zatim ga konfigurirajte pokretanjem:

    $ napravi menuconfig

    Proces konfiguriranja parametara kernela je mnogo puta opisan na Internetu (6), teško da se na tome ne treba detaljnije zadržavati. Zatim dajemo sljedeće naredbe u direktoriju s izvorima Linux kernela:

    $ make bzImage

    $ napravite module

    To je to, postoji nova kernel na $ MYLIN / usr / src / linux-2.6.xx / arch / i386 / boot / bzImage.

    Zatim stvaramo datoteke $ MYLIN / etc / passwd i $ MYLIN / etc / group. U prvoj registriramo jedinog korisnika do sada - root s bilo kojom lozinkom, a u drugoj grupi korisnika (za početak će biti dovoljna i jedna root grupa).

    Time završavamo naše pripreme za sljedeći korak i prelazimo na suptilniji dinamički sklop.

    Dinamična izgradnja

    Sada moramo promijeniti korijenski direktorij u / mnt / mylin, gdje ćemo koristiti samo statički kompilirane uslužne programe - više nećemo moći koristiti alate iz "roditeljskog" OS-a. Dajemo naredbu u konzoli:

    $ chroot $ MYLIN / usr / bin / env –i

    > HOME = / root TERM = $ TERM PS1 = ’u: w $’

    > PUT = / bin: / usr / bin: / sbin: / usr / sbin: / stat / sbin

    > / stat / bin / bash --login

    Ovom naredbom odredili smo staze do izvršnih datoteka, tip terminala, interpreter i tip prompta naredbenog retka.

    Da bi neki programi radili, proc datotečni sustav mora biti instaliran na novom sustavu.

    $ mount proc / proc -t proc

    Došao je najvažniji trenutak. Izgradnja glibc biblioteke. On je najodgovorniji jer većina potrebnih programa neće raditi bez njega, a nema smisla koristiti Linux bez glavne biblioteke. Izgradnja glibc-a je često problematična.

    Prilikom izgradnje smo naveli parametar "--prefix = $ MYLIN / stat", tako da će se prilikom promjene root-a svi statički izgrađeni paketi pojaviti u / stat direktoriju nove OS particije.

    Dakle, raspakirajte glibc-2.x.x.tar.gz arhivu (na primjer, u / usr / src / direktorij) i idite u direktorij glibclinuxthreads. Morat ćemo malo dotjerati izvorni kod zbog činjenice da je u ovoj fazi u sustavu nemoguće identificirati korisnika po imenu (samo zbog nedostatka glibc-a i drugih biblioteka), te činjenice da je instalirati glibc trebate Perl interpreter, kojeg nemamo.

    Zamijenjujemo root korisničkog imena u login / Makefileu s njegovim uid-om, koji je 0, a varijablu $ PERL u malloc / Makefile treba zamijeniti stazom do interpretera - / usr / bin / perl - i jednostavno će biti zanemareno tijekom konfiguracije.

    $ /usr/src/glibc-2.x.x/configure --prefix = / usr --enable-add-ons --libexecdir = / usr / bin &&

    & napraviti

    & izvrši instalaciju

    $ make localedata / install-locales

    $ / stat / bash --login

    Ako ste sve učinili ispravno, glibc će kompajlirati, "root" će se konačno pojaviti na promptu, a svi se programi mogu dinamički ponovno kompajlirati.

    Završite instalaciju kernela:

    $ make modules_install

    $ napraviti instalaciju

    Da biste premjestili novu kernel u direktorij / boot, izvedite još jednu naredbu:

    $ poništiti

    Prikupljamo sve instalirane i neke nove programe, sada bez statičkih zastavica kompilacije. Trebat će nam (u ovoj fazi vrlo je važno ne zaboraviti sastaviti sve sljedeće) (vidi tablicu 1).

    Tablica 1. Potreban set paketa za montažu

    autoconf

    grep

    perl

    automake

    groff

    bash

    gzip

    procinfo

    bin86

    procps

    binutils

    manje

    psmisc

    bzip2

    reiserfs-progs

    diffutils

    libtool

    e2fsprogs

    lilo

    sh-utils

    sjena

    datoteka

    napraviti

    sysklogd

    fileutils

    makedev

    sysvinit

    findutils

    man-stranice

    savijati

    modutils

    texinfo

    budala

    npsovke

    textutils

    netkitbase

    util-linux

    bizon

    net-alati

    gettext

    zakrpa

    Nakon izvođenja dinamičke ponovne kompilacije, možete izbrisati direktorij sa statički izgrađenim paketima:

    $ rm -rf / stat

    Možete odahnuti i popiti kavu – ono najteže, rutina ostaje iza. Prijeđimo na sljedeću fazu - početnu konfiguraciju našeg sustava.

    Početna konfiguracija sustava

    Prije nego što nastavimo s konfiguracijom, napominjem da se sve promjene moraju izvršiti u datotekama direktorija novog OS-a, a ne u nadređenom sustavu.

    Da biste postavili vrijeme sustava, kreirajte datoteku / etc / sysconfig / clock koja sadrži samo jedan redak:

    UTC = 0

    Sada će sat računala prikazati vrijeme u vašoj vremenskoj zoni - pod uvjetom da je vrijeme u BIOS-u ispravno postavljeno.

    Dajemo ime računalu:

    echo "HOSTNAME = my_linux"> / etc / sysconfig / network

    Sada ćemo odrediti particije koje bi sustav trebao montirati prilikom pokretanja u / etc / fstab:

    # opcije datotečnog sustava točke montiranja fs-type dump fsck-red

    / dev / hda5 / ext3 zadane postavke 1 1

    / dev / hda3 zamjena zamjene pri = 1 0 0

    proc / proc proc zadane postavke 0 0

    Umjesto / dev / hda3 i / dev / hda5, napišite svoje particije (root i swap), dodajte točke montiranja za druge particije tvrdog diska i CD-ROM-a ako je potrebno.

    Sada napravimo naš sustav za podizanje sustava.

    Ako osim lFS-a koristite i druge Linux distribucije, sada se morate prijaviti na stari sustav - za to pokrećemo naredbu:

    $ izlaz

    Već u nadređenom OS-u dodajte sljedeće u /etc/lilo.conf datoteku:

    # LFS

    slika = / boot / bzImage

    Oznaka = lfs

    Korijen =

    Samo za čitanje

    Jasno je da je "/ boot / bzImage" put do kernela koji ste kompilirali za sustav, a "particija" je particija diska na kojoj se nalazi korijenski direktorij.

    Ako ne planirate koristiti druge operacijske sustave i distribucije Linuxa, idite izravno na konfiguriranje LILO-a u LFS-u.

    U ovom slučaju, lilo.conf će izgledati otprilike ovako:

    boot = / dev / hda

    Kašnjenje = 40

    Kompaktan

    Vga = normalno

    Korijen = / dev / hda1

    Samo za čitanje

    Slika = / boot / zSlika-2.6.12

    Oznaka = Linux

    Napravite potrebne promjene ovisno o vašoj konfiguraciji. Ažuriramo bootloader naredbom:

    $ / sbin / lilo –v

    I, ako su svi prethodni koraci ispravno izvedeni, naći ćemo se u novom sustavu. Međutim, predstoji duga faza "finog podešavanja" (posebnu pozornost treba posvetiti sigurnosti novog sustava, jer LFS prema zadanim postavkama izgleda prilično nezaštićeno, kao i svaki novoinstalirani OS) još uvijek je pred nama. Ali već imate samosastavljenu verziju Linuxa.

    P.S

    Gerard Bickmans nije jedini koji ima ideju stvoriti vlastiti Linux. Još jedan projekt, BYOLinux, na čelu s Jonatanom Thorpeom, danas je zaustavio svoj razvoj, iako je pisana dokumentacija sada relevantna, ali nije tako detaljna kao LFS-knjiga i nije prevedena na ruski. Glavna razlika u Johnovoj metodi je u tome što se glibc prenosi s roditelja na dijete bez ponovnog kompajliranja, što nije tako učinkovito, ali izbjegava mnoge probleme s građenjem. Neki korisnici FreeBSD-a također se žele osjećati kao dizajneri OS-a.

    Sada je to sasvim moguće - na http://ezine.daemonnews.org/200302/fbsdscratch.html nalazi se članak o izgradnji FreeBSD-a iz izvora kao cjeline - od distribucija do portova, a metoda nije slična uobičajenoj " rebuild" sustava, ali slično metodi Gerarda Beekmansa. Pa, sada imate svoj jedinstveni sustav baziran na Linuxu. U slučaju problema, njihovo rješenje potražite u LFS-knjigi, tamo je sve detaljno opisano. Također preporučam preuzimanje Linux Network Administrator's Guide s portala http://www.tldp.org, iako se ne odnosi izravno na LFS, dobro će doći u fazi postavljanja sustava. Ne zaboravite da svaki program također dolazi s raznim man i info stranicama, koje su također dizajnirane da olakšaju život korisnicima Linuxa.

    1. LFS-knjiga na ruskom - http://multilinux.sakh.com/lfs.
    2. Službeni portal LFS projekta je http://www.linuxfromscratch.org.
    3. ByoLinux portal - http://www.byolinux.org.
    4. FreeBSD članak od nule - http://ezine.daemonnews.org/200302/fbsdscratch.html.
    5. Članak o sastavljanju Linux kernela - http://vikos.lrn.ru/MyLDP/kernel/kompil-2-6.html.
    6. Bayrak A. Recenzija Knoppixa 3.7 rusko izdanje. - Časopis "Administrator sustava", br. 3, ožujak 2005. - 4-6 str. ().

    Ova serija članaka posvećena je programiranju niske razine, odnosno arhitekturi računala, operativnim sustavima, programiranju na asembleru i srodnim područjima. Do sada se pisanjem bave dva habrauzera - iley i pehat. Za mnoge srednjoškolce, studente i profesionalne programere ove se teme pokazuju vrlo teškim za naučiti. Postoji mnogo literature i tečajeva o programiranju niske razine, ali je od njih teško dobiti cjelovitu i cjelovitu sliku. Teško je, nakon čitanja jedne ili dvije knjige o asembleru i operacijskim sustavima, barem općenito zamisliti kako zapravo funkcionira ovaj složeni sustav željeza, silicija i mnogih programa – računalo.

    Svatko rješava problem učenja na svoj način. Netko čita puno literature, netko se pokušava brzo prebaciti na praksu i usput razumjeti, netko pokušava objasniti prijateljima sve što uči. I odlučili smo kombinirati ove pristupe. Dakle, u ovom tečaju članaka pokazat ćemo korak po korak kako napisati jednostavan operativni sustav. Članci će biti pregledne prirode, odnosno neće sadržavati iscrpne teorijske podatke, no uvijek ćemo nastojati dati poveznice na dobre teorijske materijale i odgovoriti na sva pitanja koja se pojave. Nemamo jasan plan, pa ćemo usput donijeti mnoge važne odluke, uzimajući u obzir vaše povratne informacije.

    Možda ćemo proces razvoja namjerno odvesti u zastoj kako bismo vama i sebi omogućili da u potpunosti shvatimo sve posljedice pogrešne odluke, kao i da izbrusimo neke tehničke vještine na njoj. Stoga ne biste trebali naše odluke uzimati kao jedine ispravne i slijepo nam vjerovati. Još jednom naglašavamo da od čitatelja očekujemo da budu aktivni u raspravi o člancima, što bi trebalo snažno utjecati na cjelokupni razvoj i pisanje narednih članaka. U idealnom slučaju, željeli bismo vidjeti neke čitatelje da se s vremenom pridruže razvoju sustava.

    Pretpostavit ćemo da je čitatelj već upoznat s osnovama asemblerskih i C jezika, kao i s osnovnim konceptima arhitekture računala. Odnosno, nećemo objašnjavati što je registar ili recimo memorija slučajnog pristupa. Ako nemate dovoljno znanja, uvijek se možete obratiti dodatnoj literaturi. Kratki popis referenci i poveznice na stranice s dobrim člancima nalaze se na kraju članka. Također je poželjno biti u mogućnosti koristiti Linux, jer će sve upute za kompilaciju biti dane posebno za ovaj sustav.

    A sada – više do točke. U nastavku članka napisat ćemo klasični program "Hello World". Ispostavit će se da je naš Hello World malo specifičan. Neće se pokretati iz bilo kojeg operativnog sustava, već izravno, da tako kažemo, "na golom metalu". Prije nego što prijeđemo izravno na pisanje koda, shvatimo kako to točno pokušavamo učiniti. A za to morate uzeti u obzir proces pokretanja računala.

    Dakle, uzmite svoje omiljeno računalo i pritisnite najveći gumb na jedinici sustava. Vidimo veseli pozdravni zaslon, jedinica sustava veselo pišti zvučnikom, a nakon nekog vremena operativni sustav se učitava. Kao što razumijete, operativni sustav je pohranjen na tvrdom disku i ovdje se postavlja pitanje: kako se operacijski sustav magično pokrenuo u RAM i počeo izvršavati?

    Znajte ovo: sustav koji se nalazi na bilo kojem računalu je zaslužan za to, a njegovo ime - ne, ne Windows, pipa vaš jezik - zove se BIOS. Njegovo ime znači Basic Input-Output System, odnosno osnovni ulazno-izlazni sustav. BIOS se nalazi na malom mikro krugu na matičnoj ploči i pokreće se odmah nakon pritiska na veliku tipku ON. BIOS ima tri glavna zadatka:

    1. Otkrijte sve povezane uređaje (procesor, tipkovnicu, monitor, RAM, video karticu, glavu, ruke, krila, noge i repove...) i provjerite njihovu funkcionalnost. Za to je odgovoran POST program (Power On Self Test). Ako se vitalni hardver ne pronađe, tada nikakav softver neće moći pomoći, a u ovom trenutku zvučnik sustava će škripati nešto zlokobno i OS uopće neće doći do OS-a. Nemojmo govoriti o tužnom, pretpostavimo da imamo potpuno radno računalo, radujmo se i prijeđimo na ispitivanje druge funkcije BIOS-a:
    2. Omogućavanje operativnom sustavu osnovnog skupa funkcija za rad s hardverom. Na primjer, putem BIOS funkcija možete prikazati tekst na zaslonu ili čitati podatke s tipkovnice. Stoga se naziva osnovnim I/O sustavom. Operativni sustav obično pristupa tim funkcijama putem prekida.
    3. Pokretanje učitavača operativnog sustava. U ovom slučaju, u pravilu, čita se sektor za pokretanje - prvi sektor nositelja informacija (disketa, tvrdi disk, CD, flash pogon). Redoslijed medija za prozivanje može se postaviti u BIOS SETUP. Sektor za pokretanje sadrži program koji se ponekad naziva primarnim pokretačem. Grubo govoreći, posao bootloadera je pokretanje operativnog sustava. Proces pokretanja operacijskog sustava može biti vrlo specifičan i vrlo ovisan o njegovim značajkama. Stoga, primarni bootloader pišu izravno programeri OS-a i zapisuje se u sektor za pokretanje tijekom instalacije. U trenutku pokretanja bootloadera, procesor je u stvarnom načinu rada.
    Tužna vijest: veličina bootloadera trebala bi biti samo 512 bajtova. Zašto tako malo? Da bismo to učinili, moramo se upoznati s uređajem diskete. Evo informativne slike:

    Slika prikazuje površinu diskovnog pogona. Disketa ima 2 površine. Svaka površina ima prstenaste staze (trake). Svaka je staza podijeljena na male, lučne dijelove zvane sektori. Dakle, povijesno gledano, sektor diskete ima veličinu od 512 bajtova. Prvi sektor na disku, sektor za pokretanje, BIOS čita u nulti memorijski segment na pomaku 0x7C00, a zatim se kontrola prenosi na ovu adresu. Boot loader obično učitava u memoriju ne sam OS, već drugi loader program pohranjen na disku, ali iz nekog razloga (najvjerojatnije je to veličina) koji ne stane u jedan sektor. A budući da dosad ulogu našeg OS-a igra banalan Hello World, naš glavni cilj je natjerati računalo da vjeruje u postojanje našeg OS-a, pa makar samo na jednom sektoru, i pokrenite ga.

    Kako radi boot sektor? Na osobnom računalu, jedini uvjet za sektor za pokretanje je da njegova posljednja dva bajta sadrže vrijednosti 0x55 i 0xAA - potpis sektora za pokretanje. Dakle, već je više-manje jasno što trebamo učiniti. Napišimo kod! Gornji kod je napisan za yasm asembler.

    odjeljak. tekst

    korištenje 16

    org 0x7C00 ; naš program je učitan na 0x7C00

    početak:

    mov sjekira, cs

    mov ds, ax ; odaberite segment podataka



    mov si, poruka

    cld ; smjer za naredbe niza

    mov ah, 0x0E ; Broj funkcije BIOS-a

    mov bh, 0x00 ; stranica video memorije

    puts_loop:

    lodsb ; učitaj sljedeći znak u al

    test al, al ; null znak znači kraj reda

    jz puts_loop_exit

    int 0x10 ; pozovite BIOS funkciju

    jmp puts_loop

    puts_loop_exit:

    jmp $; vječni ciklus



    poruka:

    db "Hello World!" , 0

    Završi:

    puta 0x1FE - završetak + početak db 0

    db 0x55, 0xAA ; potpis sektora za pokretanje

    Ovaj kratki program zahtijeva niz važnih objašnjenja. Redak org 0x7C00 je potreban kako bi asembler (mislim na program, a ne na jezik) ispravno izračunao adrese za oznake i varijable (puts_loop, puts_loop_exit, message). Stoga ga obavještavamo da će se program učitati u memoriju na adresi 0x7C00.
    U redovima
    mov sjekira, cs

    mov ds, ax
    segment podataka (ds) je postavljen jednak segmentu koda (cs), budući da su u našem programu i podaci i kod pohranjeni u jednom segmentu.

    Zatim se u petlji prikazuje poruka “Hello World!” znak po znak. Za to se koristi funkcija 0x0E prekida 0x10. Ima sljedeće parametre:
    AH = 0x0E (broj funkcije)
    BH = broj video stranice (nemojte se još truditi, navedite 0)
    AL = ASCII kod znakova

    U retku "jmp $" program visi. I s pravom, nema potrebe da ona izvršava dodatni kod. Međutim, da bi računalo ponovno radilo, morat ćete ga ponovno pokrenuti.

    U retku "puta 0x1FE-završetak + početak db 0", ostatak programskog koda (osim posljednja dva bajta) popunjen je nulama. To je učinjeno tako da se nakon kompilacije potpis sektora za pokretanje pojavi u zadnja dva bajta programa.

    Nekako smo shvatili programski kod, pokušajmo sada sastaviti ovu sreću. Za kompilaciju nam je, zapravo, potreban asembler - gore spomenuti

    Prije ili kasnije, svaki korisnik Linuxa razmišlja o stvaranju vlastitog distribucijskog kompleta. Neki tvrde da možete "sve prilagoditi sebi". Drugi se žale da među već predstavljenim distribucijama u Podružnici nema ideala. I navodno imaju superkonceptualne ideje za vlastiti sustav. Zašto sam pokrenuo svu ovu psihologiju? Kako bi odmah prekinuo kisik početnicima koji se igraju s Linuxom, koji nemaju što raditi. Ako već razmišljate o stvaranju OS-a, razmislite do kraja. Tako,

    Želim stvoriti OS baziran na Linuxu.
    Odmah vas upozoravam: bilo bi to 18. stoljeće, objesili bi se svi oni koji za osnovu svog budućeg sustava izaberu još jedan razvijeni distribucijski kit (i, ne daj Bože, popularan...). Post govori o stvaranju sustava od nule, što znači da nećemo dirati niti jedan Slax i Linux Mint.

    Korak 1. Odaberite medij
    Postoji nekoliko opcija: ili vaš OS počinje s LiveCD-a, ili s tvrdog diska, ili s flash uređaja. Odmah ću rezervirati: neću reći ni riječi o tvrdom disku u postu, jer je puno praktičnije napraviti fleksibilni distribucijski komplet iz serije "Sve nosim sa sobom" ili zaključani distribucijski komplet na optičkom disku. Ako naučite kako stvoriti LiveCD ili LiveUSB sustav, neće biti problema s instalacijom na tvrdi disk.

    Za svaki slučaj pripremite prazan USB stick, CD-ROM i na kraju instalirajte Virtualbox.

    Korak 2. Prevođenje kernela
    Što se tiče izdavanja treće Linux kernela, ovaj korak potiče daljnji razvoj... Dakle, potrebni su nam izvori kernela. Svaki korisnik zna da ih se može dobiti na kernel.org. Ni pod kojim okolnostima, čujete li ?, nikada ne šrafirajte kernel treće strane koji niste vi kompajlirali na svoj sustav!

    Budući da je moja lijenost bila izvan ljestvica, stvorio sam mapu / linuxkernel i raspakirao arhivu s izvorima tamo. Nakon što sam se prijavio kao root, učinio sam sljedeće:

    cd / linuxkernel
    napraviti menuconfig

    U principu, kernel se može konfigurirati na tri načina: make config (konfiguracija dijaloga), make menuconfig (pseudografska konfiguracija putem ncurses) i make xconfig (grafička konfiguracija). Zaključak je da će make config pokvariti vaše raspoloženje na duže vrijeme, jer postavit će sva moguća pitanja o svim aspektima svih tema. Problem s make xconfigom ne susreću svi, ali ja sam ga susreo i još uvijek radim. Ako to želite učiniti kroz X, shvatite sami. Najbolja opcija je napraviti menuconfig. Ova stvar će vam otvoriti pseudo-grafičko sučelje kroz koje možete prilagoditi kernel na svoj način. Stvar zahtijeva knjižnicu ncurses, koju je lako instalirati.

    Uglavnom, ako vaš mozak uopće razumije Linux, možete shvatiti konfiguraciju. Proces je zanimljiv, ima stvarno mnogo opcija, a pomoć, iako na engleskom, i dalje raduje svojom dostupnošću i jednostavnošću.

    Međutim, i dalje vas morate voditi. Idite na Sustavi datoteka ---> i dodajte potrebne zvjezdice. Slovo M znači da je ovaj ili onaj upravljački program podržan spajanjem na jezgru vanjskog modula (mrzim ih!). Također nam je potrebna isofs podrška za čitanje diskova. Sustavi datoteka ---> CD-ROM/DVD datotečni sustavi ---> ISO 9660 podrška za datotečni sustav CDROM-a. Još uvijek možete podržati drevne Dosovske sustave.

    Otkačeni Mandriva programeri zaboravili su omogućiti datotečne sustave ---> DOS / FAT / NT datotečni sustavi ---> podršku za pisanje NTFS, a na jednoj od njihovih distribucija imao sam muku s pristupom drevnoj Wind particiji.

    Pogledajte tip procesora i značajke ---> Obitelj procesora, savjetovali su mi da se odlučim za Pentium-MMX.

    Također prekapajte po upravljačkim programima uređaja, korisno je. Za zabavu, tamo možete odabrati sve i sastaviti kernel težine> 50 MB.

    Unaprijediti. Nakon samog učitavanja, kernel mora učitati sam sustav. Ili iz kompajliranih datoteka (koje se koriste u ugrađenim sustavima), ili iz CPIO arhive komprimirane s nečim, ili iz Initrd-a. Ovdje niste DOS, ovdje se nećete moći odmah pozvati na neku init "novu datoteku u korijenskom direktoriju diska ili flash pogona. Zapravo, radit će, nemojte slušati Uncle Annixa! Ovo je pogrešno, iako na Internetu već postoji bolesna polemika o tome, mi ćemo koristiti initrd na našem sustavu, jer je prikladan i neće uzrokovati nepristojne izraze programera trećih strana, za razliku od CPIO arhive.

    O da, kompajlirajte kernel s naredbom

    Ako imate x86, možete ga pronaći na / linuxkernel / arch / x86 / boot / bzImage.

    Za oštre programere iz Čeljabinska možete koristiti unakrsno prevođenje ...

    Stvaranje Ramdiska.

    Sada nam treba initrd s najjednostavnijom ljuskom instaliranom tamo. Koristit ćemo busybox jer može sve. Ukrast ćemo metodu od Roberta de Lea, tvorca Movixa (čak bih ga počeo poštovati da nije bilo njegove nečuvene ljubavi prema Perlu):

    dd if = / dev / zero of = / dev / ram0 bs = 1k count = 5000 - Napravite Ramdisk u RAM-u našeg računala.
    mke2fs -m0 / dev / ram0 5000 - Formatirajte Ramdisk na Ext2
    mkdir / distro - Stvorite mapu
    mount / dev / ram0 / distro - Montirajte u / distro mapu

    To je to, sada imamo Ramdisk kapaciteta 5 MB. Više je moguće, samo nije potrebno. Za razliku od Thomasa Matejiseka, ja neću puniti initrd LZMA komprimiranim modulima u Squashfsu. Sve što je potrebno bit će prevedeno s kernelom. Da, ovo nije baš logično i točno, ali gnjavaža je sto puta manja. A posebno za one koji osuđuju ovaj pristup, možete omogućiti opciju modularnosti u kernelu: Omogućite podršku za module koji se mogu učitati.

    U našem Ramdisk-u, montiranom u /distro, postoji takva mapa izgubljeno+nađeno.To je zato što smo ga formatirali u ext2.Ni u kom slučaju ga ne treba brisati iako će ovdje teško pomoći slika je popravljena.bi busybox prvo rečeno...

    Instalacija Busyboxa
    Je li to razlog zašto tako sjajni projekti imaju tako jadne stranice? Iako ... to više nije važno ako se izvori preuzmu i uspješno raspakiraju u / busybox mapu.

    Busybox možete konfigurirati na isti način:

    cd / busybox
    napraviti menuconfig

    Ako još niste shvatili što je to, objasnit ću. Busybox zamjenjuje tone UNIX aplikacija pohranjenih u / bin, / sbin, / usr / bin, / usr / sbin mape. Umjesto toga, kreira se samo jedna aplikacija: / bin / busybox, a hrpa poveznica na nju se kreira u gornjim mapama. Instalirajte busybox sljedećom naredbom:

    napravi CONFIG_PREFIX = / instalaciju distro

    Busybox će također kreirati datoteke / sbin / init i iz nekog razloga / linuxrc kako bi se vaš sustav ispravno pokrenuo. Međutim, nisu stvorene sve potrebne mape. Dakle, sve završavamo svojim rukama i stvaramo:

    / distro / itd
    / distro / lib
    / distro / dev
    / distro / mnt
    distro / proc
    / distro / root
    / distro / tmp
    / distro / root

    Ako ste nešto zaboravili - zapamtite, tk. te je imenike teško zaboraviti.

    Sve bi bilo u redu, ali busybox zahtijeva za rad knjižnice koje je potrebno kopirati u naš distribucijski komplet. Vrlo je lako saznati koji:

    ldd / distro / bin / busybox

    Program će nam pokazati knjižnice potrebne za našu ljusku. Kažem odmah: vrata Linuxa kreirana je od strane kernela i ne mogu se kopirati.

    Prilikom kopiranja knjižnica možete odrezati informacije o otklanjanju pogrešaka (kako Roberto savjetuje):

    objcopy --strip-debug odakle kamo

    Mi pravimo Linux od Linuxa

    Potrebno je izraditi nekoliko tekstualnih datoteka sustava:

    Trebamo / etc / inittab. Iznenadit ću vas: na početku života sustav uopće ne zna što je Root. Imamo čak i neimenovanog korisnika, ali datoteka značajki niske razine (ONF) za cijeli sustav mora biti prisutna. Pilot sadržaj datoteke je sljedeći:

    # Prva datoteka za pokretanje, / sbin / init kasnije.
    :: sysinit: /etc/rc.d/rc.S

    # Pokrenite ljusku u konzoli.
    :: ponovno pojavljivanje: - / bin / sh

    # Naredbe za izvršenje prije isključivanja i ponovnog pokretanja.
    :: shutdown: / sbin / swapoff -a> / dev / null 2> & 1
    :: shutdown: / bin / umount -a -r> / dev / null 2> & 1

    Sljedeća datoteka je / etc / fstab. Ovo je tablica koja opisuje što i gdje montirati pri pokretanju. Beskorisna stvar! Moramo montirati proc, inače ništa neće raditi, pa u datoteci pišemo:

    ništa / proc proc defaults 0 0

    Montaža također treba datoteku / etc / mtab. Stvorite ga i ostavite prazno.

    Ali mount će učiniti sve što je potrebno samo kada to izričito zatražimo. I pitat ćemo u istoj početnoj datoteci za pokretanje /etc/rc.d/rc.S (rc.d je mapa). Uljudno pitamo:

    / bin / mount -av -t nonfs

    Također nam je potrebna datoteka profila (b) (a) sh, općenito postoji prostor za maštu. Napravite datoteku / etc / profila i ispunite je sljedećim:

    PATH = "$ PATH: / bin: / sbin: / usr / bin: / usr / sbin:"
    MANJE = -MM
    POJAM = linux
    HOME = / korijen
    PS1 = ">"
    PS2 = ">"
    ignoreeof = 10
    izvoz PUT PRIKAZ MANJI POJAM PS1 PS2 HOME ignoreeof

    Trebat će vam i datoteka / etc / shell, što ukazuje da postoji ljuska:

    / kanta / sh
    / kanta / pepeo
    / bin / bash

    To je sve. Možete zapisati naš Ramdisk u datoteku.

    mkdir / os - mapa za "gotovo".
    umount / dev / ram0 - demontirajte dio RAM-a.
    dd if = / dev / ram0 of = / os / initrd bs = 1k count = 5000 - kreirajte datoteku.
    gzip / os / initrd - komprimirajte initrd datoteku

    Izrada USB diska za podizanje sustava

    "Kućno rastezanje" našeg malog dizajna. Uzimamo USB flash pogon, umetamo ga, formatiramo u vfat (možete koristiti i ext, ali ne zaboravite da se svi korisnici Windowsa još nisu snimili).

    Na USB flash pogonu stvorite mapu za pokretanje, u njoj mape initrd i kernel.

    Kopirajte komprimirani Ramdisk iz / os mape u boot / initrd mapu na flash pogonu, nazovite ga "main.gz". Kopirajte bzImage iz mape s izvorima kernela u boot / kernel mapu na flash pogonu, nazovite je "main.lk". Dobivamo datoteke Syslinux bootloadera (na internetu ili iz drugog distribucijskog kompleta: ovdje nije važno), naime syslinux.bin, syslinux.boot, syslinux.cfg. Kopiramo ih u korijenski direktorij našeg flash pogona. U datoteci syslinux.cfg pišemo nešto poput ovoga:

    zadani mm
    upit 1
    istek 100
    oznaka mm
    kernel /boot/kernel/main.lk

    oznaka mc
    kernel /boot/kernel/main.lk

    oznaka cm
    kernel /boot/kernel/custom.lk
    dodaj initrd = / boot / initrd / main.gz load_ramdisk = 1 ramdisk_size = 5000 rw root = / dev / ram0
    oznaka cc
    kernel /boot/kernel/custom.lk
    dodaj initrd = / boot / initrd / custom.gz load_ramdisk = 1 ramdisk_size = 5000 rw root = / dev / ram0
    oznaka hd
    lokalno pokretanje 0x80

    Tako smo podržali prilagođeni initrd i kernel, koji se, eksperimenta radi, može povezati s našom distribucijom.

    Otkrijmo koji je uređaj naš flash pogon u sustavu (možete pokrenuti mount bez parametara i vidjeti). Ovo je ili / dev / sdb1, ili / dev / sdc1, ili / dev / sdd1. Vrijedno je odspojiti USB stick prije početka instalacije.

    Instalirajte syslinux (ako paket nije na sustavu, apt-get install syslinux):

    syslinux -d put_uređaja

    Datoteka ldlinux.sys trebala bi se pojaviti u korijenskom direktoriju flash pogona. Ako jest, onda syslinux.bin, syslinux.boot više nisu potrebni.

    Neću vam reći kako konfigurirati BIOS za pokretanje s USB flash pogona - to je jednostavno. Reći ću samo da je vrlo prikladno stvoriti / boot / initrd / init mapu, u koju se može montirati / boot / initrd / main, za naknadni rad s njom. Ne zaboravite ga dekomprimirati i komprimirati pomoću gzipa.

    OK, sada je sve gotovo.

    Kao da sam vam upravo rekao kako stvoriti Linux sustav od nule. Lako, zar ne? Tada možete uređivati ​​/ sbin / init skriptu, jer imate još puno posla! Morat ćete napisati skriptu za montiranje sticka koji chroot u korijenski direktorij. Inače ćete morati raditi s particijom samo za čitanje, veličine 5 MB. Ali to je sasvim druga priča.

    Vrhunski povezani članci