Linux pe CD - noțiunile de bază

Standard pentru CD bootabil este El Torito, sensul care este faptul că BIOS-ul găsește unitatea CD-drive și se uită la ea imaginea de boot. Dar există o alternativă în formă de ISOLINUX, această soluție nu utilizează unitatea de emulație și vă permite să lucrați cu toate CD-drive.

Procesul de boot

procesul de boot Linux standard arata ceva de genul:

  • Calculatorul execută încărcătorul de boot LILO, sau altele asemenea.
  • LILO știe unde kernel-ul și îl rulează.
  • Acesta rulează kernel-ul, după testele standard, se montează sistemul de fișiere rădăcină.
  • După aceea, rulați / sbin / init, iar sistemul de operare este pornit, în conformitate cu / etc / inittab și script-uri rc.d.

Procesul de pornirea de pe CD-ul este un pic diferit. Încă o dată, avem nevoie de un bootloader, dar trebuie să știe modul în care dispozitivul nostru este un CD-drive. Acesta poate fi / dev / hdb. / Dev / HDC și / dev / hdd. Chiar dacă am spune încărcătorul în care se află nucleul, va trebui să-i spun kernel-ul în cazul în care sistemul de fișiere rădăcină. Privind CD-drive ne ajută ISOLINUX. dar nu rezolvă problema cu căutarea pentru sistemul de fișiere rădăcină. Mulți folosesc dischetelor de boot așa-numita de initrd (disc inițial RAM), care este un disc de memorie RAM cu un sistem minim de fișiere rădăcină. Ideea este că kernel-ul încarcă un sistem de fișiere minimal, care sunt module care vă permit să găsiți și să încărcați sistemul de fișiere rădăcină principal. Acum ia în considerare procesul de boot Linux cu CD:

Crearea unui nucleu

Acum aveți nevoie pentru a crea un nucleu care poate încărca sistemul de fișiere de initrd. Procesul de asamblare a opischem de bază mai târziu, dar pentru moment, să presupunem că știi cum să o fac :) kernel-ul trebuie să fie compilate cu discurile initrd și RAM. Vom utiliza dimensiunea discului implicit RAM, de exemplu, 4 MB. Ar trebui să conectați, de asemenea, sistemele de fișiere de suport ISO9660 și EXT2. După construirea kernel-ul trebuie să fie configurat să utilizeze un anumit dispozitiv rădăcină.

Să presupunem că tocmai ați finalizat comanda face bzImage
rdev / usr / src / linux / arch / i386 / boot / bzImage / dev / ram1
Dacă nu aveți un dispozitiv / dev / ram1. ar trebui să fie configurat
640 mknod -m / dev / ram1 b 1 ianuarie

Crearea unui copac director

Crearea unui șablon pentru distribuirea noastră.

directoare cheie:
  • cdimage / - acest director vor fi înregistrate pe CD.
  • initrd, / - Acest director conține sistemul de fișiere de initrd.
  • rădăcină / - Acest director conține un sistem de fișiere de lucru.

Setarea initrd,

faza Initrd-ul are un simplu scop - pentru a obține un sistem de fișiere de lucru în / dev / ram1. Există mai multe moduri de a face acest lucru. Noi le enumăr într-un rând:

Etapele generale efectuate de program:
  • Montarea / proc.
  • Deschideți fișierul / proc / ide / ide0 / hda / media. în cazul în care se spune „cdrom“, aceasta înseamnă că am găsit CD-ul nostru (hmm, dacă trebuie să conduc câteva CD-drive.). În caz contrar, verificați / proc / ide / ide0 / hdb / media. / Proc / idici / IDE1 / hdc / media și / proc / ide / IDE1 / hdd / media până la un prim CD-drive (pe ambele!). Asta este, putem fi încărcate numai cu cele patru IDE CD-drive!
  • Du-te la directorul / dev și de a crea un link simbolic pentru dispozitivul cdrom este găsit.
  • Se montează CD-drive în directorul / cdrom.
  • /cdrom/rootfs.gz deschis și-l extinde la / dev / ram1. În rootfs.gz ar trebui să fie EXT2 dimensiunea sistemului de fișiere este de 4 MB.
  • Mount / dev / ram1 în / RAM.
  • Du-te la directorul / berbecul / dev și de a crea o legătură simbolică la dispozitivul de pe CD-drive.
  • Unmount / berbec. / Cdrom și / proc.
