9 Cài đặt nhân
9.2.1 Tạo initrd
Trường hợp bạn biên dịch các drivers quan trọng ở dạng modules có liên hệ đến quy trình khởi động của Linux (như SCSI driver, RAID driver, các loại filesystem mà root filesystem dùng như ext3, jbd...) thì chắc chắn bạn phải cần đến initrd26. Mục đích chính của initrd là tải sẵn các driver cần thiết cho nhân trong quá trình khởi động. Nếu không muốn dùnginitrd, bạn phải biên dịch các drivertrực tiếp vào nhân27. Nên chú ý một số bản phân phối Linux không dùnginitrd. Họ khuyến khích biên dịch các
driverliên hệ đến quy trình khởi động trực tiếp vào nhân. Muốn tham khảo thêm chi tiết về RAM diskcho trường hợp này, xem <KERNEL SRC>/Documentation/ramdisk.txt. Quy trình tạoinitrdrất đơn giản, chỉ cần chạy lệnh:
# /sbin/mkinitrd /boot/initrd-<KERNEL_VERSION>.img <KERNEL_VERSION>
trong đó:
• Tham số thứ nhất/boot/initrd-<KERNEL_VERSION>.imgchỉ định cho hồ sơ và thư mục chứa hồ sơ initrd. Thông thườnginitrd của nhân được chứa trong thư mục/bootcùng với các thông tin và hồ sơ khác cần thiết cho quy trình khởi động. • Tham số <KERNEL_VERSION> thứ nhì chính là nhân nào bạn muốn tạo initrd
cho nó. Tất nhiên thư mục chứa các modules cho phiên bản nhân này phải có trong
/lib/modules/, nếu không bạn được system báo có lỗi.
INITial Ram Disk
26
hay còn gọi là static compile
Tùy thuộc vào bản phân phối,mkinitrdđòi hỏi thêm các thông số cụ thể để chỉ đường dẫn đến nhân. Nếu gặp trở ngại trong bước tạomkinitrdbạn nên tham khảo tài liệu cụ thể cho bản phân phối mình đang dùng hoặc tối thiểu là xemman mkinitrdvà tài liệu <KERNEL SRC>/Documentation/initrd.txt để xem thêm các thông tin cần thiết.
Một điểm đáng chú ý là từ loạt nhân 2.5.x28 trở đi,initramfsđược phát triển với mục đích hỗ trợ và sẽ đi đến chỗ thay thế initrd. Ưu điểm nổi bật của initramfs là nó có thể chứa các bộ lưu trữ ở dạng cpio "newc" hoặc "crc" (được nén hoặc không được nén). initramfs cho đến nay chưa phổ biến và ứng dụng rộng rãi trên các bản phân phối Linux. Tuy nhiên, hướng phát triển và ứng dụnginitramfscó vẻ đầy hứa hẹn.
9.2.2 Copy nhân và System.map
Sau khi hoàn thành bước "make modules_install" (phần8.3), lúc này bạn đã có trọn bộ các bộ phận cần thiết cho nhân mới bao gồm cả kernel image và các modules thuộc nhân này.
• copy bzImagetừ<KERNEL_SRC>/arch/i386/boot/đến thư mục/boot, ví dụ:
# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/bzImage- 2.4.26
• Trình cài đặt của RedHat và một số bản phân phối khác bao gồm bước copy bzImagethànhvmlinuz, bạn có thể thực hiện (hay không tùy ý, bước này tương tự như bước ở trên) như sau:
# cp /usr/src/linux-2.4.26/arch/i386/boot/bzImage /boot/vmlinuz- 2.4.26
• kế tiếp là xoá liên kết29cũ (nếu có) củavmlinuztrong thư mục/boot:
# rm -f /boot/vmlinuz
• và sau đó tạo liên kết mới chovmlinuz-2.4.26thành:
# ln -s /boot/vmlinuz-2.4.26 /boot/vmlinuz
• Tất nhiên bạn phải điều chỉnh lại boot loader để thích ứng với cách gọi "bzImage" hoặc "vmlinuz" này cho giá trị image (trong lilo.conf) hoặc giá trị kernel (trong grub.conf). Cách dùng và cách gọibzImage và vmlinuztạo khá nhiều bối rối cho người dùng Linux khi tiếp cận quy trình biên dịch nhân. Một số bản phân phối Linux dùng bzImage, một số khác lại dùng vmlinuz. Dù gì đi chăng nữa, đây cũng chỉ
development kernel
28
symbolic link
là cách dùng và cách gọi; bạn nên dùng theo cách bản phân phối Linux nào có trên máy.
• phần còn lại là bước copy hồ sơSystem.map:
# cp /usr/src/linux-2.4.26/System.map-2.4.26 /boot/System.map- 2.4.26
• kế tiếp là xoá liên kết cũ củaSystem.maptrong thư mục/boot:
# rm -f /boot/System.map
• và sau đó, tạo liên kết mới choSystem.map:
# ln -s /boot/System.map-2.4.26 /boot/System.map