Cách biên dịch nhân (kernel)

Bài viết sau sẽ tóm tắt những bước cần thiết cho việc cập nhật kernel từ source.

1. Lấy kernel về:

Kernel source có thể tải về từ http://www.kernel.org . Bản stable hiện tại là 2.4.21 và developer là 2.5.73. Nếu bạn không muốn test những chức năng mới của kernel thì nên sử dụng 2.4.21 cho công việc hàng ngày.

2. Bung nén và chuẩn bị kernel: giả sử bạn vừa tải về linux-2.4.21.tar.bz2, sau khi chạy các dòng lệnh dưới bạn sẽ sắn sàng cho việc compile kernel


    2a. $mv linux-2.4.21.tar.bz2 /usr/src/

    2b. $cd /usr/src && tar -xvjf linux-2.4.21.tar.bz2

    2c. $ln -s linux-2.4.21 linux

Đến đây bạn đã sẵn sàng cho việc compile nhưng đôi lúc có lẽ bạn sẽ cần apply một patch nào đó thì có thể chạy lệnh sau trong thư mục /usr/src/linux

$patch -p1 --dry-run < /địa điểm/và tên/của patch

Lưu ý: --dry-run sẽ 'giả đò' apply cái patch nhưng thực sự chưa làm gì hết. Bạn nên xài --dry-run trước khi apply để phòng hờ cái patch không phải cho kernel bạn đang xài hoặc patch còn bị lỗi. Sau khi chạy --dry-run và không thấy báo lỗi gì thì bạn có thể thật sự apply patch bằng lệnh $patch -p1 < /địa điểm/và tên/của patch

3. Compile kernel: sẽ được thực hiện với các lệnh sau đây:


    3a. $make menuconfig (hoặc make config, hoặc make xconfig) sẽ hỏi bạn một loạt câu hỏi cho kernel phù hợp với máy của bạn. Nếu bạn biết chắc mình sẽ xài một chức năng nào đó thì nên trả lời Y còn không thì trả lời N, trả lời M (module) nếu bạn lưỡng lự không biết cái phần cứng của mình sẽ xài driver này hay driver khác, nhất là phần cho network card hay sound card. Nếu bạn không rõ câu hỏi này hỏi cái gì thì gõ h sẽ có phần giải thích khá rõ ràng.

    Bạn có thể tải về một bản config mẫu mà mình xài cho máy Pentium3, Tekram SCSI card, SB Live! sound card, bt848 Haupauge TV card, ext2/ext3/reiserfs/jfs/tmpfs/iso9660/vfat/ntfs và ipsec VPN compiled vô kernel, tulip, intel, realtek modules cho network cards, iptables và wireless modules. Nếu bạn không cần cái nào thì chỉ việc comment out (bỏ cái dấu # ở phía trước) cái hàng đó. Chẳng hạn máy bạn là Petium4 thì nên thay đổi với giá trị tương ứng. Sau đó chạy lệnh $make oldconfig thay vì $make menuconfig như ở trên.

    3b. $make dep sẽ chuẩn bị các dependencies cần thiết

    3c. $make clean sẽ dọn dẹp .o files mà developers để quên và tạo các source tree.

    3d. $make bzImage sẽ bắt đầu thật sự compile kernel. Nếu mọi chuyện suôn sẽ bạn sẽ có bzImage nằm trong thư mục /usr/src/linux/arch/i386/boot

    3e. $make modules sẽ compile các modules bạn chọn trong lúc chạy $make menuconfig ở trên.

    3f. $make modules_install sẽ cài các modules vào thư mục /lib/modules/2.4.21

    3g. $cp /usr/src/linux/arch/i386/boot/bzImage /boot/mykernel-2.4.21 sẽ cp kernel image bạn mới compile vô thư mục /boot.

    Nếu bạn có SCSI card và compile SCSI card hoặc filesystem (ext3, reiserfs,..v..) mà máy sử dụng dưới dạng module thì bạn phải tạo initial ramdisk với lệnh $mkinitrd -o /boot/initrd-2.4.21.img /lib/modules/2.4.21. Còn nếu bạn đã compile SCSI card và filesytem vô luôn kernel thì bái bai initrd.

:

4. Chuẩn bị boot loader


    4a. Nếu bạn dùng GRUB: tạo hẳn một section mới cho kernel của bạn bằng cách sửa menu.lst với lệnh $vi /boot/grub/menu.lst giả sử / của bạn nằm trên /dev/hda3 và /boot nằm trên /dev/hda1, thêm vào những hàng sau:

    title MyKernel-2.4.21
    kernel (hd0,0)/boot/mykernel-2.4.21 root=/dev/hda3

    initrd (hd0,0)/boot/initrd-2.4.21.img

    Nếu bạn không xài initrd thì không cần hàng cuối ở trên.

    4b. Nếu bạn dùng LILO: tạo hẵn một section cho kernel của bạn bằng cách sửa file lilo.conf với lệnh $vi /etc/lilo.conf thêm vào những hàng sau:




    image=/boot/mykernel-2.4.21

    label=MyKernel-2.4.21

    root=/dev/hda3

    initrd=/boot/initrd-2.4.21.img

    read-only


    Nhớ chạy lệnh $lilo nếu không bạn sẽ không thấy kernel mới của mình khi reboot.

    Bạn nên giữ lại /usr/src/linux/.config để mai này nếu bạn muốn compile 2.4.22 chẳng hạn thì có thể xài lại nó bằng cách chạy $make oldconfig thay vì $make menuconfig. Lưu ý: $make mrproper sẽ xóa đi /usr/src/linux/.config file và dọn dẹp sạch sẽ các .o files và symlinks (ln -s command). Bạn sẽ không thể dùng config file của kernel 2.4 cho kernel 2.5 được.

Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn quá trình cập nhật kernel từ source. Như thường lệ, cám ơn các bác trên #unixcircle đã cho feedback. Mọi góp ý xin gửi về em_mê_compile_kernel@vnlinux.org

Thứ Ba, 05/07/2005 14:48
31 👨 2.843
0 Bình luận
Sắp xếp theo