După aceasta, kernel-ul trebuie setat să funcționeze și pentru a monta / dev / ram1 ambele / și încercați să rulați / sbin / init.

Lucrul sistemul de fișiere rădăcină

Pe un singur sistem de fișiere Initrd-nu se poate face mult. Este necesar să se creeze un sistem de fișiere rădăcină util. Și, din moment ce utilizați un volum de disc RAM de 4 MB, acesta este ușor comprimat. De ce să nu folosiți un disc de memorie RAM mai mare? Da, pur și simplu nu trebuie să înscrie în memorie zadar și este necesar să ne amintim computerul utilizatorului cu o cantitate mică de memorie RAM. Vozmom bibliotecă:

ld-2.1.3.so
ld-linux.so.2 -> ld-2.1.3.so
libbz2.so.1.0 -> libbz2.so.1.0.0
libbz2.so.1.0.0
libc-2.1.3.so
libc.so.6 -> libc-2.1.3.so
libcom_err.so.2 -> libcom_err.so.2.0
libcom_err.so.2.0
libdl-2.1.3.so
libdl.so.2 -> libdl-2.1.3.so
libe2p.so.2 -> libe2p.so.2.3
libe2p.so.2.3
libext2fs.so.2 -> libext2fs.so.2.4
libext2fs.so.2.4
libm-2.1.3.so
libm.so.6 -> libm-2.1.3.so
libncurses.so.5 -> libncurses.so.5.0
libncurses.so.5.0
libtermcap.so.2 -> libtermcap.so.2.0.8
libtermcap.so.2.0.8
libuuid.so.1 -> libuuid.so.1.2
libuuid.so.1.2


Nu toate acestea sunt necesare pentru a porni sistemul de operare. În katolege / bin este utilitățile necesare. este, de asemenea, creat script-ul / sbin / init. În directorul / etc sunt fișiere inittab, termcap. si catalog rc.d. în care rc.S script folosit pentru a rula sistemul de operare. Noi oferim o parte cheie a fișierului inittab:


Folosind consola sulogin conduce la faptul că utilizatorul intră în regimul administrativ.

Fișierul / etc / fstab este după cum urmează:

/ Dev / ram1 / valori implicite ext2 1 ianuarie
none / dev / pts devpts GID = 5, mode = 620 0 0
none / proc proc defaults 0 0


De asemenea, există un director gol / initrd,. ceea ce indică faptul că faza de initrd finalizată și sistemul de operare pe fișierul rădăcină / dev / ram1 Montat Initrd sistem de fișiere (localizat pe / dev / ram0) scos din / initrd. Acest lucru înseamnă că putem demonta și elibera memoria utilizată de discul RAM.

Să vedem interiorul script-ul rc.S:

#! / Bin / sh
PATH = / bin; export PATH
echo „de inițializare a sistemului“
mount -t proc none / proc
mount -o remount, rw /
echo „Găsiți extras de pe CD-ul și montați-l“
dacă [-r / dev / cdrom]; atunci
mount -t iso9660 / dev / cdrom / cdrom
mount / dev / hda9 / a
Fi
cd /
umount / initrd,
freeramdisk / dev / ram0

Crearea unui CD

Acum avem un nucleu și sisteme de fișiere structura de initrd rootfs. Cum pot fi scrise pe un CD-ROM? Luați în considerare o structura de directoare simplă pe CD-ROM-ul:

/rootfs.gz
/ ISOLINUX /
isolinux.cfg - fișier de configurare
isolinux.bin - încărcător
vmlinuz - nucleu cu initrd,
initrd.gz - sistemul de fișiere de pornire


