ฉันจะปิดการโหลดโมดูลเคอร์เนลที่ไม่จำเป็นได้อย่างไร เคอร์เนล 3.2.4
ฉันจะปิดการโหลดโมดูลเคอร์เนลที่ไม่จำเป็นได้อย่างไร เคอร์เนล 3.2.4
คำตอบ:
หมายเหตุ: การขึ้นบัญชีดำจะไม่ทำงานสำหรับโมดูลที่สร้างไว้ในอิมเมจเคอร์เนล (เช่นไม่ได้โหลดผ่าน
.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ในสถานที่ของ
Lubuntu 12.10) ไม่มี/etc/modprobe.d/blacklistไฟล์ มี/etc/modprobe.d/blacklist.confไฟล์
blacklist.confไฟล์ไม่จำเป็นต้องมีอยู่ คุณสามารถวางไฟล์ชื่อmy-mom-is-awesomeตรงนั้นและมันก็ใช้ได้ สร้างชื่ออะไรก็ได้ที่คุณชอบถ้าคุณต้องการสร้างไฟล์เฉพาะเพื่อขึ้นบัญชีดำในบางสิ่งเช่นblacklist-nouveauหรืออะไรก็ตาม
คุณสามารถขึ้นบัญชีดำได้ชั่วคราวบนบรรทัดคำสั่ง grub (linux line) เมื่อคุณบูตด้วยไวยากรณ์
module_to_blacklist.blacklist=yes
i915: unknown parameter 'blacklist' ignoredi915:
modprobe.blacklist=module_to_blacklist?
modprobe.blacklist=module_to_blacklist(ดูman modprobeรายละเอียด)
อีกวิธีในการขึ้นบัญชีดำโมดูลอย่างน้อย 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 สตาร์ทมันจะโหลดนูโวอีกครั้ง!)
ในรีลีสล่าสุดคุณต้องใช้คำสั่งติดตั้งในไฟล์บัญชีดำของคุณ
install modulename /bin/false
แทนที่ "modulename" ด้านบนด้วยชื่อของโมดูล สิ่งนี้จะบังคับให้ป้องกันการโหลด
คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งการติดตั้งในคู่มือสำหรับ modprobe.conf
man modprobe.conf
/etc/modprobe/blacklist.conf modprobe <module_name>การใช้install <module_name> /bin/falseวิธีการทำให้สิ่งนี้ล้มเหลวตามที่ต้องการ
วิธีแก้ปัญหาเหล่านี้ไม่ทำงานกับ 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 ภายนอกไม่รู้จักอีกต่อไป: {
sudo update-initramfs -uหลังจากแก้ไขไฟล์ /etc/modeprobe.d/ แล้ว