一個(gè)可移植性好的驅(qū)動(dòng)程序,應(yīng)該有三個(gè)部分組成
1、驅(qū)動(dòng)框架程序(xxx_drv.c) — 對(duì)接應(yīng)用層的 open read write 函數(shù),不做GPIO具體操作
2、硬件操作程序(xxx_chip_gpio.c)— 執(zhí)行具體的GPIO操作,初始化、讀寫
3、硬件資源定義程序(xxx_board.c,這在之后就過渡成了設(shè)備樹)— 為第二層提供硬件資源,哪一組GPIO?第幾個(gè)引腳?
經(jīng)過分層之后,我們需要添加一個(gè)新的外設(shè)時(shí),只需要做兩個(gè)步驟:
(1)在 xxx_board.c 中添加硬件引腳資源
(2)在 xxx_chip_gpio.c 中添加具體的GPIO初始化、控制等操作
驅(qū)動(dòng)層的 xxx_drv.c 根本不需要怎么修改
前幾天自己總結(jié)了個(gè)圖,也是幫助自己梳理思路
看上去有些亂,不過只要學(xué)過韋東山老師視頻的
https://www.bilibili.com/video/BV1w4411B7a4?p=105&vd_source=fcd24cb292784bee4d86583df11ae49f
耐心看看應(yīng)該會(huì)覺得思路清晰的
下圖看不清楚,圖片下載地址在這里
驅(qū)動(dòng)分層框架圖下載: 驅(qū)動(dòng)分層框架圖.jpg (圖片有80多M,請(qǐng)耐心加載哦)
全部代碼在我的 gitee 倉(cāng)庫(kù)中的 “09.led_platform_drv_chip_board_demo” 文件夾中,需要自取
gitee 倉(cāng)庫(kù):https://gitee.com/chenshao777/imx6-ull_-drivers
粗略的解釋一下流程,細(xì)說的話太麻煩了,這里主要介紹驅(qū)動(dòng)分層思想的大概流程,也是為自己今后復(fù)習(xí)的時(shí)候幫助回憶
驅(qū)動(dòng)分層思想
1、 首先是驅(qū)動(dòng)程序(xxx_drv.c)的 file_operations 結(jié)構(gòu)體,該結(jié)構(gòu)體關(guān)聯(lián)了應(yīng)用層的文件IO函數(shù)與驅(qū)動(dòng)層的函數(shù)
以led驅(qū)動(dòng)為例
應(yīng)用層 | 驅(qū)動(dòng)層 |
---|---|
open | led_open |
read | led_read |
write | led_write |
2、 硬件操作程序(xxx_chip_gpio.c)中的 platform_driver 結(jié)構(gòu)體,加載完ko文件后(即驅(qū)動(dòng)文件),內(nèi)核會(huì)自動(dòng)幫它尋找 name 匹配的 platform_device 結(jié)構(gòu)體,從其中獲取到硬件資源,然后創(chuàng)建設(shè)備節(jié)點(diǎn)(/dev/ledx)
匹配到硬件資源層的 platform_device 結(jié)構(gòu)體后,內(nèi)核會(huì)自動(dòng)調(diào)用其 probe 函數(shù),在 probe 函數(shù)中創(chuàng)建設(shè)備節(jié)點(diǎn)
PS:創(chuàng)建設(shè)備節(jié)點(diǎn)需要驅(qū)動(dòng)框架層的設(shè)備類對(duì)象,所以這里需要在設(shè)備框架層中為硬件操作層提供對(duì)應(yīng)函數(shù)
3、硬件資源定義程序中的 platform_device 結(jié)構(gòu)體,該結(jié)構(gòu)體中定義了與硬件操作層中 platform_driver 對(duì)應(yīng)的 name 成員和硬件引腳資源 resource 等
PS:注意要設(shè)置 dev 成員下的 release 屬性,如果不加的話卸載驅(qū)動(dòng)時(shí)會(huì)報(bào)警告
4、硬件資源層中硬件資源的定義,硬件資源有個(gè)特定的結(jié)構(gòu)體 resource ,可以參照Linux內(nèi)核中其他文件對(duì)其的定義來寫。
PS:GPIO_PIN是一個(gè)宏,為了方便將GPIO組和是第幾個(gè)引腳組合起來而定義文章來源:http://www.zghlxwxcb.cn/news/detail-506599.html
#define GPIO_PIN(g,p) ((g << 16) | p)
5、 更多的細(xì)節(jié)在圖片中看吧,今天先寫到這里,下一篇博客介紹設(shè)備樹的使用 Linux驅(qū)動(dòng)之設(shè)備樹。文章來源地址http://www.zghlxwxcb.cn/news/detail-506599.html
到了這里,關(guān)于【IMX6ULL驅(qū)動(dòng)開發(fā)學(xué)習(xí)】11.驅(qū)動(dòng)設(shè)計(jì)之面向?qū)ο骭分層思想(學(xué)習(xí)設(shè)備樹過渡部分)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!