Làm chủ Kernel Module trên Linux: Tuyệt chiêu xử lý Driver như một Pro

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Kịch bản kinh điển: Thiết bị “tàng hình” sau khi cắm

Bạn vừa gắn thêm một chiếc card mạng 10Gbps hoặc ổ cứng chuyên dụng vào server Ubuntu. Bạn tự tin gõ ip a hoặc lsblk nhưng màn hình trả về một con số 0 tròn trĩnh. Đừng vội kết luận phần cứng hỏng. Rất có thể, Linux đã nhận diện được thiết bị nhưng lại chưa biết dùng “phiên dịch viên” nào để giao tiếp.

Ngày trước, mình từng thức trắng đêm chỉ để debug một chiếc card Wifi Realtek chập chờn. Hóa ra, hệ thống nạp nhầm một driver cũ gây xung đột. Thay vì cài lại toàn bộ OS mất 2 tiếng, mình chỉ cần đúng 30 giây để xử lý nếu biết cách điều khiển Kernel Module. Đây là kỹ năng sống còn giúp bạn tiết kiệm hàng giờ vô ích.

Kernel Module: Tại sao không nạp tất cả driver một lúc?

Nhân Linux (Kernel) được xây dựng theo kiến trúc “monolithic” nhưng cực kỳ thông minh nhờ cơ chế Loadable Kernel Modules (LKM). Hãy tưởng tượng nếu Linux nạp sẵn driver cho mọi loại webcam, card đồ họa hay máy in trên thế giới, file nhân sẽ phình to hàng GB và ngốn sạch RAM ngay khi khởi động.

Cơ chế này giống như một bộ đồ nghề đa năng. Bình thường, bạn chỉ mang theo kìm và tua vít. Khi cần đục tường, bạn mới lắp thêm mũi khoan vào. Các module (thường có đuôi .ko – Kernel Object) chính là những mũi khoan đó: chỉ được nạp vào bộ nhớ khi hệ thống thực sự cần đến và có thể tháo ra ngay để giải phóng RAM.

Bộ công cụ “quyền lực” để điều khiển Kernel

Để tương tác với nhân, dân Sysadmin thường dùng bộ công cụ kmod. Dưới đây là những lệnh thực chiến nhất.

1. lsmod – Soi các module đang chạy

Muốn biết hệ thống đang nạp gì, hãy dùng lsmod. Lệnh này thực chất là đọc dữ liệu từ file ảo /proc/modules.

lsmod | grep -i nvidia

Cột Used by là quan trọng nhất. Nếu số lượng bằng 0, bạn có thể gỡ module đó ra an toàn. Nếu nó đang bị chiếm dụng bởi module khác, bạn phải gỡ “kẻ bám đuôi” đó trước.

2. modinfo – Tra cứu “lý lịch trích ngang”

Đừng nạp module lạ khi chưa biết nó là gì. Giả sử bạn muốn kiểm tra driver card mạng Intel e1000e:

modinfo e1000e

Kết quả sẽ cho bạn biết phiên bản (version), tác giả và đặc biệt là các tham số (parm). Nhiều lỗi driver biến mất chỉ bằng cách thay đổi một tham số nhỏ trong dòng parm này.

3. modprobe – “Nhạc trưởng” nạp và gỡ driver

Hãy quên lệnh insmod cũ kỹ đi. modprobe là lựa chọn thông minh hơn vì nó tự động giải quyết các phụ thuộc (dependencies). Nếu module A cần module B để chạy, modprobe sẽ tự nạp cả hai.

  • Nạp module: sudo modprobe wireguard
  • Gỡ module: sudo modprobe -r wireguard

Mẹo nhỏ: Nếu gỡ không được, hãy kiểm tra xem có tiến trình nào đang treo hoặc sử dụng phần cứng đó không bằng lệnh lsof.

Cấu hình vĩnh viễn: Không sợ mất sau khi Reboot

Mọi thay đổi bằng lệnh modprobe sẽ bốc hơi khi bạn khởi động lại máy. Để thiết lập “khắc cốt ghi tâm”, bạn cần can thiệp vào file hệ thống.

Tự động nạp module khi boot

Thay vì sửa file /etc/modules đã cũ, cách hiện đại là tạo một file riêng trong /etc/modules-load.d/. Ví dụ nạp driver nbd:

echo "nbd" | sudo tee /etc/modules-load.d/nbd.conf

Blacklist – “Cấm cửa” những driver gây lỗi

Đây là kỹ thuật điển hình khi cài đặt GPU NVIDIA trên Ubuntu. Driver mã nguồn mở nouveau thường tự nạp và chặn đứng driver chính chủ. Để cấm nó:

# Tạo file blacklist
sudo nano /etc/modprobe.d/blacklist-nouveau.conf

# Nội dung file
blacklist nouveau
options nouveau modeset=0

# Cập nhật lại bộ nhớ tạm của nhân (Bắt buộc)
sudo update-initramfs -u

Quy trình 4 bước xử lý lỗi Driver thần tốc

Khi một thiết bị cắm vào mà không chạy, hãy bình tĩnh thực hiện:

  1. Kiểm tra nhật ký nhân:dmesg -T | tail -n 20 để xem lỗi gần nhất.
  2. Xác định ID phần cứng: Dùng lspci -nn hoặc lsusb. Con số kiểu 8086:15d8 là mã định danh chính xác để tìm driver trên Google.
  3. Thử nạp thủ công: Dùng modprobe để kiểm tra xem driver có tương thích không.
  4. Cố định cấu hình: Đưa vào /etc/modprobe.d/ nếu mọi thứ đã ổn định.

Hiểu về Kernel Module giúp bạn không còn sợ hãi khi làm việc với phần cứng Linux. Hãy coi Kernel như một khối kiến trúc xếp hình Lego: bạn có quyền thêm, bớt hoặc thay đổi bất cứ mảnh ghép nào để đạt được hiệu năng cao nhất.

Share: