Professional Documents
Culture Documents
Bien Dich Nhan Linux - 2
Bien Dich Nhan Linux - 2
Mc lc
1
1.1 1.2
3
3 3
2 3 4
4.1 4.2
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
i hi cho nhn Linux 2.4.x i hi 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 bc bin dch
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
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 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
27
28 28 29 31 31 32 33
10
10.1 10.2
35
35 36
11
11.1 11.2
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
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
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 3
extra-version development
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.
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 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
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:
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
$ 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>
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
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
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
"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
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.
serial parellel 10 mouse 11 block devices
9 8
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.
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
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.
15
14
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
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
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.
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]
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.
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
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.
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. 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
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
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
24 25
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.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 : 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.
26 27
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.
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
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
28 29
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
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
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
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
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.
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.
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.
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
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
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 ./
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"
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
http://vnoss.org