Compile Kernel in A Nutshell P2.

IV.Bắt tay vào việc
1.Cấu hình kernel
Đây là bước quan trọng nhất, quyết định thành bại của việc compile một kernel. Do đó tôi viết kỹ và dài nhất. Hãy hiểu rõ là bạn đang làm gì (không hiểu cũng cứ chọn đại, từ từ sẽ hiểu :D). Mỗi một module thành phần có 3 tùy chọn khi compile: Không compile (N), compile trực tiếp vào kernel (Y), compile như một module rời (M). Có những module không thể compile như một module rời được vì nó phải được load ngay khi kernel được boot.

-Compile trực tiếp vào kernel nghĩa là các module ấy có dùng hay không vẫn được load lên khi kernel khởi động và sẽ chiếm một phần bộ nhớ. Ưu điểm là về mặt bảo mật, không bị “fake” khi load module rời lên, và lợi về mặt performance khi không phải load module lên để chạy.
-Compile như module rời nghĩa là chỉ khi nào cần dùng thì các module này mới được load lên. Do đó lợi hơn về mặt tốn memory và tài nguyên. Một ưu điểm nữa là nếu chỉnh sửa gì module đó thì không cần phải compile lại toàn bộ kernel.

Các công cụ để cấu hình kernel
-make config: Đơn giản nhất, nhẹ nhất, ít đòi hỏi nhất vì nó ở dạng … console đen ngòm! Nó đưa ra một loạt các câu hỏi bất tận cho bạn lựa chọn Y, N hay M. Với chương trình này, phím sa là gà chết vì một khi đã Enter thì vô phương quay lại lựa chọn vừa rồi. Nếu lỡ phát hiện ra sai sót thì cho dù bạn đang ở câu hỏi cuối cùng cũng phải trở lại từ đầu. lời khuyên: không nên dùng.

-make xconfig: Phương tiện ưa thích và dễ dùng cho những ai dùng X Windows (giao diện đồ hoạ). Giao diện trực quan, có thể sử dụng chuột rất tiện lợi. lời khuyên: Nếu bạn thích dùng giao diện trực quan thì đây là lựa chọn số 1. Ngoài ra kernel 2.6 còn có make gconfig tương tự.

-make menuconfig: Đưa ra các menu GUI trên nền console. Khá tiện lợi, bảo đảm chạy vào là biết dùng ngay lần đầu tiên. Tốt hơn config và đơn giản hơn xconfig. Khi có module nào không hiểu thì chỉ cần chọn module đó và gõ dấu ? hay chọn nút Help là thông tin sẽ hiện ra. Đây là công cụ tôi ưa thích vì ít khi dùng X Windows.

Kernel 2.6 còn đưa ra 4 lựa chọn nữa cho bước này:
-make defconfig: tạo một cấu hình mới với chế độ default cho mọi chọn lựa.
-make allmodconfig: tạo cấu hình mới với chế độ chọn các module khi có thể được.
-make allyesconfig: tạo cấu hình mới với chế độ chấp nhận YES (Y) cho mọi chọn lựa.
-make allnoconfig.

Một tùy chọn nữa khi cấu hình là make oldconfig. Cách này sẽ dùng lại file config cũ mà không cho bạn lựa chọn sửa đổi nào. lời khuyên: dùng lựa chọn này nếu bạn đã có một file cấu hình hoàn chỉnh và không muốn thay đổi gì nữa.

Hic, “lắm thầy nhiều ma”, càng đọc càng thấy hoang mang quá. Đừng lo, sau khi đã trang bị một số kiến thức cần thiết ở trên, giờ ta bắt tay vào config thật sự. Đây là những gì tôi đã làm. Giả sử mình bắt đầu config lại một kernel mới, không dùng file cũ. Nhắc lại là ta sẽ dùng thư mục cài đặt: /home/abel/build. Nếu bạn đã dùng thư mục này để compile một kernel trước đó và không muốn dùng lại file cấu hình cũ đó nữa thì CD (change directory) vào thư mục source và bắt đầu bằng lệnh sau:

#make O=/home/abel/build mrproper

Lệnh này sẽ xóa toàn bộ những file đã xuất hiện khi cấu hình kernel cũ. Khi dùng lệnh này rồi thì không dùng make oldconfig được nữa. Nếu bạn không tạo thư mục cài đặt mà để mặc định thì phía sau make không có tùy chọn O=…, nghĩa là chỉ còn: #make mrproper. Điều này đúng cho tất cả các lệnh bắt đầu bằng make từ đây trở xuống.

