วิธีการโหลดโมดูลใน initrd?


13

ฉันต้องการโหลดโมดูล (พูดnetconsole) อย่างชัดเจนในระหว่างขั้นตอน/etc/modulesการเริ่มต้นคล้ายกับในขั้นตอนการเริ่มต้นระบบหลัก

ก่อนอื่นฉันตรวจสอบว่า initrd ในระบบของฉันมีโมดูลที่ต้องการอยู่แล้ว (ดูภาคผนวก)

ฉันได้ดู/initrd.img(ซึ่งเป็นไฟล์เก็บถาวร cpio ที่ถูกบีบอัดเพื่อให้ได้ดูอย่างรวดเร็วฉันได้ทำzcat /initrd.img > initrd.cpioและเข้าไปข้างในด้วยmc) ฉันได้ค้นหาการเรียกใช้ของmodprobeสคริปต์และพบว่าโมดูลที่ระบุไว้ใน/conf/modules( /เป็นรากของ initrd ที่นี่) ได้รับการโหลดโดยอัตโนมัติจากload_modules()ฟังก์ชั่นจาก/scripts/functions(เรียกโดย/init)

แต่อะไรคือเครื่องมือมาตรฐานในระบบอูบุนตูที่จะอัพเดท/conf/modulesตัวเริ่มต้น

(BTW, ในระหว่างการศึกษาของฉันรหัส initrd อูบุนตูที่ผมสังเกตเห็นว่ามีบางการสนับสนุนเป็นพิเศษสำหรับnetconsoleใน/initสคริปต์ซึ่งผมอาจจะทำให้การทำงานสำหรับความต้องการของฉัน แต่แล้วคำถามของฉันคือทั่วไปมากขึ้นเกี่ยวกับโมดูลที่กำหนดเองอื่น ๆ .)

ภาคผนวก

ดังที่ฉันได้กล่าวไว้ข้างต้น: ก่อนอื่นฉันตรวจสอบว่า initrd ในระบบของฉันมีโมดูลที่ต้องการ (กล่าวคือnetconsole) นี่คือวิธี:

# 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
# 

และฉันก็ตรวจสอบด้วยว่ามันมีไดรเวอร์เครือข่ายที่จำเป็นอยู่แล้ว:

# 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
สำหรับการอ้างอิงในอนาคตการlsinitramfsรวมอยู่ในการทำงานinitramfs-toolsนั้นเหมือนกับzcat /initrd.img ..คำสั่งที่แสดงไว้ที่นี่
timss

คำตอบ:


14

ฉันค้นพบวิธีเพิ่มโมดูลเข้ากับ initrd ใน Ubuntu 14.04 ฉันเพิ่มชื่อของโมดูลไปยัง / etc / initramfs-tools / modules สิ่งนี้เพิ่มโมดูลเข้ากับไฟล์ initrd อย่าลืมอัปเดตไฟล์ initrd (update-initramfs -u) หลังจากคุณทำการเปลี่ยนแปลงใน / etc / initramfs-tools / modules


คุณจะกำหนดชื่อโมดูลได้อย่างไร ตอนนี้ฉันต้องเพิ่มโมดูล ahci.ko หรือไม่ ดังนั้นสิ่งที่ควรรวมอยู่ในไฟล์นั้น
sandun dhammika

@sandundhammikaahci
Ken Sharp

3

Ubuntu ใช้เครื่องมือ initramfs (ดู man initramfs-tools สำหรับการแนะนำ) เพื่อจัดการการสร้าง initrd

ในการเพิ่มโมดูล netconsole ใน initrd และบังคับให้โหลดมันจะสร้างไฟล์ใน / etc / initramfs-tools / hooks (เช่น / etc / initramfs-tools / hooks / netconsole) ด้วยเนื้อหา:

#! / bin / ดวลจุดโทษ
กิลที่ต้องการ = ""
prereqs ()
{
   echo "$ PREREQ"
}

กรณี $ 1 ใน
prereqs)
   prereqs
   ออก 0
   ;;
esac

. / usr / share / initramfs เครื่องมือ / เบ็ดฟังก์ชั่น

force_load netconsole

และทำให้มันปฏิบัติการได้ จากนั้นเรียกใช้:

update-initramfs -u

เพื่ออัปเดต initrd ของเคอร์เนลใหม่ล่าสุด


1
แต่ไม่มีวิธีที่ง่ายกว่าในการต่อท้ายชื่อโมดูล/conf/modulesใช่หรือไม่ ฉันควรใส่ไว้ที่ไหนupdate-initramfs -uเพื่อใช้?
imz - Ivan Zakharyaschev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.