III. Giao diện ioctl():
CHARACTER DEVICE DRIVER
Lập trình driver là một trong những cơng việc quan trọng mà một người lập trình hệ thống nhúng cần phải nắm vững. Để một chương trình ứng dụng hoạt động tối ưu, người lập trình phải biết phân cơng nhiệm vụ giữa driver và application sao cho hợp lý. Trong một ứng dụng điều khiển, nếu driver đảm trách nhiều chức năng thì chương trình trong
application sẽ trở nên đơn giản, nhưng bù lại tài nguyên phần cứng sẽ dễ bị xung đột, không thuận lợi cho các driver khác dùng chung tài nguyên. Ngược lại nếu driver chỉ thực hiện những cơng việc rất đơn giản, thì chương trình trong applicationtrở nên phức tạp, việc chuyển qua lại giữa các tiến trình trở nên khó khăn. Việc phân chia nhiệm vụ này địi hỏi phải có nhiều kinh nghiệm lập trình thực tế với hệ thống nhúng mới có thể đem lại hiệu quả tối ưu cho hệ thống.
Với những kiến thức tổng quát đã trình bày trong những phần trước về driver mà chủ yếu là character device driver, chúng ta đã có những khái niệm ban đầu về vai trò của driver trong hệ thống nhúng, cách thức điều khiển thiết bị vật lý, các giao diện giao tiếp thông tin giữa user space và kernel space, ... trong phần này chúng ta sẽ đi vào các bước cụ thể để viết hoàn chỉnh một character device driver.
Công việc phát triển một ứng dụng điều khiển mới thường tiến hành theo những bước sau:
Tìm hiểu nhu cầu điều khiển ngoài thực tế: Từ hoạt động thực tiễn hay đơn đặt hàng xác định yêu cầu, thời gian thực hiện, giá cả chi phí, ...
Phân tích yêu cầu điều khiển: Từ những yêu cầu giới hạn về thời gian, chi phí, chất lượng, người lập trình tìm ra phương pháp tối ưu hóa hệ thống, lựa chọn công nghệ phù hợp, ...; Lập danh sách các yêu cầu cần thực hiện trong hệ thống điều khiển;
Phân công nhiệm vụ điều khiển giữa application và driver để hệ thống hoạt động tối ưu;
Lập trình drivertheo những yêu cầu được lập;
Lập trình applicationsử dụng driverhồn tất chương trình điều khiển;
Chạy kiểm tra độ tin cậy hệ thống;
Giao cho khách hàng sử dụng, bào trì sửa chữa khắc phục lỗi khi thực thi;
Chúng ta đang tập trung nghiên cứu bước lập trình driver, khi đã có những yêu cầu cụ thể. Trong bước này, có rất nhiều cách thực hiện, tuy nhiên nhìn chung đều có những thao tác căn bản sau:
1. Viết lưu đồ hoặc máy trạng thái thực thi cho dirver; 2. Lập trình mã lệnh;
3. Biên dịch driver;
4. Cài đặt vào hệ thống linux;
5. Viết chương trình ứng dụng kiểm tra hoạt động driver;
6. Nếu đạt yêu cầu gán cố định vào cấu trúc kernellinux, biên dịch lại nhân để driver hoạt động lâu dài trong hệ thống; Nếu không tiến hành chỉnh sửa, kiểm tra cho đến khi hoàn thiện;
Trong đó các bước 1, 5, 6 chúng ta đã có dịp nghiên cứu trong phần I lập trình nhúng căn bản hoặc trong các tài liệu chuyên ngành khác. Phần này chúng ta sẽ tìm hiểu chi tiết các bước 2, 3, và 4;