Professional Documents
Culture Documents
汪長剛 97951140
許良宇 97951126
游源智 97951123
驅動程式功能與架構
USB 驅動程式功能
•提供 system call 的作業方法
•提供給 usb core 裝置的作業方法
User space
Kernel space
usb driver
usb core
USB 驅動程式架構
/dev/idtk0
User space
Kernel space fops open
read
ioctl
release buffer
probe
usb core complete
disconnect
USB 驅動程式架構
User space
Kernel space
static struct usb_class_driver touch_class = {
.name = “idtk%d”, /* sysfs 中的裝置檔名稱 */
.fops = &idealtek_fops, /* 作業方法 */
.mode = S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
.minor_base = IDEALTEK_MINOR, /* minor 的開始值 */
};
支援 裝置 列表
struct usb_device_id idealtek_ids[] = {
{ USB_DEVICE(0x1391, 0x1000), driver_info: 0 },
{}
};
MODULE_DEVICE_TABLE(usb, idealtek_ids);
USB 驅動程式架構
驅動程式 進入 點
static int __init idealtek_init(void)
{
int result;
result = usb_register(&idealtek_driver);
return result;
}
module_init(idealtek_init);
清理 函式
static void __exit idealtek_exit(void)
{
usb_deregister(&idealtek_driver);
}
module_exit(idealtek_exit);
Probe 作業方法
disconnect 作業方法
fops 作業方法
staticint idealtek_fops_open
對 /dev 下的 idtk0 進行開檔的
動作,並且標記此裝置已開啟
static int
idealtek_fops_release
對 /dev 下的 idtk0 進行關檔的動作
,並且標記此裝置已關閉
fops 作業方法
static
ssize_t idealtek_fops_read
Read 函式主要透過 usb core 對裝
置
進行讀取,並將資料傳送至使用端
User space Kernel space
讀出資料
寫入資料
環狀暫存區
(circular buffer)
無鎖演算法 F I F O
in
out out
out
in
in
解決辦法:不使用。
1. 使用裝置
問題 : 使用 lsmod 可以找到載入的 module
操作過程之問題與解決
但在 /proc/device 卻找不到??因此無法查詢
它的
major 和 minor ,導致無法在 /dev 使用
mknod 建立
虛擬裝置檔
操作過程之問題與解決
陶世軒老師給我們提示所有的裝置一定會在 /dev 顯
示。
1. 問題:
a. 為何之前都沒發現 /dev 底下會出現 usb 的裝置
檔?
X 軸之資
料
位
位
移
移
Y 軸之資
料
預計目標
•校正觸控面板。