Professional Documents
Culture Documents
Tc gi : Hong Ng c Diu
M cl c
1
1.1 1.2
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
9 9
9 10 11 12 14
7
7.1 7.1.1 7.1.2 7.2 7.2.1 7.2.2
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
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
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 -
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
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 3
extra-version development
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.
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
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
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
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 :
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
d ng .bz2
$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2
$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2.sign
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>
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
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
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
"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
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.
17
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.
18
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.
15
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
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
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.
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
# su [enter password]
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.
25
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.
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.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
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
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
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
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.
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
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
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
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
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
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
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.
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
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.
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.
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:
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 ./
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
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
http://vnoss.org