You are on page 1of 43

Bin d ch nhn Linux

Tc gi : Hong Ng c Diu

M cl c
1
1.1 1.2

T ng quan v nhn Linux trn phng di n bin d ch l i


Nhn Linux v vi c bin d ch l i nhn Tm t t cc b c bin d ch (dnh cho nh ng ai thi u kin nh n)

3
3 3

2 3 4
4.1 4.2

T i sao c n bin d ch l i nhn Linux? C u trc v quy c s hi u phin b n c a nhn Linux i h i t i thi u trong vi c bin d ch l i nhn Linux
i h i cho nhn Linux 2.4.x i h i cho nhn Linux 2.6.x

5 6 6
7 8

5 6
6.1 6.2 6.3 6.4 6.5

Xc nh c u hnh (hardware) c a my Cc b c chu n b


T o m t a m m kh i ng cho nhn ang dng T i m ngu n Ki m tra th c tnh c a m ngu n X nn m ngu n Dng "config" no th thch h p?

9 9
9 10 11 12 14

7
7.1 7.1.1 7.1.2 7.2 7.2.1 7.2.2

Ch nh c u hnh bin d ch nhn Linux


Thnh ph n c a c u hnh bin d ch nhn Linux Thnh ph n c u hnh bin d ch nhn Linux phin b n 2.4.x Thnh ph n c u hnh nhn Linux cho lo t nhn 2.6.x i u ch nh c u hnh bin d ch nhn Linux Cc cng c xc l p c u hnh M t s i m c n ch trong giai o n hnh thnh c u hnh bin d ch nhn

14
14 14 17 18 19 20

8
8.1 8.2 8.3 8.3.1

Cc b c bin d ch
B c t o dependency, d n d p v t o nhn B c t o modules v ci modules Tch r i m ngu n v h s output trn lo t nhn 2.6.x "make help", m t ti n ch m i trn lo t nhn 2.6.x 1

22
22 24 25 26

8.3.2

Tch r i m ngu n v output files

27

9
9.1 9.1.1 9.1.2 9.2 9.2.1 9.2.2 9.2.3

Ci t nhn
Ci t v i "make install" i v i GRUB i v i LILO Cc b c ci t b ng tay T o initrd Copy nhn v System.map Ch nh c u hnh c a bootloader config

27
28 28 29 31 31 32 33

10
10.1 10.2

Kh i ng l i my v ch nh l n u g p tr c tr c
B treo khi kh i ng vo linux B treo trong qu trnh nhn c load

35
35 36

11
11.1 11.2

V v bin d ch nhn
Cc i m quan tr ng tr c khi v T i, x v v

37
37 38

1 T ng quan v nhn Linux trn phng di n bin d ch l i


1.1 Nhn Linux v vi c bin d ch l i nhn
Nhn Linux l m t "nhn hi n i" c tnh module r t cao. T kernel phin b n 2.6.x tr i, c r t nhi u ch c nng v m r ng. V i tinh th n "bin d ch nhn", m t y u t chnh y u v quan tr ng nh t c n ghi nh n l tnh phn b (modularity) c a nhn Linux. i v i ng i dng bnh th ng, modularity cho php ch n l a cch bin d ch cc drivers c a nhn theo d ng modules hay theo d ng bin d ch tr c ti p vo nhn. Thng th ng, khi xc l p c u hnh cho nhn c ba ch n l a: Y, M v N. C nh ng "driver" khng th bin d ch nh m t module v n ph i c load and link tr c ti p ngay khi nhn kh i ng. Cng c nh ng "driver" cho php ch n nh m t module v c t i trong khi v sau khi nhn c kh i ng. i m chnh y u c n n m b t trong gi i h n ch "Bin d ch nhn Linux" l hi u r t i sao ph i ch n M (cho module), Y (cho bin d ch tr c ti p) v N (khng dng) cc drivers ny. Bin d ch tr c ti p vo kernel c ngha l cc "drivers" ny d c c dng hay khng v n c t i ln khi nhn kh i ng v t t nhin n s chi m m t ph n b nh . L i i m chnh c a ch n l a ny l m t khi "drivers" c bin d ch vo nhn th khng cn ph i quan ng i n tnh trung th c c a nhn v cc driver n a. Cc h th ng lm vi c i h i tnh b o m t cao khng dng modules m bin d ch th ng vo nhnkernel trnh tr ng h p cc modules khng tin c y "b " ci vo nhn lc no trong qu trnh ho t ng c a my. L i i m k ti p c a ch n l a ny l tnh hi u xu txu t (r t nh ), khi c n driver th c s n v khng c n ng t i n a. Bin d ch nh cc modules cho nhn c ngha l ch khi no c n dng cc "drivers" ny m i c ng t i. L i i m c a ch n l a ny n i b t kha c nh x d ng b nh v ti nguyn trn my. V i l a ch n ny, b n c th t o nn m t nhn r t nh v d dng di chuy n cho nhi u m c ch khc nhau. L i i m k ti p l kh nng bin d ch l i ch m t ho c m t s modules no (c n c p nh t ch ng h n). T t nhin th c hi n chuy n ny th ph i tho mn t t c nh ng i h i v tnh ph thu c cho h th ng.

1.2 Tm t t cc b c bin d ch (dnh cho nh ng ai thi u kin nh n)


Bin d ch nhn Linux r t n gi n n u nh hi u r cc quy trnh v cc b c th c hi n. Sau y l cc l nh c n thi t, gi nh b n c tr n b cc cng c c n thi t bin d ch: 3

Chuy n vo th m c /usr/src, ni thng th ng ch a m ngu n bin d ch nhn:


$ cd /usr/src <KERNEL_SRC> l phin b n kernel c n bin d ch, v d

y t i m ngu n c nn

d ng bz2)
$ wget http://www.kernel.org/pub/linux/kern...>.tar.bz2 (<KERNEL_SRC>

Xc th c ch k v th c tnh c a m ngu n:
$ gpg --verify <KERNEL_SRC>.tar.bz2.sign <KERNEL_SRC>.tar.bz2

X nn gi ch a m ngu n:
$ bzip2 -dc <KERNEL_SRC>.tar.bz2 | tar xvf -

N u mu n dng giao di n h a i u ch nh cc ch n l a cho c u hnh nhn th dng l nh:


$ make xconfig

T p h p l nh dng t o cc file ph thu c v cc file bao g m (include), ti p theo l d n d p cc objects khng c n thi t v bin d ch nhn d ng nn:
$ make dep clean bzImage

Bin d ch cc modules c ch n l a b ng l nh:


$ make modules

Chchuy n sang ch super user cho l nh ti p theo:


$ su

Ci cc modules vo th m c /lib/modules/<KERNERL_SRC> v i quy n c a super user:


# make modules_install

Ci t nhn v cc file c n thi t vo th m c /boot:


# make install

B c th 10 c th thay th b ng m t lo t thao tc b ng tay (chi ti t ph n 9.2) n u nh b n phn ph i 1 Linux khng c s n m t s cng c thu c gi mkinitrd (ch c trong b n RedHat v cc b n d a trn RedHat).
1

distribution

Lu : i v i lo t nhn 2.6.x, b n c th dng cc b c nh trn. Tuy nhin b c "make dep" khng c n thi t n a. Bi vi t ny bao g m cho c phin b n 2.4.x v 2.6.x nn c m t s chi ti t khng c n thi t cho kernel 2.6.x. Tuy v y, nh ng chi ti t ny s khng nh h ng n s thnh cng c a quy trnh bin d ch nhn.

2 T i sao c n bin d ch l i nhn Linux?


i v i ng i dng quen v i nh ng h i u hnh "ng" th khi ni m bin d ch l i nhn l m t khi ni m h t s c l l m. i u ny cng d hi u v kernel c a cc h i u hnh "ng" hi n nhin l "ng" v ng i dng bnh th ng khng th c c h i ti p c n v i m ngu n c a nhn c th bin d ch l i nhn n u mu n. Trong khi , m ngu n c a nhn Linux hon ton "m " v y l i u ki n r t thu n l i cho v n bin d ch l i nhn. Cu h i c t ra l t i sao l i c n ph i bin d ch l i nhn Linux ? Cu tr l i ng n: khng c n n u nh khng c n v c n n u nh c n :) Cu tr l i di: c v s l do khi n cho ng i dng c n ph i bin d ch l i nhn Linux. Sau y l m t s tr ng h p th ng g p nh t: a. ti bin d ch kernel ch a l i c a nhn. N u cc l i ny thu c v li c a nhn th ph i v ngu n c a nhn v bin d ch l i n s a ch a cc l i c cng b . b. bin d ch l i nhn nng cao hi u nng c a nhn. Theo m c nh, cc b n phn ph i Linux th ng km m t phin b n nhn c bin d ch v i h u h t nh ng thnh ph n c s n c th p ng r ng ri c u hnh ph n c ng (c th hi n di n trn cc my). y l i m l i t ng qut lc kh i i m. Tuy nhin, sau khi ci thnh cng v n m ch c my c nh ng thi t b g (sound card, graphic card, network cards, SCSI card..... ) v bi t r c n nh ng thnh ph n no cho c u hnh c a my th khng c l do g ph i bao g m tr n b cc th khng c n thi t v khng dng. i v i nhn 2.4.x, m c nng cao hi u nng khng r r t (ngo i tr dng phng php test load o). Tuy nhin, t phin b n 2.6.x tr i, vi c bin d ch l i v i u ch nh "driver" cho nhn t o hi u xu t r r t, nh t l trong vi c i u ch nh "th i bi u" (scheduling) c a cc cng tc m h th ng ph i m nhi m. c. bin d ch l i nhn lo i b nh ng "drivers" khng c dng v c th gy "hi u l m" cho nhn, t o ra tr ng h p my c nh ng tri u ch ng ho t ng thi u n nh v hay gy l i. d. bin d ch l i nhn th nghi m m t ch c nng ho c m t module mnh v a t o ra. Tr ng h p ny khng nhi u nh cc tr ng h p trn nhng cng n m trong cc l do ph bi n.

3 C u trc v quy c s hi u phin b n c a nhn Linux


Phin b n c a nhn Linux c quy c r t n gi n v d nh . V n ny c n n m r tr c khi ch n m t phin b n no c a nhn Linux v v bin d ch. Phin b n c a nhn Linux bao g m ba nhm s tch ra b i cc d u ch m. V d : 2.4.26 S th nh t: 2 l s hi u phin b n chnh S th nh: 4 l ch nh cho tnh tr ng phin b n. N u s ny l s ch n, n ch nh cho phin b n n nh (stable), c th dng cho mi tr ng production. N u s ny l s l , n ch nh cho phin b n khng n nh, n th ng dng trong mi tr ng ang pht tri n (development). Cc kernel thu c d ng ny th ng c nhi u l i v khng n nh. N u dng cc phin b n ny tm l i v thng bo cho nhm pht tri n nhn Linux th y l i u r t t t. Khng nn dng phin b n pht tri n cho mi tr ng production. S th ba: 26 l ch nh cho s hi u pht hnh c a m t phin b n nhn Linux. M t phin b n n nh c a m t nhn Linux c th c nhi u s hi u pht hnh khc nhau. y l cc quy c chung cho d ng nhn Linux "vanilla" c ngha l ng d ng cho cc phin b n nhn t http://www.kernel.org, cc phin b n nhn c i u ch nh b i m i b n phn ph i c nh ng i m d bi t. C nhi u b n Linux x d ng s hi u con 2 cho phin b n nhn h i u ch nh. V d RedHat c nh ng c p nh t ph cho cc kernel nh: 2.4.20-8 ch ng h n. i u c n n m y l ch nn x d ng phin b n n nh (stable) c a nhn Linux (s ch n gi a) cho mi tr ng production v dng phin b n th nghi m 3 c a nhn Linux (s l ) cho mi tr ng th nghi m v pht tri n.

