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

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