You are on page 1of 43

Bin dch nhn Linux

Tc gi: Hong Ngc Diu

Mc lc
1
1.1
1.2

Tng quan v nhn Linux trn phng


din bin dch li
Nhn Linux v vic bin dch li nhn
Tm tt cc bc bin dch (dnh cho nhng ai thiu kin nhn)

3
3
3

Ti sao cn bin dch li nhn Linux?

Cu trc v quy c s hiu phin bn


ca nhn Linux

i hi ti thiu trong vic bin dch li


nhn Linux

4
4.1
4.2

i hi cho nhn Linux 2.4.x


i hi cho nhn Linux 2.6.x

7
8

Xc nh cu hnh (hardware) ca my

Cc bc chun b

6.1
6.2
6.3
6.4
6.5

7
7.1
7.1.1
7.1.2
7.2
7.2.1
7.2.2

8
8.1
8.2
8.3
8.3.1

To mt a mm khi ng cho nhn ang dng


Ti m ngun
Kim tra thc tnh ca m ngun
X nn m ngun
Dng "config" no th thch hp?

Chnh cu hnh bin dch nhn Linux


Thnh phn ca cu hnh bin dch nhn Linux
Thnh phn cu hnh bin dch nhn Linux phin bn 2.4.x
Thnh phn cu hnh nhn Linux cho lot nhn 2.6.x
iu chnh cu hnh bin dch nhn Linux
Cc cng c xc lp cu hnh
Mt s im cn ch trong giai on hnh thnh cu hnh
bin dch nhn

Cc bc bin dch

9
10
11
12
14

14
14
14
17
18
19
20

22

Bc to dependency, dn dp v to nhn
Bc to modules v ci modules
Tch ri m ngun v h s output trn lot nhn 2.6.x
"make help", mt tin ch mi trn lot nhn 2.6.x
1

22
24
25
26

8.3.2

9
9.1
9.1.1
9.1.2
9.2
9.2.1
9.2.2
9.2.3

10
10.1
10.2

11
11.1
11.2

Tch ri m ngun v output files

Ci t nhn

27

27

Ci t vi "make install"
i vi GRUB
i vi LILO
Cc bc ci t bng tay
To initrd
Copy nhn v System.map
Chnh cu hnh ca bootloader config

Khi ng li my v chnh l nu gp
trc trc
B treo khi khi ng vo linux
B treo trong qu trnh nhn c load

V v bin dch nhn

28
28
29
31
31
32
33

35
35
36

37

Cc im quan trng trc khi v


Ti, x v v

37
38

1 Tng quan v nhn Linux trn phng din bin dch


li
1.1 Nhn Linux v vic bin dch li nhn
Nhn Linux l mt "nhn hin i" c tnh module rt cao. T kernel phin bn 2.6.x tr
i, c rt nhiu chc nng v m rng. Vi tinh thn "bin dch nhn", mt yu t chnh
yu v quan trng nht cn ghi nhn l tnh phn b (modularity) ca nhn Linux.
i vi ngi dng bnh thng, modularity cho php chn la cch bin dch cc drivers
ca nhn theo dng modules hay theo dng bin dch trc tip vo nhn. Thng thng,
khi xc lp cu hnh cho nhn c ba chn la: Y, M v N.
C nhng "driver" khng th bin dch nh mt module v n phi c load and link
trc tip ngay khi nhn khi ng. Cng c nhng "driver" cho php chn nh mt
module v c ti trong khi v sau khi nhn c khi ng. im chnh yu cn nm
bt trong gii hn ch "Bin dch nhn Linux" l hiu r ti sao phi chn M (cho
module), Y (cho bin dch trc tip) v N (khng dng) cc drivers ny.

Bin dch trc tip vo kernel c ngha l cc "drivers" ny d c c dng hay


khng vn c ti ln khi nhn khi ng v tt nhin n s chim mt phn b
nh. Li im chnh ca chn la ny l mt khi "drivers" c bin dch vo
nhn th khng cn phi quan ngi n tnh trung thc ca nhn v cc driver na.
Cc h thng lm vic i hi tnh bo mt cao khng dng modules m bin dch
thng vo nhnkernel trnh trng hp cc modules khng tin cy "b" ci vo
nhn lc no trong qu trnh hot ng ca my. Li im k tip ca chn la
ny l tnh hiu xutxut (rt nh), khi cn driver th c sn v khng cn ng ti
na.

Bin dch nh cc modules cho nhn c ngha l ch khi no cn dng cc "drivers"


ny mi c ng ti. Li im ca chn la ny ni bt kha cnh x dng b nh
v ti nguyn trn my. Vi la chn ny, bn c th to nn mt nhn rt nh v d
dng di chuyn cho nhiu mc ch khc nhau. Li im k tip l kh nng bin
dch li ch mt hoc mt s modules no (cn cp nht chng hn). Tt nhin
thc hin chuyn ny th phi tho mn tt c nhng i hi v tnh ph thuc cho h
thng.

1.2 Tm tt cc bc bin dch (dnh cho nhng ai thiu kin


nhn)
Bin dch nhn Linux rt n gin nu nh hiu r cc quy trnh v cc bc thc
hin. Sau y l cc lnh cn thit, gi nh bn c trn b cc cng c cn thit
bin dch:
3

Chuyn vo th mc /usr/src, ni thng thng cha m ngun bin dch nhn:


$ cd /usr/src
<KERNEL_SRC> l phin bn kernel cn bin dch, v d y ti m ngun c nn

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

Xc thc ch k v thc tnh ca m ngun:


$ gpg --verify <KERNEL_SRC>.tar.bz2.sign <KERNEL_SRC>.tar.bz2

X nn gi cha m ngun:
$ bzip2 -dc <KERNEL_SRC>.tar.bz2 | tar xvf -

Nu mun dng giao din ha iu chnh cc chn la cho cu hnh nhn th dng
lnh:
$ make xconfig

Tp hp lnh dng to cc file ph thuc v cc file bao gm (include), tip theo l


dn dp cc objects khng cn thit v bin dch nhn dng nn:
$ make dep clean bzImage

Bin dch cc modules c chn la bng lnh:


$ make modules

Chchuyn sang ch super user cho lnh tip theo:


$ su

Ci cc modules vo th mc /lib/modules/<KERNERL_SRC> vi quyn ca super


user:
# make modules_install

Ci t nhn v cc file cn thit vo th mc /boot:


# make install

Bc th 10 c th thay th bng mt lot thao tc bng tay (chi tit phn 9.2) nu nh
bn phn phi 1 Linux khng c sn mt s cng c thuc gi mkinitrd (ch c trong
bn RedHat v cc bn da trn RedHat).
1

distribution

Lu : i vi lot nhn 2.6.x, bn c th dng cc bc nh trn. Tuy nhin bc


"make dep" khng cn thit na. Bi vit ny bao gm cho c phin bn 2.4.x v 2.6.x
nn c mt s chi tit khng cn thit cho kernel 2.6.x. Tuy vy, nhng chi tit ny s
khng nh hng n s thnh cng ca quy trnh bin dch nhn.

2 Ti sao cn bin dch li nhn Linux?


i vi ngi dng quen vi nhng h iu hnh "ng" th khi nim bin dch li
nhn l mt khi nim ht sc l lm. iu ny cng d hiu v kernel ca cc h iu
hnh "ng" hin nhin l "ng" v ngi dng bnh thng khng th c c hi tip
cn vi m ngun ca nhn c th bin dch li nhn nu mun. Trong khi , m
ngun ca nhn Linux hon ton "m" v y l iu kin rt thun li cho vn bin
dch li nhn. Cu hi c t ra l ti sao li cn phi bin dch li nhn Linux ?
Cu tr li ngn: khng cn nu nh khng cn v cn nu nh cn :)
Cu tr li di: c v s l do khin cho ngi dng cn phi bin dch li nhn Linux.
Sau y l mt s trng hp thng gp nht:
a. ti bin dch kernel cha li ca nhn. Nu cc li ny thuc v li ca nhn th
phi v ngun ca nhn v bin dch li n sa cha cc li c cng b.
b. bin dch li nhn nng cao hiu nng ca nhn. Theo mc nh, cc bn phn
phi Linux thng km mt phin bn nhn c bin dch vi hu ht nhng thnh
phn c sn c th p ng rng ri cu hnh phn cng (c th hin din trn cc
my). y l im li tng qut lc khi im. Tuy nhin, sau khi ci thnh cng
v nm chc my c nhng thit b g (sound card, graphic card, network cards, SCSI
card..... ) v bit r cn nhng thnh phn no cho cu hnh ca my th khng c
l do g phi bao gm trn b cc th khng cn thit v khng dng. i vi nhn
2.4.x, mc nng cao hiu nng khng r rt (ngoi tr dng phng php test load
o). Tuy nhin, t phin bn 2.6.x tr i, vic bin dch li v iu chnh "driver"
cho nhn to hiu xut r rt, nht l trong vic iu chnh "thi biu" (scheduling)
ca cc cng tc m h thng phi m nhim.
c. bin dch li nhn loi b nhng "drivers" khng c dng v c th gy "hiu
lm" cho nhn, to ra trng hp my c nhng triu chng hot ng thiu n nh
v hay gy li.
d. bin dch li nhn th nghim mt chc nng hoc mt module mnh va to ra.
Trng hp ny khng nhiu nh cc trng hp trn nhng cng nm trong cc l
do ph bin.

3 Cu trc v quy c s hiu phin bn ca nhn


