Trong bài viết sau, chúng tôi sẽ giới thiệu với các bạn phương pháp này trên hệ thống Debian Etch, cụ thể là phương pháp biên dịch kernel tùy chỉnh sử dụng bộ nhân nguyên bản tại đây, v
Trang 1Biên dịch bộ nhân – kernel trên nền tảng Debian Etch
Trang 2Mỗi 1 nguồn phân phối - distribution đều có công cụ riêng biệt để xây dựng, tạo nhân từ các nguồn tương ứng
Trong bài viết sau, chúng tôi sẽ giới thiệu với các bạn phương pháp này trên
hệ thống Debian Etch, cụ thể là phương pháp biên dịch kernel tùy chỉnh sử dụng bộ nhân nguyên bản tại đây, và từ đó ứng dụng lên hệ thống Đồng thời, bài viết cũng chỉ ra phương pháp áp dụng các bản vá đối với các phiên bản kernel khác nhau
Lưu ý sơ bộ
Chúng ta sẽ thực hiện 2 cách biên dịch phổ biến, cách đầu tiên các bạn sẽ có gói *.deb sau khi hoàn thành Cách thứ 2 là cách “truyền thông”, và kết quả thu được sẽ sử dụng trên tất cả các sản phẩm của Linux, nhưng không phải
là gói *.deb như cách thứ nhất
Xây dựng gói kernel *.deb
Cài đặt các gói yêu cầu để biên dịch kernel:
Trước tiên, chúng ta cần cập nhật package database:
apt-get update
Và cài đặt các gói cần thiết như sau:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Tải bộ mã nguồn của kernel:
Bước tiếp theo, chúng ta phải tải bộ kernel tương ứng về thư mục /usr/src Truy cập http://www.kernel.org/ và chọn bộ kernel cần biên dịch, ví dụ linux-2.6.21.3.tar.bz2 (toàn bộ nguồn kernel 2.6 tại đây):
Trang 3cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
Giải nén các gói vừa tải về và tạo liên kết động tới thư mục nguồn:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux
Áp dụng các bản vá vào nguồn kernel (theo lựa chọn)
Đôi khi, các bạn sẽ cần hệ thống driver mới nhất dành cho phần cứng, nhưng lại không được hỗ trợ bởi kernel mặc định, hoặc tính năng hỗ trợ công nghệ
ảo hóa nhưng lại chưa được tích hợp vào bộ kernel này Trong những trường hợp này, bạn cần áp dụng những bản vá thích hợp (thường có sẵn trên các nguồn cung cấp)
Giả sử chúng ta đã tải những bản patch cần thiết (trong bài viết này là
patch.bz2) về thư mục /usr/src Tại thư mục /usr/src/, gõ lệnh sau:
bzip2 -dc /usr/src/patch.bz2 | patch -p1 dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
Câu lệnh đầu tiên chỉ là kiểm tra, nếu kết quả trả về không báo lỗi nào thì tiếp tục thực thi câu lệnh thứ 2 Không nên tiếp tục chạy câu lệnh 2 nếu câu lệnh 1 có lỗi
Bên cạnh đó, chúng ta cũng có thể áp dụng phương pháp prepatche vào bộ nguồn của kernel Ví dụ, nếu bạn cần các tính năng chỉ có trong phiên bản kernel 2.6.22-rc3, nhưng bộ nguồn đầy đủ vẫn chưa được công bố Thay vào
đó, bản patch-2.6.22-rc3.bz2 đã có sẵn, và bạn có thể áp dụng bản vá đó vào bản kernel 2.6.21, nhưng không phải bộ kernel bản 2.6.21.1 hoặc 2.6.21.2… Các bạn có thể tham khảo thêm tại đây
Trang 4Phương pháp prepatch tương đương với phiên bản alpha dành cho Linux, chúng tồn tại trong các thư mục kiểm tra để lưu trữ
Do đó, nếu muốn biên dịch bộ kernel 2.6.22-rc3, bạn phải tải mã nguồn của kernel 2.6.21 Sử dụng câu lệnh sau để áp ụng bản vá 2.6.22-rc3 vào kernel 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
Thiết lập, tùy chỉnh kernel
Để làm việc này, copy file thiết lập sẵn có tới /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` /.config
sau đó chạy lệnh sau:
make menuconfig
để hiển thị bảng thiết lập Chọn Load an Alternate Configuration File > config:
Trang 5Sau đó tùy chọn các tính năng sẵn có và đi kèm trong menu, lựa chọn và
quyết định khi cảm thấy phù hợp với nhu cầu Khi hoàn thành, chọn Exit và Yes khi được hỏi Do you wish to save your new kernel configuration?
Trang 6Xây dựng kernel
Để làm việc này, chúng ta sẽ sử dụng 2 câu lệnh sau:
make-kpkg clean
fakeroot make-kpkg initrd append-to-version=-custom kernel_image kernel_headers
Sau cú pháp append-to-version= bạn có thể viết bất cứ chuỗi ký tự nào để
nhận diện bộ kernel này, nhưng phải bắt đầu bằng – và không có khoảng trống trong chuỗi
Quá trình này sẽ diễn ra khá lâu, có thể lên đến hàng giờ tùy thuộc vào những yêu cầu thiết lập và tốc độ xử lý của hệ thống
Cài đặt bộ kernel mới
Quá trình xây dựng và biên dịch kết thúc, sẽ có 2 gói deb trong thư mục /usr/src:
Trang 7cd /usr/src
ls -l
Trong cuộc kiểm tra này, chúng ta thu được 2 gói linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (chứa file gốc nguyên bản)
và linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
(chứa file cần thiết để người sử dụng tự biên dịch sau này) Cài đặt các gói này như sau:
dpkg -i
linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i
linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
Nếu muốn sử dụng trên hệ thống Debian Etch khác thì người dùng chỉ việc copy và lưu trữ trực tiếp, không cần phải biên dịch lại lần nữa
Đồng thời, file cấu hình GRUB bootloader /boot/grub/menu.lst cũng được điều chỉnh tự động, ramdisk dành cho bộ kernel mới cũng đã được tạo trong /boot Sau đó khởi động lại hệ thống:
shutdown -r now
Khi bảng thông báo khởi động xuất hiện, lựa chọn bộ kernel mới (mặc định):
Trang 8Nếu tất cả mọi bước đều được thực hiện tốt, bảng thông báo sẽ xuất hiện với
bộ kernel mới Bạn có thể kiểm tra lại việc sử dụng bộ kernel mới bằng lệnh sau:
uname -r
kết quả thu được sẽ có dạng như sau:d
2.6.21.3-custom
Nếu hệ thống không hoạt động, hãy khởi động lại lần nữa và chọn bộ kernel
cũ và thử biên dịch lại bộ kernel đó Và cũng đừng quên xóa bỏ thành phần khởi động của bộ kernel không hoạt động trong danh sách
/boot/grub/menu.lst
Xây dựng bộ kernel theo cách “truyền thống”
Trong phần tiếp theo, chúng ta sẽ miêu tả cách làm khác để thu được bộ kernel, và có thể được sử dụng trên bất kỳ hệ thống Linux nào
Cài đặt các gói yêu cầu để biên dịch kernel:
Việc trước tiên là cập nhật package database:
Trang 9apt-get update
và cài đặt gói cần thiết như sau:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Tải bộ nguồn kernel
Tương tự như trên, tải bản kernel tới thư mục /usr/src Truy
cậphttp://www.kernel.org/ và lựa chọn bản kernel muốn cài đặt (ví dụ
linux-2.6.21.3.tar.bz2 hoặc http://www.kernel.org/pub/linux/kernel/v2.6/):
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
Giải nén gói mã nguồn và tạo liên kết động tới thư mục nguồn kernel như sau:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux
Áp dụng các bản vá vào nguồn kernel (theo lựa chọn)
Về cơ bản, trình tự và cách làm tương tự như phương pháp bên trên Tại thư mục /usr/src/linux, gõ lệnh sau:
bzip2 -dc /usr/src/patch.bz2 | patch -p1 dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
Nếu muốn biên dịch bộ kernel 2.6.22-rc3, bạn cần tải bản mã nguồn của kernel 2.6.21 Bạn có thể sử dụng câu lệnh sau để thực hiện bản vá 2.6.22-rc3 vào kernel 2.6.21:
Trang 10cd /usr/src
wget
http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1
Sau đó áp dụng các bước như trên để biên dịch và tạo kernel
Tìm hiểu về bước Post-Installation
Một khi bộ kernel mới được cài đặt, nhưng chúng ta vẫn cần ramdisk đối với kernel tương ứng (nếu không thì hệ thống sẽ không khởi động được), và chúng ta phải điều chỉnh GRUB bootloader về sự thay đổi nhân kernel này:
Trước tiên, gõ lệnh sau:
depmod 2.6.21.3
apt-get install yaird
Tạo ramdisk bằng cú pháp sau:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3
Việc thiết lập, tùy chỉnh GRUB khá đơn giản trên hệ thống Debian Etch:
update-grub
câu lệnh trên sẽ tự động cập nhật kernel và ramdisk mới vào danh sách
/boot/grub/menu.lst
Sau đó, khởi động lại hệ thống:
shutdown -r now
Trang 11Trên đây là 1 số phương pháp cơ bản để xây dựng, biên dịch bộ nhân kernel Linux trên hệ thống Debian Etch
Chúc các bạn thành công!