4 i h i t i thi u trong vi c bin d ch l i nhn Linux


Tr c khi b t tay vo vi c bin d ch l i nhn Linux, i u c n thi t l ph i c ch ch a trn a. t nh t l ph i ch ch a cho m ngu n (tr c v sau khi x nn), ch ch a ci kernel v cc modules m i sau khi bin d ch. i h i quan tr ng khc l ph i c m t b cng c c n thi t v ng phin b n. Khng th bin d ch c nhn n u khng tho mn yu c u ny. Phin b n cho b cng c v i m i phin b n nhn khc nhau. Nn nh , nhm pht tri n nhn yu c u b n ph i c ng phin b n c a cc cng c m b o vi c bin d ch nhn thnh cng.

2 3

extra-version development

4.1 i h i cho nhn Linux 2.4.x


Cng c Gnu C Gnu make binutils util-linux modutils e2fsprogs reiserfsprogs pcmcia-cs PPP isdn4k-utils Phin b n t i thi u 2.91.66 3.77 2.9.1.0.25 2.10o 2.4.2 1.19 3.x.0b 3.1.21 2.4.0 3.1pre1 Cch xc nh phin b n
gcc
--version

make version ld -v fdformat


--version

insmod -V tune2fs reiserfsck 2>&1| grep reiserfsprogs cardmgr -V pppd


--version

isdnctrl 2>&1| grep version

Tham kh o thm chi ti t cc cng c ny v a ch t i cc cng c cho ng (t nh t ph i cng phin b n cung c p trn ho c m i hn) trong h s Documentation/changes c a m ngu n nhn m b n ang d tnh bin d ch.

4.2 i h i cho nhn Linux 2.6.x


Cng c Gnu C Gnu make binutils util-linux module-init-tools e2fsprogs jfsutils reiserfsprogs xfsprogs pcmcia-cs quota-tools PPP isdn4k-utils nfs-utils procps oprofile Phin b n t i thi u 2.95.3 3.78 2.12 2.10o 0.9.10 1.29 1.1.3 3.6.3 2.1.0 3.1.21 3.09 2.4.0 3.1pre1 1.0.5 3.1.13 0.5.3 Cch xc nh phin b n
gcc make
--version --version

ld -v fdformat
--version

depmod -V tune2fs fsck.jfs -V reiserfsck -V 2>&1| grep reiserfsprogs xfs_db -V cardmgr -V quota -V pppd
--version

isdnctrl 2>&1| grep version showmount version ps


--version --version

oprofiled

Tham kh o thm chi ti t cc cng c ny v a ch t i cc cng c cho ng (t nh t ph i cng phin b n cung c p trn ho c m i hn) trong h s Documentation/changes c a m ngu n nhn b n ang d tnh bin d ch. N u phin b n c a cc cng c trn my c hn cc phin b n a ra trn, b n c n ph i t i phin b n m i ( bin d ch) t website c a b n phn ph i no b n ang dng. B n cng c th ch n cch t i m ngu n c a t ng cng c v bin d ch l i. Cch ny m t th i gian hn r t nhi u v ch thch h p cho nh ng ai quen thu c v i v n bin d ch m ngu n trn Linux. L i i m c a cch ny l b n t o cho mnh m t b cng c r t "s ch" v bin d ch theo , thch h p v i mi tr ng c a my (v v a ). i v i ph n c ng IA64, b n c n phin b n GCC cho 64bit, nn tham kh o chi ti t http://gcc.gnu.org/install/specific.html (n u b n may m n c m t con IA64 th )

5 Xc nh c u hnh (hardware) c a my
Ph n l n ng i dng bnh th ng t khi quan tm n c u hnh c a my ngo i tr c nhu c u c th . Ngay c nh ng ai dng Linux lu v khng c n ph i bin d ch l i nhn, cng t khi quan tm n c u hnh ph n c ng c a my. D c bi t nhi u hay t v c u hnh ph n c ng c a my mnh dng, b n v n ph i thu th p thng tin chnh xc c a c u hnh tr c khi b t tay vo vi c i u ch nh c u hnh cho vi c bin d ch nhn. Gi nh m i ch nh l n nh v lm vi c t t p (do trnh ci t t d tm (detect) trong khi ci Linux hay do b n ph i i u ch nh l i), b n c n bin d ch l i nhn Linux v c n thu th p thng tin v c u hnh c a my, hai l nh sau cung c p cc chi ti t ph n c ng c trn my:
# /sbin/lspci

L nh ny li t k tr n b cc "card" ang tr c ti p lm vi c trn my, phin b n ph n c ng v ki u 4 c a chng.


# cat /proc/cpuinfo

xem chi ti t b x l trung tm (CPU) c a my l lo i g. N u b n Linux m b n dng khng c /proc filesystem th b n c th dng l nh dmesg thu th p thng tin v ph n c ng trn my c a mnh. Ngoi ra, l nh lsmod cng t nhi u gip b n xc nh cc modules ang c dng trn my v tn c a cc modules ny. Nh ng thng tin thu th p c y h t s c quan tr ng trong giai o n i u ch nh c u hnh cho vi c bin d ch nhn. N gip b n xc nh cc ch n l a ng cho c u hnh my, trnh i nh ng tr ng i c th r t m t th i gian sau ny.

6 Cc b c chu n b
6.1 T o m t a m m kh i ng cho nhn ang dng
y l m t b c c n thi t phng s c g khi n b n khng th kh i ng vo h th ng Linux sau khi ci nhn m i. Tr ng h p ny hi m khi x y ra trong qu trnh bin d ch nhn v ci nhn m i n u b n th c hi n v i u ch nh ng. Nh ng s c v i trnh kh i ng 5 t th y x y ra v trnh kh i ng c thi t l p hon ch nh tr c khi c p nh t nhn. Ph n l n giai o n i u ch nh l i c u hnh c a LILO ho c GRUB khng chnh xc t o tr ng i. V n ny s c c p sau. Tr c m t chng ta c n t o m t a m m kh i ng.

4 5

model bootloader, LILO ho c GRUB

C r t nhi u cch t o m t a m m kh i ng l y t nhn hi n ang ch y trn my. Thay v trnh by nhi u cch khc nhau cho vi c t o a m m kh i ng, y ti ch c p n phng th c n gi n nh t. Cch d nh t c l l dng mkbootdisk. y l m t cng c c ci m c nh trn cc b n RedHat v h u h t cc b n phn ph i d a trn RedHat. N u cng c ny khng hi n di n trn my, b n c th t i m ngu n v v bin d ch. Ch y l nh:
# mkbootdisk --device /dev/fd0 uname -r

trong uname -r l l nh l y phin b n nhn hi n dng trn my. N u khng mu n phin b n ny, b n c th g vo phin b n no theo (t t nhin l phin b n kernel ny ph i hi n h u trn h th ng).
/dev/fd0 l "device" ch cho a m m th nh t trn my (tng t nh drive A: trn

DOS). B n ph i ch n ng "device" th m i c d li u vi t vo a m m mnh mu n t o. Quy trnh ny ch m t kho ng vi pht. Sau khi t o a m m kh i ng trn, b n nn dng n th kh i ng vo Linux tr c khi th c hi n cc b c k ti p. Nn nh ph i ch nh BIOS cho php my kh i ng t A: trang http://www.yolinux.com/TUTORIALS/LinuxTutorialRecoveryAndBootDisk.html c cc h ng d n t o a c p c u r t hay. B n nn tham kh o thm n u trn my mnh dng khng c s n cng c mkbootdisk.

6.2 T i m ngu n
M ngu n c a nhn Linux (c phin b n n nh l n ang pht tri n) c r t nhi u ni trn Internet. Nn vo trang trung tm c a nhn Linux http://www.kernel. org v tham kh o danh sch "mirrors" tm ni "g n" ch mnh c ng nh t t i v . Ni "g n" khng nh t thi t l "g n" theo phng di n a l m nn ch n "g n" nh t d a trn "ping time". Ch u kh l y vi a ch trn mirror v ping nh ng a ch ny ch n l y ni c ping time ng n nh t m t i v . B ng cch s gip b n m t th i gian v ti n cho v n chia x bng thng. C nhi u cch t i m ngu n. B n c th dng trnh duy t (browser) t i qua giao th c http ho c dng m t trnh ftp no t i qua giao th c ftp. B n cng c th dng wget. C l y l cch ti n nh t v nhanh nh t n u bi t r a ch v ng d n n gi mnh mu n t i. V d :
$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2

trong tr ng h p ny, gi c th c n t i l linux-2.4.26.tar.bz2. M ngu n n nh c a Linux kernel c nn hai d ng khc nhau: d ng c ui l .gz (dng GNUzip nn) v d ng c ui .bz2 (dng bzip2 nn). Thng th ng c hai ti n ch nn/x nn trn u c s n trong cc b n Linux thng d ng. N u khng c s n 10

trn my th tm trong trong CD c a b n Linux (tham kh o thm ti li u c a distribution mnh dng cho cch ci thm ph n m m vo my) ho c t i v t :

http://www.gzip.org cho GNUzip http://sources.redhat.com/bzip2/ cho bzip2

6.3 Ki m tra th c tnh c a m ngu n


i u quan tr ng khi t i m ngu n c a nhn, nn t i lun ch k GPG .sign cho phin b n tng ng. M c ch l ki m tra th c tnh c a m ngu n c t i v . Khi m ngu n c a nhn Linux c cng b , chng c d n l i thnh m t gi (.tar) v sau c nn b ng GNUzip ho c bzip2, c hai lo i ny sau khi c nn u c t o "ch k" .sign. Ki m tra th c tnh c a m ngu n c t i v b ng phng php ki m tra "ch k" c a t ng gi m ngu n l m t thi quen c n thi t. L do: cc m ngu n m ni chung c cng b v ph bi n r ng ri, ai cng c th ch nh s a (m t cch khng chnh th c v khng c nhm pht tri n chnh th c cho php) r i a ln m t my ch no trn Internet. Ng i dng t i v , bin d ch v ci trn my m khng ki m tra th c tnh c a chng (v m ngu n ny c nh ng thay i m m) th h u qu kh m l ng. Quy trnh ki m tra "ch k" ch n gi n gi g n trong m t dng l nh:
$ gpg --verify linux-2.4.26.tar.bz2.sign linux-2.4.26.tar.bz2