Linux
Phin bn ca nhn Linux c quy c rt n gin v d nh. Vn ny cn nm r
trc khi chn mt phin bn no ca nhn Linux v v bin dch.
Phin bn ca nhn Linux bao gm ba nhm s tch ra bi cc du chm. V d: 2.4.26
S th nht: 2 l s hiu phin bn chnh
S th nh: 4 l ch nh cho tnh trng phin bn. Nu s ny l s chn, n ch nh cho
phin bn n nh (stable), c th dng cho mi trng production. Nu s ny l s l,
n ch nh cho phin bn khng n nh, n thng dng trong mi trng ang pht
trin (development). Cc kernel thuc dng ny thng c nhiu li v khng n nh.
Nu dng cc phin bn ny tm li v thng bo cho nhm pht trin nhn Linux th
y l iu rt tt. Khng nn dng phin bn pht trin cho mi trng production.
S th ba: 26 l ch nh cho s hiu pht hnh ca mt phin bn nhn Linux. Mt
phin bn n nh ca mt nhn Linux c th c nhiu s hiu pht hnh khc nhau.
y l cc quy c chung cho dng nhn Linux "vanilla" c ngha l ng dng cho
cc phin bn nhn t http://www.kernel.org, cc phin bn nhn c iu
chnh bi mi bn phn phi c nhng im d bit. C nhiu bn Linux x dng s hiu
con 2 cho phin bn nhn h iu chnh. V d RedHat c nhng cp nht ph cho cc
kernel nh: 2.4.20-8 chng hn. iu cn nm y l ch nn x dng phin bn n
nh (stable) ca nhn Linux (s chn gia) cho mi trng production v dng phin
bn th nghim 3 ca nhn Linux (s l) cho mi trng th nghim v pht trin.

4 i hi ti thiu trong vic bin dch li nhn Linux


Trc khi bt tay vo vic bin dch li nhn Linux, iu cn thit l phi c ch cha
trn a. t nht l phi ch cha cho m ngun (trc v sau khi x nn), ch cha
ci kernel v cc modules mi sau khi bin dch.
i hi quan trng khc l phi c mt b cng c cn thit v ng phin bn. Khng
th bin dch c nhn nu khng tho mn yu cu ny. Phin bn cho b cng c vi
mi phin bn nhn khc nhau. Nn nh, nhm pht trin nhn yu cu bn phi c ng
phin bn ca cc cng c m bo vic bin dch nhn thnh cng.

2
3

extra-version
development

4.1 i hi cho nhn Linux 2.4.x


Cng c

Phin bn ti thiu

Cch xc nh phin bn

Gnu C

2.91.66

Gnu make

3.77

make version

binutils

2.9.1.0.25

ld -v

util-linux

2.10o

modutils

2.4.2

insmod -V

e2fsprogs

1.19

tune2fs

reiserfsprogs

3.x.0b

reiserfsck 2>&1| grep reiserfsprogs

pcmcia-cs

3.1.21

cardmgr -V

PPP

2.4.0

isdn4k-utils

3.1pre1

gcc

--version

fdformat

pppd

--version

--version

isdnctrl 2>&1| grep version

Tham kho thm chi tit cc cng c ny v a ch ti cc cng c cho ng (t


nht phi cng phin bn cung cp trn hoc mi hn) trong h s Documentation/changes ca m ngun nhn m bn ang d tnh bin dch.

4.2 i hi cho nhn Linux 2.6.x


Cng c

Phin bn ti thiu

Cch xc nh phin bn

Gnu C

2.95.3

gcc

Gnu make

3.78

make

binutils

2.12

util-linux

2.10o

module-init-tools

0.9.10

depmod -V

e2fsprogs

1.29

tune2fs

jfsutils

1.1.3

fsck.jfs -V

reiserfsprogs

3.6.3

reiserfsck -V 2>&1| grep reiserfsprogs

xfsprogs

2.1.0

xfs_db -V

pcmcia-cs

3.1.21

cardmgr -V

quota-tools

3.09

quota -V

PPP

2.4.0

isdn4k-utils

3.1pre1

isdnctrl 2>&1| grep version

nfs-utils

1.0.5

showmount version

procps

3.1.13

ps

oprofile

0.5.3

oprofiled

--version
--version

ld -v
fdformat

pppd

--version

--version

--version
--version

Tham kho thm chi tit cc cng c ny v a ch ti cc cng c cho ng (t


nht phi cng phin bn cung cp trn hoc mi hn) trong h s Documentation/changes ca m ngun nhn bn ang d tnh bin dch.
Nu phin bn ca cc cng c trn my c hn cc phin bn a ra trn, bn cn
phi ti phin bn mi ( bin dch) t website ca bn phn phi no bn ang dng.
Bn cng c th chn cch ti m ngun ca tng cng c v bin dch li. Cch ny
mt thi gian hn rt nhiu v ch thch hp cho nhng ai quen thuc vi vn bin
dch m ngun trn Linux. Li im ca cch ny l bn to cho mnh mt b cng c
rt "sch" v bin dch theo , thch hp vi mi trng ca my (v va ).
i vi phn cng IA64, bn cn phin bn GCC cho 64bit, nn tham kho chi tit
http://gcc.gnu.org/install/specific.html (nu bn may mn c
mt con IA64 th)

5 Xc nh cu hnh (hardware) ca my
Phn ln ngi dng bnh thng t khi quan tm n cu hnh ca my ngoi tr c nhu
cu c th. Ngay c nhng ai dng Linux lu v khng cn phi bin dch li nhn,
cng t khi quan tm n cu hnh phn cng ca my. D c bit nhiu hay t v cu
hnh phn cng ca my mnh dng, bn vn phi thu thp thng tin chnh xc ca cu
hnh trc khi bt tay vo vic iu chnh cu hnh cho vic bin dch nhn.
Gi nh mi chnh l n nh v lm vic tt p (do trnh ci t t d tm (detect)
trong khi ci Linux hay do bn phi iu chnh li), bn cn bin dch li nhn Linux v
cn thu thp thng tin v cu hnh ca my, hai lnh sau cung cp cc chi tit phn cng
c trn my:
# /sbin/lspci

Lnh ny lit k trn b cc "card" ang trc tip lm vic trn my, phin bn phn
cng v kiu 4 ca chng.
# cat /proc/cpuinfo

xem chi tit b x l trung tm (CPU) ca my l loi g. Nu bn Linux m bn


dng khng c /proc filesystem th bn c th dng lnh dmesg thu thp thng tin
v phn cng trn my ca mnh. Ngoi ra, lnh lsmod cng t nhiu gip bn xc nh
cc modules ang c dng trn my v tn ca cc modules ny.
Nhng thng tin thu thp c y ht sc quan trng trong giai on iu chnh cu
hnh cho vic bin dch nhn. N gip bn xc nh cc chn la ng cho cu hnh my,
trnh i nhng tr ngi c th rt mt thi gian sau ny.

6 Cc bc chun b
6.1 To mt a mm khi ng cho nhn ang dng
y l mt bc cn thit phng s c g khin bn khng th khi ng vo h
thng Linux sau khi ci nhn mi. Trng hp ny him khi xy ra trong qu trnh bin
dch nhn v ci nhn mi nu bn thc hin v iu chnh ng. Nhng s c vi trnh
khi ng 5 t thy xy ra v trnh khi ng c thit lp hon chnh trc khi cp
nht nhn. Phn ln giai on iu chnh li cu hnh ca LILO hoc GRUB khng chnh
xc to tr ngi. Vn ny s c cp sau. Trc mt chng ta cn to mt a mm
khi ng.

4
5

model
bootloader, LILO hoc GRUB

C rt nhiu cch to mt a mm khi ng ly t nhn hin ang chy trn my.


Thay v trnh by nhiu cch khc nhau cho vic to a mm khi ng, y ti ch
cp n phng thc n gin nht. Cch d nht c l l dng mkbootdisk. y l
mt cng c c ci mc nh trn cc bn RedHat v hu ht cc bn phn phi da
trn RedHat. Nu cng c ny khng hin din trn my, bn c th ti m ngun v v
bin dch. Chy lnh:
# mkbootdisk --device /dev/fd0 uname -r

trong uname -r l lnh ly phin bn nhn hin dng trn my. Nu khng
mun phin bn ny, bn c th g vo phin bn no theo (tt nhin l phin bn
kernel ny phi hin hu trn h thng).
/dev/fd0 l "device" ch cho a mm th nht trn my (tng t nh drive A: trn

DOS). Bn phi chn ng "device" th mi c d liu vit vo a mm mnh mun to.


Quy trnh ny ch mt khong vi pht. Sau khi to a mm khi ng trn, bn nn
dng n th khi ng vo Linux trc khi thc hin cc bc k tip. Nn nh phi
chnh BIOS cho php my khi ng t A:
trang http://www.yolinux.com/TUTORIALS/LinuxTutorialRecoveryAndBootDisk.html
c cc hng dn to a cp cu rt hay. Bn nn tham kho thm nu trn my mnh
dng khng c sn cng c mkbootdisk.

6.2 Ti m ngun
M ngun ca nhn Linux (c phin bn n nh ln ang pht trin) c rt nhiu ni
trn Internet. Nn vo trang trung tm ca nhn Linux http://www.kernel.
org v tham kho danh sch "mirrors" tm ni "gn" ch mnh c ng nht ti v.
Ni "gn" khng nht thit l "gn" theo phng din a l m nn chn "gn" nht da
trn "ping time". Chu kh ly vi a ch trn mirror v ping nhng a ch ny chn
ly ni c ping time ngn nht m ti v. Bng cch s gip bn mt thi gian v tin
cho vn chia x bng thng.
C nhiu cch ti m ngun. Bn c th dng trnh duyt (browser) ti qua giao thc
http hoc dng mt trnh ftp no ti qua giao thc ftp. Bn cng c th dng wget.
C l y l cch tin nht v nhanh nht nu bit r a ch v ng dn n gi mnh
mun ti. V d:
$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2

trong trng hp ny, gi c th cn ti l linux-2.4.26.tar.bz2.


M ngun n nh ca Linux kernel c nn hai dng khc nhau: dng c ui l .gz
(dng GNUzip nn) v dng c ui .bz2 (dng bzip2 nn). Thng thng c hai
tin ch nn/x nn trn u c sn trong cc bn Linux thng dng. Nu khng c sn
10

