Làm thế nào để danh sách đen các mô-đun hạt nhân?


Câu trả lời:


44

Lưu ý: danh sách đen sẽ không hoạt động đối với các mô-đun được tích hợp vào hình ảnh hạt nhân (nghĩa là không được tải qua một .kotệp riêng biệt . Cách duy nhất để vô hiệu hóa các mô-đun đó là thông qua một tham số kernel (nếu có) hoặc bằng cách biên dịch lại kernel.

Chỉ cần mở /etc/modprobe.d/blacklisttệp của bạn và thêm tên trình điều khiển bằng cú pháp sau:

blacklist driver-name

EDIT: Trong các phiên bản sau kể từ 12.10 (12.04?), Tệp là /etc/modprobe.d/blacklist.conf

Khởi động lại hộp của bạn và sử dụng lệnh lsmod để hiển thị trạng thái của các mô-đun trong Hạt nhân Linux

Lưu ý : đây driver-namelà tên của trình điều khiển danh sách đen mong muốn của bạn. Ví dụ: Nếu bạn muốn tắt trình điều khiển thẻ NIC, bạn có thể tìm tên trình điều khiển hạt nhân cho thẻ LAN của mình bằng cách sử dụng lệnh lspci -vlệnh trong thiết bị đầu cuối.
Ví dụ: đầu ra của tôi là:

........
........ 
Bộ điều khiển Ethernet 6: 00.0: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
    Hệ thống con: Thiết bị Lenovo 3861
    Cờ: chủ xe buýt, xe nhanh, độ trễ 0, IRQ 46
    Bộ nhớ ở b8000000 (64 bit, không thể tìm nạp trước) [size = 64K]
    ROM mở rộng tại [bị vô hiệu hóa]
    Khả năng: 
    Trình điều khiển hạt nhân đang sử dụng: tg3
    Mô-đun hạt nhân: tg3
........
........

Ở đây, tôi thấy tài xế là tg3. vì vậy bạn cần phải viết tg3(hoặc trình điều khiển của bạn) ở nơi driver-name.

Rất nhiều thông tin có thể được tìm thấy ở đây .


7
trong trường hợp của tôi ( Lubuntu 12.10), không có /etc/modprobe.d/blacklisttệp nào. Có một /etc/modprobe.d/blacklist.conftập tin
Abdull

1
Tốt hơn là giữ các mô-đun được liệt kê trong danh sách đen của người dùng trong một tệp riêng biệt để tránh xung đột trong quá trình nâng cấp (xem nhận xét này tại serverfault ).
Alexander Pozdneev

1
Các blacklist.conftập tin không cần phải tồn tại. Bạn có thể đặt một tập tin được gọi my-mom-is-awesomeở đó và nó sẽ hoạt động. Tạo bất cứ tên nào bạn thích nếu bạn muốn tạo một tệp cụ thể chỉ để đưa vào danh sách đen một điều cụ thể, như blacklist-nouveauhoặc bất cứ điều gì.
doug65536

@ doug65536 câu hỏi này đã được đăng 7 năm trước, tất nhiên mọi thứ sẽ thay đổi. Chỉ cần tạo một câu hỏi mới với phiên bản Ubuntu mà bạn có, để mọi người có thể giúp bạn
LnxSlck

@LnxSlck Tôi đã giải quyết sự nhầm lẫn lên tiếng trong các bình luận trước đó. Tôi không muốn giúp đỡ. Điều gì với nỗi ám ảnh về việc không đăng lên nội dung cũ? Chỉ cần để nó thối? Mọi người vẫn thấy điều này và những người khác sẽ có cùng câu hỏi tôi đã giải quyết.
doug65536

28

Bạn cũng có thể tạm thời liệt kê chúng vào dòng lệnh grub (dòng linux) khi bạn khởi động với cú pháp

module_to_blacklist.blacklist=yes

1
Cái này là "tạm thời" bao lâu? Cho đến khi khởi động tiếp theo?
Seth

1
Seth, nó chỉ là tạm thời cho khởi động đơn nếu bạn chỉnh sửa trong khi khởi động. Nếu bạn chỉnh sửa bằng /etc/grub.d/ scripts hoặc / etc / default / grub, thì đó là vĩnh viễn.
Peter

1
Rõ ràng điều này không hoạt động cho i915 : i915: unknown parameter 'blacklist' ignored.
Rafał Cieślak

5
Sự khác biệt giữa cái này và modprobe.blacklist=module_to_blacklistcái gì?
Zaz

4
hoặc sử dụng tham số kernel modprobe.blacklist=module_to_blacklist(xem man modprobechi tiết)
Karl Richter

11

Một cách khác để liệt kê các mô-đun trong ít nhất Ubuntu 16.04 LTS là thêm dòng sau vào dòng lệnh kernel:

modprobe.blacklist=MODULE_NAME

Sử dụng hệ thống / etc / modprobe là cách tốt nhất, nhưng đây là một cách thay thế có thể được sử dụng trong một nhúm bằng cách chỉnh sửa dòng lệnh GRUB của bạn khi khởi động.

Điều này cũng có thể được thực hiện vĩnh viễn bằng cách chỉnh sửa / etc / default / grub và thêm vào GRUB_CMDLINE_LINUX_DEFAULTbiến. Ví dụ: trong / etc / default / grub tôi có:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

Rồi tôi chạy update-grub2, rồi update-initramfs -u. Sau khi khởi động lại, bạn sẽ không có mô-đun, miễn là không có gì tải nó sau khi khởi động.

Phương pháp này cũng hoạt động trong các biến thể EL (RHEL, CentOS, SciLinux), nhưng bạn sẽ phải sử dụng các phương thức của distro đó để cập nhật grub và initrd.

(Lưu ý với những người đang cố gắng vào danh sách đen nouveau: Đảm bảo không tải X bằng cách chạy systemctl set-default multi-user.target, nếu không, khi X bắt đầu, nó sẽ tải lại nouveau!)


4

Trong các bản phát hành gần đây, bạn cần sử dụng chỉ thị cài đặt trong tệp danh sách đen của mình

install modulename /bin/false

Thay thế "tên mô-đun" ở trên bằng tên của mô-đun. Điều này sẽ ngăn chặn tải của nó.

Bạn có thể tìm thêm thông tin về chỉ thị cài đặt trong hướng dẫn sử dụng cho modprobe.conf

man modprobe.conf

2
Điều này rất hữu ích. Hóa ra ngay cả khi có một danh sách đen /etc/modprobe/blacklist.conf, mô-đun vẫn có thể được tải bằng tay modprobe <module_name>. Sử dụng install <module_name> /bin/falsephương pháp làm cho điều này thất bại như mong muốn.
RawwrBag

3

Không có giải pháp nào trong số này hoạt động trên 16.04 LTS cho i915.ko.

Giải pháp (bẩn) mà tôi tìm thấy là đổi tên

/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

Thật không may, màn hình VGA ngoài không được nhận diện nữa: {


6
Tất cả những gì bạn cần là sudo update-initramfs -usau khi sửa đổi các tập tin /etc/modepcoat.d/
Ivan Black
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.