Initrd में मॉड्यूल लोड कैसे करें?


13

मैं netconsoleinitrd स्टेज के दौरान एक मॉड्यूल (कहना ) को स्पष्ट रूप से लोड करना चाहता हूं , इसी तरह /etc/modulesमुख्य सिस्टम स्टार्टअप प्रक्रिया में।

सबसे पहले, मैंने जाँच की कि मेरे सिस्टम में initrd में पहले से ही वांछित मॉड्यूल है (परिशिष्ट देखें)।

मैंने देखा है /initrd.img(जो कि एक संकुचित cpio संग्रह है, इसलिए इसमें त्वरित रूप से देखने के लिए, मैंने zcat /initrd.img > initrd.cpioइसके साथ किया है और अंदर चला गया है mc)। मैंने modprobeलिपियों में से किसी भी आह्वान की तलाश की है, और यह पता लगाया है कि इसमें सूचीबद्ध मॉड्यूल /conf/modules( /initrd की जड़ है) स्वचालित रूप load_modules()से फ़ंक्शन द्वारा लोड किया /scripts/functionsजाता है (इसके द्वारा कहा जाता है /init)।

लेकिन /conf/modulesinitrd को अपडेट करने के लिए Ubuntu सिस्टम में मानक टूल क्या होगा ?

(बीटीडब्लू, उबंटू के 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 ..कमांड यहाँ चित्रित किया गया है।
तैमूर

जवाबों:


14

मुझे पता चला कि Ubuntu 14.04 में initrd में मॉड्यूल को कैसे जोड़ा जाए मैंने मॉड्यूल के नामों को / etc / initramfs-tools / मॉड्यूल में जोड़ा। इसने initrd फ़ाइल में मॉड्यूल जोड़े। आपके द्वारा / etc / initramfs-tools / मॉड्यूल में परिवर्तन करने के बाद initrd फ़ाइल (update-initramfs -u) को अपडेट करना न भूलें।


आप मॉड्यूल नामों को कैसे परिभाषित करते हैं? अब मुझे ahci.ko मॉड्यूल जोड़ने की आवश्यकता है? तो उस फाइल में क्या शामिल होना चाहिए?
सैंडून धम्मिका

@ ससंदुहम्मिकाahci
केन तीव्र

3

Ubuntu initramfs- उपकरण का उपयोग करता है (देखें आदमी initramfs- उपकरण परिचय के लिए) initrd के निर्माण को संभालने के लिए।

Initrd में एक मॉड्यूल netconsole जोड़ने के लिए और इसे लोड करने के लिए फोर्स / etc / initramfs-tools / हुक (यानी / etc / initramfs-tools / हुक / netconsole) सामग्री के साथ एक फ़ाइल बनाएँ:

#! / Bin / श
Prereq = ""
prereqs ()
{
   इको "$ PREREQ"
}

केस $ 1 में
prereqs)
   prereqs
   बाहर निकलें 0
   ;;
esac

। / Usr / share / initramfs उपकरण / हुक कार्यों

force_load netconsole

और इसे निष्पादन योग्य बनाएं। फिर भागो:

update-initramfs -u

नवीनतम कर्नेल के initrd को अपडेट करने के लिए।


1
लेकिन वहाँ सिर्फ मॉड्यूल का नाम जोड़ने के लिए एक सरल तरीका नहीं है /conf/modules? इसका update-initramfs -uउपयोग करने के लिए मुझे इसे कहां रखना चाहिए ?
imz - इवान ज़खरीशेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.