trong linux-2.4.26.tar.bz2.sign l "ch k" c a gi linux-2.4.26.tar.bz2 c t i v t server ch a m ngu n nhn Linux linux-2.4.26.tar.bz2 l gi m ngu n nhn Linux c nn b ng bzip2. Tr c khi c th ki m tra thnh cng b ng l nh trn, b n ph i c gpg ci trong my, t i v nh p cha kha cng c ng (public key) c a my ch ch a m ngu n nhn Linux m b n t i v . Chi ti t h ng d n cho quy trnh ny http://www.kernel.org/signature.html Quy trnh t i m ngu n nhn Linux v ki m tra th c tnh c a m ngu n ny c th tm t t b ng m t v d nh sau: Chuy n vo th m c ch a m ngu n c a my /usr/src l ni thng th ng. i v i phin b n nhn 2.6.x, b n c th dng th m c khc ty :
$ cd /usr/src

Dng wget l y m t phin b n m ngu n t server v

d ng .bz2

$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2

dng wget l y .sign c a phin b n m ngu n v a c t i v 11

$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2.sign

Dng trnh gpg v i ty ch n verify ki m th c tnh c a m ngu n v a t i v


$ gpg --verify linux-2.6.10.tar.bz2.sign linux-2.6.10.tar.bz2

Ngoi phng php dng ch k cho v n ki m ch ng th c tnh c a m ngu n (khng ch m ngu n c a nhn Linux), b n cng th y r t nhi u ni trn Internet dng "MD5sum" cho m c ch ny (cho n nay, m ngu n nhn Linux kernel dng ch k ki m ch ng, khng dng MD5sum). Quy trnh ki m tra "MD5sum" ch n gi n l m t quy trnh t o m t "MD5sum" t m ngu n c t i v trn my v so snh k t qu "MD5sum" ny v i h s "MD5sum" c t i v km v i m ngu n. N u "MD5sum" b n t o ra trn my c a mnh v i cng gi m ngu n m khng trng h p v i "MD5sum" nguyn thu t i v t server th th c tnh c a ph n m ngu n ny khng ng tin c y. Cch t t nh t l ch nn t i m ngu n nh ng a ch ph bi n v ng tin c y. C n th n hn n a (really paranoid), th so snh MD5sum v i m t s my ch ch a m ngu n khc nhau. Ki m tra th c tnh c a m ngu n b ng MD5 checksum kh n gi n. Ti n ch md5sum c s n h n nh trn m i b n phn ph i. L nh t o MD5 checksum n gi n l l nh:
# md5sum <file_c n_ki m_tra>

s t o ra 1 chu i ch v s tng t nh:


2fe2a5fabcc3a33722b4ffe05714bec3 *<file_c n_ki m_tra>.

N u chu i ny trng v i chu i c cung c p chnh th c v i m ngu n th m ngu n ny c th c tnh v ng tin c y.

6.4 X nn m ngu n
Ty vo gi m ngu n c t i v thu c d ng nn .gz hay .bz2 m dng ti n ch thch h p x nn. Nh tm t t trong ph n 6.3 trn, gi m ngu n c ch a trong /usr/src (wget c ch y sau khi cd vo /usr/src), cho nn b n ph i trong th m c ny tr c khi thao tc cc b c k ti p (khng th cc b c k ti p ph i thm v ng d n n ni ch a gi m ngu n). i v i phin b n nhn 2.6.x, m ngu n c a nhn Linux c th c x , ch a v bin d ch t b t c ni u trn h th ng. Tuy nhin, gi cho h th ng s ch v th ng nh t, b n nn gi m ngu n /usr/src. N u gi m ngu n c d ng .gz th dng:
$ gunzip linux-2.x.xx.tar.gz

x.xx l b t c phin b n no b n t i v . Sau th c hi n ti p:

12

$ tar xf linux-2.x.xx.tar

L nh ny dng ty ch n x x (extract) v f ch nh file no c n c x , s (file) c n c x l linux-2.x.xx.tar. Hai l nh trn cng c th g p chung l i nh sau:
$ tar xfz linux-2.x.xx.tar.gz

y h

l nh ny dng thm ty ch n z ng m x nn .gz file "on-the-fly" tr c khi x gi tar. Ho c c th t o cng k t qu b ng cch khc n a:
$ gzip -dc linux-2.x.xx.tar.gz | tar xvf -

c m l nh ny dng chng trnh gzip x nn (ty ch n -d) ra stdout (ty ch n -c) v "tee" n qua chng trnh tar x gi tar ra "on-the-fly". C cch ny v cch trn u ti n d ng cho nh ng ai eo h p dung l ng trn a. N u gi m ngu n c d ng .bz2 th dng:
$ bunzip2 linux-2.x.xx.tar.bz2 $ tar xf linux-2.x.xx.tar

Hai l nh trn cng c th g p chung l i nh sau:


$ tar xfj linux-2.x.xx.tar.bz2

l nh ny dng thm ty ch n j ng m x nn .bz2 file "on-the-fly" tr c khi x gi tar. Ho c c th t o cng k t qu b ng cch khc n a:
$ bzip2 -dc linux-2.x.xx.tar.bz2 | tar xvf -

c m l nh ny dng chng trnh bzip2 x nn (ty ch n -d) ra stdout (ty ch n -c) v "tee" n qua chng trnh tar x gi tar ra "on-the-fly". C cch ny v cch trn u ti n d ng cho nh ng ai eo h p dung l ng trn a. C ba tr ng h p u cho k t qu l m t th m c c tn l linux-2.x.xx bn trong th m c /usr/src/. Trong ph n ny, chng ta ch c p n tr ng h p t i tr n b m ngu n c a nhn Linux v bin d ch. Tr ng h p c m ngu n c hn c a nhn Linux trn my v ch c n t i b n v l i v "v" th c quy trnh khc. V n ny s c p sau.

13

6.5 Dng "config" no th thch h p?


C u hnh bin d ch nhn Linux n gi n l m t "text file" ch a cc bi n v i gi tr Y (Yes), N (No) ho c M (Module). Cc gi tr ny c x d ng trong qu trnh bin d ch; chng dng xc nh nh ng g khng c bin d ch, nh ng g c bin d ch v n u c bin d ch th s theo d ng no. Ty vo cch s p x p c a m i b n phn ph i Linux, c u hnh bin d ch nhn Linux n m nhi u ni khc nhau. H s c u hnh theo m c nh c a "vanilla" kernel n m ./arch/i386/defconfig (n u dng dng ph n c ng IA32 ni chung), cc h s c u hnh khc cho nh ng dng ph n c ng khc n m ./arch/$ARCH/defconfig; trong $ARCH l dng ph n c ng c a my. N u dng c u hnh m c nh, khng ch nh s a th nhn s c ti bin d ch tr n b theo gi tr m c nh v ch c h n, nhn ny s khng thch h p cho b n (ngay c n u n c bin d ch thnh cng). i u ny i ng c l i m c ch c n bin d ch l i nhn Linux ngay t u. B n c th dng h s c u hnh ny kh i u v ch nh s a gi tr cho thch h p. y l m t b c r t kh khn cho nh ng ai cha t ng i qua giai o n ny v khng c s n m t c u hnh bin d ch nhn hon ch nh cho my. C u hnh cho nhn hi n h u trn my cng c th n m trong th m c /boot d ng config-2.x.xx n u b n dng nhn do RedHat (ho c d a trn RedHat) v m t s b n phn ph i khc cung c p. B n c th an ton dng c u hnh ny v ch nh s a, lo i b cc chi ti t (driver module) khng c n dng. N u h th ng c bin d ch nhn tr c y, b n c th tm th y c u hnh bin d ch nhn Linux c tn l .config, c lu trong th m c <KERNEL_SRC> (ni tr c y m ngu n c a nhn c x nn v bin d ch).

7 Ch nh c u hnh bin d ch nhn Linux


7.1 Thnh ph n c a c u hnh bin d ch nhn Linux
Thnh ph n trong c u hnh bin d ch nhn Linux cho phin b n 2.4.x v 2.6.x c m t s i m tng ng v d bi t. Tuy nhin, quy trnh ch n Y, N ho c M cho cc modules v n nh nhau. B c ch n l a v ch nh li u c u hnh bin d ch nhn Linux l m t b c m t nhi u th i gian nh t, n cng l m t b c gy nhi u tr ng i nh t n u ch nh s a khng h p l ho c thi u st.

7.1.1 Thnh ph n c u hnh bin d ch nhn Linux phin b n 2.4.x


7.1.1.1 Code Maturity Level Options Ch n l a c a m c ny cho php dng cc modules/drivers cn tr ng thi "alpha" (th nghi m). N u h th ng lm vi c l m t my production, c n tnh n nh cao th nn t t b ch n l a c a ph n ny. Lm nh th s t t b r t nhi u modules/drivers thu c d ng 14

"alpha" trong nh ng ph n bn d i. N u mu n th dng m t s modules/drivers d ng alpha th nn cho php ph n ny (Y) v c n th n khi l a ch n cc modules c bin d ch sau ny. Vi c ch n l a cc "alpha" drivers ch m c nh c a cc nhn Linux trong nhi u b n phn ph i Linux l m t trong nh ng nguyn nhn chnh t o nn tnh tr ng b t n nh trn m t s h th ng Linux. N u ch n l a cc driver ny m t cch c n th n, c h i va ph i tnh tr ng b t n nh s gi m thi u r r t. 7.1.1.2 Loadable Module Support y l ch c nng nng c t c a nhn Linux (loadable module). Nh c p ph n t ng quan (ph n 1), cc module c th t i (loadable modules) l ti n d ng v linh ng, cho nn b n g n nh s ch n Y trong tr ng h p ny. Trong tr ng h p b n c n dng module c vi t thm bn ngoi nhn chnh th c (3rd party modules), b n ph i ch n "enable set version information on all modules symbols" trong m c ny. N u b n c n bin d ch tr n b cc drivers th ng vo nhn v khng dng modules (v l do b o m t ch ng h n), b n c th ch n N y. B n cng ph i ch n "Y" cho tr n b cc drivers trong c u hnh bin d ch nhn thch h p v i ch n l a "N" cho ph n Loadable Module Support ny. 7.1.1.3 Processor Type and Features Ph n ny c l l ph n t i quan tr ng trong c u hnh bin d ch nhn Linux. y l ni ch n ng CPU ang dng trn my. Ngoi ra cn r t nhi u ch n l a khc nhau cho v n n system scheduling, SMP (symetrical multi-processing) n u my c nhi u CPU, h tr b nh l n,.... N u b n ch n CPU l i386 th c l s khng c s c v i386 l architecture chung nh t (c Intel v AMD CPU u ch y v i ch n l a i386). Tuy nhin, ch n l a ny s khng t hi u nng t i a v thch h p cho t ng lo i CPU c th . Nn ch n ng CPU b o m hi u nng c a my v nh t l trnh tr ng h p khng th kh i ng vo Linux sau khi ci nhn m i (v lo i CPU ch nh nh cho nhn khng ng v i CPU c trn my hay ni m t cch k thu t, instructions gi a nhn v my khng ng b ). 7.1.1.4 General Setup M c ny cho php ch n l a cc ng d ng h tr cho nh ng thi t b (cards) trn my nh ISA, PCI, PCMCIA v cc ch c nng thu c v v n qu n tr nng l ng cao c p (Advanced Power Management). 7.1.1.5 Memory Technology Devices Ph n ny cho php l a ch n nh ng ng d ng thi t b lin quan n b nh . N u b n dng cc thi t b nh my nh s ho c cc lo i compact flash th b n nn ch nh l ph n ny cho thch h p. 15

