teejuht
1. | Sissejuhatus |
2. | LILO, kernel ja source'id |
3. | Kerneli kompilleerimine |
4. | Kerneli konfigureerimine |
5.
|
Moodulid |
6. | LILO (512 B) taas-kirjutamine |
LILO (Linux Loader) asub ketta nullindat sektorit ehk boot sectorit (floppy puhul selline nimi) ehk MBR'i (master boot record - kõvaketta puhul) moodustavas 512 baidis (tegelikult võtab LILO enda alla esimesed 446 B ja 64 B on ketta partitsioonitabel) . Kui tegemist on kõvakettaga ja CMOS SETUP -is (see koht kuhu saab peale voolu sisselülitamist del-ga sisse) on paika pandud, et antud kettalt saab bootida siis toimub järgmine:
1. Masin loeb infot sellest nullindast sektorist (446 B, seda seal olevat
infot nim. ka boot loaderiks) ja saab teada millise kõvaketta partitsiooni
peal ja millisel füüsilisel asukohal on /boot/boot.b ja /boot/map
failid.
2. Neist failidest saab ta omakorda teada kerneli ja bootimisel muude
vajalike (nt. message faili) füüsilise asukoha.
Selguse huvides ütleme, et cp käskuga ei saa ligi boot sectoris (so. 512 esimest B) infole. Küll aga võttega:
bash# dd if=/dev/fd0 of=/512B bs=512 count=1
(ketas võiks olla mountimata)
Ja, esimese 446 B 'ga tegeleb programm lilo, järgmise 64 B 'ga fdisk.
Ilma LILO'ta on keerulilne linuxit üles bootida. Nii, et teda on igal juhul vaja.
Kernel on üks fail mille suurus on ca 400 kB ja ta asub tavaliselt /vmlinuz -i nime all. Kernelisse on kontsentreeritud OS-i tuum, reeglid ja oskused ümberkäimiseks:
- mäluga
- võrgukaartidega
- kõvaketastega
- failisüsteemidega
- protsessoriga
Järgnevas vaatame kuidas ühele töötavale süsteemile teha ja kasutusele võtta uus kernel. Selguse ja lihtsuse huvides olgu tegemist ühe kõvaketta ja kahe partitsiooniga:
/dev/hda1 - swap
/dev/hda2 - root, seal on kataloog /boot ja kernel /vmlinuz
Kui slackware installeerida, siis on tavaliselt distributsiooniga töötav kernel kaasa pandud (fail bare.i). Normaalne on seda vähemalt esimese kernelina kasutada. Peale linuxi installeerimist ja oma vajaduste üle mõtisklemist (modem, võrgukaart, failisüsteemid ...) tuleks kompilleerida enda vajadusi rahuldav kernel. Tavaliselt tuleb see väiksem ja väiksem on kiirem ja muidu hea meel, et ikka ise kompilleeritud! Kerneli kompilleerimiseks on vaja
- source't - see on distributisooni K - seeria või netist tõmmatud
(ftp.kernel.org /... /kernel-2.0.35.bz2)
- kompillaatorit - D - seeria
LILO -ga on nii, et slackware installeerimise käigus pakutakse võimalust LILO peale panna (512 B mõttes). Seda võimalust tuleks kasutada. Samuti küsitakse kas LILO kui programm installeerida. Samuti võtta. Nii saab ise hiljem LILO parameetreid muuta. LILO source't talaliselt distributisooniga kaasa ei ole. Et asi oleks selge:
- netist võib tõmmata LILO source ( tgz)
- source kompilleerimiseks on gcc (D - seeriast) vajalik ja tulemuseks
on muude seas programmid lilo ja liloconfig
- programmiga liloconfig või muutes käsitsi faili /etc/lilo.conf
saab muuta LILO (esimesse 512 B'i minevaid vääratusi)
- lilo käivitamine kirjutab lilo.conf failile vastavalt esimesed
512 B üle.
Niisiis, edasises eeldame, et teil on olemas programmid lilo ja liloconfig ja kerneli source lahtipakituna või nii nagu ta peale K seeria installimist on:
/usr/src/linux/Makefile, README, ...
Failis README on sellest ka juttu, ma lihtsalt toon sellest olulisema
siin ära.
1. | Teeme ära lingid uutele include failidele
- make sure your /usr/include/asm, /usr/include/linux, and /usr/include/scsi directories are just symlinks to the kernel sources:
cd /usr/include
mina tegin selle osa shell scriptiks /root/kernel.sh, mõnusam |
2. | koristame vanad objekti faiid ära (*.o)
- make sure you have no stale .o files and dependencies lying around:
cd /usr/src/linux
|
3. | konfigureerime kerneli (vt. altpoolt)
cd /usr/src/linux make menuconfig või make config |
4. | make dep; make clean; make zImage
tulemusena tekib fail /urs/src/linux/arch/i386/boot/zImage ja see ongi kernel |
5. | teeme ka moodulid (laetavad kerneli osad)
esmalt liigutame vanad moodulid mujale nii, et kataloog /lib/modules on tühi |
6. | cd /usr/src/linux
make modules make modules_install mille tulemusena tekivad /lib/modules/2.0.xx alamkataloogid ja moodulid ise (ne.o, vfat.o jne) |
7. | kopeerime vana kerneli asemele uue (vana kuhugi ehk tagavaraks alles jättes) |
8. | uuendame esimest 512 B -i andes käsu
lilo õnnestumisel on teade Added linux * |
Kui kernelit konfigureerida on ehk mõistlik valida make menuconfig, sest make config puhul ei saa ümber mõelda. Kernelite kohta on tehtud (muidu ka) kokkulepe, et kui teine arv on paaris on kernel nö. stabiilne (nt. 2.0.xx) ja kui paaritu (nt. 2.1.xx) siis on tegu development'iga.
märkused:
- osa feature'sid lähevad kernelisse (*) ja osa saab panna sisse
või laadida moodulitena (M); osa saab kasutada ainult moodulitena
- kui menuconfig käivitada on ees ./usr/src/linux/.config failile
vastavad vaikimisi valikud, neid tuleb natuke muuta
- menuconfig sektsioonidesse sisseliikumine käib reavahetusega
- valimine käib tühikuga
- Esc -ga sektsioonist väljumine
- ? - ga saab help'i iga asja kohta lugeda
- kõige lõpus tuleb ütelda et save configuration
(mitte ilmtingimata faili)
Kõiki võimalikke kerneli juures määratavaid
settinguid pole ehk siin mõtet tuua. Sest, kes asja veel ei jaga
sel pole neist kõigist nii kui nii kasu; aga kes juba teab see saab
ise hakkama. Asi suhtleb inglise keeles.
Niisiis, konfigureerimine tavalisi nõudeid rahuldava kerneli:
- oskab mountida CD-ROM'i ja msdos ja vfat failisüsteemiga partitsioone
- osakab modemiga ppp ühendust pidada
- on dummy net driver support, et ise oma masinas internet'ti mängida
(teha ftp, telnet'i, webiserver'it)
code maturity level options | [ ] Prompt for development and/or incomplete code/drivers |
loadable modules support | [*] Enable loadable module support |
general setup | [ ] Kernel math emulation
[*] Networking support [ ] Limit memory to low 16MB [*] PCI bios support [*] System V IPC <*> Kernel support for a.out binaries <*> Kernel support for ELF binaries [*] Compile kernel as ELF - if your GCC is ELF-GCC |
floppy, IDE and other block devices | <*> Normal floppy disk support
[*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support --- Please see Documentation/ide.txt for help/info on IDE drives [ ] Use old disk-only driver on primary interface [*] Include IDE/ATAPI CDROM support [ ] Include IDE/ATAPI TAPE support [ ] Include IDE/ATAPI FLOPPY support (new) [ ] SCSI emulation support [ ] Support removable IDE interfaces (PCMCIA) [*] CMD640 chipset bugfix/support [ ] CMD640 enhanced support [*] RZ1000 chipset bugfix/support [*] Intel 82371 PIIX (Triton I/II) DMA support [ ] Other IDE chipset support --- Additional Block Devices < > Loopback device support [ ] Multiple devices driver support < > RAM disk support < > XT harddisk support |
networking options | [*] TCP/IP networking
[*] IP: Drop source routed frames [*] IP: Allow large windows (not recommended if <16Mb of memory) |
network device support | [*] Network device support
<M> Dummy net driver support <M> PPP (point-to-point) support |
filesystems | [*] /proc filesystem support
<M> VFAT (Windows-95) fs support <*> Second extended fs support < > xiafs filesystem support <M> Native language support (Unicode, codepages) <M> ISO9660 cdrom filesystem support <M> DOS FAT fs support <M> MSDOS fs support |
character devices | <*> Standard/generic serial support |
Moodulid on kerneli osad ja need saab sisse laadida ja maha laadida. Nad asuvad kataloogis /lib/modules/3.0.34. Moodulite laadimine toimub ` masina bootimisel:
/etc/rc.d/rc.S
if [ -x /etc/rc.d/rc.modules
]; then
. /etc/rc.d/rc.modules
fi
insmod vfat
/sbin/mount -avt nonfs
Pange tähele, et rc.modules loeb sisse osa mooduleid aga mooduleid saab sisse ka käsuga insmod vfat. Failisüsteemi moodulid on vaja enne sisse viia kui failisüsteeme mountida: mount -avt nonfs - mountida kõik peale NFS -de (Network FIle System)
failis /etc/rc.d/rc.modules on nt. sellised olulised read:
# Update module dependencies:
echo "Updating module dependencies
for Linux `uname -r`:"
/sbin/depmod -a
/sbin/modprobe ppp
/sbin/modprobe ne io=0x300
# Binary format/filesystem
support.
#/sbin/modprobe binfmt_elf
#/sbin/modprobe ext
#/sbin/modprobe ext2
#/sbin/modprobe hpfs
/sbin/modprobe isofs
#/sbin/modprobe minix
/sbin/modprobe msdos
/sbin/modprobe nfs
/sbin/modprobe smbfs
#/sbin/modprobe sysv
#/sbin/modprobe umsdos
#/sbin/modprobe xiafs
moodulitega telelevad programmid:
lsmod | näitab mis moodulid on sisse loetud (kui asi on kernelisse sisse kompileeritud kuigi võik olla moodul siis seda ei näidata. |
insmod | sisestab mooduli |
modprobe | sisestab mooduli ja sellele moodulile tööks vajalikud muud moodulid |
rmmod | laeb mooduli maha |
depmod | valmistab ette info modprobe jaoks (käivitada enne modprobe kasutamist) |
6. LILO (512 B) taas-kirjutamine
Nüüd on loodetavasti uus kernel valimis ja kohal ning viimane asi on lilo üle lasta. Toimingu mõte on
- 446 B kõvaketta algusest üle kirjutada
- luua uued failid kataloogi /boot
Meenutan, et antud juhu oli kõvaketta peal kaks partistsiooni:
/dev/hda1 - swap
/dev/hda2 - root st. see kus on kernel vmlinuz
sellele olukorrale vastav /etc/lilo.conf võiks olla selline:
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
boot = /dev/hda2
#compact
# faster, but won't work on all systems.
# delay = 5
vga = normal
# force sane state
# ramdisk = 0
# paranoia setting
# End LILO global section
# Linux bootable partition
config begins
image = /vmlinuz
root = /dev/hda2
label = linux
read-only # Non-UMSDOS
filesystems should be mounted read-only for checking
# Linux bootable partition
config ends
Tõsi, siin on küll kommentaare rohkem kui asja ennast, kuid selliseid faile see liloconfig genereerib :)
ja nüüd anda käsk:
bash# lilo
Added linux *
bash#
siis peaks asi valmis olema.
Ja kui nüüd läks kõik hästi, siis uuel boodil
tuleb asi üles ilma veateadete ja olululiste featuredega :) Esimene
kerneli kompilleerimine õnnestub aga vähestel: Oskar Luts,
Napoleon, Leonid Kutzma ...