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

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

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

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

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

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

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

驅(qū)動流程分為5個部分:

1、分配

2、設(shè)置

3、注冊file_operation

4、入口

5、出口

一、傳統(tǒng)方法

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

drv.c:定義引腳信息

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

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

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

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

drv.c:入口函數(shù)-申請設(shè)備號,創(chuàng)建設(shè)備節(jié)點

其中register_chrdev():申請設(shè)備號。

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

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

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

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

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

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

傳統(tǒng)方法:

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

缺點:不易擴展,每次修改需要重新編譯驅(qū)動

二、總線方法

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

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

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

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

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

-> struct device_driver{};

-> structplatform_device_id{};

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

其中

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

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

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

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

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

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

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

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():向總線注冊一個設(shè)備。

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

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

總線方法:

優(yōu)點:易擴展

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

三、設(shè)備樹方法

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

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

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

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

設(shè)備樹:

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

缺點:稍微復(fù)

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

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

    關(guān)注

    176

    文章

    888

    瀏覽量

    348642
  • Linux驅(qū)動
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    9965

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    電子愛好者

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

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

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

    電源愛好者

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

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

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

    電子愛好者

    電子愛好者報道了啊
    發(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è)電子愛好者】(群號256099730),電子愛好者 DIY電子高手群

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

    電子愛好者的苦惱!

    壇子里的各位大神: 我是一名電子愛好者,從事其他行業(yè),但特別喜歡電子,沒事的時候就喜歡折騰,看見各位大神指點江山,很是羨慕,但一直希望壇子里大神能給一個二極管和三極管的資料,型號太多了,記下一些,但
    發(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”時有一條為“A PERSON WHO RECEI
    發(fā)表于 03-29 11:20 ?4960次閱讀

    電腦愛好者2011年第9期

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

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

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

    電子愛好者實用電子制作

    電子愛好者實用電子制作,有興趣的同學(xué)可以下載學(xué)習(xí)
    發(fā)表于 04-29 18:24 ?285次下載

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

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