Biendich Kernel

Embed Size (px)

DESCRIPTION

Bien dich Kernel

Citation preview

  • Bin dch nhn LinuxTc gi: Hong Ngc Diu

  • 1

    Mc lc

    1 Tng quan v nhn Linux trn phngdin bin dch li 3

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

    2 Ti sao cn bin dch li nhn Linux? 5

    3 Cu trc v quy c s hiu phin bnca nhn Linux 6

    4 i hi ti thiu trong vic bin dch linhn Linux 6

    4.1 i hi cho nhn Linux 2.4.x 74.2 i hi cho nhn Linux 2.6.x 8

    5 Xc nh cu hnh (hardware) ca my 9

    6 Cc bc chun b 96.1 To mt a mm khi ng cho nhn ang dng 96.2 Ti m ngun 106.3 Kim tra thc tnh ca m ngun 116.4 X nn m ngun 126.5 Dng "config" no th thch hp? 14

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

    bin dch nhn 20

    8 Cc bc bin dch 228.1 Bc to dependency, dn dp v to nhn 228.2 Bc to modules v ci modules 248.3 Tch ri m ngun v h s output trn lot nhn 2.6.x 258.3.1 "make help", mt tin ch mi trn lot nhn 2.6.x 26

  • 2

    8.3.2 Tch ri m ngun v output files 27

    9 Ci t nhn 279.1 Ci t vi "make install" 289.1.1 i vi GRUB 289.1.2 i vi LILO 299.2 Cc bc ci t bng tay 319.2.1 To initrd 319.2.2 Copy nhn v System.map 329.2.3 Chnh cu hnh ca bootloader config 33

    10 Khi ng li my v chnh l nu gptrc trc 35

    10.1 B treo khi khi ng vo linux 3510.2 B treo trong qu trnh nhn c load 36

    11 V v bin dch nhn 3711.1 Cc im quan trng trc khi v 3711.2 Ti, x v v 38

  • 3

    1 Tng quan v nhn Linux trn phng din bin dchli

    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 tri, c rt nhiu chc nng v m rng. Vi tinh thn "bin dch nhn", mt yu t chnhyu 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 driversca 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 linktrc tip ngay khi nhn khi ng. Cng c nhng "driver" cho php chn nh mtmodule v c ti trong khi v sau khi nhn c khi ng. im chnh yu cn nmbt trong gii hn ch "Bin dch nhn Linux" l hiu r ti sao phi chn M (chomodule), 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 haykhng vn c ti ln khi nhn khi ng v tt nhin n s chim mt phn bnh. Li im chnh ca chn la ny l mt khi "drivers" c bin dch vonhn 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 dchthng vo nhnkernel trnh trng hp cc modules khng tin cy "b" ci vonhn lc no trong qu trnh hot ng ca my. Li im k tip ca chn lany l tnh hiu xutxut (rt nh), khi cn driver th c sn v khng cn ng tina.

    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 nhv ti nguyn trn my. Vi la chn ny, bn c th to nn mt nhn rt nh v ddng di chuyn cho nhiu mc ch khc nhau. Li im k tip l kh nng bindch 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 hthng.

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

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

  • 4

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

    $ cd /usr/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 (

    Xc thc ch k v thc tnh ca m ngun:

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

    X nn gi cha m ngun:

    $ bzip2 -dc .tar.bz2 | tar xvf -

    Nu mun dng giao din ha iu chnh cc chn la cho cu hnh nhn th dnglnh:

    $ make xconfig

    Tp hp lnh dng to cc file ph thuc v cc file bao gm (include), tip theo ldn 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/ vi quyn ca superuser:

    # 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 nhbn phn phi1 Linux khng c sn mt s cng c thuc gi mkinitrd (ch c trongbn RedHat v cc bn da trn RedHat).

    distribution1

  • 5

    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.xnn c mt s chi tit khng cn thit cho kernel 2.6.x. Tuy vy, nhng chi tit ny skhng 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 linhn l mt khi nim ht sc l lm. iu ny cng d hiu v kernel ca cc h iuhnh "ng" hin nhin l "ng" v ngi dng bnh thng khng th c c hi tipcn vi m ngun ca nhn c th bin dch li nhn nu mun. Trong khi , mngun ca nhn Linux hon ton "m" v y l iu kin rt thun li cho vn bindch 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 thphi 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 phnphi Linux thng km mt phin bn nhn c bin dch vi hu ht nhng thnhphn c sn c th p ng rng ri cu hnh phn cng (c th hin din trn ccmy). y l im li tng qut lc khi im. Tuy nhin, sau khi ci thnh cngv nm chc my c nhng thit b g (sound card, graphic card, network cards, SCSIcard..... ) v bit r cn nhng thnh phn no cho cu hnh ca my th khng cl do g phi bao gm trn b cc th khng cn thit v khng dng. i vi nhn2.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 "hiulm" cho nhn, to ra trng hp my c nhng triu chng hot ng thiu n nhv 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 ldo ph bin.

  • 6

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

    Phin bn ca nhn Linux c quy c rt n gin v d nh. Vn ny cn nm rtrc 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 chophin 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 phttrin (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 thy 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. Mtphin 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 chocc phin bn nhn t http://www.kernel.org, cc phin bn nhn c iuchnh bi mi bn phn phi c nhng im d bit. C nhiu bn Linux x dng s hiucon2 cho phin bn nhn h iu chnh. V d RedHat c nhng cp nht ph cho cckernel nh: 2.4.20-8 chng hn. iu cn nm y l ch nn x dng phin bn nnh (stable) ca nhn Linux (s chn gia) cho mi trng production v dng phinbn th nghim3 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 chatrn 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. Khngth bin dch c nhn nu khng tho mn yu cu ny. Phin bn cho b cng c vimi phin bn nhn khc nhau. Nn nh, nhm pht trin nhn yu cu bn phi c ngphin bn ca cc cng c m bo vic bin dch nhn thnh cng.

    extra-version2

    development3

  • 7

    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 gcc --version

    Gnu make 3.77 make version

    binutils 2.9.1.0.25 ld -v

    util-linux 2.10o fdformat --version

    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 pppd --version

    isdn4k-utils 3.1pre1 isdnctrl 2>&1| grep version

    Tham kho thm chi tit cc cng c ny v a ch ti cc cng c cho ng (tnht phi cng phin bn cung cp trn hoc mi hn) trong h s Documenta-tion/changes ca m ngun nhn m bn ang d tnh bin dch.

  • 8

    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 --version

    Gnu make 3.78 make --version

    binutils 2.12 ld -v

    util-linux 2.10o fdformat --version

    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 pppd --version

    isdn4k-utils 3.1pre1 isdnctrl 2>&1| grep version

    nfs-utils 1.0.5 showmount version

    procps 3.1.13 ps --version

    oprofile 0.5.3 oprofiled --version

    Tham kho thm chi tit cc cng c ny v a ch ti cc cng c cho ng (tnht phi cng phin bn cung cp trn hoc mi hn) trong h s Documenta-tion/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 cnphi 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 nymt thi gian hn rt nhiu v ch thch hp cho nhng ai quen thuc vi vn bindch m ngun trn Linux. Li im ca cch ny l bn to cho mnh mt b cng crt "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 cmt con IA64 th)

  • 9

    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 nhucu 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 cuhnh phn cng ca my mnh dng, bn vn phi thu thp thng tin chnh xc ca cuhnh 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 vcn thu thp thng tin v cu hnh ca my, hai lnh sau cung cp cc chi tit phn cngc trn my:

    # /sbin/lspci

    Lnh ny lit k trn b cc "card" ang trc tip lm vic trn my, phin bn phncng v kiu4 ca chng.

    # cat /proc/cpuinfo

    xem chi tit b x l trung tm (CPU) ca my l loi g. Nu bn Linux m bndng khng c /proc filesystem th bn c th dng lnh dmesg thu thp thng tinv phn cng trn my ca mnh. Ngoi ra, lnh lsmod cng t nhiu gip bn xc nhcc 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 cuhnh 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 hthng Linux sau khi ci nhn mi. Trng hp ny him khi xy ra trong qu trnh bindch nhn v ci nhn mi nu bn thc hin v iu chnh ng. Nhng s c vi trnhkhi ng5 t thy xy ra v trnh khi ng c thit lp hon chnh trc khi cpnht nhn. Phn ln giai on iu chnh li cu hnh ca LILO hoc GRUB khng chnhxc to tr ngi. Vn ny s c cp sau. Trc mt chng ta cn to mt a mmkhi ng.

    model4

    bootloader, LILO hoc GRUB5

  • 10

    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 lmt cng c c ci mc nh trn cc bn RedHat v hu ht cc bn phn phi datrn RedHat. Nu cng c ny khng hin din trn my, bn c th ti m ngun v vbin dch. Chy lnh:

    # mkbootdisk --device /dev/fd0 uname -r

    trong uname -r l lnh ly phin bn nhn hin dng trn my. Nu khngmun phin bn ny, bn c th g vo phin bn no theo (tt nhin l phin bnkernel ny phi hin hu trn h thng).

    /dev/fd0 l "device" ch cho a mm th nht trn my (tng t nh drive A: trnDOS). 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 nndng n th khi ng vo Linux trc khi thc hin cc bc k tip. Nn nh phichnh BIOS cho php my khi ng t A:

    trang http://www.yolinux.com/TUTORIALS/LinuxTutorialRecoveryAndBootDisk.htmlc cc hng dn to a cp cu rt hay. Bn nn tham kho thm nu trn my mnhdng 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 nitrn 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 datrn "ping time". Chu kh ly vi a ch trn mirror v ping nhng a ch ny chnly ni c ping time ngn nht m ti v. Bng cch s gip bn mt thi gian v tincho vn chia x bng thng.

    C nhiu cch ti m ngun. Bn c th dng trnh duyt (browser) ti qua giao thchttp 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 mnhmun 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 haitin ch nn/x nn trn u c sn trong cc bn Linux thng dng. Nu khng c sn

  • 11

    trn my th tm trong trong CD ca bn Linux (tham kho thm ti liu ca distributionmnh 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 phinbn tng ng. Mc ch l kim tra thc tnh ca m ngun c ti v. Khi mngun 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 "chk" .sign.

    Kim tra thc tnh ca m ngun c ti v bng phng php kim tra "ch k" catng gi m ngun l mt thi quen cn thit. L do: cc m ngun m ni chung ccng b v ph bin rng ri, ai cng c th chnh sa (mt cch khng chnh thc vkhng c nhm pht trin chnh thc cho php) ri a ln mt my ch no trnInternet. Ngi dng ti v, bin dch v ci trn my m khng kim tra thc tnh cachng (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 tserver cha m ngun nhn Linux linux-2.4.26.tar.bz2 l gi m ngun nhn Linux cnn 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 mbn 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 tmtt bng mt v d nh sau:

    Chuyn vo th mc cha m ngun ca my /usr/src l ni thng thng. i viphin 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

  • 12

    $ 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 (khngch 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 tomt "MD5sum" t m ngun c ti v trn my v so snh kt qu "MD5sum" ny vih s "MD5sum" c ti v km vi m ngun. Nu "MD5sum" bn to ra trn myca mnh vi cng gi m ngun m khng trng hp vi "MD5sum" nguyn thu tiv t server th thc tnh ca phn m ngun ny khng ng tin cy. Cch tt nht lch nn ti m ngun nhng a ch ph bin v ng tin cy. Cn thn hn na (reallyparanoid), 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 md5sumc sn hn nh trn mi bn phn phi. Lnh to MD5 checksum n gin l lnh:

    # md5sum

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

    2fe2a5fabcc3a33722b4ffe05714bec3 *.

    Nu chui ny trng vi chui c cung cp chnh thc vi m ngun th m ngun nyc 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 thchhp 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 thmc ny trc khi thao tc cc bc k tip (khng th cc bc k tip phi thm vng dn n ni cha gi m ngun). i vi phin bn nhn 2.6.x, m ngun canhn 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:

  • 13

    $ 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 hs (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 gitar.

    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 trnu 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 gitar.

    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 trongth mc /usr/src/.

    Trong phn ny, chng ta ch cp n trng hp ti trn b m ngun ca nhn Linuxv bin dch. Trng hp c m ngun c hn ca nhn Linux trn my v ch cnti bn v li v "v" th c quy trnh khc. Vn ny s cp sau.

  • 14

    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 nuc bin dch th s theo dng no.

    Ty vo cch sp xp ca mi bn phn phi Linux, cu hnh bin dch nhn Linuxnm 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 hnhkhc cho nhng dng phn cng khc nm ./arch/$ARCH/defconfig; trong $ARCHl dng phn cng ca my. Nu dng cu hnh mc nh, khng chnh sa th nhn sc ti bin dch trn b theo gi tr mc nh v chc hn, nhn ny s khng thch hpcho bn (ngay c nu n c bin dch thnh cng). iu ny i ngc li mc ch cnbin dch li nhn Linux ngay t u. Bn c th dng h s cu hnh ny khi uv chnh sa gi tr cho thch hp. y l mt bc rt kh khn cho nhng ai cha tngi 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 dngconfig-2.x.xx nu bn dng nhn do RedHat (hoc da trn RedHat) v mt s bnphn phi khc cung cp. Bn c th an ton dng cu hnh ny v chnh sa, loi b ccchi 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 trongth mc (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 sim tng ng v d bit. Tuy nhin, quy trnh chn Y, N hoc M cho cc modules vnnh nhau. Bc chn la v chnh liu cu hnh bin dch nhn Linux l mt bc mtnhiu thi gian nht, n cng l mt bc gy nhiu tr ngi nht nu chnh sa khnghp 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" (thnghim). Nu h thng lm vic l mt my production, cn tnh n nh cao th nn ttb chn la ca phn ny. Lm nh th s tt b rt nhiu modules/drivers thuc dng

  • 15

    "alpha" trong nhng phn bn di. Nu mun th dng mt s modules/drivers dngalpha th nn cho php phn ny (Y) v cn thn khi la chn cc modules c bindch sau ny. Vic chn la cc "alpha" drivers ch mc nh ca cc nhn Linuxtrong nhiu bn phn phi Linux l mt trong nhng nguyn nhn chnh to nn tnhtrng bt n nh trn mt s h thng Linux. Nu chn la cc driver ny mt cch cnthn, 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 phntng 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 dngmodule 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 cnbin dch trn b cc drivers thng vo nhn v khng dng modules (v l do bo mtchng hn), bn c th chn N y. Bn cng phi chn "Y" cho trn b cc driverstrong cu hnh bin dch nhn thch hp vi chn la "N" cho phn Loadable ModuleSupport 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 chovn 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 larchitecture 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. Nnchn ng CPU bo m hiu nng ca my v nht l trnh trng hp khng thkhi ng vo Linux sau khi ci nhn mi (v loi CPU chnh nh cho nhn khng ngvi CPU c trn my hay ni mt cch k thut, instructions gia nhn v my khngng b).

    7.1.1.4 General Setup

    Mc ny cho php chn la cc ng dng h tr cho nhng thit b (cards) trn mynh 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 dngcc thit b nh my nh s hoc cc loi compact flash th bn nn chnh l phn nycho thch hp.

  • 16

    7.1.1.6 Block Devices

    y l mt phn rt quan trng trong cu hnh bin dch nhn Linux. N bao gm ccchn la cho nhng thit b thng thng v cn thit nh a cng, a mm, bng lutr cng nh cc thit b iu tc (controllers) cho cc cng song song6 v RAID. Hunh cc chn la trong mc ny u cn thit; c bit l chc nng h tr initrd cnthit 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. Ccchn la y h tr nhng thit b nh RAID v LVM. Nu my ca bn hin angdng RAID v LVM th khng th b qua phn ny trong qu trnh xc lp cu hnh bindch nhn Linux. Chn la trong phn ny i hi phi hiu r nhu cu dng nhng cngngh thuc dng ny trn my. Nu my khng dng n nhng cng ngh ny, bn cth an ton tt b chng (dng N). Nn nh, nu tt b RAID trong phn ny th phi ttb chn la RAID trong phn "block devices" trn trnh gp phi li bin dch sauny.

    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 tngthich vi PC7 (v trn nhiu architecture khc hin c trn th trng). Hu ht cc hthng 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 giithiu v cng b trong cc phin bn sau ny ca 2.4.x). Phn ny c nhng la chnthuc v vn "m ho" cho filesystem. Bn c th bin dch cc chn la trong mcny 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 munmy ca mnh kt ni vi mng. N bao gm cc chn la cho c hai chun IPv4 vIPv6. y cng l mt phn ht sc phc tp, cho nn, c th hiu r v chn lang cho hiu nng ti a ca my v mt networking, bn nn tham kho cc ti liuv mng Linux, t nht l nn c cc ti liu km theo trong m ngun nhn Linux /Documentation/networking/ (thng l /usr/src/linux-2.x.xx/Documentation/networking/).

    parallel ports6

    pc-compatible7

  • 17

    7.1.1.11 SCSI Support

    Phn chn la cho SCSI t c nhng ngi dng bnh thng quan tm n v khngmy ai dng SCSI cho my con. Tuy nhin nu bn dng SCSI card (hoc SCSI built-intrn bo mch ch (motherboard)) hoc dng CDR/W qua IDE nhng chy dng mphng 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 aSCSI bn phi bin dch trc tip cc ty chn cho SCSI vo nhn thay v dng didng module. Nu khng, nhn s treo trong giai on khi ng v module h tr SCSIcha 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 tip8 v songsong9, thit b chut10, joysticks ( chi games). Tt hoc m cc la chn trong mcny 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 loifile 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 chonhn. Khng nn bin dch cc modules cho file system dng "mount" trong giai onkhi ng nh ext3, jbd m nn bin dch thng vo nhn (L do tng t nh cptrong phn "SCSI Support" trn). Cch ny s lm kch thc nhn ln hn nhng san ton v n gin hn. Chc nng h tr initrd c th dng ti cc modules cnthit trong qu trnh khi ng nhn Linux nhng phi nh bt chc nng ny ln trongphn thit b dng block11. 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.

    serial8

    parellel9

    mouse10

    block devices11

  • 18

    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 bnquan tm n "a.out", "elf" v "misc", nn nghin cu k phn ny qua cc ti liukm theo vi m ngun nhn, t bit cho cc tin dng ca "misc" ( /Documentation/mono.txt,/Documentation/binfmt misc.txt, /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 radevice 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 mtnhm. Cc chn la thuc v cc thit b nh card ha12, card m thanh13, USB, SCSIv 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 angpht trin, tuy nhin, y l phn y ha hn cho mt nhn Linux mang tnh bo mtcao.

    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.

    graphic card12

    sound card13

  • 19

    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 filecu 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 vicu 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 nnchy 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 nhnLinux 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 bacch sau:

    make config make menuconfig make xconfigTrong :

    make config l phng tin n gin nht v khng i hi thm bt c th vin nokhc chy cng c ny. make config s a ra mt lot cu hi v sau khi nhnc 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 Mv g phm Enter), bn khng th quay ngc li iu chnh m phi bt u lit u. Phng tin "make config" ny ch tin li cho nhng ai rt kinh nghimv nm r mnh cn g trong cu hnh bin dch nhn. N cng tin li cho quy trnhchnh cu hnh bin dch nhn t xa (qua giao din dng lnh (console) v khngdng c giao din ha v l do g ). Sau khi hon tt cc cu hi, cng cny s lu tr mt cu hnh bin dch nhn (c lu dng .config trong th mccha m ngun ca nhn Linux) v sn sng cho bc to cc file ph thuc cho vic

  • 20

    bin dch nhn. Nu h s .config c t ln bin dch trc, n s b vit chngln giai on ny.

    make menuconfig nng cp ln mt mc cao hn so vi make config. Cng cny 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 btu li t u (nu l chn sai) nh dng make config. Vi giao din n ginny, 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 ttrc v bin dch thnh cng chng hn) m chng phi i xuyn qua mi chnla hnh thnh mt cu hnh bin dch nhn mi. Mt c tnh ca cng c ny ln cha "tr gip ng cnh"14 (phn gip hoc thng tin cho tng mc trong qutrnh iu chnh cu hnh). Nu bn khng nm r gi tr hoc tc dng ca moduleno , b phn tr gip ny chc chn s hu ch. Sau khi hon thnh cc chnla, bn c th lu tr mt bn cu hnh trn my ln sau dng li. giai onny, mt bn cu hnh c lu li (c tn .config trong th mc cha m ngunca 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 hthng chy X Window. make xconfig cn trn b th vin Qt v X Window tocc giao din ha15. Cc chn la v cch di chuyn trong giao din ny hon tonging nh trng hp dng menuconfig v thm mt kh nng na l c th dngchut16 chn. Nu bn cn bin dch li nhn v c th dng X Window th nndng 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 makexconfig, "gconfig" cng to giao din cu hnh ha nhng n da trn th vinGtk.

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

    Dng cu hnh bin dch nhn c sn v iu chnh cho thch hp vi nhu cu camnh. Nu bn dng bn phn phi ca RedHat, cu hnh bin dch nhn c trongth mc /boot dng config- (h s cu hnh ny t ccnhn do RedHat cung cp). dng cu hnh bin dch nhn ny, bn c th dngmake menuconfig hoc make xconfig ti cu hnh ny ln v iu chnh theo

    help context sensitive14

    GUI15

    mouse16

  • 21

    mun. Tht ra khng c bt c ti liu no c th gii thch cn k tng chn lacho mi cu hnh my c. mc bin dch li mt nhn, bn cn hiu cu hnhmy v nhng chn la trong mt cu hnh n mc c th quyt nh chn lanhng g cho thch hp. Bn phn phi Debian cng lu tr cc cu hnh bin dchnhn trong th mc /boot tng t nh bn phn phi RedHat. Cc bn phn phikhc c mt s im tng ng v d bit, bn nn tham kho thm cc hng dnc 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 khingiai on bin dch nhn b hng, bn cn xem xt on bo li sau cng khi trnhdch17 thot ra vi "tnh trng khng thnh cng" (exit status is not 0). Thng thngtrnh bin dch thot ra na chng v cch chn la cu hnh bin dch nhn c nhngim khng thch hp v tho mn (lin h nhau). Nhng li c bo trn consolegip bn xc nh trc trc nm trong khu vc no ca cu hnh bin dch nhn. Bnch cn ti h s bin dch c lu tr ln cui cng ln v vo thng khu vc bs c xem xt v iu chnh, thay v phi thit lp t u trnh gp nhng likhc. Mi khi iu chnh v thay i cu hnh bin dch nhn, bn li tip tc lu limt bn v t tn cho n mt cch hp l (v d kernel-2.4.26-1 cho cu hnh thnht, 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 hocmake xconfig, cu hnh bin dch nhn c bn iu chnh v chn la s clu tr dng n18 ./.config (cc h s v th mc bt u bng du chm . cxp loi l file n, ch c ls -la mi thy chng). Ln k tip, sau khi chy mttrong s lnh trn v tip nhn cc thay i th cu hnh bin dch nhn li t ngvit chng ln ./.config. Cho nn, bn c th lu tr h s ./.config thnh mth s c tn khc trc khi iu chnh v chn la ln k tip.

    Ngoi cc lnh make config, make menuconfig, make xconfig hoc makegconfig (cho lot nhn 2.6.x), bn cn c th dng mt lnh khc cho c ker-nel 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 chnla thnh cng mt cu hnh bin dch nhn cho mnh.

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

    compiler17

    hidden18

  • 22

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

    make allmodconfig: to mt cu hnh bin dch nhn mi vi ch chn la ccmodules 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 chott 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 litrong 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 bindch nhn c sn (nh RedHat Linux cha trong /boot) v khng iu chnh g c thngoi mc ch v li, li dng ny chng c tc dng g v mt nng cao hiu nng camy.

    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 thnht hon tt tip tc chy lnh th nh v tip theo. Nu bn chy ba lnh mt ltth lnh th nh t ng ni tip lnh th nht v lnh th ba ni tip lnh th nh. Bnkhng cn phi ch i.

  • 23

    bc "dep" l bc to dependencies v cc file bao gm19 cn thit cho vic bindch nhn. Bc ny c th mt nhiu pht, ty vo CPU ca tng my. i vi lotnhn 2.6.x, bc ny khng cn thit na.

    sau khi xong bc "dep", bc "clean" dng dn dp tt c nhng objects vnvt, 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 babc. Nu c s c g xy ra th phi quay li iu chnh cu hnh bin dch nhnv thc hin li cc bc "make dep", "make clean" tr li (cn phi chy mts 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 10pht hon thnh bc ny. Trn mt my Pentium 233MMX c, ti mt hn 40pht mi hon thnh bc to kernel image.

    Nu ba bc trn hon ton thnh cng, bn c th tm thy nhn20 nm trong th mc./arch/$ARCH/boot, trong $ARCH l dng phn cng ca nhn bn mun bindch. 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 trncho cc bc v sau.

    Tht ra c th to nhiu dng "kernel image". Dng kernel image c to t "makebzImage" l dng ph bin nht hin nay v n nn kernel image tt nht v thch hpvi 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 vkhng cn k thut nn cao nh "bz". Dng cc dng ny cng thch hp trong trnghp my ca bn qu c v c th c s c vi "bzImage". Ch cn nm mt cch khiqut nh sau:

    Phn bz hoc z i trc cc image trn ch nh cho loi nn no c dng vikernel 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.xthng ip chy trn console t hn rt nhiu). Bt c li no (error) c bo trong bc

    includes19

    kernel image20

  • 24

    ny u phi iu chnh cu hnh bin dch nhn v tr li bc "make dep". Cho ngiai 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 nhnny bn ang bin dch)

    iu chnh sai hoc thiu mt s chn la no trong cu hnh bin dch nhn. Xemli bo trc khi compiler thot ra xc nh li ny thuc phn no trong cu hnhbin dch nhn m chnh li cho thch hp, nn dng phng php ti v lu tr cuhnh 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 chomy ny.

    Lot nhn 2.6.x n gin ho ch vi mt target "make all". Target ny bao gm lunphn "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 ynm ch:

    bn c th ch mun bin dch modules cho kernel m khng mun ci (install) trnmy 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 mod-ules 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 hailnh trn th cc lnh tch ri nh sau:

    $ make modules

    chy bng user account bnh thng

  • 25

    # 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 dngM trong qu trnh chnh l cu hnh bin dch nhn). Cc modules c bin dch sc 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 trnhcompiler thc s bin dch m ngun ca kernel. Trn mt my chy Athlon Thunderbird1.4Ghz, bc ny mt chng 25 pht. Trong khi cng s lng modules cn bin dchchy 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/. Nu lit k th mc ny (ls), bn s thy t nhtmt th mc cha modules cho kernel ang chy trn my hoc nhiu th mc cho nhiuphin 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 kernelny (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, cchbin 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 bindch modules tng qut v cch x dng modules (thuc user space) trong ba h s ./Doc-umentation/kbuild/modules.txt, ./Documentation/networking/net-modules.txt v ./Docu-mentation/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 quytrnh chun b v bin dch nhn 2.6.x.

  • 26

    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, trnlot nhn 2.6.x, bn c th x dng mt tin ch kh hay m kernel 2.4.x khng c lphn "help" trc khi "make" m ngun ca nhn Linux. Tt nhin bn phi chy lnhny 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

  • 27

    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 maketheo mun m khng phi kim tra trong "Makefile" nh vi lot nhn 2.4.x (lot nhn2.4.x khng c "make help" nh lot nhn 2.6.x v lot nhn 2.4.x khng c nhiumake targets nh lot nhn 2.6.x). im t bit cn quan tm l ba chn la cui trongthng 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 soutput trong qu trnh bin dch vo mt th mc ring bit thay v cha chung vi mngun 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 totrong qu trnh compile, cc h s n21 nh .config, .depend.... trong cc bc cp phn 7 v ?? cng s c lu tr th mc no bn mun dng cho output files. Viphng tin ny, m ngun v cc h s output s khng xen k chung. im quan trngcn nh l khi dng chn la ny th phi dng cho cc bc "make" khc trong sutqu 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 nhnPhn ny gii thiu hai cch ci nhn va bin dch v chnh nh boot loader.

    hidden21

  • 28

    9.1 Ci t vi "make install"t ngi dng n chc nng "make install" ny v mt s bn phn phi khng ccc tin ch cn thit thc hin trn vn bc ny. "make install" tin li v anton hn ci bng tay v n thao tc cc bc cn thit thit lp nhn mi trn hthng. Cc bc ny bao gm quy trnh lu tr nhn c (trong th mc /boot), copynhn mi, copy System.map mi, iu chnh boot loader configuration (lilo.confhoc grub.conf) v cp nht boot loader.

    Bc "make install" da trn h s Makefile v install.sh, mt shell scriptthuc th mc ./arch/$ARCH/boot. Shell script install.sh "gi" mt s shell scriptkhc nh /sbin/installkernel v /sbin/new-kernel-pkg, ngoi ra cc shellscripts ny cn da vo mt binary c tn l "grubby" to thng tin trong grub.confnu 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 (phn9.2) hoc to cc script tng t thc hin bc ny. Trong khun kh gii hn cabi 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 usert trong th mc cha m ngun ca nhn Linux kernel. Sau khi hon tt bc "makeinstall" bn nn kim tra li cu hnh ca trnh khi ng22 trn my v chy cc lnhtng 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 (phinbn va c bin dch). Sau khi chy "make install", grub.conf c ni dung nhsau:

    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

    boot loader22

  • 29

    Chi tit cn ch l bin default. Trong v d trn, bn c hai nhn trong cu hnhGRUB cho cc phin bn 2.4.26 v 2.4.20. Nu bn mun khi ng nhn 2.4.26theo 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 titthuc kernel mi vo cu hnh GRUB. Tuy nhin, gi tr default vn gi gi tr chnh cho nhn hin ang hot ng trn my. Bn cn chnh gi tr ny buc trnhkhi 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 CDv hot ng hon chnh, bn khng nn thay i gi tr ny. Gi tr ny ch cnthay i nu bn thm a cng v thay i cc phn vng23 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 honthnh y.

    gii php phng b: trng hp khng th boot vo nhn mi rt n gin nu dngGRUB lm trnh khi ng. Bn ch cn thm mt dng fallback 1 vo cu hnhgrub.conf l . Ty chn ny cho GRUB bit nu dng "default=0" khing 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 thkhi 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 (phinbn va c bin dch), sau khi chy "make install", lilo.conf c ni dung nhsau:

    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

    partitions23

  • 30

    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 hnhLILO cho cc phin bn 2.4.26 v 2.4.20. Nu bn mun khi ng nhn 2.4.26 thgi 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 canhn mi vo cu hnh LILO. y vmlinuz l lin kt biu tng24 ca h s25

    vmlinuz-2.4.26. Bn nn kim tra li gi tr default bo m trnh khi ngs 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 hinth 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 vonhn 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 cuhnh khi ng nh trn. Bn phi iu chnh ng phin bn nhn m bn ang bindch.

    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 link24

    file25

  • 31

    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 cthao tc "bng tay". Tht ra quy trnh ny rt n gin, iu bn cn lu l phi thchin chnh xc trnh nhng tr ngi trong bc ny v trong giai on khi ng vonhn mi.

    9.2.1 To initrd

    Trng hp bn bin dch cc drivers quan trng dng modules c lin h n quytrnh khi ng ca Linux (nh SCSI driver, RAID driver, cc loi filesystem m rootfilesystem dng nh ext3, jbd...) th chc chn bn phi cn n initrd26. Mc chchnh 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 nhn27. Nnch mt s bn phn phi Linux khng dng initrd. H khuyn khch bin dch ccdriver lin h n quy trnh khi ng trc tip vo nhn. Mun tham kho thm chi titv RAM disk cho trng hp ny, xem /Documentation/ramdisk.txt.

    Quy trnh to initrd rt n gin, ch cn chy lnh:

    # /sbin/mkinitrd /boot/initrd-.img

    trong :

    Tham s th nht /boot/initrd-.img ch nh cho h s vth mc cha h s initrd. Thng thng initrd ca nhn c cha trong thmc /boot cng vi cc thng tin v h s khc cn thit cho quy trnh khi ng.

    Tham s th nh chnh l nhn no bn mun to initrdcho 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 Disk26

    hay cn gi l static compile27

  • 32

    Ty thuc vo bn phn phi, mkinitrd i hi thm cc thng s c th ch ngdn n nhn. Nu gp tr ngi trong bc to mkinitrd bn nn tham kho ti liu cth cho bn phn phi mnh ang dng hoc ti thiu l xem man mkinitrd v ti liu/Documentation/initrd.txt xem thm cc thng tin cn thit.

    Mt im ng ch l t lot nhn 2.5.x28 tr i, initramfs c pht trin vi mcch h tr v s i n ch thay th initrd. u im ni bt ca initramfs l nc th cha cc b lu tr dng cpio "newc" hoc "crc" (c nn hoc khng cnn). initramfs cho n nay cha ph bin v ng dng rng ri trn cc bn phnphi 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 trnb cc b phn cn thit cho nhn mi bao gm c kernel image v cc modules thucnhn ny.

    copy bzImage t /arch/i386/boot/ n th mc /boot, v d:# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/bzImage-

    2.4.26

    Trnh ci t ca RedHat v mt s bn phn phi khc bao gm bc copybzImage thnh vmlinuz, bn c th thc hin (hay khng ty , bc ny tng tnh bc trn) nh sau:

    # cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/vmlinuz-

    2.4.26

    k tip l xo lin kt29 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

    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 (tronggrub.conf). Cch dng v cch gi bzImage v vmlinuz to kh nhiu bi ri chongi dng Linux khi tip cn quy trnh bin dch nhn. Mt s bn phn phi Linuxdng bzImage, mt s khc li dng vmlinuz. D g i chng na, y cng ch

    development kernel28

    symbolic link29

  • 33

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

    phn cn li l bc copy h s System.map:# cp /usr/src/linux-2.4.26/System.map-2.4.26 /boot/System.map-

    2.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 (phinbn 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)

  • 34

    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 kt30

    n /boot/grub/menu.1st) v khi ng li my bt u dng nhn va c bindch. Nu bn dng GRUB th cng tc bin dch li nhn Linux hon thnh y. Nnlu 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 nhnmi, 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 (phinbn 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.confnh sau:

    prompt

    timeout=50

    default=linux

    boot=/dev/hda

    map=/boot/map

    install=/boot/boot.b

    message=/boot/message

    symbolic link30

  • 35

    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 nhnmi, 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 khing vo Linux bnh thng. Bn c th kim li xem nhn mnh ang chy c ngphin 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 ngkhng ng v trnh khi ng c ci ln khng ng phn vng khi ng31 hoc

    boot partition31

  • 36

    MBR b hng (him thy trong qu trnh bin dch li v ci nhn mi nu thc hinng 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 gc32 (/) trn a cng

    kt ni phn vng33 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 ni34.

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

    # /sbin/grub-install /dev/hdX

    trong /dev/hdX l tn thit b a cha MBR cho h thng (thng l a utin trn my35). Lnh trn s thit lp li bn ghi khi ng36 v loi b cc trnghp 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 ccdrivers ti cn thit mount filesystems trn my b thiu. Gi s bn dng ext3 chophn vng gc37 (/) cha nhn. c th kt ni phn vng gc38 ny, modul ext3 phic bin dch v initrd phi ti module ny ln. Tng t ng dng cho cc trnghp dng filesystem khc v cng thiu module.

    root partition32

    mount partition33

    mount34

    Primary Master35

    boot record36

    root partition37

    mount root partition38

  • 37

    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 iuchnh 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 canhn 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 lpli 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 nhnM ngun ca nhn Linux thng c "v" ri bin dch li nhiu hn l c bin dcht trn b m ngun ti v t http://sources.redhat.com/bzip2/kernel nu bn quenthuc vi quy trnh ti bin dch hoc bn c nhu cu phi cp nhp kernel ca mythng xuyn. Ti sao li cn "v"? M ngun ca Linux kernel cn c v v cc l dothng 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 v39" v v (thay v phi ti trn b m ngun ca nhn Linux cho phinbn mi).

    mt s "drivers" c cp nht. x dng cc driver mi ny (v cc drivers nycn 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 htnh ti trn b gi m ngun ca nhn Linux. im khc bit l bn phi ti cc h skhi 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 tv y cc ming v cho n ng phin bn cn c. V d, bn ang c phin bnnhn l 2.4.20 trn my v bn mun bin dch li phin bn kernel ca my tr thnh2.4.26. Thay v ti trn b m ngun ca nhn 2.4.26 v bin dch li (nh trnh bytrong 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 v2.4.26 v my. Tng cng dung lng cc bn v ny ch l mt phn rt nh so vi trnb gi m ngun 2.4.26. Tt nhin bn c m ngun ca kernel 2.4.20 trn my.

    patches39

  • 38

    11.2 Ti, x v v

    Cc ming v thng c nn hai dng: .gz hoc .bz2 nh gi m ngun. Bn cth ty chn v c th ti cc ming v ny v bt c ni no trn my. Sau khi ti chngv, 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 nhphin 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 htcc 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 cl 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 trongqu trnh v (nu bn khng lu mt bn m ngun nguyn thy ca nhn 2.4.20 trnmy, 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 -p1 < ../patch-2.4.21

    $ patch -p1 < ../patch-2.4.22

    $ patch -p1 < ../patch-2.4.23

    $ patch -p1 < ../patch-2.4.24

    $ patch -p1 < ../patch-2.4.25

    $ patch -p1 < ../patch-2.4.26

    hoc thc hin kiu "li" nh sau: to mt bin mi trng PATCH40 tm thi cha tncc ming v theo ng th t, tch ri bng khong trng41:

    vic nh ngha bin PATCH trong 2 dng ch l thun tin khi dn trang, tc gi dng duy nht 1 hng.40

    Kt qu hon ton nh nhau.space41

  • 39

    $ 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 cdng ng bn v v thc hin cc bn v ng th t phin bn hay khng. Khng nntip tc vi bc v khi gp li v chc chn bn s gp tr ngi trong giai on bin dchsau ny. trnh cc tr ngi v sau, nu b bo li trong khi v, cch tt nht bn nnxo trn b th mc cha m ngun ca nhn Linux (ang c v v b li) v x gim 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 nhmt 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 vovic 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 dinphin 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 cham ngun lc ny c i tn thnh linux-2.4.26:

  • 40

    $ vi ./linux-2.4.26/Makefile

    Vi dng u ca h s Makefile ny cha cc thng tin nh sau (nu m ngun caphin 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, hocbt 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 qutrnh 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 vmt k thut vic vit chng ln khng c g tr ngi. Tuy nhin, nu bn gp trc trcsau khi bin dch nhn nhng khng khi ng vo c th s th s rt phc tp vbn 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 phngb cn thit. Bn c th tip tc vi cng vic bin dch li nhn Linux nh ni trn.

  • PDF v PS file c to t ngun HTMLti http://www.diendantinhoc.netNguyn i Qu @ Ngy 1/1/2005

    http://vnoss.org

    Tng quan v nhn Linux trn phuong din bin dich laiNhn Linux v vic bin dich lai nhnTm tat cc buoc bin dich (dnh cho nhung ai thiu kin nhn)

    Tai sao cn bin dich lai nhn Linux?Cu trc v quy uoc s hiu phin ban cua nhn LinuxDi hoi ti thiu trong vic bin dich lai nhn LinuxDi hoi cho nhn Linux 2.4.xDi hoi cho nhn Linux 2.6.x

    Xc dinh cu hnh (hardware) cua myCc buoc chun biTao mt dia mm khoi dng cho nhn dang dngTai m ngunKim tra thuc tnh cua m ngunXa nn m ngunDng "config" no th thch hop?

    Chinh cu hnh bin dich nhn LinuxThnh phn cua cu hnh bin dich nhn LinuxThnh phn cu hnh bin dich nhn Linux phin ban 2.4.xThnh phn cu hnh nhn Linux cho loat nhn 2.6.x

    Diu chinh cu hnh bin dich nhn LinuxCc cng cu d xc lp cu hnhMt s dim cn ch trong giai doan hnh thnh cu hnh bin dich nhn

    Cc buoc bin dichBuoc tao {it dependency}, don dep v tao nhnBuoc tao modules v ci modulesTch roi m ngun v h so output trn loat nhn 2.6.x"make help", mt tin ch moi trn loat nhn 2.6.xTch roi m ngun v output files

    Ci dat nhnCi dat voi "\ake install"Di voi GRUBDi voi LILO

    Cc buoc ci dat bang tayTao initrdCopy nhn v System.mapChinh cu hnh cua {bootloader config}

    Khoi dng lai my v chinh l nu gap truc tracBi treo khi khoi dng vo linuxBi treo trong qu trnh nhn duoc load

    V v bin dich nhnCc dim quan trong truoc khi vTai, xa v v