Luați în considerare fișier isolinux.cfg:

etichetă Linux
nucleu vmlinuz
append initrd = initrd.gz


Foarte similar cu intrarea LILO. Elementele importante ale acestui fișier sunt numele kernel-ului și șirul cu numele de sistem de fișiere de pornire. Că fișierul cu un sistem de fișiere comprimat de pornire nu contează, pentru că nucleu mai târziu despacheta în sine.

Ce zici de initrd și rootfs. Ambele dimensiuni sisteme de fișiere ext2 de 4 MB sunt fișiere comprimate. Mai jos este un script pentru a le crea:

BASE = / src / iso
SRC = $ BASE / initrd,
$ = $ DEST BASE / cdimage / isolinux / initrd,
dd if = / dev / zero = $ DEST bs = count 1k = 4096
/ Sbin / losetup / dev / loop1 $ DEST
mkfs -t ext2 -m 0 / dev / loop1
mount / dev / loop1 / mnt
cd $ SRC
cf tar -. | (Cd / mnt; tar xf -)
umount / mnt
/ Sbin / losetup -d / dev / loop1
gzip -f $ DEST


Pentru a înregistra spații libere ar trebui să fie arborele de directoare arătat mai sus în / src / iso / cdimage se adună într-o imagine de disc:

mkisofs o- /iso.img -b isolinux / isolinux.bin -c isolinux / boot.cat \
-no-Emulare-pornire -boot-încărcare-size 4 -boot-info-tabel -l \
-R -r / src / iso / cdimage


fișier boot.cat va fi creat ca urmare a executării acestei comenzi. Opțiuni -l. R și este nevoie să se extindă -r RockRidge (cm. CD-scriere HowTo), ceea ce permite utilizarea unei legături simbolice CD-ROM și nume cu majuscule și minuscule. Fișierul rezultat ar trebui să fie scris pe un CD-ROM utilizând cdrecord (lăsați-l ca un exercițiu :). Și utilizatorii avansați pot protestit rezultat distribuției prin VMWare.

Baza pentru îmbunătățirea în continuare

Pe măsură ce adăugați caracteristici necesare numai pentru tine, cu funcționalitatea de distribuție? După cum sa menționat mai sus, directorul / usr este un link simbolic la directorul pe / usr pe CD-ROM. Utilizați această oportunitate!

Utilizarea framebuffer

[*] Consola de text VGA
[*] Sprijin de selectare a modului video
[*] Suport pentru dispozitive tampon cadru (EXPERIMENTAL)
[*] VESA VGA consola grafică
[*] Opțiunile driverului de nivel scăzut avansate
<*> 8 bpp suport pentru pachete de pixeli
<*> 16 bpp suport pentru pachete de pixeli
<*> 24 bpp suport pentru pachete de pixeli
<*> 32 BPP suport de pachete de pixeli
<*> caracter VGA / atributele suport
[*] Selectați fonturi compilate în
[*] Font VGA 8x8
[*] Font VGA 8x16


Acum este necesar să se precizeze modul de grafică corectă, care va fi utilizat de către X-server. Pentru aceasta nebhodimo specifica o anumită opțiune pentru kernel-ul. Astfel, trebuie să facă modificări la isolinux / fișierul isolinux.cfg:

etichetă Linux
nucleu vmlinux
adăugați de initrd = initrd.gz vga = 791

timeout 30
promptă 1
menu.txt afișare
default 1

eticheta 1
nucleu vmlinuz
append initrd = initrd.gz

eticheta 2
nucleu vmlinuz
append initrd = initrd.gz vga = 788

eticheta 3
nucleu vmlinuz
adăugați de initrd = initrd.gz vga = 791


fișier menu.txt conține următoarele:

1) Modul Text
2) 800x600 x 16bit culoare
3) 1024x768 x 16bit culoare


Acesta este descris ca totul. Acum vom proceda pentru a crea propria lor de distribuție.

articole similare