7.1.1.6 Block Devices y l m t ph n r t quan tr ng trong c u hnh bin d ch nhn Linux. N bao g m cc ch n l a cho nh ng thi t b thng th ng v c n thi t nh a c ng, a m m, bng lu tr cng nh cc thi t b i u tc (controllers) cho cc c ng song song 6 v RAID. H u nh cc ch n l a trong m c ny u c n thi t; c bi t l ch c nng h tr initrd c n thi t t i s n cc drivers c n thi t d ng module trong qu trnh kh i ng my. 7.1.1.7 Multi-Device support (RAID and LVM) Ph n ny chuyn ch n cc ch c nng c n thi t cho h th ng c p my ch . Cc ch n l a y h tr nh ng thi t b nh RAID v LVM. N u my c a b n hi n ang dng RAID v LVM th khng th b qua ph n ny trong qu trnh xc l p c u hnh bin d ch nhn Linux. Ch n l a trong ph n ny i h i ph i hi u r nhu c u dng nh ng cng ngh thu c d ng ny trn my. N u my khng dng n nh ng cng ngh ny, b n c th an ton t t b chng (dng N). Nn nh , n u t t b RAID trong ph n ny th ph i t t b ch n l a RAID trong ph n "block devices" trn trnh g p ph i l i bin d ch sau ny. 7.1.1.8 ATA/IDE/MFM/RLL support Ph n ny bao g m cc ch n l a v h tr cho IDE v ATAPI dng trn cc thi t b tng thich v i PC 7 (v trn nhi u architecture khc hi n c trn th tr ng). H u h t cc h th ng c n cc ch c nng h tr trong ph n ny. 7.1.1.9 Cryptography Support (CryptoAPI) y l m t ph n kh m i v l th trong m ngu n c a nhn Linux 2.4.x (ch c gi i thi u v cng b trong cc phin b n sau ny c a 2.4.x). Ph n ny c nh ng l a ch n thu c v v n "m ho" cho filesystem. B n c th bin d ch cc ch n l a trong m c ny v x d ng (ho c khng) trn my ty . 7.1.1.10 Networking Options y l m t ph n r t quan tr ng trong c u hnh bin d ch nhn Linux n u b n mu n my c a mnh k t n i v i m ng. N bao g m cc ch n l a cho c hai chu n IPv4 v IPv6. y cng l m t ph n h t s c ph c t p, cho nn, c th hi u r v ch n l a ng cho hi u nng t i a c a my v m t networking, b n nn tham kh o cc ti li u v m ng Linux, t nh t l nn c cc ti li u km theo trong m ngu n nhn Linux <KERNL SRC>/Documentation/networking/ (th ng l /usr/src/linux-2.x.xx/Documentation/networking/).
6 7

parallel ports pc-compatible

16

7.1.1.11 SCSI Support Ph n ch n l a cho SCSI t c nh ng ng i dng bnh th ng quan tm n v khng m y ai dng SCSI cho my con. Tuy nhin n u b n dng SCSI card (ho c SCSI built-in trn bo m ch ch (motherboard)) ho c dng CDR/W qua IDE nhng ch y d ng m ph ng SCSI th ph i i u ch nh cc ch n l a trong m c ny. i u quan tr ng c n nh , n u khng dng ti n d ng initrd, khi ch n l a SCSI cho m t filesystem ch y trn a SCSI b n ph i bin d ch tr c ti p cc ty ch n cho SCSI vo nhn thay v dng d i d ng module. N u khng, nhn s treo trong giai o n kh i ng v module h tr SCSI cha c t i ln trong giai o n ny. 7.1.1.12 Character Devices Trong m c ny c kh nhi u l a ch n t p trung vo cc thi t b nh n i ti p 8 v song song 9, thi t b chu t 10, joysticks ( chi games). T t ho c m cc l a ch n trong m c ny th ng t t o nh h ng nghim tr ng. 7.1.1.13 File Systems M c ny ch a tr n b cc ch n l a lin quan n h th ng file (file system) v cc lo i file system c h tr trn Linux (bao g m FAT, FAT32, NTFS, ISO cho CD-ROM....). Cc file system ph tr nh NTFS, FAT... c th c bin d ch nh m t module cho nhn. Khng nn bin d ch cc modules cho file system dng "mount" trong giai o n kh i ng nh ext3, jbd m nn bin d ch th ng vo nhn (L do tng t nh c p trong ph n "SCSI Support" trn). Cch ny s lm kch th c nhn l n hn nhng s an ton v n gi n hn. Ch c nng h tr initrd c th dng t i cc modules c n thi t trong qu trnh kh i ng nhn Linux nhng ph i nh b t ch c nng ny ln trong ph n thi t b d ng block 11. y l v n ty ch n c a t ng c nhn.

7.1.2 Thnh ph n c u hnh nhn Linux cho lo t nhn 2.6.x


7.1.2.1 Code Maturity Level Options Ph n ny tng t nh c p 7.1.2.2 General Setup Ph n ny tng t nh c p
serial parellel 10 mouse 11 block devices
9 8

trn cho nhn 2.4.x.

trn cho nhn 2.4.x.

17

7.1.2.3 Loadable Module Support Ph n ny tng t nh c p trn cho nhn 2.4.x.

7.1.2.4 Processor Type and Features Ph n ny tng t nh c p trn cho nhn 2.4.x.

7.1.2.5 Power Management Options Ph n ny tng t nh c p 7.1.2.6 Executable File Formats trn cho nhn 2.4.x.

y l m t m c ring bi t trong c u hnh bin d ch nhn c a lo t nhn 2.6.x. N u b n quan tm n "a.out", "elf" v "misc", nn nghin c u k ph n ny qua cc ti li u km theo v i m ngu n nhn, t bi t cho cc ti n d ng c a "misc" ( <KERNEL SRC>/Documentation/mono. <KERNEL SRC>/Documentation/binfmt misc.txt, <KERNEL SRC>/Documentation/filesystem/proc.txt) 7.1.2.7 Device Drivers y l m t m c m i trong ph n c u hnh bin d ch nhn c a lo t nhn 2.6.x. Th t ra device drivers n m r i rc kh p ni trong c u hnh bin d ch nhn c a lo t nhn 2.4.x. lo t nhn 2.6.x, m i v n lin quan n "device drivers" c gom l i trong cng m t nhm. Cc ch n l a thu c v cc thi t b nh card h a 12, card m thanh 13, USB, SCSI v v n hi u ch nh chng u t p trung y. 7.1.2.8 File Systems Ph n ny tng t nh c p 7.1.2.9 Security Options Ph n ny dnh ring cho cc v n v b o m t c a nhn. Cho n nay v n cn ang pht tri n, tuy nhin, y l ph n y h a h n cho m t nhn Linux mang tnh b o m t cao. trn cho nhn 2.4.x.

7.2 i u ch nh c u hnh bin d ch nhn Linux


Sau y l m t s phng php xc l p c u hnh bin d ch nhn Linux.
12 13

graphic card sound card

18

7.2.1 Cc cng c xc l p c u hnh


Nh c p ph n 6.5, m c nh c u hnh bin d ch nhn n m ./arch/i386/defconfig. Khi kh i ng m t cng c (config tool) n s t ng c v dng n i dung c a file c u hnh m c nh ny tr c khi b n ch nh s a. ch nh c u hnh bin d ch nhn Linux, chuy n vo th m c ch a m ngu n c a nhn ( x nn):
$ cd /usr/src/linux-2.4.26

v d ny dng nhn c s hi u nhn 2.4.26 - xem l i ph n x nn u tin r t nn lm l ch y l nh:


$ make mrproper

ph n 6.4) v vi c

Khng k b n dng b n phn ph i Linux no v phin b n nhn Linux no, b n nn ch y l nh ny tr c khi th c hi n quy trnh bin d ch l i nhn. Target "mrproper" dng xo h t t t c nh ng g cn "v t v ng" trong cc th m c ch a m ngu n c a nhn Linux ch c ch n r ng m ngu n tr c khi c bin d ch ph i tnh tr ng "s ch s ". C ba phng ti n "config" ph bi n c th dng ch nh c u hnh bin d ch nhn Linux. Sau khi chuy n vo th m c /usr/src/linux-2.4.26, b n c th ch n m t trong ba cch sau: make config make menuconfig make xconfig

Trong : make config l phng ti n n gi n nh t v khng i h i thm b t c th vi n no khc ch y cng c ny. make config s a ra m t lo t cu h i v sau khi nh n c cu tr l i c a b n (Y, N, M nh ni trn sau khi b n nh n phm Enter, xc nh n cu tr l i c a mnh), n s hnh thnh m t c u hnh bin d ch nhn Linux. Nh c i m c a phng ti n ny l ch , n u b n l tr l i sai (ch n Y, N ho c M v g phm Enter), b n khng th quay ng c l i i u ch nh m ph i b t u l i t u. Phng ti n "make config" ny ch ti n l i cho nh ng ai r t kinh nghi m v n m r mnh c n g trong c u hnh bin d ch nhn. N cng ti n l i cho quy trnh ch nh c u hnh bin d ch nhn t xa (qua giao di n dng l nh (console) v khng dng c giao di n h a v l do g ). Sau khi hon t t cc cu h i, cng c ny s lu tr m t c u hnh bin d ch nhn ( c lu d ng .config trong th m c ch a m ngu n c a nhn Linux) v s n sng cho b c t o cc file ph thu c cho vi c

19

