2 điểm bởi GN⁺ 2024-07-28 | 1 bình luận | Chia sẻ qua WhatsApp

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_initmodule_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

 
GN⁺ 2024-07-28
Ý kiến trên Hacker News
  • Có ý kiến cho rằng ví dụ "Detecting button presses" khá khó vì cần build module cho RPi
    • qemu là một cách tốt để trải nghiệm kernel hacking
  • Có ý kiến cho rằng Linux Foundation nên tài trợ cho việc cập nhật sách LDD (linux device driver) và sách về Linux kernel
  • Chia sẻ trải nghiệm từ một người dùng nói rằng họ đã đọc nó lần đầu cách đây 22 năm
  • Có tin rằng bản cập nhật mới nhất của sách The Linux Memory Manager là vào đầu tháng 7 và hiện đang được biên tập
  • Có những câu hỏi chung về lập trình Linux kernel, ví dụ như hacking hệ thống tệp hoặc quản lý bộ nhớ
    • Từng có cuốn "Linux Kernel Development" của Robert Love, nhưng có lẽ không còn được cập nhật nữa
  • Có lời khen dành cho tutorial chi tiết và thiên về thực hành về cách build kernel module ngay lập tức
  • Có câu hỏi về việc liệu tác giả có dùng LLM để viết hoặc cải thiện văn bản hay không