一、使用字元裝置驅動
1、編譯驅動、安裝;建立裝置檔案;訪問裝置
2、裝置描述結構cdev:結構定義;裝置號dev_t;裝置操作集
3、驅動初始化:分配裝置描述結構;初始化裝置描述結構;註冊裝置描述結構
4、裝置號為unsigned int;mkdev;major;minor
5、動態分配主裝置號:alloc_chrdev_region;驅動退出時:unregister_chrdev_region
6、描述結構的分配:靜態struct cdev mdev;動態cdev_alloc()
7、描述結構的初始化:cdev_init
8、描述結構的註冊:cdev_add()
9、驅動登出:cdev_del
二、混雜裝置驅動模型
1、擁有相同的主裝置號10稱為混雜裝置
2、裝置描述:struct miscdevice
3、註冊混雜裝置驅動:misc_register()
4、核心中斷處理流程:irq_svc入口-->獲取中斷號-->根據中斷號找到相應的irq_desc結構-->取出事先註冊好的處理函式執行
5、中斷註冊:request_irq(unsigned int irq, void (*handler)( ), unsigned long flags, const char *devn ame, void *dev_id)
6、flags:irqf_disabled(sa_interrupt)表示快速中斷;irqf_shared(sa_shirq)表明該中斷號是多個裝置共享的
7、中斷登出:free_irq()
8、中斷巢狀:當中斷發生時,又產生了其他中斷
9、中斷巢狀的處理方法-->中斷分層技術:軟中斷;tasklet;工作佇列
10、工作佇列:將下半部分交給核心執行緒處理
11、描述工作佇列:struct workqueue_struct
12、描述乙個工作項:struct work_struct
13、建立工作佇列:create_workqueue
14、建立工作:init_work
15、提交工作:queue_work
16、提交工作到預設佇列:schedule_work
17、核心定時器:struct timer_list
18、初始化定時器:init_timer()、 設定超時函式、
19、註冊定時器:add_timer()
20、啟動定時器:mod_timer(要啟動的定時器,超時時間)
21、當乙個程序試圖向裝置讀寫資料時,裝置暫時沒有準備好資料。。驅動程式就應當阻塞程序,進入睡眠狀態,直到請求得到滿足
22、定義等待佇列:wart_queue_head_t my_queue
23、初始化等待佇列:init_waitqueue_head(&my_queue)
24、定義+初始化等待佇列:declare_wait_queue_head(my_queue)
25、進入等待佇列,睡眠:wait_event(queue, condition),當condition為真時,立即返回,否則進入task_uninterruptible
26、wait_event_interruptible(queue, condition),當condition為真時,立即返回,否則進入task_interruptible
27、從等待佇列中喚醒程序:wake_up() --->可喚醒unint*、int*、kill*的所有程序
28、wake_up_interruptible(),只能喚醒task_interruptible的程序
三、匯流排裝置驅動
1、匯流排描述:bus_type
2、匯流排描述結構中的match函式:當乙個新裝置或新驅動被新增到這個匯流排時,呼叫該函式。判斷是否匹配
3、匯流排的註冊:bus_register()
4、匯流排的登出:bus_unregister()
5、驅動描述結構:device_driver
6、驅動的註冊:driver_register()
7、驅動的登出:driver_unregister()
8、裝置描述結構:struct device
9、裝置的註冊:device_register()\
10、裝置的登出:device_unregister()
11、平台匯流排:platform bus
12、平台裝置描述結構:struct platform_device
13、註冊平台裝置:platform_device_register()
14、平台驅動描述結構:struct platform_driver
15、註冊平台驅動:platform_driver_register()
注:16、當device_register註冊裝置時,dev->name會賦值給dev->kobj.name,自己變為null
注:17、先載入匯流排,後載入驅動或裝置
國嵌驅動 專題5 觸控螢幕驅動程式設計
一 我的學習理解 1 輸入子系統就是外部觸發一次事件,最後由使用者空間讀取到事件的資訊。2 先註冊乙個輸入型裝置,裝置會匹配到handler 處理者 handler會建立裝置檔案,還需要註冊字元裝置。3 觸發事件時,會上報給註冊好的輸入型裝置,對應的handler會呼叫event函式,這個函式會把事...
國嵌攻略 168 音效卡驅動開發
oss架構 oss全稱是open sound system,叫做開放式音訊系統,這種早期的音訊系統是基於檔案系統的訪問方式,這意味著對聲音的操作完全可以像對普通檔案那樣執行open,read等操作。oss中,主要提供了一下幾種音訊裝置的抽象裝置檔案 dev mixer 用來訪問音效卡中的混音器,用於...
國嵌攻略 132 串列埠驅動實現
如何開發linux驅動程式 一般情況下都會有現成的驅動程式,不需要從零開始開發驅動程式。所以linux驅動開發主要分為兩個步驟 1.讀得懂驅動程式 2.寫的了核心功能。傳送中斷處理程式 傳送中斷處理函式在 drivers serial samsung.c的s3c24xx serial tx char...