logo

Hướng dẫn biên dịch nhân Linux

Hướng dẫn biên dịch nhân Linux
Biên d ch nhân Linux Tác gi : Hoàng Ng c Diêu M cl c 1 T ng quan v nhân Linux trên phương di n biên d ch l i 3 1.1 Nhân Linux và vi c biên d ch l i nhân 3 1.2 Tóm t t các bư c biên d ch (dành cho nh ng ai thi u kiên nh n) 3 2 T i sao c n biên d ch l i nhân Linux? 5 3 C u trúc và quy ư c s hi u phiên b n c a nhân Linux 6 4 Đòi h i t i thi u trong vi c biên d ch l i nhân Linux 6 4.1 Đòi h i cho nhân Linux 2.4.x 7 4.2 Đòi h i cho nhân Linux 2.6.x 8 5 Xác đ nh c u hình (hardware) c a máy 9 6 Các bư c chu n b 9 6.1 T o m t đĩa m m kh i đ ng cho nhân đang dùng 9 6.2 T i mã ngu n 10 6.3 Ki m tra th c tính c a mã ngu n 11 6.4 X nén mã ngu n 12 6.5 Dùng "config" nào thì thích h p? 14 7 Ch nh c u hình biên d ch nhân Linux 14 7.1 Thành ph n c a c u hình biên d ch nhân Linux 14 7.1.1 Thành ph n c u hình biên d ch nhân Linux phiên b n 2.4.x 14 7.1.2 Thành ph n c u hình nhân Linux cho lo t nhân 2.6.x 17 7.2 Đi u ch nh c u hình biên d ch nhân Linux 18 7.2.1 Các công c đ xác l p c u hình 19 7.2.2 M t s đi m c n chú ý trong giai đo n hình thành c u hình biên d ch nhân 20 8 Các bư c biên d ch 22 8.1 Bư c t o dependency, d n d p và t o nhân 22 8.2 Bư c t o modules và cài modules 24 8.3 Tách r i mã ngu n và h sơ output trên lo t nhân 2.6.x 25 8.3.1 "make help", m t ti n ích m i trên lo t nhân 2.6.x 26 –1– 8.3.2 Tách r i mã ngu n và output files 27 9 Cài đ t nhân 27 9.1 Cài đ t v i "make install" 28 9.1.1 Đ i v i GRUB 28 9.1.2 Đ i v i LILO 29 9.2 Các bư c cài đ t b ng tay 31 9.2.1 T o initrd 31 9.2.2 Copy nhân và System.map 32 9.2.3 Ch nh c u hình c a bootloader config 33 10 Kh i đ ng l i máy và ch nh lý n u g p tr c tr c 35 10.1 B treo khi kh i đ ng vào linux 35 10.2 B treo trong quá trình nhân đư c load 36 11 Vá và biên d ch nhân 37 11.1 Các đi m quan tr ng trư c khi vá 37 11.2 T i, x và vá 38 –2– 1 T ng quan v nhân Linux trên phương di n biên d ch li 1.1 Nhân Linux và vi c biên d ch l i nhân Nhân Linux là m t "nhân hi n đ i" có tính module r t cao. T kernel phiên b n 2.6.x tr đi, có r t nhi u ch c năng và m r ng. V i tinh th n "biên d ch nhân", m t y u t chính y u và quan tr ng nh t c n ghi nh n đó là tính phân b (modularity) c a nhân Linux. Đ i v i ngư i dùng bình thư ng, modularity cho phép ch n l a cách biên d ch các drivers c a nhân theo d ng modules hay theo d ng biên d ch tr c ti p vào nhân. Thông thư ng, khi xác l p c u hình cho nhân có ba ch n l a: Y, M và N. Có nh ng "driver" không th biên d ch như m t module vì nó ph i đư c load and link tr c ti p ngay khi nhân kh i đ ng. Cũng có nh ng "driver" cho phép ch n như m t module và đư c t i trong khi và sau khi nhân đư c kh i đ ng. Đi m chính y u c n n m b t trong gi i h n ch đ "Biên d ch nhân Linux" là hi u rõ t i sao ph i ch n M (cho module), Y (cho biên d ch tr c ti p) và N (không dùng) các drivers này. Biên d ch tr c ti p vào kernel có nghĩa là các "drivers" này dù có đư c dùng hay • không v n đư c t i lên khi nhân kh i đ ng và t t nhiên nó s chi m m t ph n b nh . L i đi m chính c a ch n l a này là m t khi "drivers" đã đư c biên d ch vào nhân thì không còn ph i quan ng i đ n tính trung th c c a nhân và các driver n a. Các h th ng làm vi c đòi h i tính b o m t cao không dùng modules mà biên d ch th ng vào nhânkernel đ tránh trư ng h p các modules không tin c y "b " cài vào nhân lúc nào đó trong quá trình ho t đ ng c a máy. L i đi m k ti p c a ch n l a này là tính hi u xu txu t (r t nh ), khi c n driver thì đã có s n và không c n ng t i n a. Biên d ch như các modules cho nhân có nghĩa là ch khi nào c n dùng các "drivers" • này m i đư c ng t i. L i đi m c a ch n l a này n i b t khía c nh x d ng b nh và tài nguyên trên máy. V i l a ch n này, b n có th t o nên m t nhân r t nh và d dàng di chuy n cho nhi u m c đích khác nhau. L i đi m k ti p là kh năng biên d ch l i ch m t ho c m t s modules nào đó (c n c p nh t ch ng h n). T t nhiên đ th c hi n chuy n này thì ph i tho mãn t t c nh ng đòi h i v tính ph thu c cho h th ng. 1.2 Tóm t t các bư c biên d ch (dành cho nh ng ai thi u kiên nh n) Biên d ch nhân Linux r t đơn gi n n u như đã hi u rõ các quy trình và các bư c th c hi n. Sau đây là các l nh c n thi t, gi đ nh b n đã có tr n b các công c c n thi t đ biên d ch: –3– Chuy n vào thư m c /usr/src, nơi thông thư ng ch a mã ngu n đ biên d ch nhân: $ cd /usr/src là phiên b n kernel c n biên d ch, ví d đây t i mã ngu n đư c nén d ng bz2) $ wget http://www.kernel.org/pub/linux/kern...>.tar.bz2 ( Xác th c ch ký và th c tính c a mã ngu n: $ gpg --verify .tar.bz2.sign .tar.bz2 X nén gói ch a mã ngu n: $ bzip2 -dc .tar.bz2 | tar xvf - N u mu n dùng giao di n đ h a đ đi u ch nh các ch n l a cho c u hình nhân thì dùng l nh: $ make xconfig T p h p l nh dùng đ t o các file ph thu c và các file bao g m (include), ti p theo là d n d p các objects không c n thi t và biên d ch nhân d ng nén: $ make dep clean bzImage Biên d ch các modules đã đư c ch n l a b ng l nh: $ make modules Chchuy n sang ch đ super user cho l nh ti p theo: $ su Cài các modules vào thư m c /lib/modules/ v i quy n c a super user: # make modules_install Cài đ t nhân và các file c n thi t vào thư m c /boot: # make install Bư c th 10 có th thay th b ng m t lo t thao tác b ng tay (chi ti t ph n 9.2) n u như b n phân ph i 1 Linux không có s n m t s công c thu c gói mkinitrd (ch có trong b n RedHat và các b n d a trên RedHat). 1 distribution –4– Lưu ý: đ i v i lo t nhân 2.6.x, b n có th dùng các bư c như trên. Tuy nhiên bư c "make dep" không c n thi t n a. Bài vi t này bao g m cho c phiên b n 2.4.x và 2.6.x nên có m t s chi ti t không c n thi t cho kernel 2.6.x. Tuy v y, nh ng chi ti t này s không nh hư ng đ n s thành công c a quy trình biên d ch nhân. 2 T i sao c n biên d ch l i nhân Linux? Đ i v i ngư i dùng đã quen v i nh ng h đi u hành "đóng" thì khái ni m biên d ch l i nhân là m t khái ni m h t s c l l m. Đi u này cũng d hi u vì kernel c a các h đi u hành "đóng" hi n nhiên là "đóng" và ngư i dùng bình thư ng không th có cơ h i ti p c n v i mã ngu n c a nhân đ có th biên d ch l i nhân n u mu n. Trong khi đó, mã ngu n c a nhân Linux hoàn toàn "m " và đây là đi u ki n r t thu n l i cho v n đ biên d ch l i nhân. Câu h i đư c đ t ra là t i sao l i c n ph i biên d ch l i nhân Linux ? Câu tr l i ng n: không c n n u như không c n và c n n u như c n :) Câu tr l i dài: có vô s lý do khi n cho ngư i dùng c n ph i biên d ch l i nhân Linux. Sau đây là m t s trư ng h p thư ng g p nh t: a. tái biên d ch kernel đ ch a l i c a nhân. N u các l i này thu c v lõi c a nhân thì ph i vá ngu n c a nhân và biên d ch l i nó đ s a ch a các l i đư c công b . b. biên d ch l i nhân đ nâng cao hi u năng c a nhân. Theo m c đ nh, các b n phân ph i Linux thư ng kèm m t phiên b n nhân đư c biên d ch v i h u h t nh ng thành ph n có s n đ có th đáp ng r ng rãi c u hình ph n c ng (có th hi n di n trên các máy). Đây là đi m l i t ng quát lúc kh i đi m. Tuy nhiên, sau khi đã cài thành công và n m ch c máy có nh ng thi t b gì (sound card, graphic card, network cards, SCSI card..... ) và bi t rõ c n nh ng thành ph n nào cho c u hình c a máy thì không có lý do gì ph i bao g m tr n b các th không c n thi t và không dùng. Đ i v i nhân 2.4.x, m c đ nâng cao hi u năng không rõ r t (ngo i tr dùng phương pháp test load đ đo). Tuy nhiên, t phiên b n 2.6.x tr đi, vi c biên d ch l i và đi u ch nh "driver" cho nhân t o hi u xu t rõ r t, nh t là trong vi c đi u ch nh "th i bi u" (scheduling) c a các công tác mà h th ng ph i đ m nhi m. c. biên d ch l i nhân đ lo i b nh ng "drivers" không đư c dùng và có th gây "hi u l m" cho nhân, t o ra trư ng h p máy có nh ng tri u ch ng ho t đ ng thi u n đ nh và hay gây l i. d. biên d ch l i nhân đ th nghi m m t ch c năng ho c m t module mình v a t o ra. Trư ng h p này không nhi u như các trư ng h p trên nhưng cũng n m trong các lý do ph bi n. –5– 3 C u trúc và quy ư c s hi u phiên b n c a nhân Linux Phiên b n c a nhân Linux có quy ư c r t đơn gi n và d nh . V n đ này c n n m rõ trư c khi ch n m t phiên b n nào đó c a nhân Linux đ vá và biên d ch. Phiên b n c a nhân Linux bao g m ba nhóm s tách ra b i các d u ch m. Ví d : 2.4.26 S th nh t: 2 là s hi u phiên b n chính S th nhì: 4 là ch đ nh cho tình tr ng phiên b n. N u s này là s ch n, nó ch đ nh cho phiên b n n đ nh (stable), có th dùng cho môi trư ng production. N u s này là s l , nó ch đ nh cho phiên b n không n đ nh, nó thư ng dùng trong môi trư ng đang phát tri n (development). Các kernel thu c d ng này thư ng có nhi u l i và không n đ nh. N u dùng các phiên b n này đ tìm l i và thông báo cho nhóm phát tri n nhân Linux thì đây là đi u r t t t. Không nên dùng phiên b n phát tri n cho môi trư ng production. S th ba: 26 là ch đ nh cho s hi u phát hành c a m t phiên b n nhân Linux. M t phiên b n n đ nh c a m t nhân Linux có th có nhi u s hi u phát hành khác nhau. Đây là các quy ư c chung cho d ng nhân Linux "vanilla" có nghĩa là ng d ng cho các phiên b n nhân t http://www.kernel.org, các phiên b n nhân đư c đi u ch nh b i m i b n phân ph i có nh ng đi m d bi t. Có nhi u b n Linux x d ng s hi u con 2 cho phiên b n nhân h đã đi u ch nh. Ví d RedHat có nh ng c p nh t ph cho các kernel như: 2.4.20-8 ch ng h n. Đi u c n n m đây là ch nên x d ng phiên b n n đ nh (stable) c a nhân Linux (s ch n gi a) cho môi trư ng production và dùng phiên b n th nghi m 3 c a nhân Linux (s l ) cho môi trư ng th nghi m và phát tri n. 4 Đòi h i t i thi u trong vi c biên d ch l i nhân Linux Trư c khi b t tay vào vi c biên d ch l i nhân Linux, đi u c n thi t là ph i có đ ch ch a trên đĩa. Ít nh t là ph i đ ch ch a cho mã ngu n (trư c và sau khi x nén), ch ch a đ cài kernel và các modules m i sau khi biên d ch. Đòi h i quan tr ng khác là ph i có m t b công c c n thi t và đúng phiên b n. Không th biên d ch đư c nhân n u không tho mãn yêu c u này. Phiên b n cho b công c v i m i phiên b n nhân khác nhau. Nên nh , nhóm phát tri n nhân yêu c u b n ph i có đúng phiên b n c a các công c đ đ m b o vi c biên d ch nhân thành công. 2 extra-version 3 development –6– 4.1 Đòi h i cho nhân Linux 2.4.x Công c Phiên b n t i thi u Cách xác đ nh phiên b n 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 kh o thêm chi ti t các công c này và đ a ch đ t i các công c cho đúng (ít nh t ph i cùng phiên b n đã cung c p trên ho c m i hơn) trong h sơ Documenta- tion/changes c a mã ngu n nhân mà b n đang d tính biên d ch. –7– 4.2 Đòi h i cho nhân Linux 2.6.x Công c Phiên b n t i thi u Cách xác đ nh phiên b n 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 kh o thêm chi ti t các công c này và đ a ch đ t i các công c cho đúng (ít nh t ph i cùng phiên b n đã cung c p trên ho c m i hơn) trong h sơ Documenta- tion/changes c a mã ngu n nhân b n đang d tính biên d ch. N u phiên b n c a các công c trên máy cũ hơn các phiên b n đưa ra trên, b n c n ph i t i phiên b n m i (đã biên d ch) t website c a b n phân ph i nào b n đang dùng. B n cũng có th ch n cách t i mã ngu n c a t ng công c v biên d ch l i. Cách này m t th i gian hơn r t nhi u và ch thích h p cho nh ng ai đã quen thu c v i v n đ biên d ch mã ngu n trên Linux. L i đi m c a cách này là b n t o cho mình m t b công c r t "s ch" vì đã biên d ch theo ý, thích h p v i môi trư ng c a máy (và v a đ ). Đ i v i ph n c ng IA64, b n c n phiên b n GCC cho 64bit, nên tham kh o chi ti t http://gcc.gnu.org/install/specific.html (n u b n may m n có m t con IA64 đ th ) –8– 5 Xác đ nh c u hình (hardware) c a máy Ph n l n ngư i dùng bình thư ng ít khi quan tâm đ n c u hình c a máy ngo i tr có nhu c u c th . Ngay c nh ng ai dùng Linux đã lâu và không c n ph i biên d ch l i nhân, cũng ít khi quan tâm đ n c u hình ph n c ng c a máy. Dù có bi t nhi u hay ít v c u hình ph n c ng c a máy mình dùng, b n v n ph i thu th p thông tin chính xác c a c u hình trư c khi b t tay vào vi c đi u ch nh c u hình cho vi c biên d ch nhân. Gi đ nh m i ch nh lý đã n đ nh và làm vi c t t đ p (do trình cài đ t t dò tìm (detect) trong khi cài Linux hay do b n ph i đi u ch nh l i), b n c n biên d ch l i nhân Linux và c n thâu th p thông tin v c u hình c a máy, hai l nh sau cung c p các chi ti t ph n c ng có trên máy: # /sbin/lspci L nh này li t kê tr n b các "card" đang tr c ti p làm vi c trên máy, phiên b n ph n c ng và ki u 4 c a chúng. # cat /proc/cpuinfo đ xem chi ti t b x lý trung tâm (CPU) c a máy là lo i gì. N u b n Linux mà b n dùng không có /proc filesystem thì b n có th dùng l nh dmesg đ thu th p thông tin v ph n c ng trên máy c a mình. Ngoài ra, l nh lsmod cũng ít nhi u giúp b n xác đ nh các modules đang đư c dùng trên máy và tên c a các modules này. Nh ng thông tin thâu th p đư c đây h t s c quan tr ng trong giai đo n đi u ch nh c u hình cho vi c biên d ch nhân. Nó giúp b n xác đ nh các ch n l a đúng cho c u hình máy, tránh đi nh ng tr ng i có th r t m t th i gian sau này. 6 Các bư c chu n b 6.1 T o m t đĩa m m kh i đ ng cho nhân đang dùng Đây là m t bư c c n thi t đ phòng s c gì đó khi n b n không th kh i đ ng vào h th ng Linux sau khi cài nhân m i. Trư ng h p này hi m khi x y ra trong quá trình biên d ch nhân và cài nhân m i n u b n th c hi n và đi u ch nh đúng. Nh ng s c v i trình kh i đ ng 5 ít th y x y ra vì trình kh i đ ng đã đư c thi t l p hoàn ch nh trư c khi c p nh t nhân. Ph n l n giai đo n đi u ch nh l i c u hình c a LILO ho c GRUB không chính xác t o tr ng i. V n đ này s đư c đ c p sau. Trư c m t chúng ta c n t o m t đĩa m m kh i đ ng. 4 model 5 bootloader, LILO ho c GRUB –9– Có r t nhi u cách đ t o m t đĩa m m kh i đ ng l y t nhân hi n đang ch y trên máy. Thay vì trình bày nhi u cách khác nhau cho vi c t o đĩa m m kh i đ ng, đây tôi ch đ c p đ n phương th c đơn gi n nh t. Cách d nh t có l là dùng mkbootdisk. Đây là m t công c đư c cài m c đ nh trên các b n RedHat và h u h t các b n phân ph i d a trên RedHat. N u công c này không hi n di n trên máy, b n có th t i mã ngu n v và biên d ch. Ch y l nh: # mkbootdisk --device /dev/fd0 ‘uname -r‘ trong đó ‘uname -r‘ là l nh đ l y phiên b n nhân hi n dùng trên máy. N u không mu n phiên b n này, b n có th gõ vào phiên b n nào đó theo ý (t t nhiên là phiên b n kernel này ph i hi n h u trên h th ng). /dev/fd0 là "device" ch cho đĩa m m th nh t trên máy (tương t như drive A: trên DOS). B n ph i ch n đúng "device" thì m i có d li u vi t vào đĩa m m mình mu n t o. Quy trình này ch m t kho ng vài phút. Sau khi t o đĩa m m kh i đ ng trên, b n nên dùng nó đ th kh i đ ng vào Linux trư c khi th c hi n các bư c k ti p. Nên nh ph i ch nh BIOS đ cho phép máy kh i đ ng t A: trang http://www.yolinux.com/TUTORIALS/LinuxTutorialRecoveryAndBootDisk.html có các hư ng d n t o đĩa c p c u r t hay. B n nên tham kh o thêm n u trên máy mình dùng không có s n công c mkbootdisk. 6.2 T i mã ngu n Mã ngu n c a nhân Linux (c phiên b n n đ nh l n đang phát tri n) có r t nhi u nơi trên Internet. Nên vào trang trung tâm c a nhân Linux http://www.kernel. org và tham kh o danh sách "mirrors" đ tìm nơi "g n" ch mình cư ng nh t đ t i v . Nơi "g n" không nh t thi t là "g n" theo phương di n đ a lý mà nên ch n "g n" nh t d a trên "ping time". Ch u khó l y vài đ a ch trên mirror và ping nh ng đ a ch này đ ch n l y nơi có ping time ng n nh t mà t i v . B ng cách s giúp b n đ m t th i gian và ti n cho v n đ chia x băng thông. Có nhi u cách t i mã ngu n. B n có th dùng trình duy t (browser) đ t i qua giao th c http ho c dùng m t trình ftp nào đó đ t i qua giao th c ftp. B n cũng có th dùng wget. Có l đây là cách ti n nh t và nhanh nh t n u bi t rõ đ a ch và đư ng d n đ n gói mình mu n t i. Ví d : $ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2 trong trư ng h p này, gói c th c n t i là linux-2.4.26.tar.bz2. Mã ngu n n đ nh c a Linux kernel đư c nén hai d ng khác nhau: d ng có đuôi là .gz (dùng GNUzip đ nén) và d ng có đuôi .bz2 (dùng bzip2 đ nén). Thông thư ng c hai ti n ích nén/x nén trên đ u có s n trong các b n Linux thông d ng. N u không có s n – 10 – trên máy thì tìm trong trong CD c a b n Linux (tham kh o thêm tài li u c a distribution mình dùng cho cách cài thêm ph n m m vào máy) ho c t i v t : http://www.gzip.org cho GNUzip • http://sources.redhat.com/bzip2/ cho bzip2 • 6.3 Ki m tra th c tính c a mã ngu n Đi u quan tr ng khi t i mã ngu n c a nhân, nên t i luôn ch ký GPG .sign cho phiên b n tương ng. M c đích là đ ki m tra th c tính c a mã ngu n đư c t i v . Khi mã ngu n c a nhân Linux đư c công b , chúng đư c d n l i thành m t gói (.tar) và sau đó đư c nén b ng GNUzip ho c bzip2, c hai lo i này sau khi đư c nén đ u đư c t o "ch ký" .sign. Ki m tra th c tính c a mã ngu n đư c t i v b ng phương pháp ki m tra "ch ký" c a t ng gói mã ngu n là m t thói quen c n thi t. Lý do: các mã ngu n m nói chung đư c công b và ph bi n r ng rãi, ai cũng có th ch nh s a (m t cách không chính th c và không đư c nhóm phát tri n chính th c cho phép) r i đưa lên m t máy ch nào đó trên Internet. Ngư i dùng t i v , biên d ch và cài trên máy mà không ki m tra th c tính c a chúng (và mã ngu n này có nh ng thay đ i m ám) thì h u qu khó mà lư ng. Quy trình ki m tra "ch ký" ch đơn gi n gói g n trong m t dòng l nh: $ 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ý" c a gói linux-2.4.26.tar.bz2 đư c t i v t server ch a mã ngu n nhân Linux linux-2.4.26.tar.bz2 là gói mã ngu n nhân Linux đư c nén b ng bzip2. Trư c khi có th ki m tra thành công b ng l nh trên, b n ph i có gpg đã cài trong máy, t i và nh p chìa khóa công c ng (public key) c a máy ch ch a mã ngu n nhân Linux mà b n t i v . Chi ti t hư ng d n cho quy trình này http://www.kernel.org/signature.html Quy trình t i mã ngu n nhân Linux và ki m tra th c tính c a mã ngu n này có th tóm t t b ng m t ví d như sau: Chuy n vào thư m c ch a mã ngu n c a máy /usr/src là nơi thông thư ng. Đ i v i phiên b n nhân 2.6.x, b n có th dùng thư m c khác tùy ý: $ cd /usr/src Dùng wget đ l y m t phiên b n mã ngu n t server v d ng .bz2 $ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2 dùng wget đ l y .sign c a phiên b n mã ngu n v a đư c t i v – 11 – $ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2.sign Dùng trình gpg v i tùy ch n –verify đ ki m th c tính c a mã ngu n v a t i v $ gpg --verify linux-2.6.10.tar.bz2.sign linux-2.6.10.tar.bz2 Ngoài phương pháp dùng ch ký cho v n đ ki m ch ng th c tính c a mã ngu n (không ch mã ngu n c a nhân Linux), b n cũng th y r t nhi u nơi trên Internet dùng "MD5sum" cho m c đích này (cho đ n nay, mã ngu n nhân Linux kernel dùng ch ký đ ki m ch ng, không dùng MD5sum). Quy trình ki m tra "MD5sum" ch đơn gi n là m t quy trình t o m t "MD5sum" t mã ngu n đư c t i v trên máy và so sánh k t qu "MD5sum" này v i h sơ "MD5sum" đư c t i v kèm v i mã ngu n. N u "MD5sum" b n t o ra trên máy c a mình v i cùng gói mã ngu n mà không trùng h p v i "MD5sum" nguyên thu t i v t server thì th c tính c a ph n mã ngu n này không đáng tin c y. Cách t t nh t là ch nên t i mã ngu n nh ng đ a ch ph bi n và đáng tin c y. C n th n hơn n a (really paranoid), thì so sánh MD5sum v i m t s máy ch ch a mã ngu n khác nhau. Ki m tra th c tính c a mã ngu n b ng MD5 checksum khá đơn gi n. Ti n ích md5sum có s n h n như trên m i b n phân ph i. L nh t o MD5 checksum đơn gi n là l nh: # md5sum s t o ra 1 chu i ch và s tương t như: 2fe2a5fabcc3a33722b4ffe05714bec3 *. N u chu i này trùng v i chu i đư c cung c p chính th c v i mã ngu n thì mã ngu n này có th c tính và đáng tin c y. 6.4 X nén mã ngu n Tùy vào gói mã ngu n đư c t i v thu c d ng nén .gz hay .bz2 mà dùng ti n ích thích h p đ x nén. Như đã tóm t t trong ph n 6.3 trên, gói mã ngu n đư c ch a trong /usr/src (wget đư c ch y sau khi cd vào /usr/src), cho nên b n ph i trong thư m c này trư c khi thao tác các bư c k ti p (không thì các bư c k ti p ph i thêm và đư ng d n đ n nơi ch a gói mã ngu n). Đ i v i phiên b n nhân 2.6.x, mã ngu n c a nhân Linux có th đư c x , ch a và biên d ch t b t c nơi đâu trên h th ng. Tuy nhiên, đ gi cho h th ng s ch và th ng nh t, b n nên gi mã ngu n /usr/src. N u gói mã ngu n có d ng .gz thì dùng: $ gunzip linux-2.x.xx.tar.gz x.xx là b t c phiên b n nào b n t i v . Sau đó th c hi n ti p: – 12 – $ tar xf linux-2.x.xx.tar L nh này dùng tùy ch n x đ x (extract) và f đ ch đ nh file nào c n đư c x , đây h sơ (file) c n đư c x là linux-2.x.xx.tar. Hai l nh trên cũng có th g p chung l i như sau: $ tar xfz linux-2.x.xx.tar.gz l nh này dùng thêm tùy ch n z đ ng m x nén .gz file "on-the-fly" trư c khi x gói tar. Ho c có th t o cùng k t qu b ng cách khác n a: $ gzip -dc linux-2.x.xx.tar.gz | tar xvf - c m l nh này dùng chương trình gzip đ x nén (tùy ch n -d) ra stdout (tùy ch n -c) và "tee" nó qua chương trình tar đ x gói tar ra "on-the-fly". C cách này và cách trên đ u ti n d ng cho nh ng ai eo h p dung lư ng trên đĩa. N u gói mã ngu n có d ng .bz2 thì dùng: $ bunzip2 linux-2.x.xx.tar.bz2 $ tar xf linux-2.x.xx.tar Hai l nh trên cũng có th g p chung l i như sau: $ tar xfj linux-2.x.xx.tar.bz2 l nh này dùng thêm tùy ch n j đ ng m x nén .bz2 file "on-the-fly" trư c khi x gói tar. Ho c có th t o cùng k t qu b ng cách khác n a: $ bzip2 -dc linux-2.x.xx.tar.bz2 | tar xvf - c m l nh này dùng chương trình bzip2 đ x nén (tùy ch n -d) ra stdout (tùy ch n -c) và "tee" nó qua chương trình tar đ x gói tar ra "on-the-fly". C cách này và cách trên đ u ti n d ng cho nh ng ai eo h p dung lư ng trên đĩa. C ba trư ng h p đ u cho k t qu là m t thư m c có tên là linux-2.x.xx bên trong thư m c /usr/src/. Trong ph n này, chúng ta ch đ c p đ n trư ng h p t i tr n b mã ngu n c a nhân Linux v đ biên d ch. Trư ng h p đã có mã ngu n cũ hơn c a nhân Linux trên máy và ch c n t i b n vá l i và "vá" thì có quy trình khác. V n đ này s đ c p sau. – 13 – 6.5 Dùng "config" nào thì thích h p? C u hình biên d ch nhân Linux đơn gi n là m t "text file" ch a các bi n v i giá tr Y (Yes), N (No) ho c M (Module). Các giá tr này đư c x d ng trong quá trình biên d ch; chúng dùng đ xác đ nh nh ng gì không đư c biên d ch, nh ng gì đư c biên d ch và n u đư c biên d ch thì s theo d ng nào. Tùy vào cách s p x p c a m i b n phân ph i Linux, c u hình biên d ch nhân Linux n m nhi u nơi khác nhau. H sơ c u hình theo m c đ nh c a "vanilla" kernel n m ./arch/i386/defconfig (n u dùng dòng ph n c ng IA32 nói chung), các h sơ c u hình khác cho nh ng dòng ph n c ng khác n m ./arch/$ARCH/defconfig; trong đó $ARCH là dòng ph n c ng c a máy. N u dùng c u hình m c đ nh, không ch nh s a thì nhân s đư c tái biên d ch tr n b theo giá tr m c đ nh và ch c h n, nhân này s không thích h p cho b n (ngay c n u nó đư c biên d ch thành công). Đi u này đi ngư c l i m c đích c n biên d ch l i nhân Linux ngay t đ u. B n có th dùng h sơ c u hình này đ kh i đ u và ch nh s a giá tr cho thích h p. Đây là m t bư c r t khó khăn cho nh ng ai chưa t ng đi qua giai đo n này và không có s n m t c u hình biên d ch nhân hoàn ch nh cho máy. C u hình cho nhân hi n h u trên máy cũng có th n m trong thư m c /boot d ng config-2.x.xx n u b n dùng nhân do RedHat (ho c d a trên RedHat) và m t s b n phân ph i khác cung c p. B n có th an toàn dùng c u hình này và ch nh s a, lo i b các chi ti t (driver module) không c n dùng. N u h th ng đã đư c biên d ch nhân trư c đây, b n có th tìm th y c u hình biên d ch nhân Linux có tên là .config, đư c lưu trong thư m c (nơi trư c đây mã ngu n c a nhân đư c x nén và biên d ch). 7 Ch nh c u hình biên d ch nhân Linux 7.1 Thành ph n c a c u hình biên d ch nhân Linux Thành ph n trong c u hình biên d ch nhân Linux cho phiên b n 2.4.x và 2.6.x có m t s đi m tương đ ng và d bi t. Tuy nhiên, quy trình ch n Y, N ho c M cho các modules v n như nhau. Bư c ch n l a và ch nh li u c u hình biên d ch nhân Linux là m t bư c m t nhi u th i gian nh t, nó cũng là m t bư c gây nhi u tr ng i nh t n u ch nh s a không h p lý ho c thi u sót. 7.1.1 Thành ph n c u hình biên d ch nhân Linux phiên b n 2.4.x 7.1.1.1 Code Maturity Level Options Ch n l a c a m c này cho phép dùng các modules/drivers còn tr ng thái "alpha" (th nghi m). N u h th ng làm vi c là m t máy production, c n tính n đ nh cao thì nên t t b ch n l a c a ph n này. Làm như th s t t b r t nhi u modules/drivers thu c d ng – 14 – "alpha" trong nh ng ph n bên dư i. N u mu n th dùng m t s modules/drivers d ng alpha thì nên cho phép ph n này (Y) và c n th n khi l a ch n các modules đư c biên d ch sau này. Vi c ch n l a các "alpha" drivers ch đ m c đ nh c a các nhân Linux trong nhi u b n phân ph i Linux là m t trong nh ng nguyên nhân chính t o nên tình tr ng b t n đ nh trên m t s h th ng Linux. N u ch n l a các driver này m t cách c n th n, cơ h i va ph i tình tr ng b t n đ nh s gi m thi u rõ r t. 7.1.1.2 Loadable Module Support Đây là ch c năng nòng c t c a nhân Linux (loadable module). Như đã đ c p ph n t ng quan (ph n 1), các module có th t i (loadable modules) là ti n d ng và linh đ ng, cho nên b n g n như s ch n Y trong trư ng h p này. Trong trư ng h p b n c n dùng module đư c vi t thêm bên ngoài nhân chính th c (3rd party modules), b n ph i ch n "enable set version information on all modules symbols" trong m c này. N u b n c n biên d ch tr n b các drivers th ng vào nhân và không dùng modules (vì lý do b o m t ch ng h n), b n có th ch n N đây. B n cũng ph i ch n "Y" cho tr n b các drivers trong c u hình biên d ch nhân đ thích h p v i ch n l a "N" cho ph n Loadable Module Support này. 7.1.1.3 Processor Type and Features Ph n này có l là ph n t i quan tr ng trong c u hình biên d ch nhân Linux. Đây là nơi đ ch n đúng CPU đang dùng trên máy. Ngoài ra còn r t nhi u ch n l a khác nhau cho v n đ n system scheduling, SMP (symetrical multi-processing) n u máy có nhi u CPU, h tr b nh l n,.... N u b n ch n CPU là i386 thì có l s không có s c vì i386 là architecture chung nh t (c Intel và AMD CPU đ u ch y v i ch n l a i386). Tuy nhiên, ch n l a này s không đ t hi u năng t i đa và thích h p cho t ng lo i CPU c th . Nên ch n đúng CPU đ b o đ m hi u năng c a máy và nh t là đ tránh trư ng h p không th kh i đ ng vào Linux sau khi cài nhân m i (vì lo i CPU ch nh đ nh cho nhân không đúng v i CPU có trên máy hay nói m t cách k thu t, instructions gi a nhân và máy không đ ng b ). 7.1.1.4 General Setup M c này cho phép ch n l a các ng d ng h tr cho nh ng thi t b (cards) trên máy như ISA, PCI, PCMCIA và các ch c năng thu c v v n đ qu n tr năng lư ng cao c p (Advanced Power Management). 7.1.1.5 Memory Technology Devices Ph n này cho phép l a ch n nh ng ng d ng thi t b liên quan đ n b nh . N u b n dùng các thi t b như máy nh s ho c các lo i compact flash thì b n nên ch nh lý ph n này cho thích h p. – 15 – 7.1.1.6 Block Devices Đây là m t ph n r t quan tr ng trong c u hình biên d ch nhân Linux. Nó bao g m các ch n l a cho nh ng thi t b thông thư ng và c n thi t như đĩa c ng, đĩa m m, băng lưu tr cũng như các thi t b đi u tác (controllers) cho các c ng song song 6 và RAID. H u như các ch n l a trong m c này đ u c n thi t; đ c bi t là ch c năng h tr initrd c n thi t đ t i s n các drivers c n thi t d ng module trong quá trình kh i đ ng máy. 7.1.1.7 Multi-Device support (RAID and LVM) Ph n này chuyên chú đ n các ch c năng c n thi t cho h th ng c p đ máy ch . Các ch n l a đây h tr nh ng thi t b như RAID và LVM. N u máy c a b n hi n đang dùng RAID và LVM thì không th b qua ph n này trong quá trình xác l p c u hình biên d ch nhân Linux. Ch n l a trong ph n này đòi h i ph i hi u rõ nhu c u dùng nh ng công ngh thu c d ng này trên máy. N u máy không dùng đ n nh ng công ngh này, b n có th an toàn t t b chúng (dùng N). Nên nh , n u t t b RAID trong ph n này thì ph i t t b ch n l a RAID trong ph n "block devices" trên đ tránh g p ph i l i biên d ch sau này. 7.1.1.8 ATA/IDE/MFM/RLL support Ph n này bao g m các ch n l a và h tr cho IDE và ATAPI dùng trên các thi t b tương thich v i PC 7 (và trên nhi u architecture khác hi n có trên th trư ng). H u h t các h th ng c n các ch c năng h tr trong ph n này. 7.1.1.9 Cryptography Support (CryptoAPI) Đây là m t ph n khá m i và lý thú trong mã ngu n c a nhân Linux 2.4.x (ch đư c gi i thi u và công b trong các phiên b n sau này c a 2.4.x). Ph n này có nh ng l a ch n thu c v v n đ "mã hoá" cho filesystem. B n có th biên d ch các ch n l a trong m c này và x d ng (ho c không) trên máy tùy ý. 7.1.1.10 Networking Options Đây là m t ph n r t quan tr ng trong c u hình biên d ch nhân Linux n u b n mu n máy c a mình k t n i v i m ng. Nó bao g m các ch n l a cho c hai chu n IPv4 và IPv6. Đây cũng là m t ph n h t s c ph c t p, cho nên, đ có th hi u rõ và ch n l a đúng cho hi u năng t i đa c a máy v m t networking, b n nên tham kh o các tài li u v m ng Linux, ít nh t là nên đ c các tài li u kèm theo trong mã ngu n nhân Linux /Documentation/networking/ (thư ng là /usr/src/linux-2.x.xx/Documentation/networking/). 6 parallel ports 7 pc-compatible – 16 – 7.1.1.11 SCSI Support Ph n ch n l a cho SCSI ít đư c nh ng ngư i dùng bình thư ng quan tâm đ n vì không m y ai dùng SCSI cho máy con. Tuy nhiên n u b n dùng SCSI card (ho c SCSI built-in trên bo m ch ch (motherboard)) ho c dùng CDR/W qua IDE nhưng ch y d ng mô ph ng SCSI thì ph i đi u ch nh các ch n l a trong m c này. Đi u quan tr ng c n nh , n u không dùng ti n d ng initrd, khi ch n l a SCSI cho m t filesystem ch y trên đĩa SCSI b n ph i biên d ch tr c ti p các tùy ch n cho SCSI vào nhân thay vì dùng dư i d ng module. N u không, nhân s treo trong giai đo n kh i đ ng vì module h tr SCSI chưa đư c t i lên trong giai đo n này. 7.1.1.12 Character Devices Trong m c này có khá nhi u l a ch n t p trung vào các thi t b như n i ti p 8 và song song 9, thi t b chu t 10, joysticks (đ chơi games). T t ho c m các l a ch n trong m c này thư ng ít t o nh hư ng nghiêm tr ng. 7.1.1.13 File Systems M c này ch a tr n b các ch n l a liên quan đ n h th ng file (file system) và các lo i file system đư c h tr trên Linux (bao g m FAT, FAT32, NTFS, ISO cho CD-ROM....). Các file system ph tr như NTFS, FAT... có th đư c biên d ch như m t module cho nhân. Không nên biên d ch các modules cho file system dùng đ "mount" trong giai đo n kh i đ ng như ext3, jbd mà nên biên d ch th ng vào nhân (Lý do tương t như đã đ c p trong ph n "SCSI Support" trên). Cách này s làm kích thư c nhân l n hơn nhưng s an toàn và đơn gi n hơn. Ch c năng h tr initrd có th dùng đ t i các modules c n thi t trong quá trình kh i đ ng nhân Linux nhưng ph i nh b t ch c năng này lên trong ph n thi t b d ng block 11. Đây là v n đ tùy ch n c a t ng cá nhân. 7.1.2 Thành ph n c u hình nhân Linux cho lo t nhân 2.6.x 7.1.2.1 Code Maturity Level Options Ph n này tương t như đã đ c p trên cho nhân 2.4.x. 7.1.2.2 General Setup Ph n này tương t như đã đ c p trên cho nhân 2.4.x. 8 serial 9 parellel 10 mouse 11 block devices – 17 – 7.1.2.3 Loadable Module Support Ph n này tương t như đã đ c p trên cho nhân 2.4.x. 7.1.2.4 Processor Type and Features Ph n này tương t như đã đ c p trên cho nhân 2.4.x. 7.1.2.5 Power Management Options Ph n này tương t như đã đ c p trên cho nhân 2.4.x. 7.1.2.6 Executable File Formats Đây là m t m c riêng bi t trong c u hình biên d ch nhân c a lo t nhân 2.6.x. N u b n quan tâm đ n "a.out", "elf" và "misc", nên nghiên c u k ph n này qua các tài li u kèm theo v i mã ngu n nhân, đ t bi t cho các ti n d ng c a "misc" ( /Documentation/mono. /Documentation/binfmt misc.txt, /Documentation/filesystem/proc.txt) 7.1.2.7 Device Drivers Đây là m t m c m i trong ph n c u hình biên d ch nhân c a lo t nhân 2.6.x. Th t ra device drivers n m r i rác kh p nơi trong c u hình biên d ch nhân c a lo t nhân 2.4.x. lo t nhân 2.6.x, m i v n đ liên quan đ n "device drivers" đư c gom l i trong cùng m t nhóm. Các ch n l a thu c v các thi t b như card đ h a 12, card âm thanh 13, USB, SCSI và v n đ hi u ch nh chúng đ u t p trung đây. 7.1.2.8 File Systems Ph n này tương t như đã đ c p trên cho nhân 2.4.x. 7.1.2.9 Security Options Ph n này dành riêng cho các v n đ v b o m t c a nhân. Cho đ n nay v n còn đang phát tri n, tuy nhiên, đây là ph n đ y h a h n cho m t nhân Linux mang tính b o m t cao. 7.2 Đi u ch nh c u hình biên d ch nhân Linux Sau đây là m t s phương pháp đ xác l p c u hình biên d ch nhân Linux. 12 graphic card 13 sound card – 18 – 7.2.1 Các công c đ xác l p c u hình Như đã đ c p ph n 6.5, m c đ nh c u hình biên d ch nhân n m ./arch/i386/defconfig. Khi kh i đ ng m t công c (config tool) nó s t đ ng đ c và dùng n i dung c a file c u hình m c đ nh này trư c khi b n ch nh s a. Đ ch nh c u hình biên d ch nhân Linux, chuy n vào thư m c ch a mã ngu n c a nhân (đã x nén): $ cd /usr/src/linux-2.4.26 ví d này dùng nhân có s hi u nhân 2.4.26 - xem l i ph n x nén ph n 6.4) và vi c đ u tiên r t nên làm đó là ch y l nh: $ make mrproper Không k b n dùng b n phân ph i Linux nào và phiên b n nhân Linux nào, b n nên ch y l nh này trư c khi th c hi n quy trình biên d ch l i nhân. Target "mrproper" dùng đ xoá h t t t c nh ng gì còn "v t vư ng" trong các thư m c ch a mã ngu n c a nhân Linux đ ch c ch n r ng mã ngu n trư c khi đư c biên d ch ph i tình tr ng "s ch s ". Có ba phương ti n "config" ph bi n có th dùng đ ch nh c u hình biên d ch nhân Linux. Sau khi chuy n vào thư m c /usr/src/linux-2.4.26, b n có th ch n m t trong ba cách sau: make config • make menuconfig • make xconfig • Trong đó: make config là phương ti n đơn gi n nh t và không đòi h i thêm b t c thư vi n nào • khác đ ch y công c này. make config s đưa ra m t lo t câu h i và sau khi nh n đư c câu tr l i c a b n (Y, N, M như đã nói trên sau khi b n nh n phím Enter, xác nh n câu tr l i c a mình), nó s hình thành m t c u hình biên d ch nhân Linux. Như c đi m c a phương ti n này là ch , n u b n l tr l i sai (ch n Y, N ho c M và gõ phím Enter), b n không th quay ngư c l i đ đi u ch nh mà ph i b t đ u l i t đ u. Phương ti n "make config" này ch ti n l i cho nh ng ai r t kinh nghi m và n m rõ mình c n gì trong c u hình biên d ch nhân. Nó cũng ti n l i cho quy trình ch nh c u hình biên d ch nhân t xa (qua giao di n dòng l nh (console) và không dùng đư c giao di n đ h a vì lý do gì đó). Sau khi hoàn t t các câu h i, công c này s lưu tr m t c u hình biên d ch nhân (đư c lưu d ng .config trong thư m c ch a mã ngu n c a nhân Linux) và s n sàng cho bư c t o các file ph thu c cho vi c – 19 –
DMCA.com Protection Status Copyright by webtailieu.net