1. Trang chủ
  2. » Giáo Dục - Đào Tạo

(TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU

48 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG BÀI TẬP LỚN CUỐI KỲ HỆ ĐIỀU HÀNH Đề tài: VIẾT DRIVER CHO USB TRÊN UBUNTU Nhóm Sinh viên thực hiện: 20172715 - PHÙNG THỊ KIM NGÂN 20182593 - PHẠM THỊ THANH HUYỀN 20182721 - TRỊNH THANH PHONG Giảng viên hướng dẫn: TS.NGUYỄN THANH BÌNH Hà Nội - 2022 LỜI NĨI ĐẦU Lập trình hệ thống nhúng, công việc quan trọng với lập trình ghép nối, điều khiển module, thiết bị ngoại vi ghép nối với hệ trung tâm Để làm việc này, ngồi kỹ lập trình cịn cần phải thành thạo giao thức ghép nối phổ biến RS232, SPI, I2C đặc biệt nhu cầu tất yếu phải tìm hiểu chuẩn USB nói chuẩn phổ biến Tìm hiểu chuẩn USB giúp cho có kiến thức để làm 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 chuẩn USB Tìm hiểu hệ điều hành vận dụng kiến thức học giảng đường nên nhóm em lựa chọn đề tài: “Viết Driver cho USB Ubuntu” Đề tài nhóm hướng đến driver đơn giản để tìm hiểu trình hệ thống Linux làm việc với thiết bị USB Driver hướng đến chức 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 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 tiến trình tìm hiểu đề tài cụ thể để nhóm chúng em hồn thành mục tiêu tập lớn Trong trình thực đề tài, nhóm chúng em cố gắng khơng thể tránh khỏi thiếu sót Chúng em mong nhận dẫn góp ý thầy để đề tài ngày hoàn thiện Chúng em xin chân thành cảm ơn MỤC LỤC DANH MỤC HÌNH VẼ i CHƯƠNG TỔNG QUAN VỀ USB 1.1 Giới thiệu USB 1.1.1 Định nghĩa USB 1.1.2 Cấu tạo USB 1.2 Chuẩn tín hiệu 1.3 Mơ hình mạng 1.4 Quá trình hoạt động chuẩn USB 1.5 Chế độ truyền 1.6 Mô tả thiết bị 1.6.1 Standard USB descriptors (Mô tả chuẩn USB) 1.6.2 Human Interface Devices (HID) 10 CHƯƠNG VIẾT DRIVER CHO UBUNTU 11 2.1 Quá trình nhận dạng USB Linux 11 2.2 Xây dựng driver cho USB chuột 12 2.2.1 Khung USB driver 12 2.2.2 Lấy thông tin thiết bị USB giao tiếp (USB device) 14 2.2.3 Khai báo thư viện 14 2.2.4 Khởi tạo 15 2.2.5 Interupt 16 2.2.6 Thăm dò thiết bị Probe 17 2.2.7 Open syscall 22 2.2.8 Close syscall 22 2.2.9 Disconnect 23 CHƯƠNG KẾT QUẢ 25 3.1 Gỡ bỏ driver cũ 25 3.2 Viết driver biên dịch 25 3.3 Kết 27 PHỤ LỤC 31 DANH MỤC HÌNH VẼ Hình 1.1 Thiết bị USB Hình 1.2 Cấu tạo Hình 1.3 Chuẩn tín hiệu USB Hình 1.4 Mơ hình mạng thiết bị theo chuẩn USB Hình 1.5 Mô tả thiết bị USB Hình 1.6 Bộ mơ tả USB ánh xạ tới device layout Hình 1.7 Ví dụ Configuration Descriptor cho thiết bị USB webcam Hình 1.8 Ví dụ Interface Descriptor cho cài đặt thay Interface cho thiết bị webcam Hình 1.9 Ví dụ Endpoint Descriptor cho thiết bị webcam 10 Hình 2.1 Quá trình nhận dạng thiết bị USB Linux 12 Hình 2.2 Các thông tin thiết bị USB 14 Hình 3.1 File Makefile 26 Hình 3.2 Biên dịch module 26 Hình 3.3 Gỡ bỏ Driver usbhid có sẵn 27 Hình 3.4 Kết chạy driver 27 Hình 3.5 Thiết bị USB sau kết nối đăng ký Driver Hình 3.6 USB mouse đăng ký thành công 28 Hình 3.7 Giảm độ sáng hình chuột trái 28 Hình 3.8 Driver ngắt kết nối 28 i 27 PHÂN CÔNG CƠNG VIỆC STT Tên Cơng việc Tổng quan USB Quá trình nhận dạng USB Linux Phạm Thị Thanh Huyền Khai báo thư viện, Khởi tạo Biên dịch chương trình Kiểm tra hoạt động thiết bị dùng driver Tổng quan USB Lấy thông tin thiết bị USB Phùng Thị Kim Ngân Interupt Thăm dị thiết bị Probe Xóa driver cũ Tổng quan USB Khung USB driver Trịnh Thanh Phong Open syscall, Close syscall Disconnect Biên dịch chương trình CHƯƠNG TỔNG QUAN VỀ USB 1.1 Giới thiệu USB 1.1.1 Định nghĩa USB USB thiết bị lưu trữ di động công cụ để kết nối nhiều thiết bị ngoại vi với máy tính USB phát triển để đơn giản hóa cải thiện giao diện máy tính cá nhân thiết bị ngoại vi USB (Universal Serial Bus) chuẩn kết nối có dây máy tính, sử dụng nhằm kết nối điểm kỹ thuật máy tính với thiết bị ngoại vi Vào cuối năm 1994 đề xuất Intel, Compaq, IBM, Microsoft công ty khác Bây giờ, USB trở thành giao diện mở rộng máy tính tiêu chuẩn kỷ XXI phiên 3.1 tung thị trường USB kết nối với 127 thiết bị bên ngồi mà khơng làm giảm băng thơng USB đòi hỏi hỗ trợ phần cứng máy chủ, hệ điều hành thiết bị ngoại vi để làm việc cách Giao diện USB đạt kết nối hai máy tính thơng qua cáp chun dụng tạo giao diện bổ sung nhiều thơng qua Hub Ưu điểm: • Giao diện USB tự cấu hình, giúp người dùng khơng cần phải điều chỉnh cài đặt thiết bị tốc độ định dạng liệu, định cấu hình ngắt, địa đầu vào/ra kênh truy cập nhớ trực tiếp • Đầu nối USB tiêu chuẩn hóa máy chủ, thiết bị ngoại vi sử dụng hầu hết ổ cắm có sẵn • USB tận dụng tối đa sức mạnh xử lý bổ sung đưa vào thiết bị ngoại vi để chúng tự quản lý Do đó, 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 giao thức để khôi phục từ lỗi phổ biến, cải thiện độ tin cậy so với giao diện trước • Tiêu chuẩn USB cung cấp nhiều lợi ích cho nhà sản xuất phần cứng nhà phát triển phần mềm, đặc biệt dễ thực tương đối • Tiêu chuẩn USB loại bỏ yêu cầu phát triển giao diện độc quyền cho thiết bị ngoại vi • Giao diện USB thiết kế để cung cấp độ trễ khả dụng tốt cho chức quan trọng thời gian thiết lập để thực chuyển liệu hàng loạt mà ảnh hưởng đến tài nguyên hệ thống Tiêu chuẩn USB cung cấp nhiều lợi ích cho nhà sản xuất phần cứng nhà phát triển phần mềm, đặc biệt dễ dàng thực hiện: • Tiêu chuẩn USB loại bỏ yêu cầu phát triển giao diện độc quyền cho thiết bị ngoại vi • Giao diện USB thiết kế để cung cấp độ trễ tốt cho chức quan trọng thời gian thiết lập để thực chuyển liệu hàng loạt mà ảnh hưởng đến tài nguyên hệ thống Hạn chế Như với tất tiêu chuẩn, USB có nhiều hạn chế thiết kế nó: • Cáp USB có chiều dài hạn chế, tiêu chuẩn dành cho thiết bị ngoại vi mặt bàn, khơng phải phịng tịa nhà Tuy nhiên, cổng USB kết nối với cổng truy cập thiết bị xa • USB có cấu trúc liên kết mạng nghiêm ngặt giao thức chủ / tớ để định địa thiết bị ngoại vi; thiết bị khơng thể tương tác với ngoại trừ thông qua máy chủ lưu trữ hai máy chủ giao tiếp trực tiếp qua cổng USB chúng • Máy chủ lưu trữ khơng thể phát tín hiệu đến tất thiết bị ngoại vi lúc thiết bị phải định địa riêng Một số thiết bị ngoại vi tốc độ cao u cầu tốc độ ổn định khơng có tiêu chuẩn USB Hình 1.1 Thiết bị USB 1.1.2 Cấu tạo USB Thông thường gồm phận sau: • Bản mạch in nhỏ: chứa linh kiện điện 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ổng USB: 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 khe cắm USB máy tính • Vỏ bảo vệ: Toàn mạch in, chip nhớ flash nằm vỏ bảo vệ kim loại nhựa giúp đủ 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 liệu, không cho phép hệ điều hành ghi sửa đổi liệu vào ổ • Đèn báo hoạt động: Người sử dụng nên tự quan sát USB vài lần để biết quy luật hoạt động đèn báo tránh tháo thiết bị chúng làm việc Hình 1.2 Cấu tạo 1.2 Chuẩn tín hiệu Chuẩn USB sử dụng đường tín hiệu có đường cấp nguồn DC (VBUS5V GND) đường cịn lại cặp tín hiệu vi sai (D+ D-) cho phép truyền liệu Cặp dây tín hiệu nối xoắn bên nên có khả chống nhiễu tốt Lưu ý: cổng USB máy tính cho phép cấp nguồn ni bên ngồi với dịng lên tới 500mA Như vậy, thiết bị sử dụng điện chuột, thẻ nhớ USB lấy trực tiếp nguồn từ cổng USB máy tính mà khơng cần dùng thêm nguồn ngồ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 thiết bị theo chuẩn USB Các thiết bị hoạt động theo chuẩn USB kết nối với theo đồ hình mạng hình phân cấp Trung tâm hình Hub Trong đồ hình trên, thiết bị USB chia làm loại chính: • USB Host: thiết bị đóng vai trị điều khiển tồn mạng USB (có thể lên tới tối đa 126 thiết bị) Ví dụ máy tính, USB Host gắn mainboard Để giao tiếp điều khiển USB device, USB Host controller cần thiết kế tích hợp với USB RootHub (Hub mức cao nhất) Vai trò thiết bị USB Host sau: – Trao đổi liệu với USB Device – Điều khiển USB Bus – Quản lý thiết bị cắm vào hay rút khỏi Bus USB qua trình điểm danh (Enumeration) Hình 3.6 USB mouse đăng ký thành công Kiểm tra usbmouse nạp vào Kernel module cách sử dụng chuột để điều chỉnh ánh sáng (click chuột trái để giảm độ sáng hình) Biên dịch file adjustBrightness-exiting.c, file biên dịch đọc từ dev/myDev để điều chỉnh độ sáng hình gcc adjustBrightness-exiting.c sudo /a.out Sau trình biên dịch, nhấn chuột trái để giảm sáng hình Kiểm tra thơng điệp usbmouse Kernel module: Chương trình đăng nhập vào giao diện cho server client sau: Đầu tiên giao diện bên phía server Tiếp theo giao diện bên phía client: Hình 3.7 Giảm độ sáng hình chuột trái Tháo USB khỏi máy tính Dùng lệnh dmesg để kiểm xem thông tin Ở Driver bị ngắt kết nối Hình 3.8 Driver ngắt kết nối 28 KẾT LUẬN Chúng em hiểu kiến thức cần thiết bổ ích hệ điều hành Ubuntu, giao thức USB, quy trình viết driver cho USB, cách biên dịch module kernel, trình làm đề tài Mặc dù kiến thức thành viên nhóm cịn nhiều hạn chế, cố gắng nhóm chúng em cịn nhiều thiếu sót việc thực đề tài Cuối cùng, nhóm chúng em xin chân thành cảm ơn hướng dẫn thầy TS Nguyễn Thanh Bình Chúng em mong nhận thêm góp ý, nhận xét thầy bạn để nhóm hồn thiện đề tài 29 TÀI LIỆU THAM KHẢO [1] https://vi.wikipedia.org/wiki/USB [2] https://fptshop.com.vn/tin-tuc/thu-thuat/o-usb-la-gi-127727 [3] https://sites.google.com/site/embedded247/embeddedsystem/usbprotocol [4] https://sites.google.com/site/embedded247/ddcourse/usb-device-drivers-phan-1usb-driver-tren-linux-1 [5] https://sites.google.com/site/embedded247/ddcourse/usb-device-drivers-phan-2usb-driver-tren-linux-2 [6] https://www.beyondlogic.org/usbnutshell/usb3.shtml [7] Lwn.net n.d Linux Device Drivers, Third Edition [LWN.net] [ONLINE] Available at: https://lwn.net/Kernel/LDD3/ [Accessed November 2021] [8] Docs.microsoft.com n.d USB descriptors - Windows drivers | Microsoft Docs [ONLINE] Available at: https://docs.microsoft.com/en-us/windowshardware/drivers/usbcon/usb-descriptors [Accessed November 2021] [9] https://matthias.vallentin.net/blog/2007/04/writing-a-linux-kernel-driver-for-anunknown-usb-device/ [10] https://github.com/KaustubhG/usb-mouse-driver 30 PHỤ LỤC usbmouse.c #include // Needed for KERN_INFO #include // Allocation/freeing memory in kernel space #include // Needed by all modules #include // Needed for the macros #include // Needed for device input #include // USB HID quirk support for Linux itdefines all USB_VENDOR_ID parameters #include // file_operations #include // Segment operation header file, which defines embedded assembly functions related to segment register operations #include // Contains function definitions such as copy_to_user, copy_from_user and the kernel to access the memory address of the user process #include // holds all the information that the kernel needs to manipulate buffers #include // contains some sections that are device specific: interrupt numbers, features, data structures and the address mapping for device-specific peripherals of devices #include // Utility Applications of the Control Device Interface /* * Version Information */ #define DRIVER_VERSION "v1.10" #define DRIVER_AUTHOR "Vojtech Pavlik " #define DRIVER_DESC "USB HID core driver" #define DRIVER_LICENSE "GPL" MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE(DRIVER_LICENSE); 31 static char current_data = 0; static int registered = 0; struct usb_mouse { //mouse description char name[128]; char phys[64]; struct usb_device *usbdev; struct input_dev *dev; struct urb *irq; //interrupt handler signed char *data; //interrupt buffer dma_addr_t data_dma; //dma address }; static void usb_mouse_irq(struct urb *urb) //to build urb callback functions { struct usb_mouse *mouse = urb->context; signed char *data = mouse->data; struct input_dev *dev = mouse->dev; int status; switch (urb->status) { case 0: /* success */ break; case -ECONNRESET: /* unlink */ case -ENOENT: case -ESHUTDOWN: return; /* -EPIPE: should clear the halt */ default: /* error */ goto resubmit; } input_report_key(dev, BTN_LEFT, data[0] & 0x01); // Left mouse input_report_key(dev, BTN_RIGHT, data[0] & 0x02); // Right mouse 32 input_report_key(dev, BTN_MIDDLE, data[0] & 0x04); // Middle mouse input_report_rel(dev, REL_X, data[1]); // horizontal axis input_report_rel(dev, REL_Y, data[2]); // vertical axis input_report_rel(dev, REL_WHEEL, data[3]); // knob coordinates input_sync(dev); // sync data with input device resubmit: status = usb_submit_urb (urb, GFP_ATOMIC); if (status) dev_err(&mouse->usbdev->dev, "can’t resubmit intr, %s-%s/input0, status %d\n", mouse->usbdev->bus->bus_name, mouse->usbdev->devpath, status); current_data = data[0]; if(!(data[0] & 0x01) && !(data[0] & 0x02)) { pr_info("No button pressed!\n"); return; //Neither button pressed } //check which button pressed if(data[0] & 0x01){ pr_info("Left mouse button clicked!\n"); } else if(data[0] & 0x02){ pr_info("Right mouse button clicked!\n"); } } // This function gets device data and send with urb static int usb_mouse_open(struct input_dev *dev) //opens mouse devices.and submit its status to build urb { 33 struct usb_mouse *mouse = input_get_drvdata(dev); mouse->irq->dev = mouse->usbdev; if (usb_submit_urb(mouse->irq, GFP_KERNEL)) return -EIO; return 0; } //device file ops static int my_open(struct inode *i, struct file *f) { printk(KERN_INFO "Driver: open()\n"); return 0; } static int my_close(struct inode *i, struct file *f) { printk(KERN_INFO "Driver: close()\n"); return 0; } static ssize_t my_read(struct file *f, char user *buf, size_t len, loff_t *off) { printk(KERN_INFO "Driver: read()\n"); return copy_to_user(buf, ¤t_data, 1) ? -EFAULT : 0; //Copy current click data to buffer current_data = 0; //Clear current data return 0; } static ssize_t my_write(struct file *f, const char user *buf, size_t len, loff_t *off) { printk(KERN_INFO "Driver: write()\n"); return len; } 34 static struct file_operations pugs_fops = { owner = THIS_MODULE, open = my_open, release = my_close, read = my_read, write = my_write }; // This function gets device’s data and cancel urb transmission static void usb_mouse_close(struct input_dev *dev) //turns of usb device at the end of urb cycle { struct usb_mouse *mouse = input_get_drvdata(dev); usb_kill_urb(mouse->irq); } // Probe if device is connected static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_id *id) { struct usb_device *dev = interface_to_usbdev(intf); // usb device type pointer struct usb_host_interface *interface; struct usb_endpoint_descriptor *endpoint; // contains infomations of endpoints struct usb_mouse *mouse; struct input_dev *input_dev; int pipe, maxp; int error = -ENOMEM; // memory overflow error int t; interface = intf->cur_altsetting; // pointer to its current setting if (interface->desc.bNumEndpoints != 1) return -ENODEV; 35 endpoint = &interface->endpoint[0].desc; if (!usb_endpoint_is_int_in(endpoint)) return -ENODEV; pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); // create a pipeline to receive commands maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); // set the maximum packet for endpoint mouse = kzalloc(sizeof(struct usb_mouse), GFP_KERNEL); // device memory allocation input_dev = input_allocate_device(); if (!mouse || !input_dev) goto fail1; mouse->data = usb_alloc_coherent(dev, 8, GFP_ATOMIC, &mouse->data_dma); if (!mouse->data) goto fail1; mouse->irq = usb_alloc_urb(0, GFP_KERNEL); if (!mouse->irq) goto fail2; mouse->usbdev = dev; mouse->dev = input_dev; if (dev->manufacturer) // get infomations of mouse’s manufacturer strlcpy(mouse->name, dev->manufacturer, sizeof(mouse->name)); if (dev->product) { // get infomations of product if (dev->manufacturer) strlcat(mouse->name, " ", sizeof(mouse->name)); strlcat(mouse->name, dev->product, sizeof(mouse->name)); } if (!strlen(mouse->name)) // get productID, vendorID snprintf(mouse->name, sizeof(mouse->name), 36 "USB HIDBP Mouse %04x:%04x", le16_to_cpu(dev->descriptor.idVendor), le16_to_cpu(dev->descriptor.idProduct)); // create path to sysfs and complete initialization of mouse input device usb_make_path(dev, mouse->phys, sizeof(mouse->phys)); strlcat(mouse->phys, "/input0", sizeof(mouse->phys)); input_dev->name = mouse->name; input_dev->phys = mouse->phys; usb_to_input_id(dev, &input_dev->id); input_dev->dev.parent = &intf->dev; input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); input_dev->relbit[0] |= BIT_MASK(REL_WHEEL); input_set_drvdata(input_dev, mouse); input_dev->open = usb_mouse_open; input_dev->close = usb_mouse_close; usb_fill_int_urb(mouse->irq, dev, pipe, mouse->data, (maxp > ? : maxp), usb_mouse_irq, mouse, endpoint->bInterval); mouse->irq->transfer_dma = mouse->data_dma; mouse->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; error = input_register_device(mouse->dev); if (error) goto fail3; usb_set_intfdata(intf, mouse); 37 //register device t = register_chrdev(91, "mymouse", &pugs_fops); if(tirq); /* jump to fail2 in order to free buffer memory which is allocated by usb_alloc_coherent function */ fail2: usb_free_coherent(dev, 8, mouse->data, mouse->data_dma); /* jump to fail1 if cannot allocate memory or buffer memory for mouse device, fail1 free memory for input device and mouse */ fail1: input_free_device(input_dev); kfree(mouse); return error; } // This function is called when the mouse is disconnected from the computer static void usb_mouse_disconnect(struct usb_interface *intf) { struct usb_mouse *mouse = usb_get_intfdata (intf); usb_set_intfdata(intf, NULL); 38 if (mouse) { usb_kill_urb(mouse->irq); input_unregister_device(mouse->dev); usb_free_urb(mouse->irq); usb_free_coherent(interface_to_usbdev(intf), 8, mouse->data, mouse->data_dma); kfree(mouse); } //if registered, unregister device if(registered) unregister_chrdev(91, "mymouse"); registered = 0; } static struct usb_device_id usb_mouse_id_table [] = { { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT, USB_INTERFACE_PROTOCOL_MOUSE) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, usb_mouse_id_table); static struct usb_driver usb_mouse_driver = { name = "usbmouse", probe = usb_mouse_probe, disconnect = usb_mouse_disconnect, id_table = usb_mouse_id_table, }; module_usb_driver(usb_mouse_driver); 39 adjustBrightness_exiting.c #include #include #include #include #include #define MOUSEFILE "/dev/myDev" // int main() { //brightness vars FILE *fp; int currentBrightness = 1; const char *kFileName ="/sys/class/backlight/intel_backlight/brightness"; //get current brightness //mouse vars int fd; struct input_event ie; unsigned char *ptr = (unsigned char*)&ie; unsigned char button,bLeft,bMiddle,bRight; char x,y; if((fd = open(MOUSEFILE, O_RDONLY | O_NONBLOCK )) == -1){ printf("NonBlocking %s open ERROR\n",MOUSEFILE); exit(EXIT_FAILURE); } else{ printf("NonBlocking %s open OK\n",MOUSEFILE); } printf(" \n"); printf("Left click to decrease brightness\n"); 40 printf(" \n"); while(1) { if(read(fd, &ie, sizeof(struct input_event))!=-1) { button=ptr[0]; printf(" -\n"); printf("%d\n", (int)button); bLeft = button & 0x1; printf("Left : %d\n", bLeft); printf(" -\n"); x=(char) ptr[1];y=(char) ptr[2]; //decrease brightness if(bLeft == 1){ //get current brightness fp = fopen(kFileName, "r"); fscanf(fp, "%d", ¤tBrightness); fclose(fp); //increase if(currentBrightness == 1){ continue; } else{ fp = fopen(kFileName, "w"); fprintf(fp, "%d\n", currentBrightness-100); fclose(fp); } } fflush(stdout); } } //wait for release of middle button int a; 41 int b; while(1){ if(read(fd, &ie, sizeof(struct input_event))!=-1){ a = ptr[0]; b = ( a & 0x4 ) > 0; if(b == 0) break; } } close(fd); fflush(stdout); return 0; } 42 ... USB Tìm hiểu hệ điều hành vận dụng kiến thức học giảng đường nên nhóm em lựa chọn đề tài: ? ?Viết Driver cho USB Ubuntu? ?? Đề tài nhóm hướng đến driver đơn giản để tìm hiểu trình hệ thống Linux... USB lại tiếp tục đưa vào tầng USB core tổng quát (generic USB core) tầng nhân (được điều khiển USBcore driver) Điều giúp cho thiết bị USB hệ thống nhận diện tầng nhân, chưa có driver cụ thể cho. .. thơng tin Ở Driver bị ngắt kết nối Hình 3.8 Driver ngắt kết nối 28 KẾT LUẬN Chúng em hiểu kiến thức cần thiết bổ ích hệ điều hành Ubuntu, giao thức USB, quy trình viết driver cho USB, cách biên

Ngày đăng: 01/12/2022, 15:33

Xem thêm:

HÌNH ẢNH LIÊN QUAN

Hình 1.1 Thiết bị USB - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.1 Thiết bị USB (Trang 8)
Hình 1.2 Cấu tạo 1.2 Chuẩn tín hiệu - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.2 Cấu tạo 1.2 Chuẩn tín hiệu (Trang 9)
Hình 1.4 Mơ hình mạng các thiết bị theo chuẩn USB - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.4 Mơ hình mạng các thiết bị theo chuẩn USB (Trang 10)
Hình 1.3 Chuẩn tín hiệu USB 1.3 Mơ hình mạng - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.3 Chuẩn tín hiệu USB 1.3 Mơ hình mạng (Trang 10)
Hình 1.5 Mơ tả thiết bị USB - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.5 Mơ tả thiết bị USB (Trang 14)
Hình 1.6 Bộ mơ tả USB được ánh xạ tới device layout - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.6 Bộ mơ tả USB được ánh xạ tới device layout (Trang 14)
Hình 1.7 Ví dụ về Configuration Descriptor cho thiết bị USB webcam - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.7 Ví dụ về Configuration Descriptor cho thiết bị USB webcam (Trang 15)
• USB configuration descriptor: Cấu hình USB chứa một loạt giao diện. Mỗi giao diện bao gồm một hoặc nhiều cài đặt thay thế và mỗi cài đặt thay thế được tạo thành từ một tập hợp các endpoint - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
configuration descriptor: Cấu hình USB chứa một loạt giao diện. Mỗi giao diện bao gồm một hoặc nhiều cài đặt thay thế và mỗi cài đặt thay thế được tạo thành từ một tập hợp các endpoint (Trang 15)
Hình 1.9 Ví dụ về Endpoint Descriptor cho thiết bị webcam - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 1.9 Ví dụ về Endpoint Descriptor cho thiết bị webcam (Trang 16)
Hình 2.1 Quá trình nhận dạng thiết bị USB trên Linux - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 2.1 Quá trình nhận dạng thiết bị USB trên Linux (Trang 18)
Hình 2.2 Các thông tin về thiết bị USB - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 2.2 Các thông tin về thiết bị USB (Trang 20)
Hình 3.1 File Makefile - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 3.1 File Makefile (Trang 32)
Hình 3.2 Biên dịch module - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 3.2 Biên dịch module (Trang 32)
Hình 3.4 Kết quả chạy driver - (TIỂU LUẬN) bài tập lớn CUỐI kỳ hệ điều HÀNH đề tài VIẾT DRIVER CHO USB TRÊN UBUNTU
Hình 3.4 Kết quả chạy driver (Trang 33)

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w