一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【分享】DIY愛好者倒騰LED時(shí),總結(jié)了幾點(diǎn)Linux驅(qū)動(dòng)開發(fā)方法

lPCU_elecfans ? 來源:未知 ? 作者:肖冰 ? 2019-07-11 10:43 ? 次閱讀

一開接觸設(shè)備樹,我就不知道設(shè)備樹與驅(qū)動(dòng)的關(guān)系,設(shè)備樹是在內(nèi)核3.0以后才有的。不過3.0以前的和3.0以后的驅(qū)動(dòng)其實(shí)變化不大。

驅(qū)動(dòng)的開發(fā)方法可以分為三種:傳統(tǒng)方法,總線方法,設(shè)備樹方法。這篇文章圍繞點(diǎn)亮一顆LED來說明這三種方法。

驅(qū)動(dòng)流程分為5個(gè)部分:

1、分配

2、設(shè)置

3、注冊(cè)file_operation

4、入口

5、出口

一、傳統(tǒng)方法

傳統(tǒng)方法就是簡單粗暴方法,就是將IO設(shè)置,驅(qū)動(dòng)放在同一個(gè)文件(drv.c)。

drv.c:定義引腳信息

drv.c:驅(qū)動(dòng)中的open函數(shù)

drv.c:驅(qū)動(dòng)中的close函數(shù)

drv.c:file_operations結(jié)構(gòu)體

為上層應(yīng)用提供open(),write(),read(),close()。

drv.c:入口函數(shù)-申請(qǐng)?jiān)O(shè)備號(hào),創(chuàng)建設(shè)備節(jié)點(diǎn)

其中register_chrdev():申請(qǐng)?jiān)O(shè)備號(hào)。

class_create():創(chuàng)建一個(gè)設(shè)備類。

device_create():創(chuàng)建一個(gè)設(shè)備節(jié)點(diǎn),路徑:/dev/led

drv.c:出口函數(shù)-注銷設(shè)備,注銷設(shè)備節(jié)點(diǎn)

其中unregister_chrdev():通過主設(shè)備號(hào),注銷設(shè)備號(hào)

device_destroy():注銷設(shè)備節(jié)點(diǎn)

class_destroy():注銷設(shè)備類

傳統(tǒng)方法:

優(yōu)點(diǎn):操作簡單

缺點(diǎn):不易擴(kuò)展,每次修改需要重新編譯驅(qū)動(dòng)

二、總線方法

在kernel 3.0之前都是采用總線的方法實(shí)現(xiàn)驅(qū)動(dòng)與設(shè)備之間的聯(lián)系。把驅(qū)動(dòng)跟設(shè)備分開。

其主要理解幾個(gè)結(jié)構(gòu)體:

①跟設(shè)備有關(guān)的結(jié)構(gòu)體:structplatform_device{};

②跟驅(qū)動(dòng)有關(guān)的結(jié)構(gòu)體:structplatform_driver{};

還要理解其中包含的兩個(gè)結(jié)構(gòu)體:

-> struct device_driver{};

-> structplatform_device_id{};

要記住一句話:在match的時(shí)候:優(yōu)先匹配id_table的name,不匹配。再匹配driver的name

其中

dev.c:進(jìn)行設(shè)備的引腳定義,定義resouce結(jié)構(gòu)體,供驅(qū)動(dòng)獲取資源。

dev.c:注冊(cè)platform_device結(jié)構(gòu)體

dev.c:入口函數(shù)-注冊(cè)設(shè)備

其中platform_device_register():在總線上注冊(cè)一個(gè)設(shè)備。

dev.c:出口函數(shù)-注銷設(shè)備

其中platform_device_unregister():在總線上注銷一個(gè)設(shè)備。

對(duì)于驅(qū)動(dòng)來說,需要稍微修改一下:

drv.c:增加probe函數(shù)和remove函數(shù),其中:

probe()函數(shù):充當(dāng)傳統(tǒng)方法的init函數(shù)

remove()函數(shù):充當(dāng)傳統(tǒng)方法的exit函數(shù)

platform_get_resource():獲取設(shè)備中資源,比如引腳定義。

drv.c :入口函數(shù)和出口函數(shù)修改

將傳統(tǒng)方法的file_operations{};結(jié)構(gòu)體改為platform_driver{};結(jié)構(gòu)體

其中platform_driver_register():向總線注冊(cè)一個(gè)設(shè)備。

platform_driver_unregister():向總線注銷一個(gè)設(shè)備。

platform總線中的match()函數(shù)是設(shè)備與驅(qū)動(dòng)匹配的函數(shù),我們看看這個(gè)函數(shù)的實(shí)現(xiàn),就是匹配設(shè)備與驅(qū)動(dòng)的名字一不一致。函數(shù)如下:

總線方法:

優(yōu)點(diǎn):易擴(kuò)展

缺點(diǎn):代碼冗余多,需要重新編譯設(shè)

三、設(shè)備樹方法

在kernel 3.0以及之后的版本,都是采用設(shè)備樹的方法實(shí)現(xiàn)驅(qū)動(dòng)與設(shè)備之間的聯(lián)系。將總線方法的設(shè)備改為設(shè)備樹實(shí)現(xiàn),解決了總線方法中代碼冗余多的問題。

設(shè)備樹方法只需要在總線方法的基礎(chǔ)上稍微修改一下。

