ข้ามโมดูลเคอร์เนลตอนบูท


12

มีโมดูลเคอร์เนลที่ใช้งานไม่ได้เนื่องจากที่ฉันไม่สามารถโหลดระบบปฏิบัติการได้ดังนั้นฉันจึงไม่สามารถลบหรือแก้ไขได้ เป็นไปได้ไหมที่จะข้ามโมดูลนี้ตอนบู๊ตโดยใช้พารามิเตอร์ของเคอร์เนลหรืออะไรบางอย่าง?


คำตอบ:


1

การขึ้นบัญชีดำของโมดูลตามที่กล่าวไว้ในคำตอบก่อนหน้าเป็นวิธีที่ดีที่สุดในการหลีกเลี่ยงโมดูลเคอร์เนลอย่างสมบูรณ์ นอกเหนือจากการขึ้นบัญชีดำไม่มีวิธีทั่วไปในการปิดใช้งานโมดูล

ดิสทริบิวชัน Linux บางตัวมีพารามิเตอร์ของเคอร์เนลสำหรับบู๊ตเพื่อทำสิ่งนี้

  • ในซุ้มลินุกซ์ , load_modules=offกองกำลัง udev จะข้ามอัตโนมัติโหลด สิ่งนี้จะช่วยให้คุณสามารถบูตโดยไม่ต้องโหลดโมดูลบัญชีดำที่เป็นสาเหตุของปัญหาและรีบูตตามปกติโดยไม่ต้องโหลดโมดูลที่มีปัญหา
  • Knoppix มีรายการพารามิเตอร์การบู๊ตพิเศษที่ยาว(aka "cheatcodes") ; เหล่านี้คือการผสมผสานของพารามิเตอร์การบูตเคอร์เนลปกติและความพิเศษเฉพาะ Knoppix

สำหรับข้อมูลเพิ่มเติมโปรดดูที่เอกสาร kernel พารามิเตอร์ มีพารามิเตอร์สำหรับปิดใช้งานระบบย่อยเฉพาะ ตัวอย่างเช่น:

  • nousb ปิดใช้งานการสนับสนุนเคอร์เนล USB
  • cgroup_disable=[name]ปิดใช้งานคอนโทรลเลอร์เฉพาะ อย่างไรก็ตาม "หน่วยความจำ" เป็นเพียงตัวอย่างที่ได้รับการสนับสนุนโดยเฉพาะ
  • libata.noacpiปิดใช้งานการใช้ ACPI ใน libata (ตัวควบคุม SATA) นี่เป็นตัวอย่างของการส่งพารามิเตอร์โมดูลผ่านเคอร์เนล

7

การปิดใช้งานโมดูลที่เฉพาะเจาะจงเป็นไปได้จากบูตโหลดเดอร์ แต่ดูเหมือนว่าขึ้นอยู่กับ distro แน่นอน

ในอีกด้านหนึ่งสถานะเอกสารของพารามิเตอร์ของเคอร์เนล Linuxณ เดือนสิงหาคม 2559:

module_blacklist= [KNL] อย่าโหลดรายการโมดูลที่คั่นด้วยเครื่องหมายจุลภาค มีประโยชน์สำหรับการดีบักโมดูลปัญหา

ในทางกลับกันตัวเลือกที่ทำงานกับฉันด้วย openSUSE 42.1 (Linux 4.1.31) นั้นได้อธิบายไว้ใน  Arch Kernel modules wiki:

คุณสามารถขึ้นบัญชีดำได้จาก bootloader เพียงเพิ่ม

modprobe.blacklist=modname1,modname2,modname3

ถึงเคอร์เนลบรรทัด bootloader ของคุณดังอธิบายในพารามิเตอร์เคอร์เนล เมื่อคุณขึ้นบัญชีดำมากกว่าหนึ่งโมดูลโปรดทราบว่าพวกเขาจะถูกคั่นด้วยเครื่องหมายจุลภาคเท่านั้น ช่องว่างหรือสิ่งอื่นใดอาจสันนิษฐานได้ว่าทำลายไวยากรณ์

(ขอบคุณ @gertvdijk ที่  unix.SEสำหรับการชี้เรื่องนี้)

ด้วยมูลค่าการกล่าวถึงเป็นวิธีการต่อไปนี้ :

เพื่อป้องกันไม่ให้โมดูลบางอย่างถูกโหลดโดยเคอร์เนลโดยใช้บรรทัดคำสั่ง grub คุณจะต้องผ่านพวกเขาเป็นพารามิเตอร์ไปยังบรรทัดเคอร์เนลโดยใช้ไวยากรณ์ด้านล่าง

$module_name.blacklist=yes

ฉันไม่รู้ว่าพวกเขาได้สิ่งนั้นมาจากที่ไหน แต่ก็ไม่เจ็บเลยที่จะลองวิธีอื่นถ้าทุกอย่างล้มเหลว


ฉันมีคำถามเดียวกันว่าทำไม "$ module_name.blacklist = ใช่" ทำงานและฉันคิดว่ามันเกี่ยวข้องกับส่วนของรหัสเคอร์เนลนี้: git.kernel.org/pub/scm/linux/kernel/git/stable/linux- stable.git / …
Johnlcf

1

คุณควรจะเพิ่มมันเข้าไปใน /etc/modprobe.d/blacklist หรือบัญชีดำ 'modulename'


สิ่งนี้จะทำงานได้ แต่ต้องบูตเครื่องไปยังเคอร์เนลอื่น (ถ้ามี) หรือระบบ LiveCD
ต้มตุ๋น quixote
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.