Biên dịch nhân linux de lam gi
Nhân Linux là một “nhân hiện đại” có tính module rất cao. Từ kernel phiên bản 2.6.x trở đi, có rất nhiều chức năng và mở rộng. Với tinh thần “biên dịch nhân”, một yếu tố chính yếu và quan trọng nhất cần ghi nhận đó là tính phân bộ (modularity) của nhân Linux. Đối với người dùng bình thường, modularity cho phép chọn lựa cách biên dịch các drivers của nhân theo dạng modules hay theo dạng biên dịch trực tiếp vào nhân. Thông thường, khi xác lập cấu hình cho nhân có ba chọn lựa: Y, M và N. Có những “driver” không thể biên dịch như một module vì nó phải được load and link trực tiếp ngay khi nhân khởi động. Cũng có những “driver” cho phép chọn như một module và được tải trong khi và sau khi nhân được khởi động. Điểm chính yếu cần nắm bắt trong giới hạn chủ đề “Biên dịch nhân Linux” là hiểu rõ tại sao phải chọn M (cho module), Y (cho biên dịch trực tiếp) và N (không dùng) các drivers này.
(Theo Hoàng Ngọc Diêu) Bài viết này mình sẽ hướng dẫn các bạn tái biên dịch nhân của CentOS 6 x86_x64 theo cách đơn giản nhất. Các bước biên dịch lại nhân Linux.Trước tiên ta cần tải bộ nhân mới nhất về từ website https://www.kernel.org/. Phiên bản mới nhất cho các distro họ Redhat hiện tại là 2.6.32.71. Khi biên các bạn update hệ thống của bạn bằng yum hay bằng các gói binary có sẵn thì kết quả từ lệnh `uname -r` sẽ là 2.6.32-573.22.1.el6.x86_64. Giả sử ta để gói mã nguồn nằm trong thư mục /usr/src Sau khi tải về mã nguồn của nhân, ta cần cài một số gói phụ trợ: [[email protected] src]# yum install gcc make binutils util-linux module-init-tools ncurses-devel e2fsprogs jfsutils reiserfsprogs rpm-build Ta xả nén mã nguồn nhân bằng lệnh: [[email protected] src]# unxz linux-2.6.32.71.tar.xz && tar -xvf linux-2.6.32.71.tar Chuyển vào thư mục chứa nhân và tiến hành cấu hình [[email protected] src]# cd linux-2.6.32.71 Dọn dẹp mã nguồn (xóa mọi file đã được biên dịch từ lần trước nếu có) [[email protected] linux-2.6.32.71]# make clean && make mrproper Bây giờ ta cần tạo một file config cho nhân mới. Tôi khuyên các bạn nên sử dụng lại file config cũ của nhân hiện tại rồi tiến hành sửa đổi nó thì như thế độ tương thích với distro hiện tại sẽ tốt hơn. Copy file cấu hình vào thư mục hiện tại. [[email protected] linux-2.6.32.71]# cp /boot/config-`uname -r` ./.config Lưu ý rằng file .config này là một file ẩn. Đối với file này bạn có nhiều cách để cấu hình nó. Thứ nhất là edit trực tiếp file này. Thứ hai là sử dụng lệnh `make config` (sẽ tạo ra file .config mới) và nó sẽ hỏi ta hàng loạt câu hỏi và ta chỉ việc chọn Y (biên dịch thẳng vào nhân)/N (không biên dịch)/M (biên dịch dưới dạng module) cho từng lựa chọn tuy nhiên nếu bạn chọn sai câu trả lời, bạn sẽ không thể quay trở lại câu hỏi trước đó để chọn lại (có thể mở file ra và sửa những chỗ sai). Thứ hai là sử dụng lệnh `make menuconfig` để cấu hình dưới dạng đồ họa trên nền shell và sử dụng bàn phím để cấu hình các lựa chọn. Thứ ba là sử dụng lệnh `make xconfig` cũng giống như cách thứ hai nhưng bạn có thể dùng chuột. Ở đây mình sẽ chọn cách thứ hai. [[email protected] linux-2.6.32.71]# make menuconfig Biên dịch nhân – menuconfig Để nạp file config có sẵn, bạn đưa con trỏ xuống dưới và chọn `Load an Alternate Configuration File` để load file config hiện tại lên. Biên dịch nhân – Load config Biên dịch nhân – Load config Tuy nhiên, phiên bản mã nguồn hiện tại khi biên dịch xong sẽ có mã là 2.6.32-573.22.1.el6.x86_64 trùng với phiên bản hiện tại tôi đang sử dụng nên tôi phải đổi tên của bản nhân sẽ được biên dịch để sau khi cài xong nhân ta còn thấy sự khác biệt. Để đổi tên, ta chọn `General setup` -> `Local version – append to kernel release`. Tại đây, ta chèn thêm một chuỗi vào file release của nhân. Biên dịch nhân – Đổi tên kernel Sau đó, bạn đi vào từng mục sửa những gì cần thiết rồi save file cấu hình lại. Biên dịch nhân – Lưu cấu hình Tiến hành biên dịch với lệnh: [[email protected] linux-2.6.32.71]# make Quá trình này diễn ra khá lâu. Máy ảo của tôi sử dụng chip xung nhịp 3.0Ghz mất khoảng 25 phút để biên dịch. Ở mức xung 2.3Ghz thì mất khoảng 40 phút. Sau khi biên dịch hoàn tất, ta cài các module: [[email protected] linux-2.6.32.71]# make modules_install Cuối cùng là cài đặt nhân: [[email protected] linux-2.6.32.71]# make install Sau khi hoàn tất, bạn sẽ thấy kernel của chúng ta xuất hiện trong thư mục /boot và cấu hình khởi động đã được ghi vào /boot/grub/menu.lst Biên dịch nhân – kết quả Biên dịch nhân – kết quả Reboot, bấm Enter trong lúc boot để chọn phiên bản nhân sẽ boot. Biên dịch nhân – kết quả Biên dịch nhân – kết quả Đào Xuân Hưng – AdminVietnam.org |