Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 10
  • Kreiranje operativnog sistema zasnovanog na jezgru Linuxa. Od nule

Kreiranje operativnog sistema zasnovanog na jezgru Linuxa. Od nule

Ova serija članaka posvećena je programiranju niskog nivoa, odnosno računarskoj arhitekturi, dizajnu operativnog sistema, programiranju na asembleru i srodnim oblastima. Do sada se dva habrauzera bave pisanjem - i. Za mnoge srednjoškolce, studente i profesionalne programere ove se teme ispostavljaju kao veoma teške za učenje. Postoji mnogo literature i kurseva o programiranju niskog nivoa, ali je od njih teško dobiti potpunu i sveobuhvatnu sliku. Teško je, nakon čitanja jedne ili dvije knjige o asembleru i operativnim sistemima, zamisliti barem općenito kako ovaj složeni sistem gvožđa, silicijuma i mnogih programa – kompjuter – zapravo funkcioniše.

Svako rješava problem učenja na svoj način. Neko čita puno literature, neko pokušava usput brzo preći na praksu i razumjeti, neko pokušava objasniti prijateljima sve što uči. I odlučili smo da kombinujemo ove pristupe. Dakle, u ovom kursu članaka ćemo pokazati korak po korak kako napisati jednostavan operativni sistem. Članci će biti preglednog karaktera, odnosno neće sadržavati iscrpne teorijske informacije, međutim, uvijek ćemo nastojati dati linkove 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 usavršimo neke tehničke vještine na njoj. Dakle, ne bi trebalo da naše odluke uzimate kao jedine ispravne i da nam slijepo vjerujete. Još jednom naglašavamo da od čitatelja očekujemo da budu aktivni u raspravi o člancima, što bi trebalo snažno uticati na ukupan razvoj i pisanje narednih članaka. U idealnom slučaju, željeli bismo vidjeti neke od čitalaca da se pridruže razvoju sistema tokom vremena.

Pretpostavićemo da je čitalac već upoznat sa osnovama asemblerskih i C jezika, kao i osnovnim konceptima računarske arhitekture. Odnosno, nećemo objašnjavati šta je registar ili, recimo, memorija sa slučajnim pristupom. Ukoliko nemate dovoljno znanja, uvijek se možete obratiti dodatnoj literaturi. Kratka lista referenci i linkovi na sajtove sa dobrim člancima nalaze se na kraju članka. Također je poželjno biti u mogućnosti koristiti Linux, jer će sva uputstva za kompilaciju biti data posebno za ovaj sistem.

A sada - više o stvari. U nastavku članka ćemo napisati klasičan program "Hello World". Naš Hello World će se pokazati malo specifičnim. Neće se pokretati ni sa jednog operativnog sistema, već direktno, da tako kažemo, "na golom metalu". Pre nego što pređemo direktno na pisanje koda, hajde da shvatimo kako to tačno pokušavamo da uradimo. A za ovo morate uzeti u obzir proces pokretanja vašeg računara.

Dakle, uzmite svoj omiljeni računar i pritisnite najveće dugme na sistemskoj jedinici. Vidimo veseli početni ekran, sistemska jedinica veselo pišti zvučnikom, a nakon nekog vremena operativni sistem se učitava. Kao što razumete, operativni sistem je pohranjen na hard disku i tu se postavlja pitanje: kako se operativni sistem magično pokrenuo u RAM i počeo da se izvršava?

Znajte ovo: sistem koji se nalazi na bilo kom računaru je odgovoran za to, a njegovo ime - ne, ne Windows, pipa vam jezikom - zove se BIOS. Njegovo ime je skraćenica za Basic Input-Output System, odnosno osnovni ulazno-izlazni sistem. BIOS se nalazi na malom mikrokolu na matičnoj ploči i pokreće se odmah nakon pritiska na veliko dugme ON. BIOS ima tri glavna zadatka:

  1. Otkrijte sve povezane uređaje (procesor, tastaturu, 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, onda nikakav softver neće moći da pomogne, a u ovom trenutku sistemski zvučnik će škripati nešto zlokobno i OS neće uopšte doći do OS. Hajde da ne pričamo o tužnom, pretpostavimo da imamo potpuno ispravan računar, radujte se i pređite na ispitivanje druge funkcije BIOS-a:
  2. Omogućavanje operativnom sistemu osnovnog skupa funkcija za rad sa hardverom. Na primjer, putem BIOS funkcija možete prikazati tekst na ekranu ili čitati podatke sa tastature. Stoga se naziva osnovnim I/O sistemom. Operativni sistem obično pristupa ovim funkcijama putem prekida.
  3. Pokretanje učitavača operativnog sistema. U ovom slučaju, u pravilu se čita sektor za pokretanje - prvi sektor nosača informacija (flopi disk, tvrdi disk, CD, fleš disk). Redoslijed medija za prozivanje može se podesiti u BIOS SETUP. Sektor za pokretanje sadrži program koji se ponekad naziva primarni pokretač. Grubo govoreći, posao bootloadera je da pokrene operativni sistem. Proces pokretanja operativnog sistema može biti veoma specifičan i u velikoj meri zavisi od njegovih karakteristika. Stoga, primarni program za pokretanje sistema pišu direktno OS programeri i upisuje se u sektor za pokretanje tokom instalacije. U trenutku pokretanja pokretača, procesor je u realnom modu.
Tužna vijest: veličina bootloadera bi trebala biti samo 512 bajtova. Zašto tako malo? Da bismo to učinili, moramo se upoznati s uređajem diskete. Evo jedne informativne slike:

Slika prikazuje površinu disk jedinice. Disketa ima 2 površine. Svaka površina ima prstenaste staze (trake). Svaka staza je podijeljena na male, lučne dijelove zvane sektori. Dakle, istorijski gledano, sektor diskete ima veličinu od 512 bajtova. Prvi sektor na disku, boot sektor, BIOS čita u nulti memorijski segment na ofsetu 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 (najvjerovatnije, razlog je veličina) koji se ne uklapa u jedan sektor. A pošto do sada ulogu našeg OS-a igra banalan Hello World, naš glavni cilj je da učinite da kompjuter povjeruje u postojanje našeg OS-a, makar samo na jednom sektoru, i pokrenite ga.

Kako funkcionira boot sektor? Na PC-u, jedini zahtjev za sektor za pokretanje je da njegova posljednja dva bajta sadrže vrijednosti 0x55 i 0xAA - potpis sektora za pokretanje. Dakle, već je manje-više jasno šta treba da radimo. Hajde da napišemo kod! Gornji kod je napisan za yasm asembler.

odjeljak. tekst

upotreba16

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 string komande

mov ah, 0x0E ; Broj funkcije BIOS-a

mov bh, 0x00 ; stranica video memorije

puts_loop:

lodsb ; učitaj sljedeći karakter 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šiti:

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

db 0x55, 0xAA ; potpis sektora za pokretanje

Ovaj kratki program zahtijeva niz važnih objašnjenja. org 0x7C00 linija je potrebna 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), pošto su u našem programu i podaci i kod pohranjeni u jednom segmentu.

