Báo cáo môn HỆ ĐIỀU HÀNH Đề tài: Lập trình Driver cho USB MỤC LỤC MỤC LỤC II HÌNH ẢNH VÀ BẢNG BIỂU IV CHƯƠNG 1. TỔNG QUAN DEVICE DRIVER 1 1.1. CƠ BẢN VỀ DRIVER TRÊN LINUX 1 1.1.1. Định nghĩa Driver 1 1.1.2. Vai trò và nhiệm vụ của Driver 1 1.1.3. Mô hình phân lớp theo chiều dọc: 3 1.2. VIẾT DRIVER ĐẦU TIÊN TRÊN LINUX 5 1.2.1. Nạp động driver vào hệ thống 5 1.2.2. Viết driver đầu tiên 6 1.2.3. Biên dịch Driver đầu tiên: 7 1.3. LẬP TRÌNH C Ở TẦNG NHÂN 11 1.3.1. Ghi log thông điệp trong tầng nhân: 11 1.3.2. Một số mở rộng của GCC ở tầng nhân: 12 1.3.3. Sử dụng giá trị trả về cho các hàm ở tầng nhân: 13 1.3.4. Kernel C chính là pure C: 14 1.4. LINUX CHARACTER DRIVERS 15 1.4.1. Device file (device node): 15 1.4.2. Device number: 17 1.4.3. Cấu trúc của character driver: 17 1.4.4. Cấp phát tĩnh Device Number: 19 1.4.5. Cấp phát động Device number: 22 1.4.6. Tạo device file 23 1.4.7. Cấp phát bộ nhớ và khởi tạo thiết bị: 26 1.4.8. Đăng kí entry point open và release: 27 1.4.9. Đăng ký entry point read và write 31 CHƯƠNG 2. USB DEVICE DRIVER 36 2.1. CƠ BẢN VỀ USB 36 2.1.1. Định nghĩa USB 36 2.1.2. Chuẩn tín hiệu 36 2.1.3. Mô hình mạng: 36 2.1.4. Kịch bản hoạt động của USB 38 2.1.5. Chế độ truyền của USB 40 2.1.6. Quá trình nhận dạng thiết bị usb trên Linux 40 2.1.7. Giải mã thông tin về thiết bị USB 43 TÀI LIỆU THAM KHẢO 46 PHỤ LỤC 47
VIỆN ĐIỆN TỬ - VIỄN THÔNG MÔN: HỆ ĐIỀU HÀNH Đề tài: Lập trình Driver cho USB Giảng viên hướng dẫn: TS.NGUYỄN THANH BÌNH Nhóm: Họ tên sinh viên MSSV Nguyễn Hữu Hiếu 20182517 Nguyễn Cao Lương 20182671 Trần Quang Vinh 20182891 Nguyễn Bá Quý 20182747 Trần Văn Cương 20182394 Hà Nội-Tháng 10 Năm 2021 LỜI MỞ ĐẦU Hiện nay, với phát triển ngày nhanh hệ thống nhúng để đáp ứng lại thị trường, dễ dàng thấy hệ điều hành Linux xuất hầu hết thiết bị có cấu trúc phức tạp khả đáp ứng cao Việc tích hợp hệ điều hành lên hệ thống nhúng giúp đơn giản hóa q trình thiết kế sản phẩm, rút ngắn thời gian chi phí xây dựng hệ thống ứng dụng kế thừa ưu việt hệ điều hành nói chung Linux riêng Đó nhỏ gọn, ổn định, thực thi nhanh, đơn giản hóa khả can thiệp phần cứng Hơn nữa, với cộng đồng sử dụng Linux rộng lớn khắp giới phần mềm mã nguồn mở đa dạng làm cho việc phát triển hệ thống Linux nhúng chiến lược công ty lựa chọn hàng đầu Mặt khác, chuẩn giao tiếp USB (Universal Series Bus) trở thành chuẩn giao tiếp phổ biến Hiện tại, USB trở thành chuẩn kết nối phương thức truyền liệu thân thuộc với người dùng công nghệ nhờ vào thuận tiền, bền vững giá thành hợp lý Ngày chuẩn truyền thông USB lựa chọn hàng đầu cho giải pháp kết nối tới máy tính nhà phát triển Tuy nhiên việc viết Driver lại không đơn giản với kỹ sư công nghệ thơng tin, việc địi hỏi phải có nhìn bao quát hệ thống: từ mức firmware thiết bị tới kiến trúc hệ điều hành máy tính Chúng em định chọn đề tài “Viết driver viết USB” cho hệ điều hành làm tập lớn cho môn học Hệ điều hành Mặc dù cố gắng có khả báo cáo chúng em cịn thiếu sót, chúng em mong nhận đóng góp ý kiến đánh giá thầy cô người quan tâm đến đề tài chúng em, để báo cáo hoàn thiện Cuối cùng, chúng em xin chân thành cảm ơn thầy TS Nguyễn Thanh Bình định hướng đề tài giúp đỡ chúng em hoàn thành báo cáo MỤC LỤC MỤC LỤC II HÌNH ẢNH VÀ BẢNG BIỂU IV CHƯƠNG TỔNG QUAN DEVICE DRIVER 1.1 CƠ BẢN VỀ DRIVER TRÊN LINUX .1 1.1.1 Định nghĩa Driver 1.1.2 Vai trò nhiệm vụ Driver 1.1.3 Mơ hình phân lớp theo chiều dọc: .3 1.2 VIẾT DRIVER ĐẦU TIÊN TRÊN LINUX 1.2.1 Nạp động driver vào hệ thống 1.2.2 Viết driver .6 1.2.3 Biên dịch Driver đầu tiên: 1.3 LẬP TRÌNH C Ở TẦNG NHÂN 11 1.3.1 Ghi log thông điệp tầng nhân: 11 1.3.2 Một số mở rộng GCC tầng nhân: .12 1.3.3 Sử dụng giá trị trả cho hàm tầng nhân: 13 1.3.4 Kernel C pure C: 14 1.4 LINUX CHARACTER DRIVERS 15 1.4.1 Device file (device node): 15 1.4.2 Device number: 17 1.4.3 Cấu trúc character driver: 17 1.4.4 Cấp phát tĩnh Device Number: 19 1.4.5 Cấp phát động Device number: 22 1.4.6 Tạo device file 23 1.4.7 Cấp phát nhớ khởi tạo thiết bị: 26 1.4.8 Đăng kí entry point open release: 27 1.4.9 Đăng ký entry point read write .31 CHƯƠNG USB DEVICE DRIVER 36 2.1 CƠ BẢN VỀ USB .36 2.1.1 Định nghĩa USB 36 2.1.2 Chuẩn tín hiệu 36 2.1.3 Mơ hình mạng: 36 2.1.4 Kịch hoạt động USB .38 2.1.5 Chế độ truyền USB 40 2.1.6 Quá trình nhận dạng thiết bị usb Linux 40 2.1.7 Giải mã thông tin thiết bị USB 43 TÀI LIỆU THAM KHẢO 46 PHỤ LỤC 47 HÌNH ẢNH VÀ BẢNG BIỂU Hình 1.1 Tương tác thiết bị driver Hình 1.2 Các thành phần driver thên Linux Hình 1.3 Kiến trúc tổng quan nhân Linux .4 Hình 1.4 Xem module có sẵn Linux Hình 1.5 Xem module nạp Hình 1.6 Kết biên dịch file mymodule.ko Hình 1.7 Kiểm tra module nạp vào lệnh ls Hình 1.8 Nạp module .10 Hình 1.9 Gỡ module khỏi kernel 10 Hình 1.10 Xem thơng điệp ghi log từ kernel 12 Hình 1.11 Cài đặt kernel source .14 Hình 1.12 Kết nối tiến trình character device Linux .16 Hình 1.13 Một số device file 17 Hình 1.14 Danh sách thiết bị hoạt động hệ thống 21 Hình 15 Cấp phát tĩnh device number .22 Hình 16 Thông tin /proc/devices sau lắp vchar_driver.ko vào kernel 23 Hình 1.17 Tạo device file cơng cụ mknod 24 Hình 1.18 Tạo device file tự động 26 Hình 1.19 Các bước triển khai entry point read char driver 32 Hình 1.20 Biên dịch lắp vchar_driver vào kernel .34 Hình 1.21 Thực hàm entry point device file 35 Hình 2.1 Các đường tín hiệu chuẩn USB 36 Hình 2.2 Đồ hình mạng thiết bị hoạt động theo chuẩn USB 37 Hình 2.3 Thơng tin cấu hình thiết bị USB hoạt động với Interface 39 Hình 2.4 Hệ thống USB Linux .41 Hình 2.5 Xem thông tin thiết bị USB sử dụng lệnh lsusb .42 Hình 2.6 Thơng tin đặc tả thiết bị USB /proc/bus/usb/devices 43 Hình 2.7 Mơ hình biểu diễn tổng quan thiết bị USB .44 Bảng 1.1 Một số hàm marco làm việc với device number 20 CHƯƠNG TỔNG QUAN DEVICE DRIVER 1.1 Cơ driver Linux 1.1.1 Định nghĩa Driver Driver gì? Driver phần mềm, gồm lệnh, hướng dẫn CPU cách tương tác với thiết bị Các thiết bị chuột, bàn phím, ổ cứng, card mạng, loa, hình,… Ví dụ đơn giản: Máy tính bạn có card Wifi khơng cài driver máy tính khơng thể dùng Wifi 1.1.2 Vai trị nhiệm vụ Driver a) Vai trò driver Thông dịch qua lại hệ điều hành phần cứng máy tính, khơng có driver driver khơng với thiết bị hệ điều hành khơng thể nhận thiết bị, dẫn đến máy tính khơng sử dụng Driver trình điều khiển có vai trò điều khiển, quản lý, giám sát thực thể quyền Bus driver làm việc với đường bus, device driver làm việc với thiết bị (chuột, bàn phím, hình, đĩa cứng, camera, …) Có thể lấy ví dụ tương tự vai trị phi cơng hệ thống bay tự động giám sát phi công, thành phần phần cứng điều khiển driver điều khiển phần cứng khác mà driver quản lý Trường hợp này, phần cứng có vai trị điều khiển gọi device controller Bản thân controller cần driver Ví dụ: hard disk controller, display controller, audio controller, … quản lý thiết bị kết nối với chúng, mà nói cách kỹ thuật IDE controller, PCI controller, USB controller, SPI controller, I2C controller, … Các khái niệm minh họa tổng quan hình sau: Hình 1.1 Tương tác thiết bị driver Các device controller thông thường kết nối với CPU thông qua đường bus (PCI, IDE, USB, SPI, …) Trong vi điều khiển, CPU device controller thường thiết kế chip Điều cho phép giảm kích thước giá thành, phù hợp với phát triển hệ thống nhúng Mà mặt nguyên tắc, khác biệt tương đối lớn driver hệ thống máy tính cá nhân b) Hai nhiệm vụ driver: Các bus driver cung cấp giao diện đặc tả cho giao thức phần cứng tương ứng Nó nằm tầng mơ hình phân lớp phần mềm hệ điều hành Nằm device driver thực để vận hành thiết bị, mang đặc trưng thiết bị xác định Ngồi ra, mục đích quan trọng driver thiết bị cung cấp giao diện trừu tường hóa cho người sử dụng, tức cung cấp giao diện lên tầng hệ điều hành Một cách tổng quan, driver bao gồm phần quan trọng: Giao tiếp với thiết bị (Device-specific) Giao tiếp với hệ điều hành (OS-specific) Hình 1.2 Các thành phần driver thên Linux Thành phần giao tiếp với thiết bị (device-specific) driver giống tất hệ điều hành Nó hiểu giải mã thơng tin thiết bị (chi tiết kỹ thuật, kiểu thao tác, hiệu năng, cách lập trình giao tiếp với thiết bị, …) Thành phần giao tiếp với hệ điều hành (OS-specific) gắn kết chặt chẽ với chế hệ điều hành, khác driver Linux driver Windows, MacOS, … 1.1.3 Mơ hình phân lớp theo chiều dọc: Trên Linux, device driver cung cấp giao diện “system call” (giao diện gọi hàm hệ thống) đến tầng ứng dụng cho người dùng; coi ranh giới tầng nhân (kernel space) tầng người dùng (user space) Linux Mơ hình phân tầng hình vẽ Hình 1.3 Kiến trúc tổng quan nhân Linux Tùy thuộc vào đặc trưng driver với hệ điều hành, driver Linux chia làm loại (phân cấp theo chiều dọc): Driver hướng gói liệu (Packet-orented or the network vertical) Driver hướng khối liệu (Block-oriented or the storage vertical) Driver hướng byte/kí tự (Byte-oriented or the character vertical) Packet-oriented hay network driver gồm phần: Network protocol stack Network interface card (NIC) device drivers đơn giản network device driver (có thể Ethernet,Wi-fi, mạng giao tiếp khác, ….) Block-oriented hay storage driver gồm phần: File-system drivers để giải mã định dạng khác phân vùng lưu trữ khác (FAT, ext, …) Block device drivers cho giao thức phần cứng ứng với thiết bị lưu trữ khác (IDE, SCSI, MTD, …) Các Byte-oriented hay character driver lại tiếp tục phân chia thành lớp (sub-classified) tty driver, input driver, console driver, frame-buffer drivers, sound driver, … (tương ứng với giao tiếp RS232, PS/2, VGA, I2C, SPI, …) ... công nghệ thông tin, việc địi hỏi phải có nhìn bao quát hệ thống: từ mức firmware thiết bị tới kiến trúc hệ điều hành máy tính Chúng em định chọn đề tài “Viết driver viết USB? ?? cho hệ điều hành. .. cài driver máy tính khơng thể dùng Wifi 1.1.2 Vai trị nhiệm vụ Driver a) Vai trị driver Thơng dịch qua lại hệ điều hành phần cứng máy tính, khơng có driver driver khơng với thiết bị hệ điều hành. .. thao tác, hiệu năng, cách lập trình giao tiếp với thiết bị, …) Thành phần giao tiếp với hệ điều hành (OS-specific) gắn kết chặt chẽ với chế hệ điều hành, khác driver Linux driver Windows, MacOS,