Professional Documents
Culture Documents
Bien Dich Nhan Linux
Bien Dich Nhan Linux
Mc lc
1
1.1
1.2
3
3
3
4
4.1
4.2
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
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
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
28
28
29
31
31
32
33
35
35
36
37
37
38
dng bz2)
$ wget http://www.kernel.org/pub/linux/kern...>.tar.bz2 (<KERNEL_SRC>
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
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
2
3
extra-version
development
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
pcmcia-cs
3.1.21
cardmgr -V
PPP
2.4.0
isdn4k-utils
3.1pre1
gcc
--version
fdformat
pppd
--version
--version
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
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
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
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
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
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
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
$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2.sign
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>
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
12
$ tar xf linux-2.x.xx.tar
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
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
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
parallel ports
pc-compatible
16
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
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.
graphic card
sound card
18
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
make config
make menuconfig
make xconfig
Trong :
19
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.
14
15
20
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.
17
18
compiler
hidden
21
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
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
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 Image hoc Disk hoc Lilo ch nh cho "loi" kernel image.
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
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.
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.
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
# su
[enter password]
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 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
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.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.
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.
ri chy
# reboot
24
25
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).
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
31
28
29
development kernel
symbolic link
32
l cch dng v cch gi; bn nn dng theo cch bn phn phi Linux no c trn
my.
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
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
hoc,
$ cat /proc/version
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:
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
32
33
34
35
36
37
38
root partition
mount partition
mount
Primary Master
boot record
root partition
mount root partition
36
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).
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
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
X gi m ngun c lu tr trn:
$ tar xvf linux-2.4.20
$ cd ./linux-2.4.20
39
$ vi ./linux-2.4.26/Makefile
40
http://vnoss.org