dts:添加設(shè)備節(jié)點(diǎn):

drv: probe修改,其中通過函數(shù)of_property_read_s32()獲取設(shè)備樹的資源。

設(shè)備樹:

優(yōu)點(diǎn):易擴(kuò)展,不需要重新編譯(替換設(shè)備樹),無冗余代碼

缺點(diǎn):稍微復(fù)

最多技術(shù)干貨內(nèi)容請(qǐng)穩(wěn)步到“電子發(fā)燒友網(wǎng)”公眾號(hào),回復(fù)資料即可免費(fèi)獲取一份技術(shù)資料,在這里每天可以獲取最專業(yè)、最前沿的電子技術(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • DIY
    DIY
    +關(guān)注

    關(guān)注

    176

    文章

    891

    瀏覽量

    351188
  • Linux驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    10149

原文標(biāo)題:【分享】DIY愛好者倒騰LED時(shí),總結(jié)了幾點(diǎn)Linux驅(qū)動(dòng)開發(fā)方法

文章出處:【微信號(hào):elecfans,微信公眾號(hào):電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    電子愛好者

    電子愛好者QQ群號(hào)203435561
    發(fā)表于 12-19 23:03

    找ARM嵌入式linux學(xué)習(xí)愛好者

    本人基礎(chǔ)一般,學(xué)過單片機(jī),摸過一年ARM,希望找志同道合的單片機(jī)愛好者linux學(xué)習(xí)一起進(jìn)步,我的QQ280386673,您也可以留下您的QQ號(hào)碼,謝謝!
    發(fā)表于 07-23 10:29

    電源愛好者

    大學(xué)生電源愛好者聯(lián)盟QQ群 253053727 我們只求共同進(jìn)步只加大學(xué)生歡迎加入
    發(fā)表于 07-31 21:32

    電子愛好者DIY制作自制微型巡線小車過程

    電子愛好者DIY制作自制微型巡線小車過程
    發(fā)表于 08-20 17:40

    電子愛好者

    電子愛好者報(bào)道了啊
    發(fā)表于 02-25 20:05

    歡迎加電子、LED愛好者群299238480

    歡迎加電子、LED愛好者群299238480
    發(fā)表于 05-18 08:21

    歡迎加電子、LED愛好者群299238480

    本帖最后由 gk320830 于 2015-3-5 12:40 編輯 歡迎加電子、LED愛好者群299238480
    發(fā)表于 05-18 08:22

    【職業(yè)電子愛好者】(群號(hào)256099730),電子愛好者 DIY電子高手群

    【職業(yè)電子愛好者】(群號(hào)256099730),電子愛好者 DIY電子高手群
    發(fā)表于 06-22 01:55

    電子愛好者的苦惱!

    壇子里的各位大神: 我是一名電子愛好者,從事其他行業(yè),但特別喜歡電子,沒事的時(shí)候就喜歡折騰,看見各位大神指點(diǎn)江山,很是羨慕,但一直希望壇子里大神能給一個(gè)二極管和三極管的資料,型號(hào)太多了,記下一些,但
    發(fā)表于 04-27 14:38

    無線電愛好者叢書-穩(wěn)定電源

    無線電愛好者叢書-穩(wěn)定電源.pdf無線電愛好者叢書-穩(wěn)定電源.pdf無線電愛好者叢書-穩(wěn)定電源.pdf無線電愛好者叢書-穩(wěn)定電源.pdf無線電愛好者
    發(fā)表于 07-13 17:02 ?0次下載
    無線電<b class='flag-5'>愛好者</b>叢書-穩(wěn)定電源

    HAM/業(yè)余無線電愛好者,HAM/業(yè)余無線電愛好者是什么意思

    HAM/業(yè)余無線電愛好者,HAM/業(yè)余無線電愛好者是什么意思     根據(jù)英文版的《郎曼當(dāng)代英語詞典》解釋單詞“HAM”時(shí)有一條為“A PERSON WHO RECEI
    發(fā)表于 03-29 11:20 ?5277次閱讀

    電腦愛好者2011年第5期

    本內(nèi)容提供了電腦愛好者2011年第5期,歡迎廣大愛好者下載學(xué)習(xí)
    發(fā)表于 06-02 15:03 ?0次下載
    電腦<b class='flag-5'>愛好者</b>2011年第5期

    電腦愛好者2011年第1期

    本內(nèi)容提供了電腦愛好者2011年第1期 歡迎廣大愛好者下載學(xué)習(xí)
    發(fā)表于 06-18 11:34 ?0次下載
    電腦<b class='flag-5'>愛好者</b>2011年第1期

    DIY電子套件:愛好者變成工程師的快樂之路

    DIY電子產(chǎn)品的市場似乎又再現(xiàn)活力。電子愛好者一直都有,隨著時(shí)間的推移數(shù)量也有升有降,但最近持續(xù)上升的電子愛好者數(shù)量還是很難解釋。
    發(fā)表于 03-12 08:56 ?5546次閱讀

    人工智能愛好者如何開發(fā)自己的人工智能系統(tǒng)

    據(jù)國外媒體報(bào)道,像曾經(jīng)的DIY電腦一樣,現(xiàn)在也有很多人工智能愛好者在利用現(xiàn)有的工具和數(shù)據(jù)開發(fā)自己的人工智能系統(tǒng)。
    的頭像 發(fā)表于 11-20 10:13 ?1.3w次閱讀