Giới thiệu
Tác giả
- Linux Kernel Module Programming Guide ban đầu do Ori Pomerantz viết cho Linux v2.2
- Peter Jay Salzman đã cập nhật cho Linux v2.4
- Michael Burian đồng bảo trì cho Linux v2.6
- Bob Mottram cập nhật các ví dụ cho các phiên bản từ Linux v3.8 trở đi
- Jim Huang cập nhật cho các phiên bản Linux gần đây (v5.0 trở lên) và chỉnh sửa tài liệu LaTeX
Lời cảm ơn
- Nhiều cộng tác viên đã cung cấp các bản sửa lỗi và đề xuất
Mô-đun nhân là gì?
- Mô-đun nhân Linux là các đoạn mã có thể được nạp và gỡ khỏi nhân một cách động khi cần
- Mô-đun nhân mở rộng chức năng của nhân mà không cần khởi động lại hệ thống
- Nếu không có mô-đun, mỗi khi thêm chức năng mới bạn phải biên dịch lại nhân và khởi động lại hệ thống
Gói mô-đun nhân
- Ubuntu/Debian:
sudo apt-get install build-essential kmod
- Arch Linux:
sudo pacman -S gcc kmod
Nhân của tôi có những mô-đun nào?
- Có thể dùng lệnh
lsmod để kiểm tra các mô-đun hiện đang được nạp trong nhân
- Cũng có thể kiểm tra trong tệp
/proc/modules
Có cần tải xuống và biên dịch nhân không?
- Không cần tải xuống và biên dịch nhân để làm theo hướng dẫn này
- Chạy các ví dụ trên một bản phân phối dùng để thử nghiệm sẽ an toàn hơn
Trước khi bắt đầu
- Cần lưu ý các vấn đề như quản lý phiên bản mô-đun, sử dụng X Window System, SecureBoot, v.v.
Header
- Cần cài đặt các tệp header của nhân
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r)
- Arch Linux:
sudo pacman -S linux-headers
- Fedora:
sudo dnf install kernel-devel kernel-headers
Ví dụ
- Tất cả ví dụ đều nằm trong thư mục con
examples của tài liệu
Hello World
Mô-đun đơn giản nhất
- Tạo và biên dịch tệp
hello-1.c
- Giải thích cách nạp và gỡ mô-đun
Hello và Goodbye
- Ví dụ sử dụng các macro
module_init và module_exit
Các macro __init và __exit
- Macro
__init giải phóng bộ nhớ sau khi hàm khởi tạo hoàn tất
- Macro
__exit bỏ qua hàm nếu mô-đun được tích hợp sẵn vào nhân
Giấy phép và tài liệu hóa mô-đun
- Dùng macro
MODULE_LICENSE để chỉ định giấy phép của mô-đun
- Ví dụ dùng các macro
MODULE_AUTHOR, MODULE_DESCRIPTION
Truyền đối số dòng lệnh
- Dùng macro
module_param để truyền đối số dòng lệnh cho mô-đun
- Dùng macro
MODULE_PARM_DESC để thêm mô tả cho đối số
Mô-đun trải trên nhiều tệp
- Ví dụ về mô-đun nhân được chia thành nhiều tệp mã nguồn
Xây dựng mô-đun cho nhân đã biên dịch sẵn
- Giải thích cách xây dựng mô-đun cho nhân đã được biên dịch sẵn
Tóm tắt của GN⁺
- Hướng dẫn này là một tài liệu chỉ dẫn toàn diện về lập trình mô-đun nhân Linux, bao quát từ các khái niệm cơ bản đến chủ đề nâng cao kèm nhiều ví dụ
- Thông qua mô-đun nhân, có thể mở rộng chức năng của nhân mà không cần khởi động lại hệ thống, đây là một lợi thế lớn cho nhà phát triển
- Cần hiểu rõ và tuân thủ các lưu ý như quản lý phiên bản mô-đun, SecureBoot, v.v.
- Các dự án liên quan gồm có Linux Device Drivers, The Linux Programming Interface, v.v.
1 bình luận
Ý kiến trên Hacker News
qemulà một cách tốt để trải nghiệm kernel hacking