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/modules
trong 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.cpio
và đ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 modprobe
trong 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/modules
initrd?
(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 netconsole
trong /init
kị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
#
lsinitramfs
bao gồm tronginitramfs-tools
giống nhưzcat /initrd.img ..
lệnh được minh họa ở đây.