วิธีการขึ้นบัญชีดำโมดูลเคอร์เนล


47

ฉันจะปิดการโหลดโมดูลเคอร์เนลที่ไม่จำเป็นได้อย่างไร เคอร์เนล 3.2.4


คำตอบ:


44

หมายเหตุ: การขึ้นบัญชีดำจะไม่ทำงานสำหรับโมดูลที่สร้างไว้ในอิมเมจเคอร์เนล (เช่นไม่ได้โหลดผ่าน.koไฟล์แยกต่างหากวิธีเดียวที่จะปิดใช้งานโมดูลดังกล่าวคือผ่านพารามิเตอร์เคอร์เนล (ถ้ามี) หรือคอมไพล์เคอร์เนลใหม่

เพียงแค่เปิด/etc/modprobe.d/blacklistไฟล์ของคุณและเพิ่ม drivername โดยใช้ไวยากรณ์ต่อไปนี้:

blacklist driver-name

แก้ไข: ในรุ่นที่ใหม่กว่าตั้งแต่ 12.10 (12.04?) ไฟล์เป็น /etc/modprobe.d/blacklist.conf

รีบูทกล่องของคุณและใช้คำสั่ง lsmod เพื่อแสดงสถานะของโมดูลใน Linux Kernel

หมายเหตุ : นี่driver-nameคือชื่อโปรแกรมควบคุมบัญชีดำที่คุณต้องการ ตัวอย่างเช่นหากคุณต้องการปิดการใช้งานไดรเวอร์การ์ด NIC คุณสามารถค้นหาชื่อเคอร์เนลไดรเวอร์สำหรับการ์ด LAN ของคุณโดยใช้คำlspci -vสั่ง command ในเทอร์มินัล
ตัวอย่างเช่นผลลัพธ์ของฉันคือ:

........
........ 
6: 00.0 คอนโทรลเลอร์อีเธอร์เน็ต: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
    ระบบย่อย: อุปกรณ์ Lenovo 3861
    ธง: บัสมาสเตอร์, devsel รวดเร็ว, latency 0, IRQ 46
    หน่วยความจำที่ b8000000 (64- บิตไม่สามารถดึงข้อมูลล่วงหน้าได้) [size = 64K]
    ROM ส่วนขยายที่ [ปิดการใช้งาน]
    ความสามารถ: 
    เคอร์เนลไดรเวอร์ที่ใช้งานอยู่: tg3
    โมดูลเคอร์เนล: tg3
........
........

tg3นี่ผมเห็นคนขับเป็น ดังนั้นคุณต้องเขียนtg3(หรือขับรถของคุณ) driver-nameในสถานที่ของ

ความอุดมสมบูรณ์ของข้อมูลที่สามารถพบได้ที่นี่


7
ในกรณีของฉัน ( Lubuntu 12.10) ไม่มี/etc/modprobe.d/blacklistไฟล์ มี/etc/modprobe.d/blacklist.confไฟล์
Abdull

1
เป็นการดีกว่าที่จะเก็บโมดูลที่บัญชีดำโดยผู้ใช้ในไฟล์แยกต่างหากเพื่อหลีกเลี่ยงข้อขัดแย้งระหว่างการอัพเกรด (ดูความคิดเห็นนี้ที่เซิร์ฟเวอร์ผิด )
Alexander Pozdneev

1
blacklist.confไฟล์ไม่จำเป็นต้องมีอยู่ คุณสามารถวางไฟล์ชื่อmy-mom-is-awesomeตรงนั้นและมันก็ใช้ได้ สร้างชื่ออะไรก็ได้ที่คุณชอบถ้าคุณต้องการสร้างไฟล์เฉพาะเพื่อขึ้นบัญชีดำในบางสิ่งเช่นblacklist-nouveauหรืออะไรก็ตาม
doug65536

@ doug65536 คำถามนี้ถูกโพสต์เมื่อ 7 ปีที่แล้วแน่นอนว่าสิ่งต่าง ๆ จะเปลี่ยนไป เพียงสร้างคำถามใหม่ด้วยเวอร์ชั่นอูบุนตูที่คุณมีเพื่อให้ผู้คนสามารถช่วยคุณได้
LnxSlck

@LnxSlck ฉันกำลังพูดถึงความสับสนที่เปล่งออกมาในความคิดเห็นก่อนหน้า ฉันไม่ต้องการความช่วยเหลือ การครอบงำจิตใจโดยไม่โพสต์เนื้อหาที่เก่ากว่าคืออะไร เพียงแค่ปล่อยให้มันเน่า? ผู้คนยังพบสิ่งนี้และคนอื่น ๆ จะมีคำถามเดียวกันกับที่ฉันพูด
doug65536

28

คุณสามารถขึ้นบัญชีดำได้ชั่วคราวบนบรรทัดคำสั่ง grub (linux line) เมื่อคุณบูตด้วยไวยากรณ์

module_to_blacklist.blacklist=yes

1
"ชั่วคราว" นี้นานแค่ไหน? จนกว่าจะถึงการบูตครั้งต่อไปหรือไม่
เซ

1
เซทมันเป็นเพียงชั่วคราวสำหรับการบูตเดียวถ้าคุณแก้ไขในระหว่างการบูต หากคุณแก้ไขโดยใช้ /etc/grub.d/ สคริปต์หรือ / etc / default / grub แสดงว่าเป็นแบบถาวร
ปีเตอร์

1
เห็นได้ชัดว่านี้ไม่ทำงานสำหรับ i915: unknown parameter 'blacklist' ignoredi915:
RafałCieślak

5
อะไรคือความแตกต่างระหว่างนี้กับmodprobe.blacklist=module_to_blacklist?
Zaz

4
หรือใช้พารามิเตอร์เคอร์เนลmodprobe.blacklist=module_to_blacklist(ดูman modprobeรายละเอียด)
Karl Richter

11

อีกวิธีในการขึ้นบัญชีดำโมดูลอย่างน้อย Ubuntu 16.04 LTS คือการเพิ่มบรรทัดต่อไปนี้ในบรรทัดคำสั่งเคอร์เนล:

modprobe.blacklist=MODULE_NAME

การใช้ระบบ / etc / modprobe เป็นวิธีที่ดีที่สุด แต่นี่เป็นทางเลือกที่สามารถใช้ในการหยิกได้โดยแก้ไขบรรทัดคำสั่ง GRUB ของคุณเมื่อบู๊ต

สิ่งนี้สามารถทำอย่างถาวรโดยการแก้ไข / etc / default / grub และการเพิ่มGRUB_CMDLINE_LINUX_DEFAULTตัวแปร ตัวอย่างเช่นใน / etc / default / grub ฉันมี:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

จากนั้นผมทำงานแล้วupdate-grub2 update-initramfs -uหลังจากรีบูตคุณจะไม่มีโมดูลตราบใดที่ไม่มีโหลดหลังจากการบู๊ต

วิธีนี้ยังใช้งานได้ใน EL รุ่นต่างๆ (RHEL, CentOS, SciLinux) แต่คุณจะต้องใช้วิธีการของ distro เพื่ออัปเดต grub และ initrd

(หมายเหตุสำหรับผู้ที่พยายามขึ้นบัญชีดำนูโว: อย่าลืมโหลด X ด้วยการวิ่งsystemctl set-default multi-user.targetมิฉะนั้นเมื่อ X สตาร์ทมันจะโหลดนูโวอีกครั้ง!)


4

ในรีลีสล่าสุดคุณต้องใช้คำสั่งติดตั้งในไฟล์บัญชีดำของคุณ

install modulename /bin/false

แทนที่ "modulename" ด้านบนด้วยชื่อของโมดูล สิ่งนี้จะบังคับให้ป้องกันการโหลด

คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งการติดตั้งในคู่มือสำหรับ modprobe.conf

man modprobe.conf

2
สิ่งนี้มีประโยชน์มาก มันจะเปิดออกแม้จะมีรายการบัญชีดำในโมดูลยังสามารถโหลดด้วยตนเอง/etc/modprobe/blacklist.conf modprobe <module_name>การใช้install <module_name> /bin/falseวิธีการทำให้สิ่งนี้ล้มเหลวตามที่ต้องการ
RawwrBag

3

วิธีแก้ปัญหาเหล่านี้ไม่ทำงานกับ 16.04 LTS สำหรับ i915.ko

วิธีแก้ปัญหา (สกปรก) ที่ฉันพบคือเปลี่ยนชื่อ

/lib/modules/4.4.0-22-generic/kernel/drivers/gpu/drm/i915/i915.ko
/usr/lib/xorg/modules/drivers/modesetting_drv.so
/usr/lib/xorg/modules/drivers/intel_drv.so

น่าเสียดายที่หน้าจอ VGA ภายนอกไม่รู้จักอีกต่อไป: {


6
สิ่งที่คุณต้องการคือsudo update-initramfs -uหลังจากแก้ไขไฟล์ /etc/modeprobe.d/ แล้ว
Ivan Black
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.