trn my th tm trong trong CD ca bn Linux (tham kho thm ti liu ca distribution


mnh dng cho cch ci thm phn mm vo my) hoc ti v t:

http://www.gzip.org cho GNUzip

http://sources.redhat.com/bzip2/ cho bzip2

6.3 Kim tra thc tnh ca m ngun


iu quan trng khi ti m ngun ca nhn, nn ti lun ch k GPG .sign cho phin
bn tng ng. Mc ch l kim tra thc tnh ca m ngun c ti v. Khi m
ngun ca nhn Linux c cng b, chng c dn li thnh mt gi (.tar) v sau
c nn bng GNUzip hoc bzip2, c hai loi ny sau khi c nn u c to "ch
k" .sign.
Kim tra thc tnh ca m ngun c ti v bng phng php kim tra "ch k" ca
tng gi m ngun l mt thi quen cn thit. L do: cc m ngun m ni chung c
cng b v ph bin rng ri, ai cng c th chnh sa (mt cch khng chnh thc v
khng c nhm pht trin chnh thc cho php) ri a ln mt my ch no trn
Internet. Ngi dng ti v, bin dch v ci trn my m khng kim tra thc tnh ca
chng (v m ngun ny c nhng thay i m m) th hu qu kh m lng.
Quy trnh kim tra "ch k" ch n gin gi gn trong mt dng lnh:
$ 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" ca gi linux-2.4.26.tar.bz2 c ti v t


server cha m ngun nhn Linux linux-2.4.26.tar.bz2 l gi m ngun nhn Linux c
nn bng bzip2.
Trc khi c th kim tra thnh cng bng lnh trn, bn phi c gpg ci trong my,
ti v nhp cha kha cng cng (public key) ca my ch cha m ngun nhn Linux m
bn ti v. Chi tit hng dn cho quy trnh ny http://www.kernel.org/signature.html
Quy trnh ti m ngun nhn Linux v kim tra thc tnh ca m ngun ny c th tm
tt bng mt v d nh sau:
Chuyn vo th mc cha m ngun ca my /usr/src l ni thng thng. i vi
phin bn nhn 2.6.x, bn c th dng th mc khc ty :
$ cd /usr/src

Dng wget ly mt phin bn m ngun t server v dng .bz2


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

dng wget ly .sign ca phin bn m ngun va c ti v


11

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

Dng trnh gpg vi ty chn verify kim thc tnh ca m ngun va ti v


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

Ngoi phng php dng ch k cho vn kim chng thc tnh ca m ngun (khng
ch m ngun ca nhn Linux), bn cng thy rt nhiu ni trn Internet dng "MD5sum"
cho mc ch ny (cho n nay, m ngun nhn Linux kernel dng ch k kim chng,
khng dng MD5sum). Quy trnh kim tra "MD5sum" ch n gin l mt quy trnh to
mt "MD5sum" t m ngun c ti v trn my v so snh kt qu "MD5sum" ny vi
h s "MD5sum" c ti v km vi m ngun. Nu "MD5sum" bn to ra trn my
ca mnh vi cng gi m ngun m khng trng hp vi "MD5sum" nguyn thu ti
v t server th thc tnh ca phn m ngun ny khng ng tin cy. Cch tt nht l
ch nn ti m ngun nhng a ch ph bin v ng tin cy. Cn thn hn na (really
paranoid), th so snh MD5sum vi mt s my ch cha m ngun khc nhau.
Kim tra thc tnh ca m ngun bng MD5 checksum kh n gin. Tin ch md5sum
c sn hn nh trn mi bn phn phi. Lnh to MD5 checksum n gin l lnh:
# md5sum <file_cn_kim_tra>

s to ra 1 chui ch v s tng t nh:


2fe2a5fabcc3a33722b4ffe05714bec3 *<file_cn_kim_tra>.

Nu chui ny trng vi chui c cung cp chnh thc vi m ngun th m ngun ny


c thc tnh v ng tin cy.

6.4 X nn m ngun
Ty vo gi m ngun c ti v thuc dng nn .gz hay .bz2 m dng tin ch thch
hp x nn. Nh tm tt trong phn 6.3 trn, gi m ngun c cha trong
/usr/src (wget c chy sau khi cd vo /usr/src), cho nn bn phi trong th
mc ny trc khi thao tc cc bc k tip (khng th cc bc k tip phi thm v
ng dn n ni cha gi m ngun). i vi phin bn nhn 2.6.x, m ngun ca
nhn Linux c th c x, cha v bin dch t bt c ni u trn h thng. Tuy nhin,
gi cho h thng sch v thng nht, bn nn gi m ngun /usr/src.
Nu gi m ngun c dng .gz th dng:
$ gunzip linux-2.x.xx.tar.gz

x.xx l bt c phin bn no bn ti v. Sau thc hin tip:

12

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

Lnh ny dng ty chn x x (extract) v f ch nh file no cn c x, y h


s (file) cn c x l linux-2.x.xx.tar.
Hai lnh trn cng c th gp chung li nh sau:
$ tar xfz linux-2.x.xx.tar.gz

lnh ny dng thm ty chn z ngm x nn .gz file "on-the-fly" trc khi x gi
tar.
Hoc c th to cng kt qu bng cch khc na:
$ gzip -dc linux-2.x.xx.tar.gz | tar xvf -

cm lnh ny dng chng trnh gzip x nn (ty chn -d) ra stdout (ty chn -c) v
"tee" n qua chng trnh tar x gi tar ra "on-the-fly". C cch ny v cch trn
u tin dng cho nhng ai eo hp dung lng trn a.
Nu gi m ngun c dng .bz2 th dng:
$ bunzip2 linux-2.x.xx.tar.bz2
$ tar xf linux-2.x.xx.tar

Hai lnh trn cng c th gp chung li nh sau:


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

lnh ny dng thm ty chn j ngm x nn .bz2 file "on-the-fly" trc khi x gi
tar.
Hoc c th to cng kt qu bng cch khc na:
$ bzip2 -dc linux-2.x.xx.tar.bz2 | tar xvf -

cm lnh ny dng chng trnh bzip2 x nn (ty chn -d) ra stdout (ty chn -c)
v "tee" n qua chng trnh tar x gi tar ra "on-the-fly". C cch ny v cch
trn u tin dng cho nhng ai eo hp dung lng trn a.
C ba trng hp u cho kt qu l mt th mc c tn l linux-2.x.xx bn trong
th mc /usr/src/.
Trong phn ny, chng ta ch cp n trng hp ti trn b m ngun ca nhn Linux
v bin dch. Trng hp c m ngun c hn ca nhn Linux trn my v ch cn
ti bn v li v "v" th c quy trnh khc. Vn ny s cp sau.

13

6.5 Dng "config" no th thch hp?


Cu hnh bin dch nhn Linux n gin l mt "text file" cha cc bin vi gi tr Y
(Yes), N (No) hoc M (Module). Cc gi tr ny c x dng trong qu trnh bin dch;
chng dng xc nh nhng g khng c bin dch, nhng g c bin dch v nu
c bin dch th s theo dng no.
Ty vo cch sp xp ca mi bn phn phi Linux, cu hnh bin dch nhn Linux
nm nhiu ni khc nhau. H s cu hnh theo mc nh ca "vanilla" kernel nm
./arch/i386/defconfig (nu dng dng phn cng IA32 ni chung), cc h s cu hnh
khc cho nhng dng phn cng khc nm ./arch/$ARCH/defconfig; trong $ARCH
l dng phn cng ca my. Nu dng cu hnh mc nh, khng chnh sa th nhn s
c ti bin dch trn b theo gi tr mc nh v chc hn, nhn ny s khng thch hp
cho bn (ngay c nu n c bin dch thnh cng). iu ny i ngc li mc ch cn
bin dch li nhn Linux ngay t u. Bn c th dng h s cu hnh ny khi u
v chnh sa gi tr cho thch hp. y l mt bc rt kh khn cho nhng ai cha tng
i qua giai on ny v khng c sn mt cu hnh bin dch nhn hon chnh cho my.
Cu hnh cho nhn hin hu trn my cng c th nm trong th mc /boot dng
config-2.x.xx nu bn dng nhn do RedHat (hoc da trn RedHat) v mt s bn
phn phi khc cung cp. Bn c th an ton dng cu hnh ny v chnh sa, loi b cc
chi tit (driver module) khng cn dng. Nu h thng c bin dch nhn trc y,
bn c th tm thy cu hnh bin dch nhn Linux c tn l .config, c lu trong
th mc <KERNEL_SRC> (ni trc y m ngun ca nhn c x nn v bin dch).

7 Chnh cu hnh bin dch nhn Linux


7.1 Thnh phn ca cu hnh bin dch nhn Linux
Thnh phn trong cu hnh bin dch nhn Linux cho phin bn 2.4.x v 2.6.x c mt s
im tng ng v d bit. Tuy nhin, quy trnh chn Y, N hoc M cho cc modules vn
nh nhau. Bc chn la v chnh liu cu hnh bin dch nhn Linux l mt bc mt
nhiu thi gian nht, n cng l mt bc gy nhiu tr ngi nht nu chnh sa khng
hp l hoc thiu st.

7.1.1 Thnh phn cu hnh bin dch nhn Linux phin bn 2.4.x
7.1.1.1 Code Maturity Level Options
Chn la ca mc ny cho php dng cc modules/drivers cn trng thi "alpha" (th
nghim). Nu h thng lm vic l mt my production, cn tnh n nh cao th nn tt
b chn la ca phn ny. Lm nh th s tt b rt nhiu modules/drivers thuc dng
14

"alpha" trong nhng phn bn di. Nu mun th dng mt s modules/drivers dng