bin d ch nhn. N u h s .config c t l n bin d ch tr c, n s b vi t ch ng ln giai o n ny. make menuconfig nng c p ln m t m c cao hn so v i make config. Cng c ny c n th vi n v cc binaries "ncurses" t o giao di n h a (GUI) n gi n. V i cng c ny, b n c th i u ch nh l i cc chi ti t tu thch m khng ph i b t u l i t u (n u l ch n sai) nh dng make config. V i giao di n n gi n ny, b n c th di chuy n, thay i cc ch n l a b ng cch dng cc phm mi tn (ln xu ng), ch n Y b ng phm Y, ch n N b ng phm N v ch n M b ng phm M. V i cng c ny, b n cng c th t i m t c u hnh bin d ch nhn c s n ( lm t tr c v bin d ch thnh cng ch ng h n) m ch ng ph i i xuyn qua m i ch n l a hnh thnh m t c u hnh bin d ch nhn m i. M t c tnh c a cng c ny l n ch a "tr gip ng c nh" 14 (ph n gip ho c thng tin cho t ng m c trong qu trnh i u ch nh c u hnh). N u b n khng n m r gi tr ho c tc d ng c a module no , b ph n tr gip ny ch c ch n s h u ch. Sau khi hon thnh cc ch n l a, b n c th lu tr m t b n c u hnh trn my l n sau dng l i. giai o n ny, m t b n c u hnh c lu l i (c tn .config trong th m c ch a m ngu n c a Linux) v s n sng cho b c t o cc file ph thu c cho qu trnh bin d ch nhn. Tng t nh "make config", n u h s .config t n t i t l n bin d ch tr c, n s b vi t ch ng ln. make xconfig c l l phng ti n c dng r ng ri nh t, nh t l cho nh ng h th ng ch y X Window. make xconfig c n tr n b th vi n Qt v X Window t o cc giao di n h a 15. Cc ch n l a v cch di chuy n trong giao di n ny hon ton gi ng nh tr ng h p dng menuconfig v thm m t kh nng n a l c th dng chu t 16 ch n. N u b n c n bin d ch l i nhn v c th dng X Window th nn dng cng c xconfig ny v n d dng nh t.

Trn cc phin b n nhn Linux 2.6.x cn c thm make gconfig. Tng t nh make xconfig, "gconfig" cng t o giao di n c u hnh h a nhng n d a trn th vi n Gtk.

7.2.2 M t s i m c n ch trong giai o n hnh thnh c u hnh bin d ch nhn


Dng c u hnh bin d ch nhn c s n v i u ch nh cho thch h p v i nhu c u c a mnh. N u b n dng b n phn ph i c a RedHat, c u hnh bin d ch nhn c trong th m c /boot d ng config-<KERNEL_VERSION> (h s c u hnh ny t cc nhn do RedHat cung c p). dng c u hnh bin d ch nhn ny, b n c th dng make menuconfig ho c make xconfig t i c u hnh ny ln v i u ch nh theo

15

help context sensitive GUI 16 mouse

14

20

mu n. Th t ra khng c b t c ti li u no c th gi i thch c n k t ng ch n l a cho m i c u hnh my c . m c bin d ch l i m t nhn, b n c n hi u c u hnh my v nh ng ch n l a trong m t c u hnh n m c c th quy t nh ch n l a nh ng g cho thch h p. B n phn ph i Debian cng lu tr cc c u hnh bin d ch nhn trong th m c /boot tng t nh b n phn ph i RedHat. Cc b n phn ph i khc c m t s i m tng ng v d bi t, b n nn tham kh o thm cc h ng d n c th cho b n phn ph i mnh ang dng. Lu tr c u hnh bin d ch nhn cho l n bin d ch k ti p. N u v l do g khi n giai o n bin d ch nhn b h ng, b n c n xem xt o n bo l i sau cng khi trnh d ch 17 thot ra v i "tnh tr ng khng thnh cng" (exit status is not 0). Thng th ng trnh bin d ch thot ra n a ch ng v cch ch n l a c u hnh bin d ch nhn c nh ng i m khng thch h p v tho mn (lin h nhau). Nh ng l i c bo trn console gip b n xc nh tr c tr c n m trong khu v c no c a c u hnh bin d ch nhn. B n ch c n t i h s bin d ch c lu tr l n cu i cng ln v vo th ng khu v c b s c xem xt v i u ch nh, thay v ph i thi t l p t u trnh g p nh ng l i khc. M i khi i u ch nh v thay i c u hnh bin d ch nhn, b n l i ti p t c lu l i m t b n v t tn cho n m t cch h p l (v d kernel-2.4.26-1 cho c u hnh th nh t, kernel-2.4.26-2 cho c u hnh th nh.....). N u b n dng m t nhn "vanilla", m ngu n nhn c t i v t http://sources.redhat. com/bzip2/kernel ho c cc my ch mirror (bi vi t ny t p trung ch y u vo nhn "vanilla"), sau khi hon thnh b c make config ho c make menuconfig ho c make xconfig, c u hnh bin d ch nhn c b n i u ch nh v ch n l a s c lu tr d ng n 18 ./.config (cc h s v th m c b t u b ng d u ch m . c x p lo i l file n, ch c ls -la m i th y chng). L n k ti p, sau khi ch y m t trong s l nh trn v ti p nh n cc thay i th c u hnh bin d ch nhn l i t ng vi t ch ng ln ./.config. Cho nn, b n c th lu tr h s ./.config thnh m t h s c tn khc tr c khi i u ch nh v ch n l a l n k ti p. Ngoi cc l nh make config, make menuconfig, make xconfig ho c make gconfig (cho lo t nhn 2.6.x), b n cn c th dng m t l nh khc cho c kernel 2.4.x v 2.6.x l: make oldconfig. L nh ny l m t tr ng h p c bi t dng c v dng cc ty ch n c s n trong ./.config m khng cho b n c h i i u ch nh v ch n l a. Tr ng h p ny r t ti n l i n u b n i u ch nh v ch n l a thnh cng m t c u hnh bin d ch nhn cho mnh. Phin b n nhn 2.6.x cn c b n target cho b c ny:

17 18

compiler hidden

21

make defconfig: t o m t c u hnh bin d ch nhn m i v i ch m c nh cho t t c ch n l a make allmodconfig: t o m t c u hnh bin d ch nhn m i v i ch ch n l a cc modules khi c th c make allyesconfig: t o m t c u hnh bin d ch nhn m i v i ch ti p nh n yes (Y) cho t t c ch n l a make allnoconfig: t o m t c u hnh bin d ch nhn m i v i ch ti p nh n N cho t t c ch n l a. Ch ny s t o ra m t nhn r t nh v n gi n.

Hi m khi b n i u ch nh m t c u hnh bin d ch nhn Linux l n u m khng h b l i trong khi bin d ch. Cch lu tr t ng c u hnh cho m i l n hi u ch nh l cch t t nh t b o m "l i" l n tr c s khng ti di n. N u b n ch n gi n dng c u hnh bin d ch nhn c s n (nh RedHat Linux ch a trong /boot) v khng i u ch nh g c th ngoi m c ch v l i, l i dng ny ch ng c tc d ng g v m t nng cao hi u nng c a my.

8 Cc b c bin d ch
8.1 B c t o dependency, d n d p v t o nhn
B c ny c th ch y ba l nh:
# make dep # make clean # make bzImage

ho c gom chung l i thnh m t nhm:


# make dep clean bzImage

N u b n ch y dep, clean v bzImage ring bi t th ph i trng ch ng khi no l nh th nh t hon t t ti p t c ch y l nh th nh v ti p theo. N u b n ch y ba l nh m t l t th l nh th nh t ng n i ti p l nh th nh t v l nh th ba n i ti p l nh th nh. B n khng c n ph i ch i.

22

b c "dep" l b c t o dependencies v cc file bao g m 19 c n thi t cho vi c bin d ch nhn. B c ny c th m t nhi u pht, ty vo CPU c a t ng my. i v i lo t nhn 2.6.x, b c ny khng c n thi t n a. sau khi xong b c "dep", b c "clean" dng d n d p t t c nh ng objects v n v t, khng cn c n thi t v qu trnh t o file ph thu c hon t t trn. b c k ti p "bzImage" l b c t o nhn. y l b c h t s c quan tr ng trong ba b c. N u c s c g x y ra th ph i quay l i i u ch nh c u hnh bin d ch nhn v th c hi n l i cc b c "make dep", "make clean" tr l i (c n ph i ch y m t s l nh d n d p tr c khi make dep clean bzImage tr l i, v n ny s c c p trong ph n 10). Trn my ch y Athlon Thunderbird 1.4Ghz, ti m t ch ng 10 pht hon thnh b c ny. Trn m t my Pentium 233MMX c, ti m t hn 40 pht m i hon thnh b c t o kernel image.

N u ba b c trn hon ton thnh cng, b n c th tm th y nhn 20 n m trong th m c ./arch/$ARCH/boot, trong $ARCH l dng ph n c ng c a nhn b n mu n bin d ch. N u my b n thu c d ng i386, b n s tm th y nhn trong ./arch/i386/boot. Nhn ny c t o ra nhng cha c ci b c ny, n ch lu trong th m c trn cho cc b c v sau. Th t ra c th t o nhi u d ng "kernel image". D ng kernel image c t o t "make bzImage" l d ng ph bi n nh t hi n nay v n nn kernel image t t nh t v thch h p v i h u h t cc lo i my. B n cng c th dng:
# make zImage make zDisk ho c make zLilo t o kernel image n u kernel d

ki n r t nh v khng c n k thu t nn cao nh "bz". Dng cc d ng ny cng thch h p trong tr ng h p my c a b n qu c v c th c s c v i "bzImage". Ch c n n m m t cch khi qut nh sau: Ph n bz ho c z i tr c cc image kernel image. trn ch nh cho lo i nn no c dng v i

Ph n Image ho c Disk ho c Lilo ch nh cho "lo i" kernel image. Kernel image ny c x nn "on-the-fly" trong qu trnh boot vo Linux sau ny.

Xuyn qua ba b c trn, b n s th y v s thng i p ch y trn console ( kernel 2.6.x thng i p ch y trn console t hn r t nhi u). B t c l i no (error) c bo trong b c

19 20

includes kernel image

23

ny u ph i i u ch nh c u hnh bin d ch nhn v tr l i b c "make dep". Cho n giai o n ny, l do gy ra l i th ng l: ngh dng bin d ch khng ng phin b n (xem ph n 4.1 v 4.2 cho lo t nhn ny b n ang bin d ch) i u ch nh sai ho c thi u m t s ch n l a no trong c u hnh bin d ch nhn. Xem l i bo tr c khi compiler thot ra xc nh l i ny thu c ph n no trong c u hnh bin d ch nhn m ch nh l i cho thch h p, nn dng phng php t i v lu tr c u hnh bin d ch nhn c p trong ph n 7.2.2 trn. c u hnh my qu th p (memory / diskspace) khng th c hi n ba b c trn. N u g p s c ny, nn nng c p my ho c dng m t my khc build kernel cho my ny.

Lo t nhn 2.6.x n gi n ho ch v i m t target "make all". Target ny bao g m lun ph n "make modules" trong b c 8.2 k ti p.

8.2 B c t o modules v ci modules


B c ny c th ch y hai l nh:
make modules make modules_install

ho c gom chung l i thnh m t dng:


make modules modules_install

i m khc bi t gi a cch ch y hai l nh ring bi t ho c ch y chung m t dng l nh n m ch :

b n c th ch mu n bin d ch modules cho kernel m khng mu n ci (install) trn my ngay sau khi cc modules c bin d ch xong, ho c b n ch mu n bin d ch modules trn my ny r i s mang qua my khc ci.

