Bài tập lớn môn Hệ điều hành _ đề tài: VIẾT USB KEYBOARD DRIVER LỜI NÓI ĐẦU Lập trình hệ thống nhúng, một trong những công việc quan trọng nhất với chúng ta đó chính là lập trình ghép nối, điều khiển các module, các thiết bị ngoại vi ghép nối với hệ trung tâm. Để có thể làm được việc này, ngoài các kỹ năng lập trình chúng ta còn cần phải thành thạo về các giao thức ghép nối phổ biến như RS232, SPI, I2C và đặc biệt hiện nay nhu cầu tất yếu chúng ta phải tìm hiểu về chuẩn USB vì đây có thể nói là một trong các chuẩn phổ biến nhất hiện nay. Tìm hiểu chuẩn USB sẽ giúp cho chúng ta có kiến thức để có thể làm được rất nhiều công việc như: thiết kế, chế tạo thiết bị hoạt động theo chuẩn USB, viết driver cho thiết bị giao tiếp theo chuẩn USB... Tìm hiểu về hệ điều hành và vận dụng các kiến thức đã học trên giảng đường nên nhóm em lựa chọn đề tài: “Viết Driver cho USB trên Ubuntu”. Đề tài nhóm hướng đến driver đơn giản để tìm hiểu quá trình hệ thống Linux làm việc với thiết bị USB. Driver hướng đến các chức năng sau: đăng kýhủy đăng ký, ngắt kết nối, lấy thông tin, mở tập tin từ thiết bị, đọcghi dữ liệu với thiết bị. Nhóm chúng em xin gửi lời cảm ơn chân thành đến TS. Nguyễn Thanh Bình đã hướng dẫn, đưa ra tiến trình tìm hiểu đề tài cụ thể để nhóm chúng em có thể hoàn thành được mục tiêu của bài tập lớn. Trong quá trình thực hiện đề tài, nhóm chúng em đã cố gắng nhưng không thể tránh khỏi những thiếu sót. Chúng em rất mong nhận được chỉ dẫn và góp ý của các thầy để đề tài ngày càng hoàn thiện hơn. Chúng em xin chân thành cảm ơn.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
MÔN: HỆ ĐIỀU HÀNH
Đề tài:
VIẾT DRIVER CHO USB TRÊN UBUNTU
Giảng viên hướng dẫn: TS Nguyễn Thanh Bình Nhóm: 1
1 Phạm Thị Thanh Huyền
20182593
Hà Nội, 10/2021
Trang 2LỜI NÓI ĐẦU
Lập trình hệ thống nhúng, một trong những công việc quan trọng nhất với chúng ta đóchính là lập trình ghép nối, điều khiển các module, các thiết bị ngoại vi ghép nối với hệtrung tâm Để có thể làm được việc này, ngoài các kỹ năng lập trình chúng ta còn cần phảithành thạo về các giao thức ghép nối phổ biến như RS232, SPI, I2C và đặc biệt hiện naynhu cầu tất yếu chúng ta phải tìm hiểu về chuẩn USB vì đây có thể nói là một trong cácchuẩn phổ biến nhất hiện nay Tìm hiểu chuẩn USB sẽ giúp cho chúng ta có kiến thức để
có thể làm được rất nhiều công việc như: thiết kế, chế tạo thiết bị hoạt động theo chuẩnUSB, viết driver cho thiết bị giao tiếp theo chuẩn USB
Tìm hiểu về hệ điều hành và vận dụng các kiến thức đã học trên giảng đường nênnhóm em lựa chọn đề tài: “Viết Driver cho USB trên Ubuntu” Đề tài nhóm hướng đếndriver đơn giản để tìm hiểu quá trình hệ thống Linux làm việc với thiết bị USB Driverhướng đến các chức năng sau: đăng ký/hủy đăng ký, ngắt kết nối, lấy thông tin, mở tập tin
từ thiết bị, đọc/ghi dữ liệu với thiết bị
Nhóm chúng em xin gửi lời cảm ơn chân thành đến TS Nguyễn Thanh Bình đã hướngdẫn, đưa ra tiến trình tìm hiểu đề tài cụ thể để nhóm chúng em có thể hoàn thành đượcmục tiêu của bài tập lớn Trong quá trình thực hiện đề tài, nhóm chúng em đã cố gắngnhưng không thể tránh khỏi những thiếu sót Chúng em rất mong nhận được chỉ dẫn vàgóp ý của các thầy để đề tài ngày càng hoàn thiện hơn
Chúng em xin chân thành cảm ơn
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 2
MỤC LỤC 3
PHÂN CÔNG CÔNG VIỆC 4
Chương 1: TỔNG QUAN VỀ USB 5
1.1 Giới thiệu về USB 5
1.1.1.Định nghĩa USB: 5
1.1.2 Cấu tạo USB: 7
1.2 Chuẩn tín hiệu 7
1.3 Mô hình mạng 8
1.4 Quá trình hoạt động của chuẩn USB 10
1.5 Chế độ truyền 11
1.6 Mô tả thiết bị 12
1.6.1 Standard USB descriptors (Mô tả chuẩn USB) 12
1.6.2 Human Interface Devices (HID) 15
Chương 2: VIẾT DRIVER CHO UBUNTU 16
2.1 Quá trình nhận dạng USB trên Linux 16
2.2 Quy trình viết Drive trên Ubuntu 17
2.2.1 Lấy thông tin thiết bị USB giao tiếp (USB device) 17
2.2.2 Khai báo danh sách các thiết bị có thể được điều khiển bởi Driver 18
2.2.3 Khai báo cấu trúc dữ liệu liên quan đến thiết bị 19
2.2.4 Đăng kí và hủy đăng kí USB Device Driver 20
2.2.5 Hàm ngắt kết nối thiết bị 21
2.2.6 Hàm thăm dò thiết bị (Probe) 21
2.2.7Đăng ký lớp thiết bị 22
2.2.8Hành động mở tệp tin thiết bị 23
Trang 42.2.9Hành động đọc ghi 23
TÀI LIỆU THAM KHẢO 25
Trang 5PHÂN CÔNG CÔNG VIỆC
1 Phạm Thị Thanh Huyền - Tổng quan về USB
- Khai báo cấu trúc dữ liệu liên quan đến thiết bị
- Đăng kí và hủy đăng kí USB Device Driver
- Hành động mở tệp tin thiết bị
- Khai báo danh sách các thiết bị có thể được điều khiển bởi Driver
- Hàm ngắt kết nối thiết bị
- Hàm thăm dò thiết bị (Probe)
- Lấy thông tin thiết bị USB giao tiếp (USB device)
- Đăng ký lớp thiết bị
- Hành động đọc ghi
Trang 6Chương 1: TỔNG QUAN VỀ USB
1.1 Giới thiệu về USB
1.1.1 Định nghĩa USB:
USB là thiết bị lưu trữ di động và cũng là công cụ để kết nối giữa nhiều thiết bị ngoại
vi với máy tính USB được phát triển để đơn giản hóa và cải thiện giao diện giữa máy tính
cá nhân và thiết bị ngoại vi
USB (Universal Serial Bus) là một chuẩn kết nối có dây trong máy tính, sử dụng nhằmkết nối giữa các điểm kỹ thuật của máy tính với các thiết bị ngoại vi Vào cuối năm 1994
đã được đề xuất bởi Intel, Compaq, IBM, Microsoft và các công ty khác Bây giờ, USBtrở thành một giao diện mở rộng máy tính tiêu chuẩn của thế kỷ XXI và phiên bản 3.1 đãđược tung ra thị trường
USB có thể kết nối với 127 thiết bị bên ngoài mà không làm giảm băng thông USBđòi hỏi sự hỗ trợ của phần cứng máy chủ, hệ điều hành và thiết bị ngoại vi để làm việcđúng cách Giao diện USB cũng có thể đạt được kết nối hai máy tính thông qua cápchuyên dụng và tạo ra giao diện bổ sung nhiều hơn thông qua Hub
Ưu điểm
Giao diện USB có thể tự cấu hình, giúp người dùng không cần phải điều chỉnh càiđặt của thiết bị về tốc độ hoặc định dạng dữ liệu, hoặc định cấu hình ngắt, địa chỉđầu vào/ra hoặc kênh truy cập bộ nhớ trực tiếp
Đầu nối USB được tiêu chuẩn hóa tại máy chủ, vì vậy bất kỳ thiết bị ngoại vi nàocũng có thể sử dụng hầu hết các ổ cắm có sẵn
USB tận dụng tối đa sức mạnh xử lý bổ sung có thể được đưa vào các thiết bịngoại vi để chúng có thể tự quản lý Do đó, các thiết bị USB thường không có càiđặt giao diện người dùng điều chỉnh
Giao diện USB xác định các giao thức để khôi phục từ các lỗi phổ biến, cải thiện
độ tin cậy so với các giao diện trước đó
Tiêu chuẩn USB cũng cung cấp nhiều lợi ích cho các nhà sản xuất phần cứng vànhà phát triển phần mềm, đặc biệt là ở sự dễ thực hiện tương đối
Tiêu chuẩn USB loại bỏ yêu cầu phát triển các giao diện độc quyền cho các thiết bịngoại vi mới
Trang 7 Giao diện USB có thể được thiết kế để cung cấp độ trễ khả dụng tốt nhất cho cácchức năng quan trọng về thời gian hoặc có thể được thiết lập để thực hiện chuyển
dữ liệu hàng loạt trong nền mà ít ảnh hưởng đến tài nguyên hệ thống
Tiêu chuẩn USB cũng cung cấp nhiều lợi ích cho các nhà sản xuất phần cứng và nhàphát triển phần mềm, đặc biệt là ở sự dễ dàng thực hiện:
Tiêu chuẩn USB loại bỏ yêu cầu phát triển các giao diện độc quyền cho các thiết bịngoại vi mới
Giao diện USB có thể được thiết kế để cung cấp độ trễ tốt nhất cho các chức năngquan trọng về thời gian hoặc có thể được thiết lập để thực hiện chuyển dữ liệuhàng loạt trong nền mà ít ảnh hưởng đến tài nguyên hệ thống
Hạn chế
Như với tất cả các tiêu chuẩn, USB có nhiều hạn chế đối với thiết kế của nó:
Cáp USB có chiều dài hạn chế, vì tiêu chuẩn này dành cho các thiết bị ngoại vi trêncùng một mặt bàn, không phải giữa các phòng hoặc tòa nhà Tuy nhiên, một cổngUSB có thể được kết nối với một cổng truy cập các thiết bị ở xa
USB có cấu trúc liên kết mạng cây nghiêm ngặt và giao thức chủ / tớ để định địachỉ các thiết bị ngoại vi; các thiết bị đó không thể tương tác với nhau ngoại trừthông qua máy chủ lưu trữ và hai máy chủ không thể giao tiếp trực tiếp qua cổngUSB của chúng
Máy chủ lưu trữ không thể phát tín hiệu đến tất cả các thiết bị ngoại vi cùng mộtlúc mỗi thiết bị phải được định địa chỉ riêng Một số thiết bị ngoại vi tốc độ rất caoyêu cầu tốc độ ổn định không có trong tiêu chuẩn USB
1Hình 1.1.Thiết bị USB
Trang 81.1.2 Cấu tạo USB:
Thông thường gồm các bộ phận sau:
Bản mạch in nhỏ: chứa các linh kiện điện tử cùng một (hoặc nhiều) chip nhớ flash
hàn trực tiếp lên mạch in
Đầu cắm kết nối với các cổng USB: các kết nối thường sử dụng chuẩn A cho
phép chúng kết nối trực tiếp với các khe cắm USB trên máy tính
Vỏ bảo vệ: Toàn bộ bản mạch in, chip nhớ flash nằm trong một vỏ bảo vệ kim loại
hoặc nhựa giúp nó đủ chắc chắn
Lẫy gạt chống ghi: Một số ổ USB flash có thiết kế lẫy gạt để chống ghi dữ liệu,
không cho phép hệ điều hành ghi hoặc sửa đổi dữ liệu vào ổ
Đèn báo hoạt động: Người sử dụng nên tự quan sát USB của mình vài lần để biết
được quy luật hoạt động của đèn báo và tránh tháo thiết bị khi chúng đang làmviệc
Hình 1.2 Cấu tạo
1.2 Chuẩn tín hiệu
Chuẩn USB sử dụng 4 đường tín hiệu trong đó có 2 đường cấp nguồn DC (VBUS-5V
và GND) 2 đường còn lại là một cặp tín hiệu vi sai (D+ và D-) cho phép truyền dữ liệu.Cặp dây tín hiệu này được nối xoắn ở bên trong nên có khả năng chống nhiễu tốt
Trang 9Lưu ý: cổng USB trên máy tính cho phép cấp nguồn nuôi ra bên ngoài với dòng lên tới500mA Như vậy, các thiết bị sử dụng ít điện năng như chuột, thẻ nhớ USB đều có thểlấy trực tiếp nguồn từ cổng USB của máy tính mà không cần dùng thêm nguồn ngoài.
Hình 1.3 Chuẩn tín hiệu USB
1.3 Mô hình mạng
Hình 1.4 Mô hình mạng các thiết bị theo chuẩn USB
Các thiết bị hoạt động theo chuẩn USB được kết nối với nhau theo đồ hình mạng hìnhsao phân cấp. Trung tâm của mỗi hình sao này là các Hub Trong đồ hình trên, các thiết
bị USB được chia làm 3 loại chính:
USB Host: thiết bị đóng vai trò điều khiển toàn bộ mạng USB (có thể lên tới tối đa
126 thiết bị) Ví dụ như trên máy tính, USB Host được gắn trên mainboard Đểgiao tiếp và điều khiển các USB device, USB Host controller cần được thiết kế tích
Trang 10hợp với USB RootHub (Hub mức cao nhất) Vai trò của thiết bị USB Host nhưsau:
- Trao đổi dữ liệu với các USB Device
- Điều khiển USB Bus
- Quản lý các thiết bị cắm vào hay rút ra khỏi Bus USB qua quá trình điểmdanh (Enumeration)
- Phân xử, quản lý luồng dữ liệu trên Bus, đảm bảo các thiết bị đều có cơ hộitrao đổi dữ liệu tùy thuộc vào cấu hình của mỗi thiết bị
Ngày nay bộ điều khiển máy chủ USB được tích hợp trên hầu hết các chipset
bo mạch chủ Các bo mạch cũ không được trang bị bộ điều khiển như vậy có thểđược nâng cấp bằng PCI cards với các bộ điều khiển máy chủ đó Tất cả các bộđiều khiển này tương thích với tiêu chuẩn Open Host Controller Interface (OHCIcủa Compaq, Microsoft và National Semiconductor) hoặc Universal HostController Interface (UHCI by Intel) Cả hai loại đều có khả năng tương đươngnhau và thiết bị USB không phải quan tâm đến bộ điều khiển máy chủ Về cơ bảnphần cứng của UHCI đơn giản hơn và do đó nó cần driver phức tạp hơn, có thểkhiến CPU quá tải
USB Device: là các thiết bị đóng vai trò như các slave giao tiếp với USB Host Các
thiết bị này hoàn toàn đóng vai trò bị động, không bao giờ được tự ý gửi gói tin lênUSB Host hay gửi gói tin giữa các USB Device với nhau, tất cả đều phải thông quaquá trình điều phối của USB Host Chức năng của thiết bị USB Device như sau:
- Trao đổi dữ liệu với USB Host
- Phát hiện gói tin hay yêu cầu từ USB Host theo giao thức USB
- Có nhiều loại thiết bị USB khác nhau vì chúng có thể được sử dụng chonhững mục đích khác nhau Đầu tiên, một thiết bị có thể tự cấp nguồn, chạybằng nguồn bus hoặc cả hai USB có thể tự cấp nguồn điện lên tới 500mAcho các thiết bị của nó Nếu chỉ có các thiết bị chạy bằng nguồn bus, sự tiêuhao năng lượng tối đa có thể bị vượt quá và do đó cần phải có các thiết bịcấp nguồn Chúng cần phải có nguồn cung cấp năng lượng riêng Các thiết
bị hỗ trợ cả hai loại nguồn có thể chuyển sang chế độ tự cấp nguồn khi gắnnguồn điện bên ngoài
Ngay cả tốc độ giao tiếp tối đa cũng có thể khác nhau đối với từng thiết bị USB
cụ thể Thông số kĩ thuật USB quyết định giữa các thiết bị tốc độ thấp và tốc độcao Các thiết bị tốc độ thấp (như chuột, bàn phím, cần điều khiển, …) giao tiếpvới tốc độ 1,5Mbit/s với khả năng hạn chế Các thiết bị tốc độ cao (như hệ thống
Trang 11âm thanh và video) có thể sử dụng tới 90% tốc độ 12Mbit/s, tức là khoảng10Mbit/s bao gồm cả chi phí giao thức.
USB Hub: đóng vai trò như các Hub trong mạng Ethernet của chúng ta Cấp
nguồn cho các thiết bị USB Về mặt vật lí tồn tại một số cổng USB ở bảng điềukhiển phía sau của máy tính Các cổng này có thể được sử dụng để gắn các thiết bịthông thường hoặc một hub Hub là một thiết bị USB giúp mở rộng số lượng cổng
để kết nối các thiết bị USB khác Số lượng thiết bị có thể gắn tối đa được giảmtheo số lượng hub trên từng bus Hub là thiết bị tự cấp nguồn/chạy bằng nguồn bustốc độ cao
Thông thường, các cổng vật lí của bộ điều khiển máy chủ được xử lý bởi mộtvirtual root hub Hub này được mô phỏng bởi driver của trình điều khiển thiết bịgiúp thống nhất cấu trúc liên kết bus Vì vậy, mọi cổng có thể được xử lý theocùng một cách bởi driver của hệ thống con USB
1.4 Quá trình hoạt động của chuẩn USB
Quá trình hoạt động của chuẩn USB có thể được chia làm hai giai đoạn chính:
Quá trình điểm danh: là quá trình USB Host phát hiện các thiết bị cắm vào vàrút ra khỏi đường USB Bus Mỗi khi một thiết bị tham gia vào Bus USB, USBHost sẽ tiến hành đọc các thông tin mô tả (Description) của USB Device, từ đóthiết lập địa chỉ (NodeID) và chế độ hoạt động tương ứng cho thiết bị USBDevice Các địa chỉ sẽ được đánh từ 1->126 nên về lý thuyết, chuẩn USB chophép kết nối 126 thiết bị vào đường Bus Khi thiết bị rút ra khỏi đường Bus, địachỉ này sẽ được thu hồi
Quá trình truyền dữ liệu: để hiểu quá trình truyền dữ liệu này, chúng ta phảihiểu được hai khái niệm quan trọng nhất trong chuẩn USB, đó là khái niệmInterface và Endpoint (chỉ thiết bị USB device mới có Endpoint, USB Hostkhông có Endpoint) Một thiết bị USB sẽ có thể có nhiều Interface, mộtInterface có thể sử dụng nhiều Endpoint VD: Thẻ nhớ USB chỉ sử dụng 1Interface theo chuẩn USB Mass storage, interface này sử dụng 3 Endpoint BộUSB 3G sử dụng các Interface khác nhau như: CD Room, Mass storage vàCommunication, mỗi interface lại sử dụng nhiều Endpoint khác nhau
Như vậy, đứng ở góc độ mức hệ thống, các Interface chính là các dịch vụ khác nhau
mà thiết bị đó cung cấp còn các Endpoint chính là các cổng cần thiết cho mỗi dịch vụ.Tương ứng với khái niệm trong kiến trúc TCP/IP, ví dụ giao thức FTP là giao thức sử
Trang 12dụng để truyền file sẽ sử dụng hai cổng 20,21 Trong khi đó giao thức HTTP lại sử dụngport 80, giao thức Telnet sử dụng port 23.
Thực tế các Endpoint cũng như các Port trong chuẩn TCP/IP đóng vai trò như các bộđệm truyền/nhận dữ liệu Nhờ việc sử dụng nhiều bộ đệm mà các quá trình truyền thôngđược tiến hành song song và cho tốc độ cao hơn, bên cạnh đó giúp cho việc phân tách cácdịch vụ khác nhau Với chuẩn USB, các thiết bị được thiết kế với tối đa là 16 Enppoint.Các Endpoint được phân loại theo hướng truyền dữ liệu nhìn từ phía USB Host Cụ thể:
- Các Endpoint truyền dữ liệu từ USB Device tới USB Host là Endpoint IN
- Các Endpoint truyền dữ liệu từ USB Host tới USB Device là Endpoint OUT
Để truyền được dữ liệu theo chuẩn USB, các thiết bị USB Device phải được kết nốivới USB Host thông qua các Pipe (đường ống) Mỗi Pipe sẽ nối một Endpoint của USBDevice với USB Host
1.5 Chế độ truyền
Chuẩn USB cung cấp tổng cộng 4 chế độ truyền Tùy vào cơ chế truyền cũng nhưtốc độ mong muốn mà người thiết kế lựa chọn chế độ truyền cho những mục đích khácnhau
Truyền điều khiển (Control transfer): là chế độ truyền được tất cả các thiết
bị USB hỗ trợ để truyền các thông tin điều khiển với tốc độ tương đối chậm
Truyền ngắt (Interrupt transfer): sử dụng cho các thiết bị cần truyền một
lượng dữ liệu nhỏ, tuần hoàn theo thời gian ví dụ như chuột, bàn phím Khi đó,
ví dụ cứ 10s một lần USB Host sẽ gửi request xuống và USB Device sẽ trả dữliệu về cho USB Host (với trường hợp Interrupt in Endpoint)
Truyền theo khối (Bulk transfer): sử dụng cho các thiết bị cần truyền một
lượng dữ liệu lớn, yêu cầu độ chính xác tuyệt đối, không có ràng buộc quá chặtchẽ về thời gian thực ví dụ như thẻ nhớ USB, máy in Cái này tương tự nhưgiao thức TCP trong mạng Ethernet
Truyền đẳng thời (Isochronos transfer): sử dụng cho các thiết bị cần truyền
một lượng dữ liệu lớn với tốc độ rất nhanh, đảm bảo ràng buộc về thời gianthực tuy nhiên chấp nhận hy sinh độ chính xác ở một mức nhất định như cácthiết bị nghe nhạc, xem phim kết nối theo chuẩn USB Chuẩn này tương tự giaothức UDP trong mạng Ethernet
Chế độ truyền điều khiển và chế độ truyền theo khối được sử dụng để truyền dữ liệukhông đồng bộ, bất cứ khi nào driver quyết định sử dụng chúng Chế độ truyền ngắt vàchế độ truyền đẳng thời là tuần hoàn, có nghĩa là chế độ này được thiết lập để truyền dữ
Trang 13liệu vào những thời điểm cố định liên tục, điều này khiến băng thông của chúng đượcdành cho USB core.
1.6 Mô tả thiết bị
Hình 2 Mô tả thiết bị USB
Bất cứ khi nào một thiết bị USB được gắn vào bus, nó sẽ được liệt kê bởi hệ thốngcon USB – tức là một số thiết bị được gán và sau đó thiết bị mô tả sẽ đọc Một thiết bị
mô tả như vậy là một cấu trúc dữ liệu chứa thông tin về thiết bị và các thuộc tính củathiết bị Tiêu chuẩn USB xác định hệ thống phân cấp của các mô tả
1.6.1 Standard USB descriptors (Mô tả chuẩn USB)