Làm thế nào để tải một mô-đun trong initrd?


13

Tôi muốn tải rõ ràng một mô-đun (giả sử netconsole) trong giai đoạn khởi đầu, tương tự như /etc/modulestrong quy trình khởi động hệ thống chính.

Đầu tiên, tôi đã kiểm tra rằng initrd trong hệ thống của tôi đã chứa mô-đun mong muốn (xem Phụ lục).

Tôi đã xem xét /initrd.img(đó là một kho lưu trữ cpio nén, vì vậy để có một cái nhìn nhanh về nó, tôi đã thực hiện zcat /initrd.img > initrd.cpiovà đi vào bên trong nó với mc). Tôi đã tìm kiếm bất kỳ lời mời nào modprobetrong số các tập lệnh và đã tìm ra rằng các mô-đun được liệt kê trong /conf/modules( /là gốc của initrd ở đây) được tự động tải bởi load_modules()hàm từ /scripts/functions(được gọi bởi /init).

Nhưng điều gì sẽ là công cụ tiêu chuẩn trong hệ thống Ubuntu để cập nhật /conf/modulesinitrd?

(BTW, trong nghiên cứu của tôi về mã của initrd của Ubuntu, tôi nhận thấy rằng có một số hỗ trợ đặc biệt cho netconsoletrong /initkịch bản, mà tôi có thể làm cho công việc cho các nhu cầu của tôi, nhưng dù sao, câu hỏi của tôi là tổng quát hơn, liên quan đến bất kỳ mô-đun tùy chỉnh khác .)

ruột thừa

Như tôi đã nói ở trên: đầu tiên, tôi đã kiểm tra rằng initrd trong hệ thống của tôi đã chứa mô-đun mong muốn (cụ thể là netconsole). Đây là cách:

# zcat /initrd.img | cpio --extract --verbose --list  | fgrep netconsole
-rw-r--r--   1 root     root        25372 Aug 31 20:59 lib/modules/3.19.0-28-generic/kernel/drivers/net/netconsole.ko
109504 blocks
# 

Và tôi cũng đã kiểm tra rằng nó đã chứa trình điều khiển mạng cần thiết:

# ls -ld /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Sep 21 15:34 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/sky2
# zcat /initrd.img | cpio --extract --verbose --list  | fgrep sky2
-rw-r--r--   1 root     root        92948 Aug 31 20:49 lib/modules/3.19.0-28-generic/kernel/drivers/net/ethernet/marvell/sky2.ko
109504 blocks
# 

3
Để tham khảo trong tương lai, lsinitramfsbao gồm trong initramfs-toolsgiống như zcat /initrd.img ..lệnh được minh họa ở đây.
timss

Câu trả lời:


14

Tôi phát hiện ra cách thêm các mô-đun vào initrd trong Ubuntu 14.04 Tôi đã thêm tên của các mô-đun vào / etc / initramfs-tools / module. Điều này đã thêm các mô-đun vào tập tin initrd. Đừng quên cập nhật tệp initrd (update-initramfs -u) sau khi bạn đã thay đổi / etc / initramfs-tools / module.


Làm thế nào để bạn xác định tên mô-đun? Bây giờ tôi cần thêm mô-đun ahci.ko? Vì vậy, những gì nên được bao gồm trong tập tin đó?
Sandun dhammika

@sandundhammikaahci
Ken Sharp

3

Ubuntu sử dụng initramfs-tools (xem man initramfs-tools để giới thiệu) để xử lý việc tạo initrd.

Để thêm một mô-đun netconsole trong initrd và buộc tải nó, hãy tạo một tệp trong / etc / initramfs-tools / hook (tức là / etc / initramfs-tools / hook / netconsole) với nội dung:

#! / thùng / sh
PREREQ = ""
điều kiện tiên quyết ()
{
   tiếng vang "$ PREREQ"
}

trường hợp $ 1 trong
điều kiện tiên quyết)
   điều kiện tiên quyết
   thoát 0
   ;;
esac

. / usr / share / initramfs-tools / hook-function

lực lượng_ tải netconsole

và làm cho nó thực thi được. Sau đó chạy:

update-initramfs -u

để cập nhật initrd của kernel mới nhất.


1
Nhưng không có cách nào đơn giản hơn là chỉ gắn tên mô-đun vào /conf/modules? Tôi nên đặt nó ở đâu update-initramfs -uđể sử dụng nó?
imz - Ivan Zakharyaschev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.