Thng th ng "make modules modules_install" i chung v t ng i build modules trn m t my r i mang i ci trn m t my khc. N u ch y hai l nh ny m t l t, b n ph i ch y ch "super user" khng th modules khng install c v ch c root (super user) m i c th "install" cc modules v a c bin d ch. N u b n tch r i hai l nh trn th cc l nh tch r i nh sau:
$ make modules

ch y b ng user account bnh th ng 24

# su [enter password]

chuy n sang ch "super user"


make modules_install

ci modules v a bin d ch xong. B c "make modules" l b c bin d ch v t o ra cc modules (m b n ch n d ng M trong qu trnh ch nh l c u hnh bin d ch nhn). Cc modules c bin d ch s c lu tr trong cc th m c thch ng v i t ng nhm "drivers" trong cy m ngu n (kernel source tree). Giai o n ny l giai o n bin d ch lu nh t trong tr n b qu trnh compiler th c s bin d ch m ngu n c a kernel. Trn m t my ch y Athlon Thunderbird 1.4Ghz, b c ny m t ch ng 25 pht. Trong khi cng s l ng modules c n bin d ch ch y trn my Pentium 233MMX m t ch ng trn 4 gi ng h . B c "make modules_install" s "ci" cc modules v a c bin d ch vo th m c /lib/modules/<kernel_version>. N u li t k th m c ny (ls), b n s th y t nh t m t th m c ch a modules cho kernel ang ch y trn my ho c nhi u th m c cho nhi u phin b n kernel tr c y (c t quy trnh c p nh t kernel b ng rpm ho c quy trnh no tu theo b n phn ph i, ho c t quy trnh bin d ch kernel tng t nh bi vi t ny). Khi boot Linux b ng m t phin b n kernel no c trn my, cc modules thu c kernel ny (trong th m c thch ng v i kernel version) s c ng t i. i v i lo t nhn 2.4.x, b n c th tham kh o chi ti t thng tin v modules, cch bin d ch modules t ng qut v cch x d ng modules (thu c user space) trong h s ./Documentation/modules.txt thu c m ngu n kernel b n d nh bin d ch. i v i lo t nhn 2.6.x, b n c th tham kh o chi ti t thng tin v modules, cch bin d ch modules t ng qut v cch x d ng modules (thu c user space) trong ba h s ./Documentation/kbuild/modules.txt, ./Documentation/networking/net-modules.txt v ./Documentation/sound/oss/README.modules thu c m ngu n kernel b n d nh bin d ch. Ring v i lo t nhn 2.6.x, b c "make modules" c th th c hi n t "make all" v b c "make modules install" ch th c hi n ring ( ch super user) ci cc modules c bin d ch.

8.3 Tch r i m ngu n v h s output trn lo t nhn 2.6.x


N u b n ang dng lo t nhn 2.4.x th khng c n tham kh o thng tin c a m c ny. Nh ng thng tin trong m c ny ch gi i thi u thm m t s ti n ch h u d ng cho quy trnh chu n b v bin d ch nhn 2.6.x.

25

8.3.1 "make help", m t ti n ch m i trn lo t nhn 2.6.x


Ngoi nh ng i m khc bi t trong cc make target c c p ph n 8.1 v 8.2, trn lo t nhn 2.6.x, b n c th x d ng m t ti n ch kh hay m kernel 2.4.x khng c l ph n "help" tr c khi "make" m ngu n c a nhn Linux. T t nhin b n ph i ch y l nh ny sau khi vo trong th m c ch a m ngu n nhn Linux:
$ cd /usr/src/linux-2.6.6

dng kernel 2.6.6 trong tr ng h p ny


$ make help

s cho thng tin tr gip nh sau:


bash-2.05b$ make help Cleaning targets: clean - remove most generated files but keep the config mrproper - remove all generated files + config + various backup files Configuration targets: oldconfig - Update current config utilising a line-oriented program menuconfig - Update current config utilising a menu based program xconfig - Update current config utilising a QT based front-end gconfig - Update current config utilising a GTK based front-end defconfig - New config with default answer to all options allmodconfig - New config selecting modules when possible allyesconfig - New config where all options are accepted with yes allnoconfig - New minimal config Other generic targets: all - Build all targets marked with [*] * vmlinux - Build the bare kernel * modules - Build all modules modules_install - Install all modules dir/ - Build all files in dir and below dir/file.[ois] - Build specified target only rpm - Build a kernel as an RPM package tags/TAGS - Generate tags file for editors cscope - Generate cscope index Documentation targets: Linux kernel internal documentation in different formats: sgmldocs (SGML), psdocs (Postscript), pdfdocs (PDF) htmldocs (HTML), mandocs (man pages, use installmandocs to install) Architecture specific targets (i386): * bzImage - Compressed kernel image (arch/i386/boot/bzImage) install - Install kernel using (your) ~/bin/installkernel or (distribution) /sbin/installkernel or install to $(INSTALL_PATH) and run lilo bzdisk - Create a boot floppy in /dev/fd0 fdimage - Create a boot floppy image

26

make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build make O=dir [targets] Locate all output files in "dir", including .config make C=1 [targets] Check all c source with checker tool Execute "make" or "make all" to build all targets marked with [*] For further info see the ./README file bash-2.05b$

Thng tin trn cho th y "Makefile" chnh c a lo t nhn 2.6.x bao g m cc m c tiu (target) bin d ch khi ch y make help. V i thng tin ny, b n c th ch n cc target make theo mu n m khng ph i ki m tra trong "Makefile" nh v i lo t nhn 2.4.x (lo t nhn 2.4.x khng c "make help" nh lo t nhn 2.6.x v lo t nhn 2.4.x khng c nhi u make targets nh lo t nhn 2.6.x). i m t bi t c n quan tm l ba ch n l a cu i trong thng tin "make help" cung c p:
make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build make O=dir [targets] Locate all output files in "dir", including .config make C=1 [targets] Check all c source with checker tool

M t trong nh ng ch n l a quan tr ng y l n cho php b n lu tr tr n b cc h s output trong qu trnh bin d ch vo m t th m c ring bi t thay v ch a chung v i m ngu n c a kernel.

8.3.2 Tch r i m ngu n v output files


Lo t nhn 2.6.x cho php b n tch r i m ngu n c a kernel v cc h s output c t o trong qu trnh compile, cc h s n 21 nh .config, .depend.... trong cc b c c p ph n 7 v ?? cng s c lu tr th m c no b n mu n dng cho output files. V i phng ti n ny, m ngu n v cc h s output s khng xen k chung. i m quan tr ng c n nh l khi dng ch n l a ny th ph i dng cho cc b c "make" khc trong su t qu trnh bin d ch. V d , b n c th kh i u b ng:
# make O=/path/to/output xconfig

th cc b c k ti p s l:
# make O=/path/to/output all # make O=/path/to/output modules_install

target "all" bao g m "dep, clean, bzImage, modules". Ch y l nh ny b ng super user ci modules c a kernel.

9 Ci t nhn
Ph n ny gi i thi u hai cch ci nhn v a bin d ch v ch nh nh boot loader.
21

hidden

27

9.1 Ci t v i "make install"


t ng i dng n ch c nng "make install" ny v m t s b n phn ph i khng c cc ti n ch c n thi t th c hi n tr n v n b c ny. "make install" ti n l i v an ton hn ci b ng tay v n thao tc cc b c c n thi t thi t l p nhn m i trn h th ng. Cc b c ny bao g m quy trnh lu tr nhn c (trong th m c /boot), copy nhn m i, copy System.map m i, i u ch nh boot loader configuration (lilo.conf ho c grub.conf) v c p nh t boot loader. B c "make install" d a trn h s Makefile v install.sh, m t shell script thu c th m c ./arch/$ARCH/boot. Shell script install.sh "g i" m t s shell script khc nh /sbin/installkernel v /sbin/new-kernel-pkg, ngoi ra cc shell scripts ny cn d a vo m t binary c tn l "grubby" t o thng tin trong grub.conf n u b n dng GRUB. Cc shell scripts "installkernel" v "new-kernel-install" thu c gi mkinitrd c a RedHat, cc b n phn ph i khc c nh ng ng d ng tng t . N u b n phn ph i b n dng khng c gi tng t , b n ph i ci kernel b ng tay (ph n 9.2) ho c t o cc script tng t th c hi n b c ny. Trong khun kh gi i h n c a bi vi t, ti khng i su vo v n t o cc script ti n ch. ci nhn Linux m i, b n ch n gi n ch y l nh make install ch super user t trong th m c ch a m ngu n c a nhn Linux kernel. Sau khi hon t t b c "make install" b n nn ki m tra l i c u hnh c a trnh kh i ng 22 trn my v ch y cc l nh tng ng (n u c n) ch nh nh trnh kh i ng cho chnh xc.

9.1.1 i v i GRUB
V d b n c hai phin b n nhn trn my 2.4.20 (phin b n ang ch y) v 2.4.26 (phin b n v a c bin d ch). Sau khi ch y "make install", grub.conf c n i dung nh sau:
default=1 timeout=20 splashimage=(hd0,0)/boot/grub/splash.xpm.gz title Linux (2.4.26) root (hd0,0) kernel /boot/vmlinuz-2.4.26 ro root=/dev/hda1 initrd=/boot/initrd-2.4.26.img title Linux (2.4.20) root (hd0,0) kernel /boot/vmlinuz-2.4.20 ro root=/dev/hda1 initrd=/boot/initrd-2.4.20.img
22

boot loader

28

Chi ti t c n ch l bi n default. Trong v d trn, b n c hai nhn trong c u hnh GRUB cho cc phin b n 2.4.26 v 2.4.20. N u b n mu n kh i ng nhn 2.4.26 theo m c nh th gi tr c a default ph i l 0 (grub m th t cc nhn t 0). Khi ch y "make install", cc ti n ch c a "install" t ng a vo cc chi ti t thu c kernel m i vo c u hnh GRUB. Tuy nhin, gi tr default v n gi gi tr ch nh cho nhn hi n ang ho t ng trn my. B n c n ch nh gi tr ny bu c trnh kh i ng t i ln phin b n nhn m i. M t chi ti t h t s c quan tr ng b n c n ch l gi tr root (hdX,Y). N u GRUB c ci trong lc ci t h th ng t CD v ho t ng hon ch nh, b n khng nn thay i gi tr ny. Gi tr ny ch c n thay i n u b n thm a c ng v thay i cc phn vng 23 trn my. sau khi ch nh nh v lu tr grub.conf thch h p, b n ch c n kh i ng l i my. N u b n dng GRUB lm trnh kh i ng th cng tc bin d ch l i nhn Linux hon thnh y. gi i php phng b : tr ng h p khng th boot vo nhn m i r t n gi n n u dng GRUB lm trnh kh i ng. B n ch c n thm m t dng fallback 1 vo c u hnh grub.conf l . Ty ch n ny cho GRUB bi t n u dng "default=0" kh i ng nhn m i nh t (2.4.26 trong v d ny) nhng khng thnh cng v l do no th th kh i ng l i v i nhn c hn (2.4.20). Xem thm ph n 10 n u khng th kh i ng c vo Linux v trnh kh i ng b h ng.