Tada se u petlji prikazuje znak po znak poruka “Hello World!”. 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 karaktera

Na liniji "jmp $" program visi. I s pravom, nema potrebe da ona izvršava dodatni kod. Međutim, da bi računar ponovo radio, moraćete da ga ponovo pokrenete.

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

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

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

Odlučite na kojem uređaju želite da pokrenete operativni sistem. To može biti CD, DVD, fleš disk, čvrsti disk ili drugi računar.

Odlučite kako želite da vaš operativni sistem izgleda. Treba li to biti puna verzija OS-a sa grafičkim korisničkim interfejsom (GUI), ili možda nešto minimalističkije? Morate znati u kojem smjeru ići prije nego što započnete proces.

Provjerite koju platformu procesora podržava vaš operativni sistem. AI-32 i x86_64 su dvije najčešće verzije za personalne računare, pa se mogu smatrati najboljim izborom.

Odlučite da li više volite da radite sve sami od nule, ili postoje kerneli na osnovu kojih biste želeli da izgradite sistem. Linux od nule je projekt za one koji žele, na primjer, stvoriti vlastitu Linux distribuciju.

Odaberite hoćete li koristiti vlastiti bootloader ili unaprijed izgrađeni Grand Unified Bootloader (GRUB). Budući da kodiranje vašeg vlastitog programa za pokretanje zahtijeva opsežno poznavanje kompjuterskog softvera i BIOS-a, može pomjeriti raspored programiranja za stvarni kernel.

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

  • Da biste napravili OS pomoću C ili C ++ koda, vi ćete, naravno, koristiti jedan ili drugi kompajler. To znači da morate pročitati priručnik / uputstva / dokumentaciju za C / C ++ kompajler po vašem izboru koji dolazi u paketu sa softverom ili je dostupan na web stranici distributera. Morat ćete naučiti mnogo komplikovanih stvari o kompajleru, a također ćete morati naučiti šemu i ABI da poboljšate C++. Od vas se očekuje da razumete različite formate izvršavanja (ELF, PE, COFF, obične binarne datoteke, itd.) i primetite da je Windowsov izvorni PE format (.exe) zaštićen autorskim pravima.
  • Odaberite Aplikacijski programski interfejs (API). Jedna kolekcija dobrih API-ja je POSIX, jer je dobro dokumentovan. Svi Unix sistemi imaju barem delimičnu podršku za POSIX, tako da bi bilo trivijalno dodati Unix programe svom operativnom sistemu.

    Odlučite se za dizajn. Postoje monolitna jezgra i mikrojezgra. Monolitni kerneli obavljaju sve usluge u kernelu, dok mikrokerneli imaju mali kernel u kombinaciji sa implementacijom prilagođenog servisa. U principu, monolitna jezgra su brža, ali mikrojezgra imaju bolju izolaciju i zaštitu od mogućih grešaka.

    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 napravite bolji operativni sistem u kraćem vremenskom periodu.

    Nemojte potpuno brisati čvrsti disk. Zapamtite, formatiranjem diska će se trajno izbrisati svi vaši podaci! Koristite GRUB ili neki drugi menadžer za dupliranje pokretanja računara sa drugog OS-a dok vaša verzija ne bude potpuno funkcionalna.

    Počnite s malim. Prvo obratite pažnju na male stvari poput prikaza teksta i prekida prije nego što pređete na složene elemente poput upravljanja memorijom i multitaskinga.

    Sačuvajte sigurnosnu kopiju najnovije radne verzije. Ovo vam daje određenu dozu mira u slučaju da nešto krene potpuno po zlu s vašom trenutnom verzijom OS-a ili narednim dodacima. U slučaju kvara vašeg računara i nemogućnosti pokretanja, kao što i sami razumijete, posjedovanje druge kopije za rad bit će odlična prilika, tako da možete popraviti postojeće greške.

    Testirajte svoj novi operativni sistem na virtuelnoj mašini. Umjesto ponovnog pokretanja računara svaki put kada izvršite promjene ili prenesete datoteke sa svog proizvodnog računala na probnu mašinu, možete koristiti aplikaciju za pokretanje OS-a na virtuelnoj mašini dok vaš trenutni OS još uvek radi. VM aplikacije uključuju VMWare (koji takođe ima besplatno dostupan server), alternativni open source, Bochs, Microsoft Virtual PC (nije kompatibilan s Linuxom) i XVM VirtualBox.

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

  • Operativni sistem također mora biti prilagođen korisniku, pa svakako dodajte korisne funkcije koje će postati sastavni dio vašeg dizajna.

    • Kada se razvoj završi, razmislite da li želite da kod učinite slobodno dostupnim ili da uspostavite privatna prava na njega.
    • Pobrinite se da vam sigurnosne funkcije budu glavni prioritet ako želite da vaš sistem bude održiv.
    • Nemojte započinjati projekat razvoja operativnog sistema u svrhu podučavanja programiranja. Ako ne znate C, C++, Pascal ili bilo koje druge odgovarajuće jezike i svojstva, uključujući tipove pokazivača, operacije bitova niskog nivoa, prebacivanje bitova, inline asembler, itd., onda niste spremni za kreiranje OS.
    • Pregledajte portale kao što su OSDev i OSDever koji će vam pomoći da poboljšate svoj operativni sistem. 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 da se pridružite članovima foruma, za to moraju postojati određeni preduslovi. Morate imati temeljno poznavanje C ili C ++ i x86 asemblerskog jezika. Također biste trebali razumjeti opšte i složene koncepte programiranja kao što su povezane liste, redovi itd. OSDev zajednica u svojim pravilima eksplicitno navodi da niko neće čuvati nove programere. Ako pokušavate da razvijete OS, podrazumeva se da ste "bog" u oblasti 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 Google-a ("Intel Manuals", "ARM manuals", itd.). Nemojte se prijavljivati ​​na forum OSDev.org da biste postavljali očigledna pitanja. To će samo dovesti do odgovora poput "Pročitajte jebeni priručnik". Za početak pokušajte čitati Wikipediju, tutorijale za različite alate koje namjeravate koristiti.
    • Provjerite ima li potencijalnih slijepih uglova i drugih grešaka. Nedostaci, slijepe ulice i drugi problemi mogu utjecati na dizajn vašeg operativnog sistema.
    • 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 kreirate je u vlasništvu kompanije koja je prva uvela uslugu (iako imate prava da je slobodno distribuirate, modifikujete i pokrećete kako želite pod GPL-om).
    • Dobro rješenje je kreiranje potpuno nove particije za operativni sistem u razvoju.

    Upozorenja

    • Nepažljivo prepisivanje OS-a na čvrsti disk može ga potpuno oštetiti. Budi pazljiv
    • Nećete imati kompletan sistem za dve nedelje. Počnite sa operativnim sistemom za pokretanje, a zatim pređite na zanimljiviji materijal.
    • Ako učinite nešto nepromišljeno, kao što je pisanje neurednih bajtova u nasumične ulazno/izlazne portove, onda uništite svoj OS i (u teoriji) biste mogli spaliti vaš hardver.
    • Ne očekujte da će biti lako izgraditi kvalitetan operativni sistem. Postoji mnogo složenih međuzavisnosti. 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 neaktivni. Međutim, planer zavisi od prisustva menadžera memorije. Ovo je primjer ovisnosti o zastoju. Ne postoji standardni način za rješavanje ovakvih problema; od svakog kreatora operativnog sistema se očekuje da bude dovoljno vješt da dođe do vlastitog rješenja.

    Izvori od

    Šta ti treba

    • Kompjuter
    • Procesor na kojem ćete graditi
    • Dovoljna memorija slučajnog pristupa (RAM) za virtuelnu mašinu
    • Primarni OS (koristi se za razvoj asemblerskog izvornog koda (i drugih), te rano sastavljanje i pakovanje; vaš vlastiti OS će na kraju postati primarni)
    • Uređivač kodova u boji sintakse (koristi se u nedostatku integrisanog razvojnog okruženja)
    • Kompajler
    • CD/DVD pogon
  • Ilya Alexandrov

    Kreiramo vlastiti OS baziran na Linuxu

    Postoje stotine Linux distribucija, a ne zna se koliko će se još pojaviti. Desetine kompanija i hiljade programera takmiče se u kreiranju najboljeg Linux projekta, dok svaki iskusni korisnik može postati autor kućnog računarskog sistema koji može parirati proizvodima IT giganata.

    Tokom godina rada sa Linuxom, koristio sam ogroman broj različitih distribucija: Mandriva, Fedora, SlackWare, Debian, Ubuntu i mnoge druge. Neki projekat mi se dopao više, neki manje. Ali u svim distribucijama se neminovno moralo suočiti sa ozbiljnim nedostacima koji su veoma 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, uradi to sam.

    Linux od nule

    Nisam jedini koji je odlučio da počne graditi sopstvenu verziju Linuxa - OS u kojem će se kao osnova uzeti osnovni dio sistema i kernel, ali gdje neće biti niti jedan dodatni kilobajt od programer, odnosno od vas. Veliki broj Linux distribucija koje ne zadovoljavaju zahtjeve korisnika natjerao je Gerarda Beekmansa da kreira distribuciju koja će svakom dati priliku da izgradi sistem samo sa komponentama i funkcijama koje su im potrebne.

    Težnja talentovanog programera rezultirala je projektom Linux from Scratch (www.linuxfromscratch.org), ili skraćeno LFS. Ovaj projekat vam omogućava da konstruišete od nule, iz izvornih kodova, vaš operativni sistem zasnovan na Linuxu. LFS je kompajliran na računaru sa već instaliranim Linux sistemom, međutim, "napredni" Live-CD, na primer, Knoppix, će biti dobar.

    U ovom slučaju, Linux sistem koji se koristi za izgradnju može biti bilo koji - potrebno je samo prisustvo kompajlera i sistemskih biblioteka. Linux From Scratch teško se može nazvati distributivnim kompletom u uobičajenom smislu te riječi - to je nešto poput pomoćnog softvera koji će vam, zajedno s osnovnim dijelom operativnog sistema, omogućiti da kreirate vlastitu, jedinstvenu verziju OS-a.

    Kao što znate, Linus Torvalds je razvio svoj operativni sistem pod motom "Samo za zabavu!" - odnosno samo radi zadovoljstva. Moram priznati da se LFS zaista ne nalazi često na serverima, ovaj sistem obično koriste kompjuterski entuzijasti. Instalacija i rad sa Linuxom od nule pomoći će vam da shvatite međusobnu povezanost komponenti OS-a, što će vam dobro doći za vlastiti razvoj Linux distribucije, a ne samo zasnovane na LFS-u. Stoga je LFS u velikoj mjeri dizajniran za one ljude kojima je proces izgradnje vlastite distribucije zabavan i zanimljiv – a takvih je, vjerujte, mnogo.

    Dakle, ako ste spremni da potrošite ceo dan (ili čak i više) na konstruisanje sistema, onda preporučujem da preuzmete LFS-pakete-6.0, LFS-knjigu sa sajta (2) i nastavite da čitate ovaj članak.

    Particioniranje diska i kreiranje stabla direktorija

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

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

    U cijelom procesu, vaš glavni pomoćnik je dokumentacija iz paketa LFS-book, čiji prevod na ruski možete pronaći ovdje: http://multilinux.sakh.com/download/lfsbook.tar.bz2. Knjiga detaljno pokriva svaki korak izgradnje OS-a, pa svakako pogledajte ovaj vodič u slučaju problema (ovaj članak nije namijenjen da zamijeni tako obimnu dokumentaciju).

    Kreirajte novu particiju - u mom slučaju / dev / hda5, pošto je / dev / hda1 particija već zauzeta instaliranim Slackware Linux tvrdim diskom. Preporučljivo je da prvo napravite rezervnu kopiju sistema kako biste ga mogli vratiti u slučaju oštećenja, iako je vjerovatnoća 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 kreirati zasebne particije za početni direktorij (/home) i za /boot. Međutim, popularna opcija particioniranja - da se dodijeli sav raspoloživi prostor minus swap za korijenski direktorij i naknadno kreiranje samog swapa - također je sasvim prihvatljiva kada se pravi LFS. Na autorskom računaru i Linuxu, Slackware, koji je roditeljski OS, i LFS koriste isti hard disk, međutim, instaliranje LFS-a na drugi hard disk takođe nije teško.

    Izaberite sistem datoteka po svom nahođenju: nije bilo problema i sa Ext3 i ReiserFS pod LFS. Ali fanovi XFS-a će morati da uznemire – pokušaji da se Linux od nule radi sa ovim FS-om nisu krunisani uspehom.

    Sada montiramo particiju posvećenu novom OS-u:

    $ mount / dev / hda5 / mnt / mylin

    Radi praktičnosti, definirajmo varijablu MYLIN:

    $ izvoz MYLIN = / mnt / mylin

    Odlično, za daljnji rad bolje je kreirati poseban korisnički mylin, kojem ćemo dodijeliti vlasnika montirane particije.

    $ useradd mylin

    $ chown –R mylin $ MYLIN

    Moramo kreirati stablo direktorija u korijenu novog odjeljka:

    $ cd $ MYLIN

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

    Kreirajte potrebnu strukturu u usr, usr / X11R6, usr / lokalni direktoriji: poddirektorijumi bin, itd., include, lib, sbin, share, src.

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

    $ 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. Ali obim članka ne dozvoljava da se ovdje daju sve informacije o strukturi stabla datoteka, tako da morate ili 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 Linux porodice koju ste već instalirali. Nakon pripreme tvrdog diska, prelazimo na statičku montažu.

    Statička konstrukcija

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

    Ali kada koristimo chroot naredbu za postavljanje korijenskog direktorija za novoizgrađeni sistem, biblioteke "roditelja", instaliranog sistema koji se nalazi u /lib, /usr/lib i drugi više neće biti dostupni, tako da dinamički kompajlirani programi će odbiti da rade, osim toga, kompatibilnost verzija od strane bilo koga ne garantuje.

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

    $ ./configure –-pomoć

    Kako ne biste brkali kasnije statički kompajlirane programe sa "dinamičkim" programima, kreirajte poseban direktorij za njih:

    $ mkdir $ MYLIN / stat

    Kada pravite i instalirate pakete, ne zaboravite da dodate parametar "--prefix = $ MYLIN / stat" za premještanje datoteka u ovaj određeni direktorij. Na kraju, instaliramo bash:

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

    $ make

    $ napravi 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, u stvari, 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čuje se korištenje gcc 3.x pa da nema problema.

    Ne zaboravite pogledati odgovarajuće odjeljke LFS-knjige, on kaže o ovome i mnogim drugim nijansama. Općenito, kompajliranje kernela u LFS-u se ne razlikuje od slične procedure koja se provodi kada se koristi distribucijski komplet instaliran na HDD. Raspakujte izvore kernela u $ MYLIN / usr / src / linux-2.6.xx, a zatim ga konfigurišite pokretanjem:

    $ make menuconfig

    Proces konfigurisanja parametara kernela je mnogo puta opisan na Internetu (6), nema potrebe da se na tome detaljnije zadržavamo. Zatim dajemo sljedeće naredbe u direktoriju s izvorima Linux kernela:

    $ make bzImage

    $ make module

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

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

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

    Dynamic build

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

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

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

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

    > / stat / bin / bash --login

    Ovom komandom smo odredili putanje do izvršnih datoteka, tip terminala, interpreter i tip prompt-a komandne linije.

    Da bi neki programi radili, proc sistem datoteka mora biti instaliran na novom sistemu.

    $ 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 kada se korijen promijeni, svi statički izgrađeni paketi će se 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. Moraćemo malo da doteramo izvorni kod zbog činjenice da je u ovoj fazi u sistemu nemoguće identifikovati korisnika po imenu (samo zbog nedostatka glibc-a i drugih biblioteka), kao i činjenice da je instaliran glibc potreban vam je Perl interpreter, koji mi nemamo.

    Zamijenjujemo korisničko ime root u login / Makefile-u njegovim uid-om, koji je 0, a varijablu $ PERL u malloc / Makefile-u treba zamijeniti putanjom do interpretera - / usr / bin / perl - i jednostavno će biti zanemareno tokom konfiguracije.

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

    & make

    & izvrši instalaciju

    $ make localedata / install-locales

    $ / stat / bash --login

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

    Završite instalaciju kernela:

    $ make modules_install

    $ napravi instalaciju

    Da premjestite novi kernel u /boot direktorij, izvršite još jednu naredbu:

    $ poništiti

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

    Tabela 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

    senka

    fajl

    napraviti

    sysklogd

    fileutils

    makedev

    sysvinit

    findutils

    man-stranice

    flex

    modutils

    texinfo

    gawk

    ncurses

    textutils

    netkitbase

    util-linux

    bison

    net-tools

    gettext

    patch

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

    $ rm -rf / stat

    Možete odahnuti i popiti kafu - ono najteže, rutina je ostala iza. Pređimo na sljedeću fazu - početnu konfiguraciju našeg sistema.

    Početna konfiguracija sistema

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

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

    UTC = 0

    Sada će sat računara prikazati vrijeme u vašoj vremenskoj zoni - pod uslovom da je vrijeme u BIOS-u ispravno podešeno.

    Damo kompjuteru ime:

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

    Sada ćemo navesti particije koje sistem treba montirati prilikom pokretanja u / etc / fstab:

    # opcije fajl sistema tačke montiranja fs-type dump fsck-red

    / dev / hda5 / ext3 zadane postavke 1 1

    / dev / hda3 swap swap 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 tačke montiranja za druge particije tvrdog diska i CD-ROM-a ako je potrebno.

    Sada učinimo da naš sistem bude pokretan.

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

    $ izlaz

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

    # LFS

    image = / boot / bzImage

    Oznaka = lfs

    Root =

    Samo za čitanje

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

    Ako ne planirate da koristite druge operativne sisteme i Linux distribucije, idite direktno na konfigurisanje LILO-a u LFS-u.

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

    boot = / dev / hda

    Kašnjenje = 40

    Compact

    Vga = normalno

    Root = / dev / hda1

    Samo za čitanje

    Slika = / boot / zImage-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 izvedeni kako treba, naći ćemo se u novom sistemu. Međutim, duga faza "finog podešavanja" podešavanja (posebnu pažnju treba obratiti na sigurnost novog sistema, jer LFS po defaultu izgleda prilično nezaštićeno, kao i svaki novoinstalirani OS) tek je pred nama. Ali već imate samosastavljenu verziju Linuxa.

    P.S

    Gerard Bickmans nije jedini koji ima ideju da kreira vlastiti Linux. Još jedan projekat, BYOLinux, na čijem je čelu Jonatan Thorpe, danas je prekinuo 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 sa roditelja na dijete bez ponovnog kompajliranja, što nije tako efikasno, ali izbjegava mnoge probleme u izgradnji. Neki korisnici FreeBSD-a također žele da se osjećaju kao OS dizajneri.

    Sada je to sasvim moguće - na http://ezine.daemonnews.org/200302/fbsdscratch.html postoji članak o izgradnji FreeBSD-a iz izvora u cjelini - od distribucija do portova, a metoda nije slična uobičajenoj " rebuild" sistema, ali slično metodi Gerarda Beekmansa. Pa, sada imate svoj jedinstveni sistem zasnovan na Linuxu. U slučaju problema, njihovo rješenje potražite u LFS-knjigi, tamo je sve detaljno opisano. Takođe preporučujem preuzimanje Linux Network Administrator's Guide sa portala http://www.tldp.org, iako se ne odnosi direktno na LFS, dobro će doći u fazi postavljanja sistema. Ne zaboravite da svaki program također dolazi sa 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. Zvanični 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 kompajliranju Linux kernela - http://vikos.lrn.ru/MyLDP/kernel/kompil-2-6.html.
    6. Bayrak A. Recenzija Knoppixa 3.7 Russian Edition. - Časopis "System Administrator", br. 3, mart 2005. - 4-6 str. ().

    Ova serija članaka posvećena je programiranju niskog nivoa, odnosno računarskoj arhitekturi, dizajnu operativnog sistema, programiranju na asembleru i srodnim oblastima. Do sada se pisanjem bave dva habrauzera - iley i pehat. Za mnoge srednjoškolce, studente i profesionalne programere ove se teme ispostavljaju kao veoma teške za učenje. Postoji mnogo literature i kurseva o programiranju niskog nivoa, ali je od njih teško dobiti potpunu i sveobuhvatnu sliku. Teško je, nakon čitanja jedne ili dvije knjige o asembleru i operativnim sistemima, zamisliti barem općenito kako ovaj složeni sistem gvožđa, silicijuma i mnogih programa – kompjuter – zapravo funkcioniše.

    Svako rješava problem učenja na svoj način. Neko čita puno literature, neko pokušava usput brzo preći na praksu i razumjeti, neko pokušava objasniti prijateljima sve što uči. I odlučili smo da kombinujemo ove pristupe. Dakle, u ovom kursu članaka ćemo pokazati korak po korak kako napisati jednostavan operativni sistem. Članci će biti preglednog karaktera, odnosno neće sadržavati iscrpne teorijske informacije, međutim, uvijek ćemo nastojati dati linkove 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 usavršimo neke tehničke vještine na njoj. Dakle, ne bi trebalo da naše odluke uzimate kao jedine ispravne i da nam slijepo vjerujete. Još jednom naglašavamo da od čitatelja očekujemo da budu aktivni u raspravi o člancima, što bi trebalo snažno uticati na ukupan razvoj i pisanje narednih članaka. U idealnom slučaju, željeli bismo vidjeti neke od čitalaca da se pridruže razvoju sistema tokom vremena.

    Pretpostavićemo da je čitalac već upoznat sa osnovama asemblerskih i C jezika, kao i osnovnim konceptima računarske arhitekture. Odnosno, nećemo objašnjavati šta je registar ili, recimo, memorija sa slučajnim pristupom. Ukoliko nemate dovoljno znanja, uvijek se možete obratiti dodatnoj literaturi. Kratka lista referenci i linkovi na sajtove sa dobrim člancima nalaze se na kraju članka. Također je poželjno biti u mogućnosti koristiti Linux, jer će sva uputstva za kompilaciju biti data posebno za ovaj sistem.

    A sada - više o stvari. U nastavku članka ćemo napisati klasičan program "Hello World". Naš Hello World će se pokazati malo specifičnim. Neće se pokretati ni sa jednog operativnog sistema, već direktno, da tako kažemo, "na golom metalu". Pre nego što pređemo direktno na pisanje koda, hajde da shvatimo kako to tačno pokušavamo da uradimo. A za ovo morate uzeti u obzir proces pokretanja vašeg računara.

    Dakle, uzmite svoj omiljeni računar i pritisnite najveće dugme na sistemskoj jedinici. Vidimo veseli početni ekran, sistemska jedinica veselo pišti zvučnikom, a nakon nekog vremena operativni sistem se učitava. Kao što razumete, operativni sistem je pohranjen na hard disku i tu se postavlja pitanje: kako se operativni sistem magično pokrenuo u RAM i počeo da se izvršava?

    Znajte ovo: sistem koji se nalazi na bilo kom računaru je odgovoran za to, a njegovo ime - ne, ne Windows, pipa vam jezikom - zove se BIOS. Njegovo ime je skraćenica za Basic Input-Output System, odnosno osnovni ulazno-izlazni sistem. BIOS se nalazi na malom mikrokolu na matičnoj ploči i pokreće se odmah nakon pritiska na veliko dugme ON. BIOS ima tri glavna zadatka:

    1. Otkrijte sve povezane uređaje (procesor, tastaturu, 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, onda nikakav softver neće moći da pomogne, a u ovom trenutku sistemski zvučnik će škripati nešto zlokobno i OS neće uopšte doći do OS. Hajde da ne pričamo o tužnom, pretpostavimo da imamo potpuno ispravan računar, radujte se i pređite na ispitivanje druge funkcije BIOS-a:
    2. Omogućavanje operativnom sistemu osnovnog skupa funkcija za rad sa hardverom. Na primjer, putem BIOS funkcija možete prikazati tekst na ekranu ili čitati podatke sa tastature. Stoga se naziva osnovnim I/O sistemom. Operativni sistem obično pristupa ovim funkcijama putem prekida.
    3. Pokretanje učitavača operativnog sistema. U ovom slučaju, u pravilu se čita sektor za pokretanje - prvi sektor nosača informacija (flopi disk, tvrdi disk, CD, fleš disk). Redoslijed medija za prozivanje može se podesiti u BIOS SETUP. Sektor za pokretanje sadrži program koji se ponekad naziva primarni pokretač. Grubo govoreći, posao bootloadera je da pokrene operativni sistem. Proces pokretanja operativnog sistema može biti veoma specifičan i u velikoj meri zavisi od njegovih karakteristika. Stoga, primarni program za pokretanje sistema pišu direktno OS programeri i upisuje se u sektor za pokretanje tokom instalacije. U trenutku pokretanja pokretača, procesor je u realnom modu.
    Tužna vijest: veličina bootloadera bi trebala biti samo 512 bajtova. Zašto tako malo? Da bismo to učinili, moramo se upoznati s uređajem diskete. Evo jedne informativne slike:

    Slika prikazuje površinu disk jedinice. Disketa ima 2 površine. Svaka površina ima prstenaste staze (trake). Svaka staza je podijeljena na male, lučne dijelove zvane sektori. Dakle, istorijski gledano, sektor diskete ima veličinu od 512 bajtova. Prvi sektor na disku, boot sektor, BIOS čita u nulti memorijski segment na ofsetu 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 (najvjerovatnije, razlog je veličina) koji se ne uklapa u jedan sektor. A pošto do sada ulogu našeg OS-a igra banalan Hello World, naš glavni cilj je da učinite da kompjuter povjeruje u postojanje našeg OS-a, makar samo na jednom sektoru, i pokrenite ga.

    Kako funkcionira boot sektor? Na PC-u, jedini zahtjev za sektor za pokretanje je da njegova posljednja dva bajta sadrže vrijednosti 0x55 i 0xAA - potpis sektora za pokretanje. Dakle, već je manje-više jasno šta treba da radimo. Hajde da napišemo kod! Gornji kod je napisan za yasm asembler.

    odjeljak. tekst

    upotreba16

    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 string komande

    mov ah, 0x0E ; Broj funkcije BIOS-a

    mov bh, 0x00 ; stranica video memorije

    puts_loop:

    lodsb ; učitaj sljedeći karakter 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šiti:

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

    db 0x55, 0xAA ; potpis sektora za pokretanje

    Ovaj kratki program zahtijeva niz važnih objašnjenja. org 0x7C00 linija je potrebna 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), pošto su u našem programu i podaci i kod pohranjeni u jednom segmentu.

    Tada se u petlji prikazuje znak po znak poruka “Hello World!”. 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 karaktera

    Na liniji "jmp $" program visi. I s pravom, nema potrebe da ona izvršava dodatni kod. Međutim, da bi računar ponovo radio, moraćete da ga ponovo pokrenete.

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

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

    Prije ili kasnije, svaki korisnik Linuxa razmišlja o stvaranju vlastitog distributivnog kompleta. Neki tvrde da možete "sve prilagoditi sebi". Drugi se žale da među distribucijama koje su već predstavljene u Filijali nema ideala. I oni navodno imaju superkonceptualne ideje za svoj sistem. Zašto sam pokrenuo svu ovu psihologiju? Da bi odmah prekinuo kiseonik početnicima koji se igraju sa Linuxom, koji nemaju šta da rade. Ako već razmišljate o stvaranju OS-a, razmislite do kraja. dakle,

    Želim da kreiram Linux baziran OS.
    Odmah upozoravam: bio bi to 18. vijek, obješeni bi svi oni koji za osnovu svog budućeg sistema izaberu neki drugi razvijeni distributivni komplet (i ne daj Bože popularan...). Post govori o kreiranju sistema od nule, što znači da nećemo dirati Slax i Linux Mint.

    Korak 1. Odaberite medij
    Postoji nekoliko opcija: ili vaš OS počinje sa LiveCD-a, ili sa hard diska, ili sa fleš uređaja. Odmah ću napraviti rezervaciju: neću reći ni riječi o tvrdom disku u postu, jer je mnogo praktičnije napraviti fleksibilni distributivni komplet iz serije "Sve nosim sa sobom", ili zaključani distributivni komplet na optičkom disku. Ako naučite kako da kreirate LiveCD ili LiveUSB sistem, neće biti problema sa instalacijom na čvrsti 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ćeg Linux kernela, ovaj korak podstiče dalji razvoj... Dakle, potrebni su nam izvori kernela. Svaki korisnik zna da se može dobiti sa kernel.org. Ni pod kojim okolnostima, da li čujete?, nikada ne šrafirajte kernel treće strane koji niste vi kompajlirali na svoj sistem!

    Budući da je moja lijenost bila van granica, napravio sam / linuxkernel folder i raspakirao arhivu sa izvorima tamo. Nakon što sam se prijavio kao root, uradio sam sljedeće:

    cd / linuxkernel
    napravi menuconfig

    U osnovi, kernel se može konfigurirati na tri načina: make config (konfiguracija dijaloga), make menuconfig (pseudografska konfiguracija preko ncurses) i make xconfig (grafička konfiguracija). Suština je da će make config pokvariti vaše raspoloženje na duže vrijeme, jer postaviće sva moguća pitanja o svim aspektima svih tema. Problem sa make xconfig ne nailazi svi, ali ja sam se susreo i još uvijek to radim. Ako želite to učiniti kroz X, shvatite sami. Najbolja opcija je napraviti menuconfig. Ova stvar će vam otvoriti pseudo-grafički interfejs kroz koji možete prilagoditi kernel na svoj način. Za to je potrebna biblioteka ncurses, koja se lako instalira.

    U osnovi, ako vaš mozak uopće razumije Linux, možete shvatiti konfiguraciju. Proces je zanimljiv, ima zaista mnogo opcija, a pomoć, iako na engleskom, ipak raduje svojom pristupačnošću i jednostavnošću.

    Međutim, i dalje morate da vas vodi. Idite na Sistemi datoteka ---> i dodajte potrebne zvjezdice. Slovo M znači da je ovaj ili onaj drajver podržan povezivanjem na jezgro eksternog modula (mrzim ih!). Također nam je potrebna isofs podrška za čitanje diskova. Sistemi datoteka ---> CD-ROM / DVD sistemi datoteka ---> ISO 9660 podrška za CDROM sistem datoteka. Još uvijek možete podržati drevne Dosovske sisteme.

    Otkačeni Mandriva programeri su zaboravili da omoguće sisteme datoteka ---> DOS / FAT / NT sistemi datoteka ---> podršku za pisanje NTFS, a na jednoj od njihovih distribucija imao sam muku sa pristupom drevnoj Wind particiji.

    Pogledajte tip procesora i karakteristike ---> Porodica procesora, savjetovali su mi da se odlučim za Pentium-MMX.

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

    Dalje. Nakon samog učitavanja, kernel mora učitati sam sistem. Ili iz kompajliranih datoteka (koji se koriste u ugrađenim sistemima), ili iz CPIO arhive komprimirane nečim, ili iz Initrd-a. Ovde niste DOS, ovde nećete moći odmah da se pozovete na neki init "novi fajl u root direktorijumu diska ili fleš diska. U stvari, radiće, ne slušajte čika Annixa! Ovo je pogrešno, iako na Internetu već postoji bolesna polemika oko toga, mi ćemo koristiti initrd na našem sistemu, jer je to zgodno i neće izazvati nepristojne izraze od strane programera trećih strana, za razliku od CPIO arhive.

    Oh da, kompajlirajte kernel sa komandom

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

    Za oštre programere iz Čeljabinska možete koristiti unakrsno kompajliranje ...

    Kreiranje Ramdisk-a.

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

    dd if = / dev / zero of = / dev / ram0 bs = 1k count = 5000 - Kreirajte Ramdisk u RAM-u našeg računara.
    mke2fs -m0 / dev / ram0 5000 - Formatirajte Ramdisk na Ext2
    mkdir / distro - Kreirajte folder
    mount / dev / ram0 / distro - Montiraj u / distro folder

    To je to, sada imamo Ramdisk kapaciteta 5 MB. Više je moguće, samo nije neophodno. Za razliku od Thomasa Matejiseka, ja neću puniti initrd LZMA komprimiranim modulima u Squashfs-u. Sve što je potrebno bit će prevedeno s kernelom. Da, ovo nije baš logično i tačno, ali muke je sto puta manje. 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 nasem Ramdisk-u montiran u /distro postoji jedan takav folder izgubljen+nadjen.To je zato sto smo ga formatirali u ext2.Ni u kom slucaju ga ne treba brisati,mada tu tesko da ce pomoci slika je popravljena.bi busybox prvo rečeno...

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

    Busybox možete konfigurirati na isti način:

    cd / busybox
    napravi menuconfig

    Ako još niste shvatili šta je to, objasniću. Busybox zamjenjuje tone UNIX aplikacija pohranjenih u / bin, / sbin, / usr / bin, / usr / sbin foldere. Umjesto toga, kreira se samo jedna aplikacija: / bin / busybox i gomila linkova se kreira do nje u gornjim folderima. Instalirajte busybox sa sljedećom naredbom:

    make CONFIG_PREFIX = / distro install

    Busybox će takođe kreirati fajlove /sbin/init i iz nekog razloga /linuxrc kako bi se vaš sistem ispravno pokrenuo. Međutim, nisu kreirane sve potrebne fascikle. 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ško je zaboraviti ove direktorije.

    Sve bi bilo u redu, ali za busybox su potrebne biblioteke za rad, koje je potrebno kopirati u naš distribucijski komplet. Vrlo je lako saznati koji:

    ldd / distro / bin / busybox

    Program će nam pokazati biblioteke potrebne za našu ljusku. Odmah kažem: linux kapija je kreirana od strane kernela i ne može se kopirati.

    Kada kopirate biblioteke, možete odrezati informacije o otklanjanju grešaka (kako Roberto savjetuje):

    objcopy --strip-debug odakle kamo

    Mi pravimo Linux od Linuxa

    Potrebno je kreirati nekoliko sistemskih tekstualnih datoteka:

    Trebamo / etc / inittab. Iznenadiću vas: na početku života sistem čak i ne zna šta je Root. Imamo čak i neimenovanog korisnika, ali fajl funkcija niskog nivoa (ONF) na nivou celog sistema mora biti prisutan. Pilot sadržaj datoteke je sljedeći:

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

    # Pokrenite shell u konzoli.
    :: respawn: - / bin / sh

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

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

    none / proc proc defaults 0 0

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

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

    / bin / mount -av -t nonfs

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

    PATH = "$ PATH: / bin: / sbin: / usr / bin: / usr / sbin:"
    MANJE = -MM
    TERM = linux
    HOME = / root
    PS1 = ">"
    PS2 = ">"
    ignoreeof = 10
    izvoz PATH DISPLAY MENI TERM PS1 PS2 HOME ignoreeof

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

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

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

    mkdir / os - folder 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

    Kreiranje USB diska za pokretanje

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

    Na USB fleš disku kreirajte folder za pokretanje, u njemu initrd i kernel fascikle.

    Kopirajte komprimirani Ramdisk iz / os foldera u boot / initrd folder na fleš disku, nazovite ga "main.gz". Kopirajte bzImage iz fascikle sa izvorima kernela u fasciklu za pokretanje / kernel na fleš disku, nazovite je "main.lk". Dobijamo fajlove Syslinux pokretačkog programa (na Internetu, ili iz drugog kompleta za distribuciju: ovdje nije važno), naime syslinux.bin, syslinux.boot, syslinux.cfg. Kopiramo ih u korijenski direktorij našeg flash pogona. Pišemo nešto ovako u fajl syslinux.cfg:

    zadani mm
    prompt 1
    vremensko ograničenje 100
    etiketa mm
    kernel /boot/kernel/main.lk

    label mc
    kernel /boot/kernel/main.lk

    etiketa cm
    kernel /boot/kernel/custom.lk
    append initrd = / boot / initrd / main.gz load_ramdisk = 1 ramdisk_size = 5000 rw root = / dev / ram0
    etiketa cc
    kernel /boot/kernel/custom.lk
    dodaj initrd = / boot / initrd / custom.gz load_ramdisk = 1 ramdisk_size = 5000 rw root = / dev / ram0
    label hd
    localboot 0x80

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

    Hajde da saznamo koji uređaj je naš fleš disk u sistemu (možete pokrenuti mount bez parametara i videti). Ovo je ili / dev / sdb1, ili / dev / sdc1, ili / dev / sdd1. Vrijedi odmontirati USB stick prije početka instalacije.

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

    syslinux -d put_uređaja

    Datoteka ldlinux.sys bi se trebala pojaviti u korijenskom direktoriju fleš diska. Ako jeste, onda syslinux.bin, syslinux.boot više nisu potrebni.

    Neću vam reći kako da konfigurišete BIOS da se pokreće sa USB fleš diska - to je lako. Reći ću samo da je vrlo zgodno kreirati / boot / initrd / init folder, u koji se može montirati / boot / initrd / main, za kasniji rad s njim. Samo zapamtite da ga dekomprimirate i komprimirate pomoću gzipa.

    To je sve.

    Kao da sam vam upravo rekao kako da kreirate Linux sistem 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. U suprotnom, moraćete da radite sa particijom samo za čitanje, veličine 5 MB. Ali to je sasvim druga priča.

    Top srodni članci