ฉันจะปิดการโหลดโมดูลเคอร์เนลที่ไม่จำเป็นได้อย่างไร เคอร์เนล 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' ignored
i915:
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/ แล้ว