9.1.2 i v i LILO
V d b n c hai phin b n nhn trn my 2.4.20 (phin b n ang ch y) v 2.4.26 (phin b n v a c bin d ch), sau khi ch y "make install", lilo.conf c n i dung nh sau:
prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message image=/boot/vmlinuz-2.4.20 initrd=/boot/initrd-2.4.20.img root=/dev/hda1 label=linux-2.4.20 read-only

23

partitions

29

image=/boot/vmlinuz initrd=/boot/initrd-2.4.26.img root=/dev/hda1 label=linux read-only

chi ti t c n ch l bi n default. Trong v d trn, b n c hai nhn trong c u hnh LILO cho cc phin b n 2.4.26 v 2.4.20. N u b n mu n kh i ng nhn 2.4.26 th gi tr c a default ph i l gi tr label (nhn) thu c nhn no b n mu n dng. Trong tr ng h p ny, nhn (label) c gi tr l linux ch nh cho nhn 2.4.26. Khi ch y "make install", cc ti n ch c a "install" a vo cc chi ti t c a nhn m i vo c u hnh LILO. y vmlinuz l lin k t bi u t ng 24 c a h s 25 vmlinuz-2.4.26. B n nn ki m tra l i gi tr default b o m trnh kh i ng s t i nhn v a bin d ch khi kh i ng. sau khi ch nh nh v lu tr lilo.conf theo mu n, b n ph i ch y l nh:
# /sbin/lilo

v ch tr ng h p h th ng bo l i trong b c ci lilo lm trnh kh i ng. N u c, i u ch nh cho chnh xc v th c hi n l i l nh trn. V i v d trn, b n s th y hi n th k t qu nh sau:


Added linux* Added linux-2.4.20

Nhn no i km v i d u hoa th (*) l nhn s c kh i ng theo m c nh. v i LILO, gi i php n gi n nh t phng tr ng h p khng th kh i ng vo nhn m i mang tnh t m th i. Tr c khi kh i ng l i my dng l nh sau:
# /sbin/lilo -R linux

r i ch y
# reboot

Nn nh cc l nh trn c a ra nh m t v d cho nhn 2.4.20 v 2.4.26 v i c u hnh kh i ng nh trn. B n ph i i u ch nh ng phin b n nhn m b n ang bin d ch. L nh th nh t cho LILO bi t l n k ti p my kh i ng l i th th dng nhn 2.4.26. N u khng thnh cng th khng l y nhn 2.4.26 lm nhn m c nh v l n boot k

24 25

symbolic link file

30

ti p s dng nhn 2.4.20 (nhn ny ch c ch n ph i lm vi c c v n dng bin d ch nhn 2.4.26). L nh th nh ch n gi n ra l nh cho my kh i ng l i. N u dng l nh "/sbin/lilo -R linux-x.xx.xx" v kh i ng vo nhn m i thnh cng th b n c n ch nh cho nhn x.xx.xx lm nhn m c nh r i m i ch y "/sbin/lilo -v" nh ni trn (trong ph n bi n "default" c a lilo.conf).

9.2 Cc b c ci t b ng tay
Cc b c ci t "b ng tay" tng t nh cc b c "make install" trn nhng c thao tc "b ng tay". Th t ra quy trnh ny r t n gi n, i u b n c n lu l ph i th c hi n chnh xc trnh nh ng tr ng i trong b c ny v trong giai o n kh i ng vo nhn m i.

9.2.1 T o initrd
Tr ng h p b n bin d ch cc drivers quan tr ng d ng modules c lin h n quy trnh kh i ng c a Linux (nh SCSI driver, RAID driver, cc lo i filesystem m root filesystem dng nh ext3, jbd...) th ch c ch n b n ph i c n n initrd 26. M c ch chnh c a initrd l t i s n cc driver c n thi t cho nhn trong qu trnh kh i ng. N u khng mu n dng initrd, b n ph i bin d ch cc driver tr c ti p vo nhn 27. Nn ch m t s b n phn ph i Linux khng dng initrd. H khuy n khch bin d ch cc driver lin h n quy trnh kh i ng tr c ti p vo nhn. Mu n tham kh o thm chi ti t v RAM disk cho tr ng h p ny, xem <KERNEL SRC>/Documentation/ramdisk.txt. Quy trnh t o initrd r t n gi n, ch c n ch y l nh:
# /sbin/mkinitrd /boot/initrd-<KERNEL_VERSION>.img <KERNEL_VERSION>

trong : Tham s th nh t /boot/initrd-<KERNEL_VERSION>.img ch nh cho h s v th m c ch a h s initrd. Thng th ng initrd c a nhn c ch a trong th m c /boot cng v i cc thng tin v h s khc c n thi t cho quy trnh kh i ng. Tham s <KERNEL_VERSION> th nh chnh l nhn no b n mu n t o initrd cho n. T t nhin th m c ch a cc modules cho phin b n nhn ny ph i c trong /lib/modules/, n u khng b n c system bo c l i.

26 27

INITial Ram Disk hay cn g i l static compile

31

Ty thu c vo b n phn ph i, mkinitrd i h i thm cc thng s c th ch ng d n n nhn. N u g p tr ng i trong b c t o mkinitrd b n nn tham kh o ti li u c th cho b n phn ph i mnh ang dng ho c t i thi u l xem man mkinitrd v ti li u <KERNEL SRC>/Documentation/initrd.txt xem thm cc thng tin c n thi t. M t i m ng ch l t lo t nhn 2.5.x 28 tr i, initramfs c pht tri n v i m c ch h tr v s i n ch thay th initrd. u i m n i b t c a initramfs l n c th ch a cc b lu tr d ng cpio "newc" ho c "crc" ( c nn ho c khng c nn). initramfs cho n nay cha ph bi n v ng d ng r ng ri trn cc b n phn ph i Linux. Tuy nhin, h ng pht tri n v ng d ng initramfs c v y h a h n.

9.2.2 Copy nhn v System.map


Sau khi hon thnh b c "make modules_install" (ph n 8.3), lc ny b n c tr n b cc b ph n c n thi t cho nhn m i bao g m c kernel image v cc modules thu c nhn ny. copy bzImage t <KERNEL_SRC>/arch/i386/boot/ n th m c /boot, v d :
# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/bzImage2.4.26

Trnh ci t c a RedHat v m t s b n phn ph i khc bao g m b c copy bzImage thnh vmlinuz, b n c th th c hi n (hay khng ty , b c ny tng t nh b c trn) nh sau:
# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/vmlinuz2.4.26

k ti p l xo lin k t 29 c (n u c) c a vmlinuz trong th m c /boot:


# rm -f /boot/vmlinuz

v sau t o lin k t m i cho vmlinuz-2.4.26 thnh:


# ln -s /boot/vmlinuz-2.4.26 /boot/vmlinuz

T t nhin b n ph i i u ch nh l i boot loader thch ng v i cch g i "bzImage" ho c "vmlinuz" ny cho gi tr image (trong lilo.conf) ho c gi tr kernel (trong grub.conf). Cch dng v cch g i bzImage v vmlinuz t o kh nhi u b i r i cho ng i dng Linux khi ti p c n quy trnh bin d ch nhn. M t s b n phn ph i Linux dng bzImage, m t s khc l i dng vmlinuz. D g i chng n a, y cng ch

28 29

development kernel symbolic link

32

l cch dng v cch g i; b n nn dng theo cch b n phn ph i Linux no c trn my. ph n cn l i l b c copy h s System.map:
# cp /usr/src/linux-2.4.26/System.map-2.4.26 /boot/System.map2.4.26

k ti p l xo lin k t c c a System.map trong th m c /boot:


# rm -f /boot/System.map

v sau , t o lin k t m i cho System.map:


# ln -s /boot/System.map-2.4.26 /boot/System.map

9.2.3 Ch nh c u hnh c a bootloader config


9.2.3.1 N u dng GRUB V d b n c hai phin b n nhn trn my 2.4.20 (phin b n ang ch y) v 2.4.26 (phin b n v a c bin d ch) th grub.conf c n i dung nh sau:
default=0 timeout=20 splashimage=(hd0,0)/boot/grub/splash.xpm.gz title Linux (2.4.20) root (hd0,0) kernel /boot/vmlinuz-2.4.20 ro root=/dev/hda1 initrd=/boot/initrd-2.4.20.img

Ch nh thnh:
default=0 timeout=20 splashimage=(hd0,0)/boot/grub/splash.xpm.gz title Linux (2.4.26) root (hd0,0) kernel /boot/vmlinuz ro root=/dev/hda1 initrd=/boot/initrd-2.4.26.img title Linux (2.4.20) root (hd0,0)

33

kernel /boot/vmlinuz-2.4.20 ro root=/dev/hda1 initrd=/boot/initrd-2.4.20.img

Sau khi lu tr c u hnh c a /etc/grub.conf trn (/etc/grub.conf l lin k t 30 n /boot/grub/menu.1st) v kh i ng l i my b t u dng nhn v a c bin d ch. N u b n dng GRUB th cng tc bin d ch l i nhn Linux hon thnh y. Nn lu trong v d ny, ti dng vmlinuz thay v dng bzImage, b n nn ch n l a theo v i u ch nh cho ph h p trong grub.conf. i v i gi i php phng tr ng h p khng th dng GRUB kh i ng vo nhn m i, xem chi ti t ph n 9.1.1 trn. 9.2.3.2 N u dng LILO V d b n c hai phin b n nhn trn my 2.4.20 (phin b n ang ch y) v 2.4.26 (phin b n v a c bin d ch) th lilo.conf tng t nh sau:
prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message image=/boot/vmlinuz initrd=/boot/initrd-2.4.20.img root=/dev/hda1 label=linux read-only

Ch nh /etc/lilo.conf ci nhn m i (2.4.26 cho v d nh sau:


prompt timeout=50 default=linux boot=/dev/hda map=/boot/map install=/boot/boot.b message=/boot/message

y), b n c /etc/lilo.conf

30

symbolic link

34

image=/boot/vmlinuz-2.4.20 initrd=/boot/initrd-2.4.20.img root=/dev/hda1 label=linux-2.4.20 read-only image=/boot/vmlinuz initrd=/boot/initrd-2.4.26.img root=/dev/hda1 label=linux read-only

Sau khi lu tr (save) c u hnh c a /etc/lilo.conf


# /sbin/lilo

trn, ch y l nh:

ng k nhn m i cho LILO. i v i gi i php phng tr ng h p khng th dng LILO kh i ng vo nhn m i, xem chi ti t ph n 9.1.2 trn.

10 Kh i ng l i my v ch nh l n u g p tr c tr c
T i y, b n c n kh i ng l i my v i nhn m i. N u khng c g tr ng i, my s kh i ng vo Linux bnh th ng. B n c th ki m l i xem nhn mnh ang ch y c ng phin b n v a c bin d ch hay khng b ng cch ch y:
$ uname -r