alpha th nn cho php phn ny (Y) v cn thn khi la chn cc modules c bin
dch sau ny. Vic chn la cc "alpha" drivers ch mc nh ca cc nhn Linux
trong nhiu bn phn phi Linux l mt trong nhng nguyn nhn chnh to nn tnh
trng bt n nh trn mt s h thng Linux. Nu chn la cc driver ny mt cch cn
thn, c hi va phi tnh trng bt n nh s gim thiu r rt.
7.1.1.2 Loadable Module Support
y l chc nng nng ct ca nhn Linux (loadable module). Nh cp phn
tng quan (phn 1), cc module c th ti (loadable modules) l tin dng v linh ng,
cho nn bn gn nh s chn Y trong trng hp ny. Trong trng hp bn cn dng
module c vit thm bn ngoi nhn chnh thc (3rd party modules), bn phi chn
"enable set version information on all modules symbols" trong mc ny. Nu bn cn
bin dch trn b cc drivers thng vo nhn v khng dng modules (v l do bo mt
chng hn), bn c th chn N y. Bn cng phi chn "Y" cho trn b cc drivers
trong cu hnh bin dch nhn thch hp vi chn la "N" cho phn Loadable Module
Support ny.
7.1.1.3 Processor Type and Features
Phn ny c l l phn ti quan trng trong cu hnh bin dch nhn Linux. y l ni
chn ng CPU ang dng trn my. Ngoi ra cn rt nhiu chn la khc nhau cho
vn n system scheduling, SMP (symetrical multi-processing) nu my c nhiu CPU,
h tr b nh ln,.... Nu bn chn CPU l i386 th c l s khng c s c v i386 l
architecture chung nht (c Intel v AMD CPU u chy vi chn la i386). Tuy nhin,
chn la ny s khng t hiu nng ti a v thch hp cho tng loi CPU c th. Nn
chn ng CPU bo m hiu nng ca my v nht l trnh trng hp khng th
khi ng vo Linux sau khi ci nhn mi (v loi CPU chnh nh cho nhn khng ng
vi CPU c trn my hay ni mt cch k thut, instructions gia nhn v my khng
ng b).
7.1.1.4 General Setup
Mc ny cho php chn la cc ng dng h tr cho nhng thit b (cards) trn my
nh ISA, PCI, PCMCIA v cc chc nng thuc v vn qun tr nng lng cao cp
(Advanced Power Management).
7.1.1.5 Memory Technology Devices
Phn ny cho php la chn nhng ng dng thit b lin quan n b nh. Nu bn dng
cc thit b nh my nh s hoc cc loi compact flash th bn nn chnh l phn ny
cho thch hp.
15

7.1.1.6 Block Devices


y l mt phn rt quan trng trong cu hnh bin dch nhn Linux. N bao gm cc
chn la cho nhng thit b thng thng v cn thit nh a cng, a mm, bng lu
tr cng nh cc thit b iu tc (controllers) cho cc cng song song 6 v RAID. Hu
nh cc chn la trong mc ny u cn thit; c bit l chc nng h tr initrd cn
thit ti sn cc drivers cn thit dng module trong qu trnh khi ng my.
7.1.1.7 Multi-Device support (RAID and LVM)
Phn ny chuyn ch n cc chc nng cn thit cho h thng cp my ch. Cc
chn la y h tr nhng thit b nh RAID v LVM. Nu my ca bn hin ang
dng RAID v LVM th khng th b qua phn ny trong qu trnh xc lp cu hnh bin
dch nhn Linux. Chn la trong phn ny i hi phi hiu r nhu cu dng nhng cng
ngh thuc dng ny trn my. Nu my khng dng n nhng cng ngh ny, bn c
th an ton tt b chng (dng N). Nn nh, nu tt b RAID trong phn ny th phi tt
b chn la RAID trong phn "block devices" trn trnh gp phi li bin dch sau
ny.
7.1.1.8 ATA/IDE/MFM/RLL support
Phn ny bao gm cc chn la v h tr cho IDE v ATAPI dng trn cc thit b tng
thich vi PC 7 (v trn nhiu architecture khc hin c trn th trng). Hu ht cc h
thng cn cc chc nng h tr trong phn ny.
7.1.1.9 Cryptography Support (CryptoAPI)
y l mt phn kh mi v l th trong m ngun ca nhn Linux 2.4.x (ch c gii
thiu v cng b trong cc phin bn sau ny ca 2.4.x). Phn ny c nhng la chn
thuc v vn "m ho" cho filesystem. Bn c th bin dch cc chn la trong mc
ny v x dng (hoc khng) trn my ty .
7.1.1.10 Networking Options
y l mt phn rt quan trng trong cu hnh bin dch nhn Linux nu bn mun
my ca mnh kt ni vi mng. N bao gm cc chn la cho c hai chun IPv4 v
IPv6. y cng l mt phn ht sc phc tp, cho nn, c th hiu r v chn la
ng cho hiu nng ti a ca my v mt networking, bn nn tham kho cc ti liu
v mng Linux, t nht l nn c cc ti liu km theo trong m ngun nhn Linux
<KERNL SRC>/Documentation/networking/ (thng l /usr/src/linux-2.x.xx/Documentation/networking/).
6
7

parallel ports
pc-compatible

16

7.1.1.11 SCSI Support


Phn chn la cho SCSI t c nhng ngi dng bnh thng quan tm n v khng
my ai dng SCSI cho my con. Tuy nhin nu bn dng SCSI card (hoc SCSI built-in
trn bo mch ch (motherboard)) hoc dng CDR/W qua IDE nhng chy dng m
phng SCSI th phi iu chnh cc chn la trong mc ny. iu quan trng cn nh,
nu khng dng tin dng initrd, khi chn la SCSI cho mt filesystem chy trn a
SCSI bn phi bin dch trc tip cc ty chn cho SCSI vo nhn thay v dng di
dng module. Nu khng, nhn s treo trong giai on khi ng v module h tr SCSI
cha c ti ln trong giai on ny.
7.1.1.12 Character Devices
Trong mc ny c kh nhiu la chn tp trung vo cc thit b nh ni tip 8 v song
song 9, thit b chut 10, joysticks ( chi games). Tt hoc m cc la chn trong mc
ny thng t to nh hng nghim trng.
7.1.1.13 File Systems
Mc ny cha trn b cc chn la lin quan n h thng file (file system) v cc loi
file system c h tr trn Linux (bao gm FAT, FAT32, NTFS, ISO cho CD-ROM....).
Cc file system ph tr nh NTFS, FAT... c th c bin dch nh mt module cho
nhn. Khng nn bin dch cc modules cho file system dng "mount" trong giai on
khi ng nh ext3, jbd m nn bin dch thng vo nhn (L do tng t nh cp
trong phn "SCSI Support" trn). Cch ny s lm kch thc nhn ln hn nhng s
an ton v n gin hn. Chc nng h tr initrd c th dng ti cc modules cn
thit trong qu trnh khi ng nhn Linux nhng phi nh bt chc nng ny ln trong
phn thit b dng block 11. y l vn ty chn ca tng c nhn.

7.1.2 Thnh phn cu hnh nhn Linux cho lot nhn 2.6.x
7.1.2.1 Code Maturity Level Options
Phn ny tng t nh cp trn cho nhn 2.4.x.
7.1.2.2 General Setup
Phn ny tng t nh cp trn cho nhn 2.4.x.
8

serial
parellel
10 mouse
11 block devices
9

17

7.1.2.3 Loadable Module Support


Phn ny tng t nh cp trn cho nhn 2.4.x.
7.1.2.4 Processor Type and Features
Phn ny tng t nh cp trn cho nhn 2.4.x.
7.1.2.5 Power Management Options
Phn ny tng t nh cp trn cho nhn 2.4.x.
7.1.2.6 Executable File Formats

y l mt mc ring bit trong cu hnh bin dch nhn ca lot nhn 2.6.x. Nu bn
quan tm n "a.out", "elf" v "misc", nn nghin cu k phn ny qua cc ti liu
km theo vi m ngun nhn, t bit cho cc tin dng ca "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 mt mc mi trong phn cu hnh bin dch nhn ca lot nhn 2.6.x. Tht ra
device drivers nm ri rc khp ni trong cu hnh bin dch nhn ca lot nhn 2.4.x.
lot nhn 2.6.x, mi vn lin quan n "device drivers" c gom li trong cng mt
nhm. Cc chn la thuc v cc thit b nh card ha 12, card m thanh 13, USB, SCSI
v vn hiu chnh chng u tp trung y.
7.1.2.8 File Systems
Phn ny tng t nh cp trn cho nhn 2.4.x.
7.1.2.9 Security Options
Phn ny dnh ring cho cc vn v bo mt ca nhn. Cho n nay vn cn ang
pht trin, tuy nhin, y l phn y ha hn cho mt nhn Linux mang tnh bo mt
cao.

7.2 iu chnh cu hnh bin dch nhn Linux


Sau y l mt s phng php xc lp cu hnh bin dch nhn Linux.
12
13

graphic card
sound card

18

7.2.1 Cc cng c xc lp cu hnh


Nh cp phn 6.5, mc nh cu hnh bin dch nhn nm ./arch/i386/defconfig.
Khi khi ng mt cng c (config tool) n s t ng c v dng ni dung ca file
cu hnh mc nh ny trc khi bn chnh sa.
chnh cu hnh bin dch nhn Linux, chuyn vo th mc cha m ngun ca nhn
( x nn):
$ cd /usr/src/linux-2.4.26

v d ny dng nhn c s hiu nhn 2.4.26 - xem li phn x nn phn 6.4) v vic
u tin rt nn lm l chy lnh:
$ make mrproper

Khng k bn dng bn phn phi Linux no v phin bn nhn Linux no, bn nn


chy lnh ny trc khi thc hin quy trnh bin dch li nhn. Target "mrproper" dng
xo ht tt c nhng g cn "vt vng" trong cc th mc cha m ngun ca nhn
Linux chc chn rng m ngun trc khi c bin dch phi tnh trng "sch s".
C ba phng tin "config" ph bin c th dng chnh cu hnh bin dch nhn Linux.
Sau khi chuyn vo th mc /usr/src/linux-2.4.26, bn c th chn mt trong ba
cch sau:

make config

make menuconfig

make xconfig

Trong :

make config l phng tin n gin nht v khng i hi thm bt c th vin no


khc chy cng c ny. make config s a ra mt lot cu hi v sau khi nhn
c cu tr li ca bn (Y, N, M nh ni trn sau khi bn nhn phm Enter,
xc nhn cu tr li ca mnh), n s hnh thnh mt cu hnh bin dch nhn Linux.
Nhc im ca phng tin ny l ch, nu bn l tr li sai (chn Y, N hoc M
v g phm Enter), bn khng th quay ngc li iu chnh m phi bt u li
t u. Phng tin "make config" ny ch tin li cho nhng ai rt kinh nghim
v nm r mnh cn g trong cu hnh bin dch nhn. N cng tin li cho quy trnh
chnh cu hnh bin dch nhn t xa (qua giao din dng lnh (console) v khng
dng c giao din ha v l do g ). Sau khi hon tt cc cu hi, cng c
ny s lu tr mt cu hnh bin dch nhn (c lu dng .config trong th mc
cha m ngun ca nhn Linux) v sn sng cho bc to cc file ph thuc cho vic

19

bin dch nhn. Nu h s .config c t ln bin dch trc, n s b vit chng


ln giai on ny.

make menuconfig nng cp ln mt mc cao hn so vi make config. Cng c


ny cn th vin v cc binaries "ncurses" to giao din ha (GUI) n gin.
Vi cng c ny, bn c th iu chnh li cc chi tit tu thch m khng phi bt
u li t u (nu l chn sai) nh dng make config. Vi giao din n gin
ny, bn c th di chuyn, thay i cc chn la bng cch dng cc phm mi tn
(ln xung), chn Y bng phm Y, chn N bng phm N v chn M bng phm M.
Vi cng c ny, bn cng c th ti mt cu hnh bin dch nhn c sn ( lm t
trc v bin dch thnh cng chng hn) m chng phi i xuyn qua mi chn
la hnh thnh mt cu hnh bin dch nhn mi. Mt c tnh ca cng c ny l
n cha "tr gip ng cnh" 14 (phn gip hoc thng tin cho tng mc trong qu
trnh iu chnh cu hnh). Nu bn khng nm r gi tr hoc tc dng ca module
no , b phn tr gip ny chc chn s hu ch. Sau khi hon thnh cc chn
la, bn c th lu tr mt bn cu hnh trn my ln sau dng li. giai on
ny, mt bn cu hnh c lu li (c tn .config trong th mc cha m ngun
ca Linux) v sn sng cho bc to cc file ph thuc cho qu trnh bin dch nhn.
Tng t nh "make config", nu h s .config tn ti t ln bin dch trc,
n s b vit chng ln.

make xconfig c l l phng tin c dng rng ri nht, nht l cho nhng h
thng chy X Window. make xconfig cn trn b th vin Qt v X Window to
cc giao din ha 15. Cc chn la v cch di chuyn trong giao din ny hon ton
ging nh trng hp dng menuconfig v thm mt kh nng na l c th dng
chut 16 chn. Nu bn cn bin dch li nhn v c th dng X Window th nn
dng cng c xconfig ny v n d dng nht.

Trn cc phin bn nhn Linux 2.6.x cn c thm make gconfig. Tng t nh make
xconfig, "gconfig" cng to giao din cu hnh ha nhng n da trn th vin
Gtk.

7.2.2 Mt s im cn ch trong giai on hnh thnh cu hnh bin


dch nhn

Dng cu hnh bin dch nhn c sn v iu chnh cho thch hp vi nhu cu ca


mnh. Nu bn dng bn phn phi ca RedHat, cu hnh bin dch nhn c trong
th mc /boot dng config-<KERNEL_VERSION> (h s cu hnh ny t cc
nhn do RedHat cung cp). dng cu hnh bin dch nhn ny, bn c th dng
make menuconfig hoc make xconfig ti cu hnh ny ln v iu chnh theo

14

help context sensitive


GUI
16 mouse

15

20

mun. Tht ra khng c bt c ti liu no c th gii thch cn k tng chn la


cho mi cu hnh my c. mc bin dch li mt nhn, bn cn hiu cu hnh
my v nhng chn la trong mt cu hnh n mc c th quyt nh chn la
nhng g cho thch hp. Bn phn phi Debian cng lu tr cc cu hnh bin dch
nhn trong th mc /boot tng t nh bn phn phi RedHat. Cc bn phn phi
khc c mt s im tng ng v d bit, bn nn tham kho thm cc hng dn
c th cho bn phn phi mnh ang dng.

Lu tr cu hnh bin dch nhn cho ln bin dch k tip. Nu v l do g khin


giai on bin dch nhn b hng, bn cn xem xt on bo li sau cng khi trnh
dch 17 thot ra vi "tnh trng khng thnh cng" (exit status is not 0). Thng thng
trnh bin dch thot ra na chng v cch chn la cu hnh bin dch nhn c nhng
im khng thch hp v tho mn (lin h nhau). Nhng li c bo trn console
gip bn xc nh trc trc nm trong khu vc no ca cu hnh bin dch nhn. Bn
ch cn ti h s bin dch c lu tr ln cui cng ln v vo thng khu vc b
s c xem xt v iu chnh, thay v phi thit lp t u trnh gp nhng li
khc. Mi khi iu chnh v thay i cu hnh bin dch nhn, bn li tip tc lu li
mt bn v t tn cho n mt cch hp l (v d kernel-2.4.26-1 cho cu hnh th
nht, kernel-2.4.26-2 cho cu hnh th nh.....).

Nu bn dng mt nhn "vanilla", m ngun nhn c ti v t http://sources.redhat.


com/bzip2/kernel hoc cc my ch mirror (bi vit ny tp trung ch yu vo nhn
"vanilla"), sau khi hon thnh bc make config hoc make menuconfig hoc
make xconfig, cu hnh bin dch nhn c bn iu chnh v chn la s c
lu tr dng n 18 ./.config (cc h s v th mc bt u bng du chm . c
xp loi l file n, ch c ls -la mi thy chng). Ln k tip, sau khi chy mt
trong s lnh trn v tip nhn cc thay i th cu hnh bin dch nhn li t ng
vit chng ln ./.config. Cho nn, bn c th lu tr h s ./.config thnh mt
h s c tn khc trc khi iu chnh v chn la ln k tip.

Ngoi cc lnh make config, make menuconfig, make xconfig hoc make
gconfig (cho lot nhn 2.6.x), bn cn c th dng mt lnh khc cho c kernel 2.4.x v 2.6.x l: make oldconfig. Lnh ny l mt trng hp c bit dng
c v dng cc ty chn c sn trong ./.config m khng cho bn c hi
iu chnh v chn la. Trng hp ny rt tin li nu bn iu chnh v chn
la thnh cng mt cu hnh bin dch nhn cho mnh.

Phin bn nhn 2.6.x cn c bn target cho bc ny:

17
18

compiler
hidden

21

make defconfig: to mt cu hnh bin dch nhn mi vi ch mc nh cho tt


c chn la

make allmodconfig: to mt cu hnh bin dch nhn mi vi ch chn la cc


modules khi c th c

make allyesconfig: to mt cu hnh bin dch nhn mi vi ch tip nhn yes


(Y) cho tt c chn la

make allnoconfig: to mt cu hnh bin dch nhn mi vi ch tip nhn N cho


tt c chn la. Ch ny s to ra mt nhn rt nh v n gin.

Him khi bn iu chnh mt cu hnh bin dch nhn Linux ln u m khng h b li


trong khi bin dch. Cch lu tr tng cu hnh cho mi ln hiu chnh l cch tt nht
bo m "li" ln trc s khng ti din. Nu bn ch n gin dng cu hnh bin
dch nhn c sn (nh RedHat Linux cha trong /boot) v khng iu chnh g c th
ngoi mc ch v li, li dng ny chng c tc dng g v mt nng cao hiu nng ca
my.

8 Cc bc bin dch
8.1 Bc to dependency, dn dp v to nhn
Bc ny c th chy ba lnh:
# make dep
# make clean
# make bzImage

hoc gom chung li thnh mt nhm:


# make dep clean bzImage

Nu bn chy dep, clean v bzImage ring bit th phi trng chng khi no lnh th
nht hon tt tip tc chy lnh th nh v tip theo. Nu bn chy ba lnh mt lt
th lnh th nh t ng ni tip lnh th nht v lnh th ba ni tip lnh th nh. Bn
khng cn phi ch i.

22

bc "dep" l bc to dependencies v cc file bao gm 19 cn thit cho vic bin


dch nhn. Bc ny c th mt nhiu pht, ty vo CPU ca tng my. i vi lot
nhn 2.6.x, bc ny khng cn thit na.

sau khi xong bc "dep", bc "clean" dng dn dp tt c nhng objects vn


vt, khng cn cn thit v qu trnh to file ph thuc hon tt trn.

bc k tip "bzImage" l bc to nhn. y l bc ht sc quan trng trong ba


bc. Nu c s c g xy ra th phi quay li iu chnh cu hnh bin dch nhn
v thc hin li cc bc "make dep", "make clean" tr li (cn phi chy mt
s lnh dn dp trc khi make dep clean bzImage tr li, vn ny s c
cp trong phn 10). Trn my chy Athlon Thunderbird 1.4Ghz, ti mt chng 10
pht hon thnh bc ny. Trn mt my Pentium 233MMX c, ti mt hn 40
pht mi hon thnh bc to kernel image.

Nu ba bc trn hon ton thnh cng, bn c th tm thy nhn 20 nm trong th mc


./arch/$ARCH/boot, trong $ARCH l dng phn cng ca nhn bn mun bin
dch. Nu my bn thuc dng i386, bn s tm thy nhn trong ./arch/i386/boot.
Nhn ny c to ra nhng cha c ci bc ny, n ch lu trong th mc trn
cho cc bc v sau.
Tht ra c th to nhiu dng "kernel image". Dng kernel image c to t "make
bzImage" l dng ph bin nht hin nay v n nn kernel image tt nht v thch hp
vi hu ht cc loi my.
Bn cng c th dng:
# make zImage
make zDisk hoc make zLilo to kernel image nu kernel d kin rt nh v

