Trong phần I, chúng ta đã trình bày hai cấu trúc chung để viết hoàn chỉnh một
character device driver, mỗi cấu trúc đều có những ưu và nhược điểm riêng. Những ưu
và nhược điểm này còn được biểu hiện rõ trong việc cài đặt drivervào hệ thống.
Sau khi đã biên dịch thành công driver, xuất hiện tập tin .ko trong thư mục chứa tập tin mã nguồn, chúng ta dùng những câu lệnh trong shell để hồn tất cơng đoạn cuối cùng đưa driver vào hoạt động trong hệ thống, tiến hành kiểm tra chức năng. Tùy theo kỹ thuật áp dụng lập trình drivermà sẽ có những thao tác cài đặt khác nhau:
1. Cài đặt driver khi áp dụng cấu trúc dạng 1:
Tiến hành theo các bước sau:
- Di chuyển đến thư mục chứa tập tin .ko vừa biên dịch xong; - Tại dòng lệnh shell, thực thi: insmod <tên driver>.ko;
- Vào tập tin /proc/devices tìm tên thiết bị vừa cài đặt vào hệ thống, xác định số
Majorvà số Minorđộng của thiết bị;
- Sử dụng câu lệnh trong shell: mknod /dev/<tên thiết bị> c <Số
Major> <Số Minor>, tạo inode trong thư mục /dev/, làm tập tin thiết bị sử dụng
cho những chương trình ứng dụng;
2. Cài đặt driver khi áp dụng cấu trúc dạng 2:
- Di chuyển đến thư mục chứa tập tin .ko vùa biên dịch xong; - Tại dòng lệnh shell, thực thi lệnh: insmod <tên driver>.ko;
Khi đó, cấu trúc inode tự động được tạo ra trong thư mục /dev/liên kết với số định danh thiết bị lưu trong tập tin /proc/devices mà không cần phải thông qua những câu lệnh shell khác như trong cách 1. Như vậy, với cấu trúc dạng 2 thời gian cài đặt driver vào hệ thống được rút gọn đáng kể.
IV. Tổng kết:
Từ những kiến thức lý thuyết nền tảng trong những bài trước, chúng ta đã rút ra được những bước tổng qt để lập trình hồn chỉnh một character device driver. Có nhiều cách để viết ra một character driver, trong bài này chỉ đề cập 2 cách căn bản làm nền tảng cho các bạn nghiên cứu thêm những cách khác hiệu quả hơn ngoài thực tế.
Trong bài sau, chúng ta sẽ thực hành viết một character device driver mang tên là
helloworld. Drivernày sẽ áp dụng tất cả những kỹ thuật đã được học. Nếu cần thiết, các bạn có thể xem lại lý thuyết cũ trước khi qua bài sau để nắm được những vấn đề cốt lõi trong lập trình driver.
BÀI 6
HELLO WORLD DRIVERI. Mở đầu: I. Mở đầu:
Đến đây, chúng ta đã có được những kiến thức gần như đầy đủ để tự mình viết một
character device driver. Các bạn đã biết thế nào là character driver, số định danh lệnh,
số định danh thiết bị, cấu trúc inode, file structure,...cũng như những lệnh khởi tạo và cập nhật chúng. Với những yêu cầu của từng lệnh, chúng ta đã rút ra được hai cấu trúc chung khi muốn viết một driverhồn chỉnh, đã được tìm hiểu trong bài trước. Tùy vào từng cấu trúc mà có các bước cài đặt driverkhác nhau. Thế nhưng, chúng ta chỉ mới dừng lại các thao tác trên giấy, chưa thực sự lập trình ra được một driver nào. Trong bài này, chúng ta sẽ viết một dự án có tên helloworld nhằm mục đích thực tế hóa những thao tác lệnh đã được trình bày trong phần driver.
Với mục đích là đem những thao tác lệnh đã được học vào thực tế chương trình, dự án này bao gồm có hai thành phần cần hồn thành đó là driver và user application. Driver trong dự án sẽ áp dụng 3 giao diện chính dùng để trao đổi thông tin dữ liệu và điều khiển qua lại giữa hai lớp user và kernel, đó là các giao diện hàm read(), write() và ioctl() cùng với các hàm đóng mở driver như open() hay close(). Chương trình ứng dụng (Application) sẽ áp dụng những hàm về truy cập tập tin, ... để truy xuất những thơng tin trong driver, hiển thị cho người dùng. Ngồi ra, driver và application đều có nhiệm vụ xuất thơng tin có liên quan để người lập trình biết mơi trường nào đang thực thi.
Theo những yêu cầu trên, đầu tiên chúng ta sẽ phân công tác vụ cho driver và
application trong mục II sau đó lập trình theo những tác vụ đã phân cơng trong mục III. Người lập trình sẽ biên dịch, cài đặt chương trình vào hệ thống linux, thực thi và quan sát kết quả. Từ đó giải thích rút ra nhận xét.