Tiếp theo:

#make O=/home/abel/build menuconfig

Nếu bạn không bắt đầu bằng mrproper thì menuconfig sẽ load file config cũ lên. Ngược lại thì menuconfig sẽ load lên một cấu hình mặc định. Bạn có thể thay menuconfig bằng các phương tiện cấu hình đã giới thiệu ở trên.

Bây giờ bắt đầu vào các menu và tìm hiểu xem bạn có những gì trong tay. Tùy vào phần cứng từng máy và sở thích từng người mà có lựa chọn thích hợp. Đừng quên bấm ? để xem hướng dẫn trước khi ra quyết định. Hai mục chọn quan trọng trong các menu là File Systems và Device Drivers. Hãy cẩn thận với hai mục này. Nếu không chắc nên chọn cái nào bỏ cái nào thì tốt nhất là để mặc định như vậy và chọn Exit để thoát ra.

Important Note: Nếu bạn dùng distro nền là Redhat Enterprise WS 3 thì phải vào mục File System và sửa lại phần Extend 3rd Support là phần build in trong kernel luôn chứ không phải là một Module như default (di chuyển vệt sáng đến dòng đó và nhấp space bar đến khi nào kí hiệu trong <> chuyển thành dấu *). Nếu quên sửa mục này thì sẽ bị kernel panic vì insmod không load được module ext3.ko! Nguyên nhân chung chung có thể là do REWS dùng kernel 2.4 còn FC dùng kernel 2.6.

Khi thoát ra đừng quên chọn YES khi được hỏi có lưu cấu hình vào file .config không. Cuối cùng file cấu hình .config sẽ được tạo ra trong thư mục /home/abel/build ta đã xác định trước (sao không vi nó ra xem thử một chút nhỉ?). Vậy là xong bước gian khổ nhất rồi. Từ đây về sau tất cả những gì bạn cần làm là gõ và chờ.

2.Tạo kernel image và biên dịch module
Bước này chỉ cần một lệnh (với kernel 2.6)

#make O=/home/abel/build

Sau đó pha một ly cà phê nhâm nhi hoặc tranh thủ đi giặt đồ! Sau thời gian tàn chừng … bó nhang thì quay lại coi sao nhé. Nói vậy thôi chứ bên cạnh năng lực phần cứng còn tùy vào số module bạn chọn nhiều hay ít mà bước này sẽ lâu hay rất lâu😀.
Tất cả các bước trên đều có thể thực hiện bằng quyền user bình thường nhưng hai bước sau các bạn phải thực hiện ở quyền root.
3.Cài đặt module

#make O=/home/abel/build modules_install

4.Đưa kernel mới vào hoạt động

#make O=/home/abel/build install

Nếu mọi việc suôn sẻ thì bạn đã hoàn tất cái gọi là compile một kernel rồi đấy. mọi việc rất đơn giản. giờ chỉ còn reboot lại máy và xem chuyện gì xảy ra😀.
Các bạn thử về làm theo các hướng dẫn ở trên để thấy thật ra kernel cũng chẳng có gì ghê gớm và thử trả lời câu hỏi sau:

Cấu hình nào là tối thiểu để một kernel có thể boot lên được? Nghĩa là bỏ đi tất cả những module có thể để cuối cùng còn lại những module thiết yếu sao cho giờ nếu ta bỏ bất cứ module nào thì khi compile xong cũng không thể boot vào kernel mới được.
tôi cũng đang dùng phương pháp thử sai để tìm ra giải đáp cho câu hỏi trên. Nếu có trục trặc gì thì các bạn cứ gửi lên đây để cùng tìm hiểu.
Hứa hẹn một bài viết “Compile Kernel in advanced” ta sẽ bàn chi tiết hơn về các bước quá trình compile này nhé. Còn nhiều điều thú vị ta chưa để cập tới.

Tài liệu tham khảo:
[1]Internal Document of Operating System Group – HPC Project, DIT of HCMUT
[2]#more /home/abel/linux2.6.11/Readme

About dongthao

The best things in life, they are free ... (Cry on my shoulder lyric)
This entry was posted in Linux Tutorial. Bookmark the permalink.

Có 2 phản hồi tại Compile Kernel in A Nutshell P2.

  1. nói:

    Có nhất thiêt phải dùng lệnh “make modules” trước sau đó mới chạy lệnh “make modules_install” không?

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s