khng cn k thut nn cao nh "bz". Dng cc dng ny cng thch hp trong trng
hp my ca bn qu c v c th c s c vi "bzImage". Ch cn nm mt cch khi
qut nh sau:

Phn bz hoc z i trc cc image trn ch nh cho loi nn no c dng vi


kernel image.

Phn Image hoc Disk hoc Lilo ch nh cho "loi" kernel image.

Kernel image ny c x nn "on-the-fly" trong qu trnh boot vo Linux sau ny.

Xuyn qua ba bc trn, bn s thy v s thng ip chy trn console ( kernel 2.6.x
thng ip chy trn console t hn rt nhiu). Bt c li no (error) c bo trong bc

19
20

includes
kernel image

23

ny u phi iu chnh cu hnh bin dch nhn v tr li bc "make dep". Cho n


giai on ny, l do gy ra li thng l:

ngh dng bin dch khng ng phin bn (xem phn 4.1 v 4.2 cho lot nhn
ny bn ang bin dch)

iu chnh sai hoc thiu mt s chn la no trong cu hnh bin dch nhn. Xem
li bo trc khi compiler thot ra xc nh li ny thuc phn no trong cu hnh
bin dch nhn m chnh li cho thch hp, nn dng phng php ti v lu tr cu
hnh bin dch nhn cp trong phn 7.2.2 trn.

cu hnh my qu thp (memory / diskspace) khng thc hin ba bc trn.


Nu gp s c ny, nn nng cp my hoc dng mt my khc build kernel cho
my ny.

Lot nhn 2.6.x n gin ho ch vi mt target "make all". Target ny bao gm lun
phn "make modules" trong bc 8.2 k tip.

8.2 Bc to modules v ci modules


Bc ny c th chy hai lnh:
make modules
make modules_install

hoc gom chung li thnh mt dng:


make modules modules_install

im khc bit gia cch chy hai lnh ring bit hoc chy chung mt dng lnh y
nm ch:

bn c th ch mun bin dch modules cho kernel m khng mun ci (install) trn
my ngay sau khi cc modules c bin dch xong,

hoc bn ch mun bin dch modules trn my ny ri s mang qua my khc ci.

Thng thng "make modules modules_install" i chung v t ngi build modules trn mt my ri mang i ci trn mt my khc. Nu chy hai lnh ny mt lt,
bn phi chy ch "super user" khng th modules khng install c v ch c root
(super user) mi c th "install" cc modules va c bin dch. Nu bn tch ri hai
lnh trn th cc lnh tch ri nh sau:
$ make modules

chy bng user account bnh thng


24

# su
[enter password]

chuyn sang ch "super user"


make modules_install

ci modules va bin dch xong.


Bc "make modules" l bc bin dch v to ra cc modules (m bn chn dng
M trong qu trnh chnh l cu hnh bin dch nhn). Cc modules c bin dch s
c lu tr trong cc th mc thch ng vi tng nhm "drivers" trong cy m ngun
(kernel source tree). Giai on ny l giai on bin dch lu nht trong trn b qu trnh
compiler thc s bin dch m ngun ca kernel. Trn mt my chy Athlon Thunderbird
1.4Ghz, bc ny mt chng 25 pht. Trong khi cng s lng modules cn bin dch
chy trn my Pentium 233MMX mt chng trn 4 gi ng h.
Bc "make modules_install" s "ci" cc modules va c bin dch vo th mc
/lib/modules/<kernel_version>. Nu lit k th mc ny (ls), bn s thy t nht
mt th mc cha modules cho kernel ang chy trn my hoc nhiu th mc cho nhiu
phin bn kernel trc y (c t quy trnh cp nht kernel bng rpm hoc quy trnh no
tu theo bn phn phi, hoc t quy trnh bin dch kernel tng t nh bi vit ny).
Khi boot Linux bng mt phin bn kernel no c trn my, cc modules thuc kernel
ny (trong th mc thch ng vi kernel version) s c ng ti.
i vi lot nhn 2.4.x, bn c th tham kho chi tit thng tin v modules, cch
bin dch modules tng qut v cch x dng modules (thuc user space) trong h s
./Documentation/modules.txt thuc m ngun kernel bn d nh bin dch.
i vi lot nhn 2.6.x, bn c th tham kho chi tit thng tin v modules, cch bin
dch modules tng qut v cch x dng modules (thuc user space) trong ba h s ./Documentation/kbuild/modules.txt, ./Documentation/networking/net-modules.txt v ./Documentation/sound/oss/README.modules thuc m ngun kernel bn d nh bin dch.
Ring vi lot nhn 2.6.x, bc "make modules" c th thc hin t "make all" v bc
"make modules install" ch thc hin ring ( ch super user) ci cc modules
c bin dch.

8.3 Tch ri m ngun v h s output trn lot nhn 2.6.x


Nu bn ang dng lot nhn 2.4.x th khng cn tham kho thng tin ca mc ny.
Nhng thng tin trong mc ny ch gii thiu thm mt s tin ch hu dng cho quy
trnh chun b v bin dch nhn 2.6.x.

25

8.3.1 "make help", mt tin ch mi trn lot nhn 2.6.x


Ngoi nhng im khc bit trong cc make target c cp phn 8.1 v 8.2, trn
lot nhn 2.6.x, bn c th x dng mt tin ch kh hay m kernel 2.4.x khng c l
phn "help" trc khi "make" m ngun ca nhn Linux. Tt nhin bn phi chy lnh
ny sau khi vo trong th mc cha m ngun nhn Linux:
$ cd /usr/src/linux-2.6.6

dng kernel 2.6.6 trong trng hp 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 thy "Makefile" chnh ca lot nhn 2.6.x bao gm cc mc tiu
(target) bin dch khi chy make help. Vi thng tin ny, bn c th chn cc target make
theo mun m khng phi kim tra trong "Makefile" nh vi lot nhn 2.4.x (lot nhn
2.4.x khng c "make help" nh lot nhn 2.6.x v lot nhn 2.4.x khng c nhiu
make targets nh lot nhn 2.6.x). im t bit cn quan tm l ba chn la cui trong
thng tin "make help" cung cp:
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

Mt trong nhng chn la quan trng y l n cho php bn lu tr trn b cc h s


output trong qu trnh bin dch vo mt th mc ring bit thay v cha chung vi m
ngun ca kernel.

8.3.2 Tch ri m ngun v output files


Lot nhn 2.6.x cho php bn tch ri m ngun ca kernel v cc h s output c to
trong qu trnh compile, cc h s n 21 nh .config, .depend.... trong cc bc cp
phn 7 v ?? cng s c lu tr th mc no bn mun dng cho output files. Vi
phng tin ny, m ngun v cc h s output s khng xen k chung. im quan trng
cn nh l khi dng chn la ny th phi dng cho cc bc "make" khc trong sut
qu trnh bin dch. V d, bn c th khi u bng:
# make O=/path/to/output xconfig

th cc bc k tip s l:
# make O=/path/to/output all
# make O=/path/to/output modules_install

target "all" bao gm "dep, clean, bzImage, modules". Chy lnh ny bng super user
ci modules ca kernel.

9 Ci t nhn
Phn ny gii thiu hai cch ci nhn va bin dch v chnh nh boot loader.
21

hidden

27

9.1 Ci t vi "make install"


t ngi dng n chc nng "make install" ny v mt s bn phn phi khng c
cc tin ch cn thit thc hin trn vn bc ny. "make install" tin li v an
ton hn ci bng tay v n thao tc cc bc cn thit thit lp nhn mi trn h
thng. Cc bc ny bao gm quy trnh lu tr nhn c (trong th mc /boot), copy
nhn mi, copy System.map mi, iu chnh boot loader configuration (lilo.conf
hoc grub.conf) v cp nht boot loader.
Bc "make install" da trn h s Makefile v install.sh, mt shell script
thuc th mc ./arch/$ARCH/boot. Shell script install.sh "gi" mt s shell script
khc nh /sbin/installkernel v /sbin/new-kernel-pkg, ngoi ra cc shell
scripts ny cn da vo mt binary c tn l "grubby" to thng tin trong grub.conf
nu bn dng GRUB. Cc shell scripts "installkernel" v "new-kernel-install"
thuc gi mkinitrd ca RedHat, cc bn phn phi khc c nhng ng dng tng t.
Nu bn phn phi bn dng khng c gi tng t, bn phi ci kernel bng tay (phn
9.2) hoc to cc script tng t thc hin bc ny. Trong khun kh gii hn ca
bi vit, ti khng i su vo vn to cc script tin ch.
ci nhn Linux mi, bn ch n gin chy lnh make install ch super user
t trong th mc cha m ngun ca nhn Linux kernel. Sau khi hon tt bc "make
install" bn nn kim tra li cu hnh ca trnh khi ng 22 trn my v chy cc lnh
tng ng (nu cn) chnh nh trnh khi ng cho chnh xc.

9.1.1 i vi GRUB
V d bn c hai phin bn nhn trn my 2.4.20 (phin bn ang chy) v 2.4.26 (phin
bn va c bin dch). Sau khi chy "make install", grub.conf c ni 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 tit cn ch l bin default. Trong v d trn, bn c hai nhn trong cu hnh
GRUB cho cc phin bn 2.4.26 v 2.4.20. Nu bn mun khi ng nhn 2.4.26
theo mc nh th gi tr ca default phi l 0 (grub m th t cc nhn t 0).
Khi chy "make install", cc tin ch ca "install" t ng a vo cc chi tit
thuc kernel mi vo cu hnh GRUB. Tuy nhin, gi tr default vn gi gi tr ch
nh cho nhn hin ang hot ng trn my. Bn cn chnh gi tr ny buc trnh
khi ng ti ln phin bn nhn mi. Mt chi tit ht sc quan trng bn cn ch
l gi tr root (hdX,Y). Nu GRUB c ci trong lc ci t h thng t CD
v hot ng hon chnh, bn khng nn thay i gi tr ny. Gi tr ny ch cn
thay i nu bn thm a cng v thay i cc phn vng 23 trn my.

sau khi chnh nh v lu tr grub.conf thch hp, bn ch cn khi ng li my.


Nu bn dng GRUB lm trnh khi ng th cng tc bin dch li nhn Linux hon
thnh y.

gii php phng b: trng hp khng th boot vo nhn mi rt n gin nu dng


GRUB lm trnh khi ng. Bn ch cn thm mt dng fallback 1 vo cu hnh
grub.conf l . Ty chn ny cho GRUB bit nu dng "default=0" khi
ng nhn mi nht (2.4.26 trong v d ny) nhng khng thnh cng v l do no
th th khi ng li vi nhn c hn (2.4.20). Xem thm phn 10 nu khng th
khi ng c vo Linux v trnh khi ng b hng.

9.1.2 i vi LILO
V d bn c hai phin bn nhn trn my 2.4.20 (phin bn ang chy) v 2.4.26 (phin
bn va c bin dch), sau khi chy "make install", lilo.conf c ni 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 tit cn ch l bin default. Trong v d trn, bn c hai nhn trong cu hnh
LILO cho cc phin bn 2.4.26 v 2.4.20. Nu bn mun khi ng nhn 2.4.26 th
gi tr ca default phi l gi tr label (nhn) thuc nhn no bn mun dng.
Trong trng hp ny, nhn (label) c gi tr l linux ch nh cho nhn 2.4.26.
Khi chy "make install", cc tin ch ca "install" a vo cc chi tit ca
nhn mi vo cu hnh LILO. y vmlinuz l lin kt biu tng 24 ca h s 25
vmlinuz-2.4.26. Bn nn kim tra li gi tr default bo m trnh khi ng
s ti nhn va bin dch khi khi ng.

sau khi chnh nh v lu tr lilo.conf theo mun, bn phi chy lnh:


# /sbin/lilo

v ch trng hp h thng bo li trong bc ci lilo lm trnh khi ng. Nu c,


iu chnh cho chnh xc v thc hin li lnh trn. Vi v d trn, bn s thy hin
th kt qu nh sau:
Added linux*
Added linux-2.4.20

Nhn no i km vi du hoa th (*) l nhn s c khi ng theo mc nh.

vi LILO, gii php n gin nht phng trng hp khng th khi ng vo


nhn mi mang tnh tm thi. Trc khi khi ng li my dng lnh sau:
# /sbin/lilo -R linux

ri chy
# reboot

24
25

Nn nh cc lnh trn c a ra nh mt v d cho nhn 2.4.20 v 2.4.26 vi cu


hnh khi ng nh trn. Bn phi iu chnh ng phin bn nhn m bn ang bin
dch.

Lnh th nht cho LILO bit ln k tip my khi ng li th th dng nhn 2.4.26.
Nu khng thnh cng th khng ly nhn 2.4.26 lm nhn mc nh v ln boot k

symbolic link
file

30

tip s dng nhn 2.4.20 (nhn ny chc chn phi lm vic c v n dng
bin dch nhn 2.4.26).

Lnh th nh ch n gin ra lnh cho my khi ng li.

Nu dng lnh "/sbin/lilo -R linux-x.xx.xx" v khi ng vo nhn mi


thnh cng th bn cn ch nh cho nhn x.xx.xx lm nhn mc nh ri mi chy
"/sbin/lilo -v" nh ni trn (trong phn bin "default" ca lilo.conf).

9.2 Cc bc ci t bng tay


Cc bc ci t "bng tay" tng t nh cc bc "make install" trn nhng c
thao tc "bng tay". Tht ra quy trnh ny rt n gin, iu bn cn lu l phi thc
hin chnh xc trnh nhng tr ngi trong bc ny v trong giai on khi ng vo
nhn mi.

9.2.1 To initrd
Trng hp bn bin dch cc drivers quan trng dng modules c lin h n quy
trnh khi ng ca Linux (nh SCSI driver, RAID driver, cc loi filesystem m root
filesystem dng nh ext3, jbd...) th chc chn bn phi cn n initrd 26. Mc ch
chnh ca initrd l ti sn cc driver cn thit cho nhn trong qu trnh khi ng.
Nu khng mun dng initrd, bn phi bin dch cc driver trc tip vo nhn 27. Nn
ch mt s bn phn phi Linux khng dng initrd. H khuyn khch bin dch cc
driver lin h n quy trnh khi ng trc tip vo nhn. Mun tham kho thm chi tit
v RAM disk cho trng hp ny, xem <KERNEL SRC>/Documentation/ramdisk.txt.
Quy trnh to initrd rt n gin, ch cn chy lnh:
# /sbin/mkinitrd /boot/initrd-<KERNEL_VERSION>.img <KERNEL_VERSION>

trong :

26
27

Tham s th nht /boot/initrd-<KERNEL_VERSION>.img ch nh cho h s v


th mc cha h s initrd. Thng thng initrd ca nhn c cha trong th
mc /boot cng vi cc thng tin v h s khc cn thit cho quy trnh khi ng.

Tham s <KERNEL_VERSION> th nh chnh l nhn no bn mun to initrd


cho n. Tt nhin th mc cha cc modules cho phin bn nhn ny phi c trong
/lib/modules/, nu khng bn c system bo c li.

INITial Ram Disk


hay cn gi l static compile

31

Ty thuc vo bn phn phi, mkinitrd i hi thm cc thng s c th ch ng


dn n nhn. Nu gp tr ngi trong bc to mkinitrd bn nn tham kho ti liu c
th cho bn phn phi mnh ang dng hoc ti thiu l xem man mkinitrd v ti liu
<KERNEL SRC>/Documentation/initrd.txt xem thm cc thng tin cn thit.
Mt im ng ch l t lot nhn 2.5.x 28 tr i, initramfs c pht trin vi mc
ch h tr v s i n ch thay th initrd. u im ni bt ca initramfs l n
c th cha cc b lu tr dng cpio "newc" hoc "crc" (c nn hoc khng c
nn). initramfs cho n nay cha ph bin v ng dng rng ri trn cc bn phn
phi Linux. Tuy nhin, hng pht trin v ng dng initramfs c v y ha hn.

9.2.2 Copy nhn v System.map


Sau khi hon thnh bc "make modules_install" (phn 8.3), lc ny bn c trn
b cc b phn cn thit cho nhn mi bao gm c kernel image v cc modules thuc
nhn ny.

copy bzImage t <KERNEL_SRC>/arch/i386/boot/ n th mc /boot, v d:


# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/bzImage2.4.26

Trnh ci t ca RedHat v mt s bn phn phi khc bao gm bc copy


bzImage thnh vmlinuz, bn c th thc hin (hay khng ty , bc ny tng t
nh bc trn) nh sau:
# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/vmlinuz2.4.26

k tip l xo lin kt 29 c (nu c) ca vmlinuz trong th mc /boot:


# rm -f /boot/vmlinuz

v sau to lin kt mi cho vmlinuz-2.4.26 thnh:


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

28
29

Tt nhin bn phi iu chnh li boot loader thch ng vi cch gi "bzImage"


hoc "vmlinuz" ny cho gi tr image (trong lilo.conf) hoc gi tr kernel (trong
grub.conf). Cch dng v cch gi bzImage v vmlinuz to kh nhiu bi ri cho
ngi dng Linux khi tip cn quy trnh bin dch nhn. Mt s bn phn phi Linux
dng bzImage, mt s khc li dng vmlinuz. D g i chng na, y cng ch

development kernel
symbolic link

32

l cch dng v cch gi; bn nn dng theo cch bn phn phi Linux no c trn
my.

phn cn li l bc copy h s System.map:


# cp /usr/src/linux-2.4.26/System.map-2.4.26 /boot/System.map2.4.26

k tip l xo lin kt c ca System.map trong th mc /boot:


# rm -f /boot/System.map

v sau , to lin kt mi cho System.map:


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

9.2.3 Chnh cu hnh ca bootloader config


9.2.3.1 Nu dng GRUB
V d bn c hai phin bn nhn trn my 2.4.20 (phin bn ang chy) v 2.4.26 (phin
bn va c bin dch) th grub.conf c ni 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

Chnh 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 cu hnh ca /etc/grub.conf trn (/etc/grub.conf l lin kt 30


n /boot/grub/menu.1st) v khi ng li my bt u dng nhn va c bin
dch. Nu bn dng GRUB th cng tc bin dch li nhn Linux hon thnh y. Nn
lu trong v d ny, ti dng vmlinuz thay v dng bzImage, bn nn chn la theo
v iu chnh cho ph hp trong grub.conf.
i vi gii php phng trng hp khng th dng GRUB khi ng vo nhn
mi, xem chi tit phn 9.1.1 trn.
9.2.3.2 Nu dng LILO
V d bn c hai phin bn nhn trn my 2.4.20 (phin bn ang chy) v 2.4.26 (phin
bn va c bin dch) 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

Chnh /etc/lilo.conf ci nhn mi (2.4.26 cho v d y), bn c /etc/lilo.conf


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

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) cu hnh ca /etc/lilo.conf trn, chy lnh:


# /sbin/lilo

ng k nhn mi cho LILO.


i vi gii php phng trng hp khng th dng LILO khi ng vo nhn
mi, xem chi tit phn 9.1.2 trn.

10 Khi ng li my v chnh l nu gp trc trc


Ti y, bn cn khi ng li my vi nhn mi. Nu khng c g tr ngi, my s khi
ng vo Linux bnh thng. Bn c th kim li xem nhn mnh ang chy c ng
phin bn va c bin dch hay khng bng cch chy:
$ uname -r

