Biên d‡ch nhân Linux
Tác gi£: Hoàng NgÂc Diêu
–1–
Mˆc lˆc
1TÍ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
2T§i sao cn biên d‡ch l§i nhân Linux? 5
3Cß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
5Xác ‡nh cßu hình (hardware) cıa máy 9
6Các b˜Óc chu©n b‡9
6.1 T§o mÎtæa m∑m khiÎ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
7Chønh cßu hình biên d‡ch nhân Linux 14
7.1 Thành phn cıa cßu hình biên d‡ch nhân Linux 14
7.1.1 Thành phn cßu hình biên d‡ch nhân Linux phiên b£n 2.4.x 14
7.1.2 Thành phn 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 cn chú ˛trong giai o§n hình thành cßu hình
biên d‡ch nhân 20
8Các b˜Óc biên d‡ch 22
8.1 B˜Óc t§odependency, 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
–2–
8.3.2 Tách rÌi mã nguÁn và output files 27
9Cà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 KhiÎng l§i máy và chønh l˛n∏u g∞p
trˆc tr∞c 35
10.1 B‡treo khi khiÎ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
–3–
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à mrÎng. VÓi tinh thn "biên d‡ch nhân", mÎt y∏u tËchính
y∏u và quan trÂng nhßt cn 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 khiÎ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 khiÎng. i∫m chính y∏u cn 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 khiÎng và tßt nhiên nó s≥chi∏m mÎt phn bÎ
nhÓ. LÒii∫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Òii∫m k∏ti∏p cıa chÂn l¸a
này là tính hiªu xußtxußt (rßt nh‰), khi cn driver thì ã có sÆn và không cn˘ng t£i
n˙a.
•Biên d‡ch nh˜các modules cho nhân có nghæa là chøkhi nào cn dùng các "drivers"
này mÓi˜Òc˘ng t£i. LÒii∫m cıa chÂn l¸a này nÍi b™tkhí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Òii∫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 ó (cn 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 cn thi∏t, gi£ ‡nh b§nã có trÂn bÎcác công cˆcn thi∏t∫
biên d‡ch: