1. Trang chủ
  2. » Luận Văn - Báo Cáo

BIÊN DỊCH NHÂN LINUX

40 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 5,9 MB

Nội dung

BIÊN DỊCH NHÂN LINUX

B iê n d ị c h n h â n L in u x Tác giả : H oàng N gọ c D iêu M ụ c lụ c • 1.1 1.2 • T ổ n g q u a n v ề n h â n L in u x tr ê n p h n g d iệ n b iê n d ỉ c h lạ i N hân L inux việ c biên dị ch lạ i nhân Tóm tắ t bư c biên dị ch (dành cho nhữ ng thiế u kiên nhẫ n) 3 T i s a o c ầ n b iê n d ic h lạ i n h â n L in u x ? C ấ u tr ú c v q u y c s ố c ủ a n h â n L in u x 4.1 4.2 h iệ u p h iê n b ả n Đ ò i h ỏ i tố i t h iể u t r o n g v iệ c b iê n d ic h lạ i n h â n L in u x Đòi hỏ i cho nhân L inux 2.4.X Đòi hỏ i cho nhân L inux 2.6.X X c đ ị n h c ấ u h ìn h (h a r d w a r e ) c ủ a m y C ác bư c ch u ẩ n bị 6.1Tạ o m ộ t đĩ a m ề m khở i độ ng cho nhân 6.2 Tả i m ã nguồ n 6.3 K iể m tra thự c tính củ a m ã nguồ n 6.4 X ả nén m ã nguồ n 6.5 D ùng "config" thích hợ p? 7.1 7.1.1 7.1.2 7.2 7.2.1 7.2.2 8.1 8.2 8.3 8.3.1 dùng C h ỉ n h c ấ u h ìn h b iê n d ị c h n h â n L in u x T hành phầ n củ a cấ u hình biên dị ch nhân Linux Thành phầ n cấ u hình biên dị ch nhân L inux phiên bả n 2.4.X T h n h p h ầ n cấ u h ìn h n h ân L in u x c h o lo t n h â n 2.6.X Đ iề u nh cấ u hình biên dị ch nhân L inux C ác cơng cụ đế xác lậ p cấ u hình M ộ t số điế m cầ n ý giai đoạ n hình thành cấ u hình biên dị ch nhân C c b c b iê n d ị c h 10 11 12 14 14 14 14 17 18 19 20 22 Bư c tạ o dependency, dọ n dẹ p tạ o nhân Bư óc tạ o m odules cài m odules Tách ròi m ã nguồ n hồ sơ output loạ t nhân 2.6.X "m ake help", m ộ t tiệ n ích mói loạ t nhân 2.6.X - 1- 22 24 25 26 8.3.2 Tách ròi m ã nguồ n output files C ài đ ặ t nh ân 27 27 9.1 9.1.1 9.1.2 Cài đặ t vớ i "make install" Đ ố i vói GRUB Đ ố i vớ i LILO 28 28 9.2 9.2.1 9.2.2 9.2.3 C ác bư óc cài đặ t bằ ng tay Tạ o initrd Copy nhân System , map C hỉ nh cấ u hình củ a bootloader config 31 31 32 33 10 10.1 10.2 11 11.1 11.2 29 K h ỏ i đ ộ n g lạ i m y v c h ỉ n h lý n ế u g ậ p tr ụ c tr c Bị treo khở i độ ng vào linux Bị treo trình nhân đư ợ c load V v b iê n d ị c h n h â n 35 35 36 37 C ác điế m quan trọ ng trư c vá Tả i, xả vá - 37 38 - T ổ n g q u a n v ề n h â n L i n u x t r ê n p h n g d i ệ n b iê n d ị ch lạ i 1.1 N h â n L in u x v iệ c b iên d ị ch lạ i n h â n Nhàn L inux m ộ t "nhân hiệ n đạ i" có tính m odule rấ t cao Từ kernel phiên bả n 2.6.X trỏ đi, có rấ t nhiề u c mở rộ ng Vố i tinh thầ n "biên dị ch nhân", m ộ t yế u tố yế u quan trọ ng nhấ t cầ n ghi nhậ n tính phân (m odularity) củ a nhân Linux Đố i vói ngư ịi dùng bình thư òng, m odularity cho phép chọ n lự a cách b iên dị ch drivers củ a nhân theo ng m odules hay theo ng biên dị chtrự c tiế p vào nhân Thơng thư ịng, xác lậ p cấ u hình cho nhân có ba chọ n lự a: Y, M N Có nhữ ng "driver" không biên dị ch m ộ t m odule v ì phả i đư ợ c load and link trự c tiế p nhân khỏ i độ ng Cũ n g có nhữ ng "d river" cho phép chọ n m ộ t m odule đư ợ c tả i sau nhân đư ợ c khở i độ ng Đ iế m yế u cầ n nắ m bắ t giớ i hạ n chủ đề "Biên dị ch nhân Linux" hiể u rõ tạ i phả i chọ n M (cho m odule), Y (cho biên dị ch trự c tiế p) N (khơng dùng) drivers • B iên dị ch trự c tiế p vào kernel có n g h ĩ a "drivers" dù có đư ợ c dùng hay khơng vẫ n đư ợ c tả i lên nhân khở i độ ng tấ t nhiên chiế m m ộ t phầ n nhó Lợ i điế m củ a chọ n lự a m ộ t "drivers" đư ợ c biên dị ch vào n h ân th ì k h n g cò n ph ả i q u an ng i đ ế n tín h tru n g thự c c ủ a n h ân v 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 m odules không tin cậ y "bị " cài vào nhân lúc q trình hoạ t độ ng củ a máy Lợ i điế m kế tiế p củ a chọ n lự a tính hiệ u xuấ txuấ t (rấ t nhỏ ), cầ n driver có sẵ n không cầ n ứ ng tả i nữ a • Biên dị ch modules cho nhân có nghĩ a cầ n dùng "drivers" mớ i đư ợ c ứ ng tả i Lợ i điế m củ a chọ n lự a nổ i bậ t ỏ khía cạ nh xử dụ ng nhớ tài nguyên máy Vói lự a chọ n này, bạ n tạ o nên m ộ t nhân rấ t nhỏ dễ dàng di chuyể n cho nhiề u m ụ c đích khác Lợ i điể m kế tiế p khả biên dị ch lạ i m ộ t hoặ c m ộ t số modules (cầ n cậ p nhậ t chẳ ng hạ n) Tấ t nhiên đế thự c hiệ n chuyệ n phả i thoả mãn tấ t nhữ ng địi hỏ i tính phụ thuộ c cho hệ thố ng 1.2 Tóm tắ t bư c b iên dị ch (d n h ch o n h ữ n g th iế u k iên nhẫ n) Biên dị ch nhân Linux rấ t n giả n nế u hiế u rõ quy trình bư c thự c hiệ n Sau lệ nh cầ n thiế t, giả đị nh bạ n có trọ n cơng cụ cầ n th iế t đế biên dị ch: - - Chuyế n vào thư m ụ c / u s r / s r c , nơ i thơng thư ịng a m ã nguồ n đế biên dị ch nhân: $ cd /usr/src p h iê n b ả n k e rn e l c ầ n b iê n d ị c h , v í d ụ ỏ đ â y tả i m ã n g u n đ ợ c n é n ng bz2) $ wget http://www.kernel.org/pub/linux/kern >.tar.bz2 ( Xác thự c chữ ký thự c tính củ a m ã nguồ n: $ gpg verify .tar.bz2.sign .tar.bz2 X ả nén gói a m ã nguồ n: $ bzip2 -dc .tar.bz2 I tar xvf Nế u m uố n dùng giao diệ n đồ họ a đế điề u nh chọ n lự a cho cấ u hình nhân dùng lệ nh: $ make xconfig Tậ p họ p lệ nh dùng đế tạ o file phụ thuộ c file bao gồ m (include), tiế p theo dọ n dẹ p objects không cầ n th iế t biên dị ch nhân ng nén: $ make dep clean bzImage Biên dị ch m odules đư ợ c chọ n lự a bằ ng lệ nh: $ make modules C hchuyể n sang chế độ super user cho lệ nh tiế p theo: $ su C ài modules vào th m ụ c /lib /m o d u le s /< K E R N E R L _ S R C > vói quyề n c ủ a su p er user: # make modules_install Cài đ ặ t nhân file cầ n th iế t vào thư m ụ c / b o o t : # make install Bư c thứ 10 thay bằ ng m ộ t loạ t thao tác bằ ng tay (chi tiế t phầ n 9.2) nế u bả n phân p h ố i' Linux khơng có sẵ n m ộ t số cơng cụ thuộ c gói m k i n i t r d (chỉ có bả n RedHat bả n dự a RedHat) d is tr ib u tio n - - L u ý: đố i vố i lo t nhân 2.6.X, b n d ù n g bư óc Tuy nhiên bư óc "m ake d e p " k hông cầ n th iế t nữ a B ài viế t bao g m cho p h iên bả n 2.4.X 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 không ả nh hư ng đế n thành cơng củ a quy trình biên dị ch nhân T • i s a o c ầ n b i ê n d ị •c h l • i n h â n L i n u x ? Đố i vói ngư òi dùng quen vói nhữ ng hệ điề u hành "đóng" khái niệ m biên dị ch lạ i nhân mộ t khái niệ m hế t sứ c lạ lẫ m Điề u cũ n g dễ hiể u kernel củ a hệ điề u hành "đóng" hiể n nhiên "đóng" ngư ịi dùng bình thư ng khơng thể có hộ i tiế p cậ n vói mã nguồ n củ a nhân đế biên dị ch lạ i nhân nế u muố n Trong đó, mã nguồ n củ a nhân Linux hoàn toàn "mở " đ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 tạ i 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 không cầ n cầ n nế u cầ n :) C âu tr ả lịi dài: có vơ số lý khiế n cho ngư òi dùng cầ n phả i biên dị ch lạ i nhân Linux Sau 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 lỗ i thuộ c lõi củ a nhân phả i vá nguồ n củ a nhân biên dị ch lạ i đế sử a chữ a lỗ i đư ợ c công bố b biên dị ch lạ i nhân đế nâng cao hiệ u củ a nhân Theo mặ c đị nh, 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 đế đáp ứ ng rộ ng rãi cấ u hình phầ n ng (có thể hiệ n diệ n máy) Đây điể m lợ i tố ng quát lúc khở i điế m Tuy nhiên, sau cài thành công nắ m chắ c máy có nhữ ng thiế t bị (sound card, graphic card, network cards, SCSI card ) biế t rõ cầ n nhữ ng thành phầ n cho cấ u hình củ a máy khơng có lý phả i bao gồ m trọ n thứ không cầ n thiế t không dùng Đố i vói nhân 2.4.X, m ứ c độ nân g cao hiệ u 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 điề u nh "driver" cho nhân tạ o hiệ u xuấ t rõ rệ t, nhấ t việ c điề u chĩn h "thòi biể u" ( scheduling) củ a 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 gây "hiể u lầ m" cho nhân, tạ o trư ng hợ p máy có nhữ ng triệ u ng hoạ t độ ng thiế u ổ n đị nh hay gây lỗ i d biên dị ch lạ i nhân đế thử nghiệ m mộ t c hoặ c m ộ t module vừ a tạ o Trư ng hợ p không nhiề u trư òng hợ p ng cũ n g nằ m lý phổ biế n - - C ấ u trú c v q u y c số h iệ u p h iê n b ả n c ủ a n h â n L in u x Phiên bả n củ a nhân Linux có quy c rấ t n giả n dễ nhố v ấ n đề cầ n nắ m rõ trư c chọ n m ộ t phiên bẳ n củ a nhân Linux để vá biên dị ch Phiên bả n củ a nhân Linux bao gồ m ba nhóm số tách bở i dấ u chấ m Ví dụ : 2.4.26 Số thứ nhấ t: số hiệ u p hiên bả n Số thứ nhì: đị nh cho tình trạ ng phiên bả n Nế u số số chẵ n, đị nh cho phiên n ổ n đị nh (stable), dùng cho mơi tnífing production Neu số số lẻ , đị nh cho phiên bả n không ổ n đị nh, thư ng dùng mơi trư ng phát triể n (development) Các kernel thuộ c ng thư ng có nhiề u lỗ i không ổ n đị nh Nế u dùng phiên bả n đế tìm lỗ i thơng báo cho nhóm phát triể n nhân Linux đ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 đị 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ó nhiề u số hiệ u phát hành khác Đây quy c chung cho ng nhân Linux "vanilla" có nghĩa ứ ng dụ ng cho phiên bả n nhân từ h t t p : / / w w w k e r n e l o r g , phiên bả n nhân đư ợ c điề u 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 con2 cho phiên bả n nhân họ điề u nh Ví dụ RedH at có nhữ ng cậ p nhậ t phụ cho kernel : 2.4.20-8 chang hạ n Điề u cầ n nắ m 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 dùng phiên bả n thử nghiệ m củ a nhân Linux (số lẻ ) cho m trư ịng thử nghiệ m phát triể n Đ ò i h ỏ i tố i th iể u tr o n g v iệ c b iê n d ị c h lạ i n h â n L in u x • • • Trư óc bắ t tay vào việ c biên dị ch lạ i nhân Linux, điề u cầ n thiế t phả i có đủ chỗ a đĩa nhấ t phả i đủ chỗ a cho m ã nguồ n (trư c sau xả nén), chỗ a đế cài k ern el modules m ói sau biên dị ch Đòi hỏ i quan trọ ng khác phả i có mộ t cơng cụ cầ n thiế t 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 Phiên bả n cho công cụ vớ i mỗ i phiên bả n nhân khác Nên nhố , nhóm phát triể n nhân yêu cầ u bạ n phả i có phiên bả n củ a công cụ đế đả m bả o việ c biên dị ch nhân thành công ex tra-v ersio n d ev elo p m en t - - Đ ò i h ỏ i c h o n h â n L i n u x 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.1Ơ O fdformat — version m odutils 2.4.2 insmod -V e2fsprogs 1.19 tune2fs reiserfsprogs 3.x.0b reiserfsck 2>&1| grep reiserfsprogs pcm cia-cs 3.1.21 carđmgr -V ppp 2.4.0 pppd — version isdn4k-utils 3.1prel isdnctrl 2>&1| grep version Tham khả o thêm chi tiế t công cụ đị a đế tả i công cụ nhấ t phả i phiên bả n cung cấ p hoặ c mố i hơ n) hồ sơ t i o n / c h a n g e s củ a mã nguồ n nhân mà bạ n dự tính biên dị ch - - cho (ít D o c u m e n ta ­ Đ ò i h ỏ i c h o n h â n L i n u x 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 m odule-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 pcm cia-cs 3.1.21 cardmgr -V quota-tools 3.09 quota -V PPP 2.4.0 pppd — version isdn4k-utils 3.1prel 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ông cụ đị a đế tả i công cụ nhấ t phả i phiên bả n cung cấ p hoặ c mố i hơ n) hồ sơ t i o n / c h a n g e s củ a mã nguồ n nhân bạ n dự tính biên dị ch cho (ít D o c u m e n ta ­ Nế u phiên bả n củ a công cụ máy cũ hơ n p hiên bả n đư a 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 bạ n dùng Bạ n cũ n g chọ n cách tả i mã nguồ n củ a từ ng côn g cụ biên dị ch lạ i Cách mấ t thòi gian hơ n rấ t nhiề u thích hợ p cho nhữ ng quen thuộ c vói vấ n đề biên dị ch mã nguồ n Linux Lợ i điế m củ a cách bạ n tạ o cho m ình mộ t cơng cụ rấ t "sạ ch" biên dị ch theo ý, thích hợ p vói mơi tníịng củ a máy (và vừ a đủ ) Đố i vớ i phầ n ng IA 64, bạ n cầ n phiên bả n GCC cho 64bit, nên tham khả o chi tiế t h t t p : / / g c c g n u o r g / i n s t a l l / s p e c i f i c h t m l (nế u bạ n may m ắ n có mộ t IA 64 đế thử ) - - X c đ ị n h c ấ u h ìn h (h a r d w a r e ) c ủ a m y Phầ n lớ n ngư ịi dùng bình thư ịng quan tâm đế n cấ u hình củ a máy ngoạ i trừ có nhu cầ u cụ thể Ngay nhữ ng dùng Linux lâu không cầ n phả i biên dị ch lạ i nhân, cũ n g quan tâm đế n cấ u hình phầ n ng củ a máy Dù có biế t nhiề u hay cấ u hình phầ n ng củ a máy m ình dùng, bạ n vẫ n phả i thu thậ p thông tin xác củ a cấ u hình trư c bắ t tay vào việ c điề u nh cấ u hình cho việ c biên dị ch nhân Giả đị nh mọ i nh lý ổ n đị nh làm việ c tố t đẹ p (do trình cài đặ t tự dị tìm (detect) cài Linux hay bạ n phả i điề u nh lạ i), bạ n cầ n biên dị ch lạ i nhân Linux cầ n thâu thậ p thông tin cấ u hình củ a máy, hai lệ nh sau cung cấ p chi tiế t phầ n ng có máy: # /sbin/lspci Lệ nh liệ t kê trọ n "card" trự c tiế p làm việ c máy, phiên bả n phầ n ng kiể u4 củ a chúng # cat /proc/cpuinfo đế xem chi tiế t xử lý trung tâm (CPU) củ a máy loạ i Nế u bả n Linux mà bạ n dùng khơng có /proc filesystem bạ n dùng lệ nh dmesg đế thu thậ p thông tin phầ n ng máy củ a Ngồi ra, lệ nh lsmod cũ n g nhiề u giúp bạ n xác đị nh modules đư ợ c dùng máy tên củ a modules Nhữ ng thông tin thâu thậ p đư ợ c ỏ hế t sứ c quan trọ ng giai đoạ n điề u nh cấ u hình cho việ c biên dị ch nhân Nó giúp bạ n xác đị nh chọ n lự a cho cấ u hình máy, tránh nhữ ng trỏ ngạ i rấ t m ấ t thịi gian sau C ác bư c chuẩ n bị T o m ộ t đ ĩa m ề m k h i đ ộ n g c h o n h â n đ a n g d ù n g Đây m ộ t bư c cầ n thiế t đề phịng cố khiế n bạ n không khở i độ ng vào hệ thố ng Linux sau cài nhân mói Trư ng hợ p hiế m xả y trình biên dị ch nhân cài nhân mói nế u bạ n thự c hiệ n điề u nh Nhữ ng cố vói trình khỏ i độ ng5 thấ y xả y trình khở i độ ng đư ợ c thiế t lậ p hoàn nh trư c cậ p nhậ t nhân Phầ n lố n giai đoạ n điề u nh lạ i cấ u hình củ a LILO hoặ c GRUB khơng xác tạ o trở ngạ i, v ấ n đề đư ợ c đề cậ p sau Trư c m ắ t cầ n tạ o mộ t đĩa mề m khỏ i độ ng m odel b o o tlo ad er, L IL O h o ặ c G R U B - - # su [e n te r password] chuyế n sang chế độ "super user" make m o d u l e s _ i n s t a l l cài m odules vừ a biên dị ch xong Bư c "make m o d u l e s " bư c biên dị ch tạ o modules (mà bạ n chọ n ng M trình nh lý cấ u hình biên dị ch nhân) C ác m odules đư ợ c biên dị ch đư ợ c lư u trữ thư m ụ c thích ứ ng vói từ ng nhóm "drivers" m ã nguồ n (kernel source tree) G iai đoạ n giai đoạ n biên dị ch lâu nhấ t trọ n trình com piler thự c biên dị ch m ã nguồ n củ a kernel Trên m ộ t m áy chạ y A thlon T hunderbird 1.4Ghz, bư óc m ấ t chừ ng 25 phút Trong số lư ợ ng m odules cầ n biên dị ch chạ y m áy Pentium 233M M X m ấ t chừ ng giò đồ ng hồ Bư c "make m o d u l e s _ i n s t a l l " "cài" m odules vừ a đư ợ c biên dị ch vào thư m ụ c / l i b / m o d u l e s / < k e r n e l _ v e r s i o n > N ấ u liệ t kê thư m ụ c (ls), bạ n thấ y nhấ t mộ t thư m ụ c a m odules cho kernel chạ y m áy hoặ c nhiề u thư mụ c cho nhiề u phiên bả n kernel trư c (có từ quy trình cậ p nhậ t kernel bằ ng rpm hoặ c quy trình tuỳ theo bả n phân phố i, hoặ c từ quy trình biên dị ch kernel tư ng tự viế t này) Khi boot Linux bằ ng m ộ t phiên bả n kernel có máy, m odules thuộ c kernel (trong thư m ụ c thích ứ ng vói kernel version) đư ợ c ứ ng tả i Đố i vói loạ t nhân 2.4.X, bạ n tham khả o chi tiế t thông tin m odules, cách biên dị ch m odules tổ ng quát cách xử dụ ng m odules (thuộ c u ser space) hồ sơ / D o c u m e n t a t i o n / m o d u l e s t x t thuộ c mã nguồ n kernel bạ n dự đị nh biên dị ch Đố i vói loạ t nhân 2.6.X, bạ n tham khả o chi tiế t thông tin m odules, cách biên dị ch m odules tổ ng quát cách xử dụ ng m odules (thuộ c user space) ba hồ sơ /Docum entation/kbuild/m odules.txt, /D ocum entation/netw orking/net-m odules.txt /D ocum entation/sound/oss/R E A D M E m odules thuộ c m ã nguồ n kernel bạ n dự đị nh biên dị ch R iêng vói loạ t nhân 2.6.X, bư c "m ake m odules" thự c hiệ n từ "m ake all" bư c "make m odulesũ n stall" thự c hiệ n riêng (ở chế độ super user) đế cài m odules đư ợ c biên dị ch 8.3 Tách rờ i mã nguồ n hồ sơ output loạ t nhân 2.6.X Nế u bạ n dùng loạ t nhân 2.4.X khơng cầ n tham khả o thông tin củ a m ụ c Nhữ ng thông tin m ụ c chi' giố i thiệ u thêm m ộ t số tiệ n ích hữ u dụ ng cho quy trình chuẩ n bị biên dị ch nhân 2.6.X - 25 - 8.3.1 "make help", mộ t tiệ n ích mớ i loạ t nhân 2.6.X N goài nhữ ng điế m khác biệ t make target đư ợ c đề cậ p ỏ phầ n 8.1 8.2, loạ t nhân 2.6.X, bạ n xử dụ ng m ộ t tiệ n ích hay m kernel 2.4.X khơng có phầ n "help" trư ố c "make" m ã nguồ n củ a nhân Linux Tấ t nhiên bạ n phả i chạ y lệ nh sau vào thư m ụ c a m ã nguồ n nhân Linux: $ cd /usr/src/linux-2.6.6 dùng kernel 2.6.6 trư òng hợ p $ make h e l p cho thông tin trợ giúp sau: bash-2.05b$ make help Cleaning targets: clean - remove most generated files but keep the config rcrproper - remove all generated files + config + various backup files Configuration targets: oldconfig - Update current config utilising a line-oriented program menuconfig xconfig gconfig defconfig - Update current config utilising a menu based program Update current config utilising a QT based front-end Update current config utilising a GTK based front-end New config with default answer to all options S»1 1m n H n o n f i g — N ^ w n o n f i g s^lpr.ting mnrinl^A whf^n p o s s i b l e 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 -•nodules_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 cscope - Generate tags file for editors - 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 (Ì386): * bzlmage- 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/fdO fdimage - Create a boot floppy image - 26 - make v=011 [targets] => quiet build (default)/ => verbose build make 0=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$ T hông tin cho thấ y "M akefile" củ a loạ t nhân (target) biên dị ch chạ y m ake help Vói thơng tin này, bạ theo ý m uố n m không phả i kiế m tra "M akefile" 2.4.X "m ake h e l p " loạ t nhân 2.6.X loạ m ake targets loạ t nhân 2.6.x) Đ iể m đặ t biệ t cầ n quan 2.6.X bao gồ m m ụ c tiêu n chọ n target make vớ i loạ t nhân 2.4.X (loạ t nhân t nhân 2.4.X khơng có nhiề u tâm ba chọ n lự a cuố i thông tin "make h e l p " cung cấ p: make v=011 [targets] => quiet build (default), => verbose build make 0=dir [targets] Locate all output files in "dir", including config make C=1 [targets] Check all c source with checker tool M ộ t nhữ ng chọ n lự a quan trọ ng cho phép bạ n lư u trữ trọ n hồ sơ output trình biên dị ch vào m ộ t thư m ụ c riêng biệ t thay a chung vói m ã nguồ n củ a kernel 8.3.2 Tách rờ i mã nguồ n output files Loạ t nhân 2.6.X cho phép bạ n tách ròi m ã nguồ n củ a kernel hồ sơ output đư ợ c tạ o trình com pile, hồ sơ ẩ n21 config, depend bư óc đề cậ p phầ n ? ? cũ n g đư ợ c lư u trữ thư mụ c bạ n m uố n dùng cho output files Vố i phư ng tiệ n này, m ã nguồ n hồ sơ output không xen kẽ chung Đ iể m quan trọ ng cầ n nhó dùng chọ n lự a phả i dùng cho bư c "make" khác suố t q trình biên dị ch V í dụ , bạ n khở i đầ u bằ ng: # make = / p a t h / t o / o u t p u t x c o n f i g bư c kế tiế p là: # make = / p a t h / t o / o u t p u t a l l # m a k e o —/ p a t h / t o / o u t p u t m o d u l e s _ i n s t a l l target "all" bao gồ m "dep, clean, bzlm age, m odules" C hạ y lệ nh bằ ng super u ser đế cài m odules củ a kernel Cài đậ t nhân Phầ n giói thiệ u hai cách cài nhân vừ a biên dị ch nh đị nh boot loader 21 hidden - 27 - 9.1 C i đ ă t v ổ i "m a k e i n s t a l l ” ngư i dùng đế n c "make i n s t a l l " m ộ t số bả n phân phố i tiệ n ích cầ n thiế t đế thự c hiệ n trọ n vẹ n bư c "m ake i n s t a l l " tiệ n lợ i an toàn hơ n cài bằ ng tay thao tác bư óc cầ n thiế t đế thiế t lậ p nhân m ố i hệ thố ng C ác bư óc bao gồ m quy trình lư u trữ nhân cũ (trong thư m ụ c / b o o t ) , copy nhân mói, copy S y s t e m map mói, điề u nh boot loader configuration ( l i l o c o n f hoặ c g r u b c o n f ) cậ p nhậ t boot loader Bư c "m ake i n s t a l l " dự a hồ sơ M a k e f i l e i n s t a l l , s h , mộ t shell script thuộ c thư mụ c / a r c h / $ A R C H / b o o t Shell script i n s t a l l s h "gọ i" mộ t số shell script khác / s b i n / i n s t a l l k e r n e l / s b i n / n e w - k e r n e l - p k g , ngồi shell scripts cịn dự a vào m ộ t binary có tên " g ru b b y " đế tạ o thông tin g r u b c o n f nế u bạ n dùng GRUB C ác shell scripts ' i n s t a l l k e r n e l " " n e w - k e r n e l - ì n s t a l l " thuộ c gói m k i n i t r d củ a R edH at, bả n phân phố i khác có nhữ ng ứ ng dụ ng tư ng tự Nế u bả n phân phố i bạ n dùng khơng có gói tư ng tự , bạ n phả i cài kernel bằ ng tay (phầ n 9.2) hoặ c tạ o script tư ng tự đế thự c hiệ n bư óc Trong khuôn khổ giớ i hạ n củ a viế t, không sâu vào vấ n đề tạ o script tiệ n ích Đ ế cài nhân L inux m ói, bạ n n giả n chạ y lệ nh m ake i n s t a l l chế độ super user từ thư m ụ c a m ã nguồ n củ a nhân L inux kernel Sau hồn tấ t bư óc "make i n s t a l l " bạ n nên kiể m tra lạ i cấ u hình củ a trình khở i đ ộ n g 22 máy chạ y lệ nh tư ng ứ ng (nế u cầ n) đế nh đị nh trình khở i độ ng cho xác 9.1.1 Đố i vổ i GRUB V í dụ bạ n có hai phiên bả n nhân máy 2.4.20 (phiên bả n chạ y) 2.4.26 (phiên bả n vừ a đư ợ c biên dị ch) Sau chạ y "make i n s t a l l " , g r u b c o n f có nộ i dung sau: d e f a u l t —1 tim eout=20 s p la s h im a g e = ( h d O ,0 ) / b o o t / g r u b / s p l a s h xpm.gz t i t l e Linux (2 ) r o o t ( h d O , 0) k e rn e l /b o o t/v m lin u z -2 26 ro ro o t= /d e v /h d a l i n i t r d = / b o o t / i n i t r d - im g title Linux (2 4.20) r o o t ( h d O , 0) k e r n e l / b o o t / v m l i n u z - 20 r o r o o t = / d e v / h d a l i n i t r d = / b o o t / i n i t r d - im g 22 boot loader - 28 - • Chi tiế t cầ n ý biế n d e f a u l t Trong v í dụ trên, bạ n có hai nhân cấ u hình GRUB cho phiên bả n 2.4.26 2.4.20 N ế u bạ n m uố n khỏ i độ ng nhân 2.4.26 theo m ặ c đị nh giá trị củ a d e f a u l t phả i (grub đế m thứ tự nhân từ 0) Khi chạ y "m ake i n s t a l l " , tiệ n ích củ a " i n s t a l l " tự độ ng đư a vào chi tiế t thuộ c kernel mố i vào cấ u hình GRUB Tuy nhiên, giá trị default vẫ n giữ giá trị đị nh cho nhân hiệ n hoạ t độ ng máy B n cầ n chĩ n h giá trị đế buộ c trình khở i độ ng tả i lên phiên bả n nhân mói M ộ t chi tiế t h ế t sứ c quan trọ ng bạ n cầ n ý giá trị r o o t (h d x , Y ) N eu GRUB đư ợ c cài lúc cài đặ t hệ thố ng từ CD hoạ t độ ng hồn nh, bạ n khơng nên thay đổ i giá trị G iá trị cầ n thay đổ i nế u bạ n thêm đĩ a ng thay đổ i phân v ù n g 23 máy • sau nh đị nh lư u trữ g r u b c o n f thích hợ p, bạ n cầ n khở i độ ng lạ i máy Nế u bạ n dùng GRUB làm trình khỏ i độ ng cơng tác biên dị ch lạ i nhân Linux hồn thành • giả i pháp phịng bị : trư ịng hợ p khơng boot vào nhân mớ i rấ t n giả n nế u dùng GRUB làm trình khỏ i độ ng B n cầ n thêm m ộ t dòng f a l l b a c k vào cấ u hình g r u b c o n f đủ Tùy chọ n cho GRUB biế t nế u dùng " d e f a u l t = " đ ể khở i độ ng nhân mớ i nhấ t (2.4.26 ví dụ này) ng khơng thành cơng v ì lý thử khở i độ ng lạ i vớ i nhân cũ hơ n (2.4.20) X em thêm phầ n 10 nế u không khỏ i độ ng đư ợ c vào Linux trình khỏ i độ ng bị hỏ ng 9.1.2 Đố i vớ i LILO V í dụ bạ n có hai phiên bả n nhân máy 2.4.20 (phiên bả n chạ y) 2.4.26 (phiên bả n vừ a đư ợ c biên dị ch), sau chạ y "make i n s t a l l " , l i l o c o n f có nộ i dung sau: prompt tim eout=50 de f a u l t = l i n u x boot= /dev/hda m ap= /boot/m ap in sta ll= /b o o t/b o o t.b m e ssa g e = /b o o t/m essage in a g e = /b o o t/v m lin u z - 4.20 i n i t r d = / b o o t / i n i t r d - img root= /dev/hdal la b e l= lin u x - 4.20 read-only 0-2 partitions - 29 - inage=/boot/vmlinuz initrd=/boot/initrd-2.4.26.img root=/dev/hdal label=linux read -o n ly • chi tiế t cầ n ý biế n d e f a u l t Trong ví dụ trên, bạ n có hai nhân cấ u hình LILO cho phiên bả n 2.4.26 2.4.20 Nế u bạ n m uố n khở i độ ng nhân 2.4.26 giá trị củ a d e f a u l t phả i giá trị l a b e l (nhãn) thuộ c nhân bạ n muố n dùng Trong trư ịng hợ p này, nhãn (label) có giá trị l i n u x đị nh cho nhân 2.4.26 Khi chạ y "make i n s t a l l " , tiệ n ích củ a " i n s t a l l " đư a vào chi tiế t củ a nhân mớ i vào cấ u hình LILO Ỏ v m lin u z liên kế t biể u tư ợ ng24 củ a hồ sơ 25 v m l in u z - Bạ n nên kiể m ứ a lạ i giá trị d e f a u l t đế bả o đả m trình khỏ i độ ng tả i nhân vừ a biên dị ch khở i độ ng • sau nh đị nh lư u trữ l i l o c o n f theo ý muố n, bạ n phả i chạ y lệ nh: # /sbin/lilo ý trư òng hợ p hệ thố ng báo lỗ i bư c cài lilo làm trình khở i độ ng Nế u có, điề u nh cho xác thự c hiệ n lạ i lệ nh Vớ i ví dụ trên, bạ n thấ y hiế n thị kế t sau: Added linux* Added linux-2.4.20 Nhân kèm vói dấ u hoa thị (*) nhân đư ợ c khỏ i độ ng theo mặ c đị nh • vói LILO, giả i pháp n giả n nhấ t đề phịng trư ịng hợ p khơng khở i độ ng vào nhân mói mang tính tạ m thòi Trư c khở i độ ng lạ i máy dùng lệ nh sau: # /sb in /lilo -R l i n u x rồ i chạ y # reboot • Nên nhó lệ nh đư ợ c đư a m ộ t ví dụ cho nhân 2.4.20 2.4.26 vói cấ u hình khỏ i độ ng Bạ n phả i điề u nh phiên bả n nhân m bạ n biên dị ch • Lệ nh thứ nhấ t cho LILO biế t lầ n kế tiế p máy khỏ i độ ng lạ i thử dùng nhân 2.4.26 Nế u khơng thành cơng không lấ y nhân 2.4.26 làm nhân mặ c đị nh lầ n boot kế 24 sym bolic link 25 file - 30 - tiế p dùng nhân 2.4.20 (nhân chắ c chắ n phả i làm việ c đư ợ c dùng đế biên dị ch nhân 2.4.26) • Lệ nh thứ nhì n giả n lệ nh cho máy khở i độ ng lạ i • Nế u dùng lệ nh " / s b i n / l i l o -R l i n u x - x x x x x " khở i độ ng vào nhân mớ i thành cơng bạ n cầ n đị nh cho nhân x.xx.xx làm nhân m ặ c đị nh rồ i mố i chạ y " / s b i n / l i l o - v " nói ỏ (trong phầ n biế n " d e f a u l t " củ a l i l o c o n f ) 9.2 Các bư c cài đặ t bằ ng tay Các bư c cài đặ t "bằ ng tay" tư ng tự bư óc "make i n s t a l l " ng đư ợ c thao tác "bằ ng tay" Thậ t quy trình rấ t n giả n, điề u bạ n cầ n lư u ý phả i thự c hiệ n xác đế tránh nhữ ng trỏ ngạ i bư c giai đoạ n khở i độ ng vào nhân mói 9.2.1 Tạ o initrd Trư ng hợ p bạ n biên dị ch drivers quan trọ ng ng modules có liên hệ đế n quy trình khở i độ ng củ a Linux (như SCSI driver, RAID driver, loạ i filesystem mà root filesystem dùng ext3, jbd ) chắ c chắ n bạ n phả i cầ n đế n i n i t r d 26 M ụ c đích củ a i n i t r d tả i sẵ n driver cầ n thiế t cho nhân trình khỏ i độ ng Nế u không muố n dùng i n i t r d , bạ n phả i biên dị ch driver trự c tiế p vào nhân27 Nên ý m ộ t số bả n phân phố i Linux không dùng i n i t r d Họ khuyế n khích biên dị ch driver liên hệ đế n quy trình khở i độ ng trự c tiế p vào nhân M uố n tham khả o thêm chi tiế t RAM disk cho trư òng hợ p này, xem cK ER N EL SRC>/Docum entation/ram disk.txt Quy trình tạ o i n i t r d rấ t n giả n, cầ n chạ y lệ nh: # /sb in /m k in itrd / b o o t / i n i t r d - < K E R N E L _ V E R S I O N > i m g đó: • T h a m số thứ nhấ t / b o o t / i n i t r d - < K E R N E L _ V E R S I O N > i m g đị nh cho hồ sơ thư m ụ c a hồ sơ i n i t r d Thông thư ng i n i t r d củ a nhân đư ợ c a thư m ụ c / b o o t vớ i thông tin hồ sơ khác cầ n thiế t cho quy trình khỏ i độ ng • T h a m số thứ nhì nhân bạ n m u ố n tạ o i n i t r d cho Tấ t nhiên thư m ụ c a modules cho p hiên bả n nhân phả i có / l i b / m o d u l e s / , nế u không bạ n đư ợ c system báo có lỗ i 26 INITial R am D isk 27 hay gọ i static com pile -31 - Tùy thuộ c vào bả n phân phố i, m k i n i t r d địi hỏ i thêm thơng số cụ để đư òng dẫ n đế n nhân Nế u gặ p trở ngạ i bư c tạ o m k i n i t r d bạ n nên tham khả o tài liệ u cụ thể cho bả n phân phố i m ình dùng hoặ c tố i thiể u xem man m k i n i t r d tài liệ u /Docum entation/initrd.txt để xem thêm thông tin cầ n thiế t M ộ t điể m đáng ý từ loạ t nhân 2.5.X28 trở đi, i n i t r a m f s đư ợ c phát triể n vói mụ c đích hỗ trợ đế n chỗ thay i n i t r d Ư u điể m nổ i bậ t củ a i n i t r a m f s a lư u trữ ng cpio "newc" hoặ c "crc" (đư ợ c nén hoặ c không đư ợ c nén), i n i t r a m f s cho đế n chư a phổ biế n ứ ng dụ ng rộ ng rãi bả n phân phố i Linux Tuy nhiên, hư óng phát triể n ứ ng dụ ng i n i t r a m f s đầ v a hẹ n 9.2.2 Copy nhân System.map Sau hoàn thành bư óc "make m o d u l e s _ i n s t a l l " (phầ n 8.3), lúc bạ n có trọ n phậ n cầ n thiế t cho nhân mớ i bao gồ m kernel im age modules thuộ c nhân • copy b z l m a g e từ < K E R N E L _ S R C > / a r c h / i / b o o t / đế n thư m ụ c / b o o t , ví dụ : # cp / u s r / s r c / l i n u x - /a r c h /i /b o o t / b z I m a g e /boot/bzIm age- 2.4.26 • Trình cài đặ t củ a RedHat mộ t số bả n phân phố i khác bao gồ m bư c co p y b z Im a g e thành v m lin u z , bạ n thự c hiệ n (hay không tùy ý, bư c tư ng tự bư c ỏ trên) sau: # cp / u s r / s r c / l i n u x - / a r c h /i /b o o t / b z I m a g e 2.4.26 • kế tiế p xoá liên kế t29 cũ (nế u có) củ a v m lin u z # rm - f • thư mụ c / b o o t : /b oot/vm linuz sau tạ o liên kế t mói cho v m lin u z - thành: # In - s • /b o o t/v m lin u z- /b o o t/v m lin u z - 4.26 /b oot/vm linuz Tấ t nhiên bạ n phả i điề u chĩ n h lạ i boot loader để thích ứ ng vớ i cách gọ i "b zlm a g e " hoặ c " v m lin u z " cho giá trị image (trong lilo.conf) hoặ c giá trị kernel (trong grub.conf) Cách dùng cách gọ i b z Im a g e v m lin u z tạ o nhiề u bố i rố i cho ngư òi dùng Linux tiế p cậ n quy trình biên dị ch nhân M ộ t số bả n phân phố i Linux dùng b z Im a g e , mộ t số khác lạ i dùng v m lin u z Dù nữ a, cũ n g 28 developm ent kernel 29 sym bolic link - 32 - cách dùng cách gọ i; bạ n nên dùng theo cách bả n phân phố i Linux có máy • phầ n cịn lạ i bư óc copy hồ sơ S y s te m map: # c p / u s r / s r c / l i n u x - / S y s t e m m a p - 26 / b o o t / S y s t e m m a p 2.4.26 • kế tiế p xoá liên kế t cũ củ a S y s te m map thư m ụ c / b o o t : # rm - f • / b o o t / S y s t e m map sau đó, tạ o liên kế t mớ i cho S y stem m ap : # In - s / b o o t / S y s t e m m a p - 26 / b o o t / S y s t e m m a p 9.2.3 Chỉ nh cấ u hình củ a bootloader config 9.2.3.1 Nế u dùng GRUB Ví dụ bạ n có hai phiên bả n nhân máy 2.4.20 (phiên bả n chạ y) 2.4.26 (phiên bả n vừ a đư ợ c biên dị ch) g r u b c o n f có nộ i dung sau: d efault= t i m e o u t =20 splashim age= (hdO ,0 ) /b o o t/g ru b /s p la s h x p m g z t i t l e Linux ( 2.4.20) r o o t ( h d O , 0) k e r n e l / b o o t / v m l i n u z - 20 r o r o o t = / d e v / h d a l i n i t r d = / b o o t / i n i t r d - img Chĩn h thành: d efault= tim eout=20 s p l a s h i m a g e = ( h d O , ) / b o o t / g r b / s p l a s h xp m gz title Linux root (2.4.26) (hd0,0) kernel /b oot/vm linuz ro ro o t= /d ev /h d a l i n i t r d = / b o o t / i n i t r d - img title Linux root (2.4.20) (hd0,0) - 33 - k e r n e l / b o o t / v m l i n u z - 20 r o r o o t = / d e v / h d a l i n i t r d = / b o o t / i n i t r d - img Sau lư u trữ cấ u hình củ a / e t c / g r u b c o n f ỏ ( / e t c / g r u b c o n f liên k ế t30 đế n / b o o t / g r u b / m e n u s t ) khở i độ ng lạ i máy để bắ t đầ u dùng nhân vừ a đư ợ c biên dị ch Nế u bạ n dùng GRUB cơng tác biên dị ch lạ i nhân Linux hoàn thành Nên lư u ý ví dụ này, tơi dùng v m l i n u z thay dùng b z l m a g e , bạ n nên chọ n lự a theo ý điề u nh cho phù hợ p g r u b c o n f Đố i vớ i giả i pháp đề phịng trư ịng hợ p khơng dùng GRUB đế khở i độ ng vào nhân mớ i, xem chi tiế t phầ n 9.1.1 ọ 2.3.2 Nế u dùng LILO Ví dụ bạ n có hai phiên bả n nhân máy 2.4.20 (phiên bả n chạ y) 2.4.26 (phiên bả n vừ a đư ợ c biên dị ch) lilo.conf tư ng tự sau: prompt tim eout=50 defau lt= lin u x boot= /dev/hda m ap=/boot/m ap in stall= /b o o t/b o o t.b m essag e= /b o o t/m essage inage= /boot/vm linuz i n i t r d = / b o o t / i n i t r d - img ro o t= /d ev /h d al label= linux read-only Chỉ nh / e t c / l i l o c o n f đế cài nhân mói (2.4.26 cho ví dụ đây), bạ n có / e t c / l i l o c o n f sau: prompt tim eout= 50 defau lt= lin u x boot= /đev/hda m ap=/boot/m ap in stall= /b o o t/b o o t.b m essag e= /b o o t/m essage on sym bolic link - 34 - inage=/boot/vmlinuz-2.4.20 initrd=/boot/initrd-2.4.20.img root=/dev/hdal label=linux-2.4.20 read-only inage=/boot/vmlinuz initrd=/boot/initrd-2.4.26.img root=/dev/hdal label=linux read-on 1y Sau lư u trữ (save) cấ u hình củ a / 'e t c / l i l o c o n f trên, chạ y lệ nh: # /sbin/lilo đế đăng ký nhân mói cho LILO Đố i vói giả i pháp đề phịng trư ịng hợ p khơng dùng LILO đế khở i độ ng vào nhân mói, xem chi tiế t phầ n 9.1.2 10 Khỏ i độ ng lạ i máy nh lý nế u gậ p trụ c trậ c Tói đây, bạ n cầ n khở i độ ng lạ i máy vói nhân mói Nế u khơng có trở ngạ i, máy khở i độ ng vào Linux bình thư ịng Bạ n kiể m lạ i xem nhân m ình chạ y có phiên bả n vừ a đư ợ c biên dị ch hay không bằ ng cách chạ y: $ uname -r hoặ c, $ cat /proc/version Nế u kế t báo phiên bả n nhân cũ có nghĩ a trìn h khở i độ ng (LILO hoặ c GRUB) không khỏ i độ ng nhân vừ a đư ợ c biên dị ch B n nên kiế m tra lạ i file cấ u hình ( l i l o c o n f hoặ c g r u b c o n f ) cho theo chi tiế t dã nêu 10.1 BỊ treo khỏ i độ ng vào linux Trở ngạ i giai đoạ n khỏ i độ ng vào L inux thông thư ng cấ u hình trình khỏ i độ ng khơng trình khỏ i độ ng đư ợ c cài lên không phân vùng khở i độ ng31 hoặ c -31 boot partition - 35 - M BR bị hỏ ng (hiế m thấ y trình biên dị ch lạ i cài nhân m ói nế u thự c hiệ n quy cách) Trong trư òng hợ p này, bạ n phả i: • dùng đế n đĩ a m ề m "cấ p u" đư ợ c tạ o phầ n ? ? đế khở i độ ng vào Linux • Đ ế n giai đoạ n bạ n hẳ n phả i biế t vị trí củ a phân vùng g ố c32 (/) đĩ a ng đế kế t nố i phân vùng33 củ a đĩ a ng: # mount /dev/hdXy /mount/point/somewhere X ví trí đĩ a ng máy, y vị trí phân vùng gố c đĩ a ng • đổ i root ( c h r o o t ) trở thành phân vùng gố c củ a đĩ a ng: # chroot /mount/point/somewhere / m o u n t / p o i n t / s o m e w h e r e nơ i đĩ a ng củ a bạ n đư ợ c kế t n ố i34 • kiể m tra lạ i cấ u hình củ a trình khở i độ ng cài đặ t lạ i cho máy (xem phầ n 9.1.1 hoặ c 9.1.2 tùy theo trình khở i độ ng bạ n dùng GRUB hay LELO) Đ iể m cầ n ý cho GRUB bạ n phả i chạ y lệ nh: # /sbin/grub-install /dev/hdx / d e v / h d x tên thiế t bị đĩ a a M B R cho hệ thố ng (thư ng đĩ a đầ u tiên m áy35) Lệ nh thiế t lậ p lạ i bả n ghi khở i độ ng36 loạ i bỏ trư ng hợ p M B R bị hỏ ng Tư ng tự cho LILO, bạ n phả i chạ y lệ nh: # /sbin/lilo 10.2 BỊ treo trình nhân đư ợ c load Nế u bạ n vư óng vào trỏ ngạ i giai đoạ n nhân đư drivers tố i cầ n thiế t đế mount filesystems máy bị phân vùng gố c57 (/) a nhân Đ ể kế t nố i phân đư ợ c biên dị ch i n i t r d phả i tả i module lên Tư hợ p dùng filesystem khác cũ n g thiế u module X) /i/i •• root partition m ount partition m ount 33 Prim ary M aster 36 boot record •,7 root partition m ount root partition - 36 - ợ c tả i lên thơng thư ịng thiế u G iă sử bạ n dùng ext3 cho vùng gố c38 này, modul ext3 phả i ng tự ứ ng dụ ng cho trư òng Trong trư òng hợ p này, bạ n cầ n ghi phầ n lỗ i đư ợ c báo khở i độ ng vào nhân mói đế xác đị nh lỗ i thuộ c phầ n củ a cấ u hình biên dị ch nhân Linux từ điề u nh lạ i biên dị ch lạ i cho thích ứ ng Nói m ộ t cách tổ ng quát, bạ n phả i: • khở i độ ng lạ i máy vào phiên bả n cũ củ a kernel (ho ặ c khở i độ ng vào phiên bẳ n cũ củ a nhân nế u bạ n dùng biệ n pháp dự phòng đư ợ c đề cậ p ỏ phầ n 9.1.1 9.1.2 trên) • chọ n lự a chĩ n h đị nh cấ u hình biên dị ch nhân L i nux lạ i (xem phầ n 7.2.2 để tránh lặ p lạ i bư c lự a chọ n cấ u hình m ộ t cách khơng cầ n thiế t) • thự c hiệ n lạ i bư óc nêu phầ n 11 Vá biên dị ch nhân M ã nguồ n củ a nhân Linux thư òng đư ợ c "vá" rồ i biên dị ch lạ i nhiề u hơ n đư ợ c biên dị ch từ trọ n m ã nguồ n tả i từ http://sources.redhat.com /bzip2/kernel nế u bạ n quen thuộ c vói quy trình tái biên dị ch hoặ c bạ n có nhu cầ u phả i cậ p nhậ p kernel củ a máy thư ng xuyên Tạ i lạ i cầ n "vá"? M ã nguồ n củ a Linux kernel cầ n đư ợ c vá lý thư ng gặ p sau: • m ã nguồ n củ a nhân Linux kernel cậ p nhậ t Bạ n có sẵ n m ã nguồ n củ a nhân Linux (cũ hơ n) máy M uố n nâng cấ p phiên bả n nhân củ a Linux, bạ n cầ n tả i "m iế ng vá39" đế vá (thay phả i tả i trọ n m ã nguồ n củ a nhân Linux cho phiên bả n mớ i) • m ộ t số "drivers" đư ợ c cậ p nhậ t Đề xử dụ ng driver m ói (và drivers cầ n đư ợ c biên dị ch đế nố i vớ i thư việ n hiệ n hành máy), bạ n chí cầ n tả i "miế ng vá" củ a nhữ ng drivers để vá nhân Linux biên dị ch lạ i chúng 11.1 Các điể m quan trọ ng trư ổ c vá Tư ng tự phầ n 6.2, 6.3 6.4 trên, quy trình tả i m iế ng vá cho nhân Linux y hệ t tả i trọ n gói m ã nguồ n củ a nhân Linux Đ iế m khác biệ t bạ n phả i tả i hồ sơ khỏ i đầ u bằ ng patch chọ n cho "miế ng vá" cầ n thiế t cho nhân cầ n đư ợ c vá Đ iể m tố i yế u cầ n ghi nhó vá m ã nguồ n củ a nhân Linux, bạ n phả i vá thứ tự đầ y đủ m iế ng vá cho đế n phiên bả n cầ n có V í dụ , bạ n có phiên bả n nhân 2.4.20 máy bạ n m uố n biên dị ch lạ i phiên bả n kernel củ a máy trở thành 2.4.26 Thay v ì tả suố t viế 2.4.26 máy Tổ gói m ã nguồ n i trọ n m ã nguồ n cúa nhân 2.4.26 biên dị ch lạ i (như trình bày t này), bạ n tả i bả n vá 2.4.21, 2.4.22, 2.4.23, 2.4.24, 2.4.25 ng cộ ng dung lư ợ ng bả n vá m ộ t phầ n rấ t nhỏ so vói trọ n 2.4.26 Tấ t nhiên bạ n có m ã nguồ n củ a kernel 2.4.20 máy 39 patches - 37 - 11.2 Tả i, xả vá Các m iế ng vá thư òng đư ợ c nén hai ng: g z hoặ c b z gói m ã nguồ n Bạ n tùy chọ n tả i m iế ng vá bấ t nơ i máy Sau tả i chúng , bạ n thự c hiệ n quy trình tư ng tự sau: Giả đị nh bẳ n vá đư ợ c nén ng b z , nơ i a m ã nguồ n củ a nhân Linux / u s r / s r c thự c tính củ a m iế ng vá đư ợ c kiế m tra Trong v í dụ này, giả đị nh phiên bả n dùng máy 2.4.20 phiên bả n cầ n đư ợ c vá 2.4.26 Chuyể n vào thư m ụ c / u s r / s r c : $ cd /usr/src xả nén m iế ng vá ỏ ng b z vào thư m iế ng vá: m ụ c / u s r / s r c Lặ p lạ i cho đế n xả hế t $ tar xfvj /path/to/patch/patch-x.xx.xx / Dọ n dẹ p sạ ch m ã nguồ n nhân hiệ n có máy, giả đị nh phiên bả n m ã nguồ n hiệ n có 2.4.20: $ cd /kernel-2.4 20 $ m ake m r p r o p e r Lư u m ộ t bả n m ã nguồ n kernel 2.4.20 thư m ụ c / u s r / s r c đề phòng cho cố trình vá (nế u bạ n không lư u m ộ t bả n m ã nguồ n nguyên thủ y củ a nhân 2.4.20 máy, hoặ c bả n m ã nguồ n 2.4.20 cũ n g đư ợ c vá t rư óc đây) $ tar cvf /linux-2.4 20.tar / Vá m iế ng vá theo thứ tự theo dõi bấ t lỗ i đư ợ c báo: $ $ $ $ patch patch patch patch -pl < -pl < -pl < -pl < /patch-2.4 21 /patch-2.4 22 /patch-2.4 23 /patch-2.4 24 $ patch -pl < /patch-2.4 25 $ patch -pl < /patch-2.4 26 hoặ c thự c hiệ n kiể u "lư i" sau: tạ o m ộ t biế n m ôi trư òng PATCH40 tạ m thòi a tên m iế ng vá theo thứ tự , tách ròi bằ ng khoả ng trố ng41: 40 việ c đị nh nghĩ a biế n PATCH dòng chí t huậ n tiệ n dàn trang, tác giả dùng nhấ t hàng K et hoàn toàn 41 space - 38 - $ export PATCH="patch-2.4 21 patch-2.4.22 patch-2.4.23 " $ export PATCH="$PATCH patch-2.4.24 patch-2.4.25 patch-2.4.26" Chạ y vòng lặ p: $ for item in $PATCH; patch -pi < /$item; done Nế u vá khơng có trở ngạ i, bạ n thấ y thông tin tư ng tự : patching file XXX patching file yyy cho đế n kế t thúc Nế u vá bị báo lỗ i, bạ n phả i ngư ng bư c vá ( c t r l - c ) kiể m tra xem bạ n có dùng bả n vá thự c hiệ n bả n vá thứ tự phiên bả n hay không K hông nên tiế p tụ c vố i bư óc vá gặ p lỗ i v ì chắ c chắ n bạ n gặ p trở ngạ i giai đoạ n biên dị ch sau Đ ế tránh trở ngạ i sau, nế u bị báo lỗ i vá, cách tố t nhấ t bạ n nên xoá trọ n thư m ụ c a m ã nguồ n củ a nhân Linux (đang đư ợ c vá bị lỗ i) xả gói m ã nguồ n nguyên thủ y hoặ c gói bạ n vừ a lư u trữ rồ i thử lạ i Xoá thư m ụ c a m ã nguồ n vừ a vá bị trụ c trặ c, thư m ụ c linux-2.4.20 đư ợ c dùng mộ t ví dụ đây: $ cd /usr/src $ rm -rf /linux-2.4 20 X ả gói m ã nguồ n đư ợ c lư u trữ ỏ trên: $ tar xvf linux-2.4.20 $ cd /linux-2.4 20 sau lặ p lạ i bư óc vá theo thứ tự m iế ng vá Sau vá thành công, bạ n nên thự c hiệ n hai bư c kế tiế p sau trư ố c bắ t tay vào việ c chuẩ n bị cấ u hình biên dị ch m ã nguồ n nhân Linux: Đổ i tên thư m ụ c a m ã nguồ n cho phiên bả n đư ợ c vá (giúp bạ n nhậ n diệ n phiên bả n củ a m ã nguồ n có máy đư ợ c vá tớ i phiên bả n nào): $ cd /usr/src $ mv /linux-2.4 20 /linux-2.4 26 nh giá trị "VERSION" file M a k e f i l e củ a m ã nguồ n Linux Thư mụ c a m ã nguồ n lúc đư ợ c đổ i tên thành l i n x - : - 39 -

Ngày đăng: 06/02/2023, 09:34