Showing posts with label kernel. Show all posts
Showing posts with label kernel. Show all posts

Tuesday, 5 August 2008

Linux loadable kernel modules (LKM)

4. Công cụ LKM

Chương trình cần để load, unload và thực hiện các tác vụ khác với LKM nằm trong gói modutils. Bạn có thể tìm thấy gói này trong thư mục modutils tại đây

Gói này chứa những chương trình sau giúp bạn sử dụng LKM:

insmod gắn một LKM vào kernel
rmmod gỡ một LKM khỏi kernel
depmod xác định sự phụ thuộc lẫn nhau giữa các LKM
kerneld chương trình kernel daemon
ksyms thể hiện các symbol được kernel xuất ra để các LKM mới sử dụng
lsmod liệt kê các LKM đang được load
modinfo thể hiện nội dung của phần .modinfo trong file object LKM
modprobe gắn hoặc gỡ một LKM hay một bộ các LKM một cách thông minh. Ví dụ, nếu bạn phải load A trước khi load B, modprobe sẽ tự động load A rồi mới load B.

Thay đổi trên kernel thường yêu cầu kèm theo thay đổi trên modutils, vì vậy hãy chắc chắn bạn đang sử dụng phiên bản mới nhất của modutils khi bạn nâng cấp kernel. modutils luôn luôn tương thích ngược (hoạt động với các kernel cũ hơn).

Cảnh báo: modprobe sẽ khởi động insmod với vị trí cố định trong code là /sbin/insmod. Có thể có những PATH không được modutils sử dụng để tìm kiếm chương trình. Vì vậy hãy chỉnh sửa code của modutils trước khi bạn xây dựng, hoặc bảo đảm bạn sẽ cài đặt chương trình vào các thư mục truyền thống.

Linux loadable kernel modules (LKM)

vietnamized and note-taking version of Linux Loadable Kernel Module HOWTO

3.Tạo LKM


Một LKM nằm trong một file đối tượng ELF (thường được đặt tên theo dạng serial.o) Thông thường bạn lưu tất cả file object LKM trong một thư mục nhất định (gần file image của kernel cơ sở). Khi dùng chương trình insmod để chèn một LKM vào kernel, bạn cần đưa vào tên của file đối tượng đó.

Đối với các LKM là một phần của linux, bạn xây dựng chúng cùng lúc với việc tạo image của kernel cơ sở. Đọc file README trong cây thư mục chứa source Linux. Ngắn gọn, sau khi tạo image cho kernel cơ sở với một lệnh (chẳng hạn như make zImage, bạn sẽ tạo tiếp tất cả các LKM với lệnh

make modules

Lệnh này sẽ cho ra một loạt các file đối tượng LKM *.o trong cây thư mục chứa source Linux. (Trong những phiên bản cũ của Linux, sẽ có link trong thư mục modules trỏ đến tất cả các file này. Những LKM này đã sẵn sàng để được load, nhưng có thể bạn sẽ muốn cài đặt chúng trong những thư mục thích hợp hơn.

Một trong những công việc cần làm để cấu hình kernel (lúc xây dựng) là chọn những phần nào của kernel để đưa vào kernel cơ sở và những phần nào để tạo LKM độc lập. Trong quá trình cấu hình cơ bản theo dạng hỏi-trả lời ( make config ), với mỗi phần tuỳ chọn của kernel, bạn sẽ được chọn Y - để tích hợp vào kernel cơ sở, hay M - để tạo module độc lập, hay N - bỏ qua hoàn toàn. Những cách cấu hình khác cũng tương tự.

Như đã giải thích trong phần 2.3, bạn chỉ nên đưa vào kernel cơ sở những phần tối thiểu, và bỏ qua những phần chắn chắn là bạn không cần tới. Không mất mát gì nhiều nếu bạn tạo một LKM mà bạn không dùng tới. Chỉ là một ít thời gian biên tập (compile), một ít không gian lưu trữ, và khả năng lỗi trong module đó làm cản trở quá trình xây dựng kernel.

Cũng trong bước cấu hình, bạn phải chọn có sử dụng symbol versioning hay không. Lựa chọn này ảnh hường đến cả việc xây dựng kernle cơ sở lẫn LKM, và bạn nhất thiết phải chọn đúng. (Xem phần 6).