ho c,
$ cat /proc/version

N u k t qu bo phin b n nhn c th c ngha trnh kh i ng (LILO ho c GRUB) khng kh i ng nhn v a c bin d ch. B n nn ki m tra l i cc file c u hnh (lilo.conf ho c grub.conf) cho ng theo chi ti t nu trn.

10.1 B treo khi kh i ng vo linux


Tr ng i trong giai o n kh i ng vo Linux thng th ng do c u hnh trnh kh i ng khng ng v trnh kh i ng c ci ln khng ng phn vng kh i ng 31 ho c

31

boot partition

35

MBR b h ng (hi m th y trong qu trnh bin d ch l i v ci nhn m i n u th c hi n ng quy cch). Trong tr ng h p ny, b n ph i: dng n a m m "c p c u" c t o ph n ?? kh i ng vo Linux

n giai o n ny b n h n ph i bi t v tr c a phn vng g c 32 (/) trn a c ng k t n i phn vng 33 c a a c ng:


# mount /dev/hdXy /mount/point/somewhere

trong X l v tr a c ng trn my, y l v tr phn vng g c trn a c ng ny. i root (chroot) tr thnh phn vng g c c a a c ng:
# chroot /mount/point/somewhere

trong /mount/point/somewhere l ni a c ng c a b n c k t n i 34. ki m tra l i c u hnh c a trnh kh i ng v ci t l i cho my (xem ph n 9.1.1 ho c ty theo trnh kh i ng b n dng l GRUB hay LILO). i m c n ch y cho GRUB l b n ph i ch y l nh:
9.1.2

# /sbin/grub-install /dev/hdX

trong /dev/hdX l tn thi t b a ch a MBR cho h th ng (th ng l a u tin trn my 35). L nh trn s thi t l p l i b n ghi kh i ng 36 v lo i b cc tr ng h p MBR b h ng. Tng t cho LILO, b n ph i ch y l nh:
# /sbin/lilo.

10.2 B treo trong qu trnh nhn c load


N u b n v ng vo cc tr ng i trong giai o n nhn c t i ln thng th ng l do cc drivers t i c n thi t mount filesystems trn my b thi u. Gi s b n dng ext3 cho phn vng g c 37 (/) ch a nhn. c th k t n i phn vng g c 38 ny, modul ext3 ph i c bin d ch v initrd ph i t i module ny ln. Tng t ng d ng cho cc tr ng h p dng filesystem khc v cng thi u module.

32 33 34 35 36 37 38

root partition mount partition mount Primary Master boot record root partition mount root partition

36

Trong tr ng h p ny, b n c n ghi ph n l i c bo trong khi kh i ng vo nhn m i xc nh l i ny thu c ph n no c a c u hnh bin d ch nhn Linux v t i u ch nh l i v bin d ch l i cho thch ng. Ni m t cch t ng qut, b n ph i: kh i ng l i my vo phin b n c c a kernel (ho c kh i ng vo phin b n c c a nhn n u b n dng bi n php d phng c c p ph n 9.1.1 v 9.1.2 trn) ch n l a v ch nh nh c u hnh bin d ch nhn Linux l i (xem ph n 7.2.2 trnh l p l i b c l a ch n c u hnh m t cch khng c n thi t). th c hi n l i cc b c nu ra trong ph n 8 v 9 trn

11 V v bin d ch nhn
M ngu n c a nhn Linux th ng c "v" r i bin d ch l i nhi u hn l c bin d ch t tr n b m ngu n t i v t http://sources.redhat.com/bzip2/kernel n u b n quen thu c v i quy trnh ti bin d ch ho c b n c nhu c u ph i c p nh p kernel c a my th ng xuyn. T i sao l i c n "v"? M ngu n c a Linux kernel c n c v v cc l do th ng g p nh sau: m ngu n c a nhn Linux kernel c p nh t. B n c s n m ngu n c a nhn Linux (c hn) trn my. Mu n nng c p phin b n nhn c a Linux, b n ch c n t i cc "mi ng v 39" v v (thay v ph i t i tr n b m ngu n c a nhn Linux cho phin b n m i). m t s "drivers" c c p nh t. x d ng cc driver m i ny (v cc drivers ny c n c bin d ch n i v i cc th vi n hi n hnh trn my), b n ch c n t i cc "mi ng v" c a nh ng drivers ny v nhn Linux v bin d ch l i chng.

11.1 Cc i m quan tr ng tr c khi v


Tng t nh ph n 6.2, 6.3 v 6.4 trn, quy trnh t i cc mi ng v cho nhn Linux y h t nh t i tr n b gi m ngu n c a nhn Linux. i m khc bi t l b n ph i t i cc h s kh i u b ng patch v ch n cho ng cc "mi ng v" c n thi t cho nhn c n c v. i m t i y u c n ghi nh l khi v m ngu n c a nhn Linux, b n ph i v ng th t v y cc mi ng v cho n ng phin b n c n c. V d , b n ang c phin b n nhn l 2.4.20 trn my v b n mu n bin d ch l i phin b n kernel c a my tr thnh 2.4.26. Thay v t i tr n b m ngu n c a nhn 2.4.26 v bin d ch l i (nh trnh by trong su t bi vi t ny), b n c th t i cc b n v 2.4.21, 2.4.22, 2.4.23, 2.4.24, 2.4.25 v 2.4.26 v my. T ng c ng dung l ng cc b n v ny ch l m t ph n r t nh so v i tr n b gi m ngu n 2.4.26. T t nhin b n c m ngu n c a kernel 2.4.20 trn my.
39

patches

37

11.2 T i, x v v
Cc mi ng v th ng c nn hai d ng: .gz ho c .bz2 nh gi m ngu n. B n c th ty ch n v c th t i cc mi ng v ny v b t c ni no trn my. Sau khi t i chng v , b n c th th c hi n quy trnh tng t nh sau: Gi nh cc b n v c nn d ng .bz2, ni ch a m ngu n c a nhn Linux /usr/src v th c tnh c a cc mi ng v ny c ki m tra. Trong v d ny, gi nh phin b n ang dng trn my l 2.4.20 v phin b n c n c v s l 2.4.26. Chuy n vo th m c /usr/src:
$ cd /usr/src

x nn cc mi ng v cc mi ng v:

d ng .bz2 vo th m c /usr/src. L p l i cho n khi x h t

$ tar xfvj /path/to/patch/patch-x.xx.xx ./

D n d p s ch s m ngu n nhn hi n c trn my, gi nh phin b n m ngu n hi n c l 2.4.20:


$ cd ./kernel-2.4.20 $ make mrproper

Lu m t b n m ngu n kernel 2.4.20 trong th m c /usr/src phng cho s c trong qu trnh v (n u b n khng lu m t b n m ngu n nguyn th y c a nhn 2.4.20 trn my, ho c b n m ngu n 2.4.20 ny cng c v tr c y).
$ tar cvf ../linux-2.4.20.tar ./

V cc mi ng v theo ng th t v theo di b t c l i no c bo:


$ $ $ $ $ $ patch patch patch patch patch patch -p1 -p1 -p1 -p1 -p1 -p1 < < < < < < ../patch-2.4.21 ../patch-2.4.22 ../patch-2.4.23 ../patch-2.4.24 ../patch-2.4.25 ../patch-2.4.26

ho c th c hi n ki u "l i" nh sau: t o m t bi n mi tr ng PATCH 40 t m th i ch a tn cc mi ng v theo ng th t , tch r i b ng kho ng tr ng 41:

40

vi c nh ngha bi n PATCH trong 2 dng ch l thu n ti n khi dn trang, tc gi dng duy nh t 1 hng. K t qu hon ton nh nhau. 41 space

38

$ export PATCH="patch-2.4.21 patch-2.4.22 patch-2.4.23 " $ export PATCH="$PATCH patch-2.4.24 patch-2.4.25 patch-2.4.26"

Ch y vng l p:
$ for item in $PATCH; do patch -p1 < ../$item; done

N u trong khi v khng c g tr ng i, b n s th y cc thng tin tng t :


patching file xxx patching file yyy ....

cho n khi k t thc. N u trong khi v b bo l i, b n ph i ngng b c v (Ctrl-C) v ki m tra xem b n c dng ng b n v v th c hi n cc b n v ng th t phin b n hay khng. Khng nn ti p t c v i b c v khi g p l i v ch c ch n b n s g p tr ng i trong giai o n bin d ch sau ny. trnh cc tr ng i v sau, n u b bo l i trong khi v, cch t t nh t b n nn xo tr n b th m c ch a m ngu n c a nhn Linux (ang c v v b l i) v x gi m ngu n nguyn th y ho c gi b n v a lu tr trn r i th l i. Xo th m c ch a m ngu n v a v v b tr c tr c, th m c linux-2.4.20 c dng nh m t v d y:
$ cd /usr/src $ rm -rf ./linux-2.4.20

X gi m ngu n c lu tr
$ tar xvf linux-2.4.20 $ cd ./linux-2.4.20

trn:

v sau l p l i b c v theo ng th t cc mi ng v. Sau khi v thnh cng, b n nn th c hi n hai b c k ti p nh sau tr c khi b t tay vo vi c chu n b c u hnh bin d ch m ngu n nhn Linux: i tn th m c ch a m ngu n cho ng phin b n c v (gip b n nh n di n phin b n c a m ngu n ang c trn my c v t i phin b n no):
$ cd /usr/src $ mv ./linux-2.4.20 ./linux-2.4.26

ch nh gi tr "VERSION" trong file Makefile chnh c a m ngu n Linux. Th m c ch a m ngu n lc ny c i tn thnh linux-2.4.26:

39

$ vi ./linux-2.4.26/Makefile

Vi dng u c a h s Makefile ny ch a cc thng tin nh sau (n u m ngu n c a phin b n 2.4.20 c x t gi m ngu n nguyn th y):
VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 20 EXTRAVERSION =

B n c n i gi tr SUBLEVEL thnh 26 v lu h s Makefile ny (cho v d ny, ho c b t c phin b n no b n v t i - xem thm chi ti t v quy nh phin b n nhn Linux ph n ??). Gi tr phin b n 2.6.26 l y t h s Makefile s c dng trong qu trnh bin d ch v ci t nhn v sau. N u b n khng i u ch nh gi tr "VERSION" b c ny, b c ci nhn v sau s vi t ch ng ln nhn 2.4.20 ang c trn my. Ni v m t k thu t vi c vi t ch ng ln khng c g tr ng i. Tuy nhin, n u b n g p tr c tr c sau khi bin d ch nhn nhng khng kh i ng vo c th s th s r t ph c t p v b n khng cn b n nhn no ch y c trn my. T i y b n th c hi n thnh cng b c v m ngu n nhn Linux v cc b c phng b c n thi t. B n c th ti p t c v i cng vi c bin d ch l i nhn Linux nh ni trn.

40

PDF v PS file c t o t ngu n HTML t i http://www.diendantinhoc.net Nguy n i Qu @ Ngy 1/1/2005

http://vnoss.org

You might also like