國嵌驅動專題一二

2021-07-03 16:56:10 字數 2424 閱讀 3179

一、使用字元裝置驅動

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...