intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Biên dịch nhân Linux - Tác giả: Hoàng Ngọc Diêu

Chia sẻ: Lý Minh Phương | Ngày: | Loại File: PDF | Số trang:42

143
lượt xem
42
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.6x 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ộ của nhân linux.

Chủ đề:
Lưu

Nội dung Text: Biên dịch nhân Linux - Tác giả: Hoàng Ngọc Diêu

  1. Biên d ch nhân Linux Tác gi : Hoàng Ng c Diêu
  2. 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–
  3. 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–
  4. 1 T ng quan v nhân Linux trên phương di n biên d ch l i 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–
  5. 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–
  6. 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–
  7. 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–
  8. 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–
  9. 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–
  10. 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–
  11. 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 –
  12. 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 –
  13. $ 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 –
  14. $ 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 –
  15. 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 –
  16. "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 –
  17. 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 –
  18. 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 –
  19. 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 –
  20. 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 –
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2