hoc,
$ cat /proc/version

Nu kt qu bo phin bn nhn c th c ngha trnh khi ng (LILO hoc GRUB)


khng khi ng nhn va c bin dch. Bn nn kim tra li cc file cu hnh
(lilo.conf hoc grub.conf) cho ng theo chi tit nu trn.

10.1 B treo khi khi ng vo linux


Tr ngi trong giai on khi ng vo Linux thng thng do cu hnh trnh khi ng
khng ng v trnh khi ng c ci ln khng ng phn vng khi ng 31 hoc

31

boot partition

35

MBR b hng (him thy trong qu trnh bin dch li v ci nhn mi nu thc hin
ng quy cch). Trong trng hp ny, bn phi:

dng n a mm "cp cu" c to phn ?? khi ng vo Linux

n giai on ny bn hn phi bit v tr ca phn vng gc 32 (/) trn a cng


kt ni phn vng 33 ca a cng:
# mount /dev/hdXy /mount/point/somewhere

trong X l v tr a cng trn my, y l v tr phn vng gc trn a cng ny.

i root (chroot) tr thnh phn vng gc ca a cng:


# chroot /mount/point/somewhere

trong /mount/point/somewhere l ni a cng ca bn c kt ni 34.

kim tra li cu hnh ca trnh khi ng v ci t li cho my (xem phn 9.1.1 hoc
ty theo trnh khi ng bn dng l GRUB hay LILO). im cn ch y
cho GRUB l bn phi chy lnh:
9.1.2

# /sbin/grub-install /dev/hdX

trong /dev/hdX l tn thit b a cha MBR cho h thng (thng l a u


tin trn my 35). Lnh trn s thit lp li bn ghi khi ng 36 v loi b cc trng
hp MBR b hng. Tng t cho LILO, bn phi chy lnh:
# /sbin/lilo.

10.2 B treo trong qu trnh nhn c load


Nu bn vng vo cc tr ngi trong giai on nhn c ti ln thng thng l do cc
drivers ti cn thit mount filesystems trn my b thiu. Gi s bn dng ext3 cho
phn vng gc 37 (/) cha nhn. c th kt ni phn vng gc 38 ny, modul ext3 phi
c bin dch v initrd phi ti module ny ln. Tng t ng dng cho cc trng
hp dng filesystem khc v cng thiu module.

32
33
34
35
36
37
38

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

36

Trong trng hp ny, bn cn ghi phn li c bo trong khi khi ng vo nhn mi


xc nh li ny thuc phn no ca cu hnh bin dch nhn Linux v t iu
chnh li v bin dch li cho thch ng. Ni mt cch tng qut, bn phi:

khi ng li my vo phin bn c ca kernel (hoc khi ng vo phin bn c ca


nhn nu bn dng bin php d phng c cp phn 9.1.1 v 9.1.2 trn)

chn la v chnh nh cu hnh bin dch nhn Linux li (xem phn 7.2.2 trnh lp
li bc la chn cu hnh mt cch khng cn thit).

thc hin li cc bc nu ra trong phn 8 v 9 trn

11 V v bin dch nhn


M ngun ca nhn Linux thng c "v" ri bin dch li nhiu hn l c bin dch
t trn b m ngun ti v t http://sources.redhat.com/bzip2/kernel nu bn quen
thuc vi quy trnh ti bin dch hoc bn c nhu cu phi cp nhp kernel ca my
thng xuyn. Ti sao li cn "v"? M ngun ca Linux kernel cn c v v cc l do
thng gp nh sau:

m ngun ca nhn Linux kernel cp nht. Bn c sn m ngun ca nhn Linux


(c hn) trn my. Mun nng cp phin bn nhn ca Linux, bn ch cn ti cc
"ming v 39" v v (thay v phi ti trn b m ngun ca nhn Linux cho phin
bn mi).

mt s "drivers" c cp nht. x dng cc driver mi ny (v cc drivers ny


cn c bin dch ni vi cc th vin hin hnh trn my), bn ch cn ti cc
"ming v" ca nhng drivers ny v nhn Linux v bin dch li chng.

11.1 Cc im quan trng trc khi v


Tng t nh phn 6.2, 6.3 v 6.4 trn, quy trnh ti cc ming v cho nhn Linux y ht
nh ti trn b gi m ngun ca nhn Linux. im khc bit l bn phi ti cc h s
khi u bng patch v chn cho ng cc "ming v" cn thit cho nhn cn c v.
im ti yu cn ghi nh l khi v m ngun ca nhn Linux, bn phi v ng th t
v y cc ming v cho n ng phin bn cn c. V d, bn ang c phin bn
nhn l 2.4.20 trn my v bn mun bin dch li phin bn kernel ca my tr thnh
2.4.26. Thay v ti trn b m ngun ca nhn 2.4.26 v bin dch li (nh trnh by
trong sut bi vit ny), bn c th ti cc bn v 2.4.21, 2.4.22, 2.4.23, 2.4.24, 2.4.25 v
2.4.26 v my. Tng cng dung lng cc bn v ny ch l mt phn rt nh so vi trn
b gi m ngun 2.4.26. Tt nhin bn c m ngun ca kernel 2.4.20 trn my.
39

patches

37

11.2 Ti, x v v
Cc ming v thng c nn hai dng: .gz hoc .bz2 nh gi m ngun. Bn c
th ty chn v c th ti cc ming v ny v bt c ni no trn my. Sau khi ti chng
v, bn c th thc hin quy trnh tng t nh sau:
Gi nh cc bn v c nn dng .bz2, ni cha m ngun ca nhn Linux
/usr/src v thc tnh ca cc ming v ny c kim tra. Trong v d ny, gi nh
phin bn ang dng trn my l 2.4.20 v phin bn cn c v s l 2.4.26.
Chuyn vo th mc /usr/src:
$ cd /usr/src

x nn cc ming v dng .bz2 vo th mc /usr/src. Lp li cho n khi x ht


cc ming v:
$ tar xfvj /path/to/patch/patch-x.xx.xx ./

Dn dp sch s m ngun nhn hin c trn my, gi nh phin bn m ngun hin c


l 2.4.20:
$ cd ./kernel-2.4.20
$ make mrproper

Lu mt bn m ngun kernel 2.4.20 trong th mc /usr/src phng cho s c trong


qu trnh v (nu bn khng lu mt bn m ngun nguyn thy ca nhn 2.4.20 trn
my, hoc bn m ngun 2.4.20 ny cng c v trc y).
$ tar cvf ../linux-2.4.20.tar ./

V cc ming v theo ng th t v theo di bt c li 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

hoc thc hin kiu "li" nh sau: to mt bin mi trng PATCH 40 tm thi cha tn
cc ming v theo ng th t, tch ri bng khong trng 41:

40

vic nh ngha bin PATCH trong 2 dng ch l thun tin khi dn trang, tc gi dng duy nht 1 hng.
Kt 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"

Chy vng lp:


$ for item in $PATCH; do patch -p1 < ../$item; done

Nu trong khi v khng c g tr ngi, bn s thy cc thng tin tng t:


patching file xxx
patching file yyy
....

cho n khi kt thc.


Nu trong khi v b bo li, bn phi ngng bc v (Ctrl-C) v kim tra xem bn c
dng ng bn v v thc hin cc bn v ng th t phin bn hay khng. Khng nn
tip tc vi bc v khi gp li v chc chn bn s gp tr ngi trong giai on bin dch
sau ny. trnh cc tr ngi v sau, nu b bo li trong khi v, cch tt nht bn nn
xo trn b th mc cha m ngun ca nhn Linux (ang c v v b li) v x gi
m ngun nguyn thy hoc gi bn va lu tr trn ri th li.
Xo th mc cha m ngun va v v b trc trc, th mc linux-2.4.20 c dng nh
mt v d y:
$ cd /usr/src
$ rm -rf ./linux-2.4.20

X gi m ngun c lu tr trn:
$ tar xvf linux-2.4.20
$ cd ./linux-2.4.20

v sau lp li bc v theo ng th t cc ming v.


Sau khi v thnh cng, bn nn thc hin hai bc k tip nh sau trc khi bt tay vo
vic chun b cu hnh bin dch m ngun nhn Linux:
i tn th mc cha m ngun cho ng phin bn c v (gip bn nhn din
phin bn ca m ngun ang c trn my c v ti phin bn no):
$ cd /usr/src
$ mv ./linux-2.4.20 ./linux-2.4.26

chnh gi tr "VERSION" trong file Makefile chnh ca m ngun Linux. Th mc cha


m ngun lc ny c i tn thnh linux-2.4.26:

39

$ vi ./linux-2.4.26/Makefile

Vi dng u ca h s Makefile ny cha cc thng tin nh sau (nu m ngun ca


phin bn 2.4.20 c x t gi m ngun nguyn thy):
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 20
EXTRAVERSION =

Bn cn i gi tr SUBLEVEL thnh 26 v lu h s Makefile ny (cho v d ny, hoc


bt c phin bn no bn v ti - xem thm chi tit v quy nh phin bn nhn Linux
phn ??). Gi tr phin bn 2.6.26 ly t h s Makefile s c dng trong qu
trnh bin dch v ci t nhn v sau. Nu bn khng iu chnh gi tr "VERSION"
bc ny, bc ci nhn v sau s vit chng ln nhn 2.4.20 ang c trn my. Ni v
mt k thut vic vit chng ln khng c g tr ngi. Tuy nhin, nu bn gp trc trc
sau khi bin dch nhn nhng khng khi ng vo c th s th s rt phc tp v
bn khng cn bn nhn no chy c trn my.
Ti y bn thc hin thnh cng bc v m ngun nhn Linux v cc bc phng
b cn thit. Bn c th tip tc vi cng vic bin dch li nhn Linux nh ni trn.

40

PDF v PS file c to t ngun HTML


ti http://www.diendantinhoc.net
Nguyn i Qu @ Ngy 1/1/2005

http://vnoss.org

You might also like