chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何使用Linux設備驅(qū)動程序點亮LED

Wildesbeast ? 來源:今日頭條 ? 作者:嵌入式在左C語言在 ? 2020-04-18 10:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇文章來學習嵌入式Linux驅(qū)動程序開發(fā)中的第一步——點亮led。

驅(qū)動程序開發(fā)的步驟主要分為以下幾個部分:

根據(jù)原理圖確定相關(guān)引腳;

查看芯片手冊(以我的板子來說就是三星平臺EXYNOS4412系列);

編寫驅(qū)動程序;

編寫用于測試的應用程序;

以上的驅(qū)動程序開發(fā)過程,不僅僅只是在Linux中,在所有的嵌入式軟件開發(fā)中,也基本都是遵循這套流程。

特別說明:第一個步驟和第二個步驟我將直接跳過(查看原理圖和芯片手冊),因為這兩者取決于我們的硬件平臺,大家可以根據(jù)具體的應用進行修改即可。重點放在第三個步驟和第四個步驟,也就是編寫驅(qū)動程序和測試程序。

下面進行詳細的講解

編寫驅(qū)動程序

(1)確認led所連接的引腳,led1、led2分別連接的引腳為EXYNOS4_GPD0(0)和EXYNOS4_GPD0(1),此處的EXYNOS4_GPD0(0)是一個宏,該宏是IO引腳的結(jié)構(gòu)描述,兩個led定義為一個數(shù)組的代碼如下:

(2)寫使用到的兩個gpio申請,且申請成功之后將他們配置為輸出模式,同時保持默認高電平,根據(jù)原理圖可知當?shù)碗娖綍rled打開,所以開機led默認關(guān)閉,代碼如下:

(3)對應上一步,寫釋放申請的gpio,代碼如下:

(4)寫led設備與文件操作相關(guān)的函數(shù)(在本例中主要是open()函數(shù)和ioctl()函數(shù)等),代碼如下:

open函數(shù)和release函數(shù)

ioctl函數(shù)

然后將實現(xiàn)的文件操作函數(shù)填充到file_operations結(jié)構(gòu)體中,如下:

由于在本例中不使用read()、write()和llseek()等函數(shù),所以可以不用寫這些文件操作函數(shù)的具體實現(xiàn)。

(5)寫模塊入口函數(shù)和模塊出口函數(shù),代碼如下:

在模塊入口函數(shù)中,主要完成注冊設備、設備初始化、將設備注冊到系統(tǒng)、創(chuàng)建設備節(jié)點以及申請gpio并初始化。

模塊入口函數(shù)——前半部分

模塊入口函數(shù)——后半部分

在模塊出口函數(shù)中,主要完成一些釋放工作,例如注銷設備、注銷設備節(jié)點、釋放gpio等。

模塊出口函數(shù)

最后修飾入口函數(shù)和出口函數(shù),以及模塊的許可證聲明即可:

編寫用于測試的應用程序

代碼如下:

實現(xiàn)的效果為:運行測試程序,輸入可執(zhí)行文件名,并輸入兩個控制參數(shù),第一個參數(shù)決定控制哪一個led,第二個參數(shù)決定是點亮led還是關(guān)閉led,如果輸入?yún)?shù)個數(shù)不等于3時不能控制點燈。

在文章結(jié)束部分作一些總結(jié):

對宏定義EXYNOS4_GPL2(0)的操作實際上就是對4412芯片管腳寄存器的操作;

上層程序員(包括驅(qū)動工程師)不用關(guān)心物理地址和虛擬地址具體是多少,只需要對一組宏定義操作,就是對4412內(nèi)部寄存器操作;

關(guān)于led管腳的申請、賦值以及配置所使用到的主要函數(shù)為: GPIO申請函數(shù)和賦值函數(shù)gpio_request – gpio_set_value()、三星平臺的GPIO配置函數(shù)s3c_gpio_cfgpin()、GPIO配置輸出模式的宏變量S3C_GPIO_OUTPUT。

通過對普通GPIO的操作,大家可以了解到,學習驅(qū)動的過程中,很大一部分時間實際上是用于熟悉庫函數(shù)的使用。其實無論什么驅(qū)動都沒有想象的那么難,一般性的方法都是先了解和掌握和對應驅(qū)動相關(guān)的庫函數(shù)。

最后在掌握驅(qū)動庫函數(shù)的基礎上,掌握Linux架構(gòu),驅(qū)動自然很容易寫出來或者很容易就移植成功,希望此篇文章可以幫助讀者初步進入嵌入式Linux設備驅(qū)動的世界。

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

    關(guān)注

    243

    文章

    24440

    瀏覽量

    687531
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11628

    瀏覽量

    218010
  • 驅(qū)動程序
    +關(guān)注

    關(guān)注

    19

    文章

    868

    瀏覽量

    49962
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    【書籍評測活動NO.67】成為硬核Linux開發(fā)者:《Linux 設備驅(qū)動開發(fā)(第 2 版)》

    ——這便是《Linux 設備驅(qū)動開發(fā)》。本書從基礎知識出發(fā),分專題透徹講解Linux環(huán)境下的設備驅(qū)動
    發(fā)表于 11-17 17:52

    如何使 ML56-TK 驅(qū)動程序適應 Linux 內(nèi)核?

    如何使 ML56-TK 驅(qū)動程序適應 Linux 內(nèi)核
    發(fā)表于 08-20 07:57

    為FreeRTOS增加新的設備驅(qū)動程序

    如果你正在使用FreeRTOS構(gòu)建嵌入式系統(tǒng),并且考慮添加新的設備驅(qū)動程序,那么這篇文章很適合你。高效的設備集成不僅僅是讓設備功能正常運行——更關(guān)乎模塊化、可靠性和安全性。
    的頭像 發(fā)表于 08-06 15:44 ?753次閱讀
    為FreeRTOS增加新的<b class='flag-5'>設備</b><b class='flag-5'>驅(qū)動程序</b>

    zephyr設備驅(qū)動程序模型

    ? ? 1:Zephyr 內(nèi)核支持多種設備驅(qū)動程序驅(qū)動程序是否可用取決于board 和驅(qū)動程序。 Zephyr 設備模型為配置作為系統(tǒng)一部
    的頭像 發(fā)表于 07-29 10:34 ?481次閱讀
    zephyr<b class='flag-5'>設備</b><b class='flag-5'>驅(qū)動程序</b>模型

    求助,關(guān)于55513 Linux驅(qū)動程序問題求解

    ; 我們使用 linux 內(nèi)核 5.4 來構(gòu)建 fmac 驅(qū)動程序,但是當 insmod ko 文件時 brcmfmac 將失敗:brcmfmac:brcmf_sdio_htclk:訪問關(guān)閉時鐘失敗
    發(fā)表于 07-09 08:02

    Linux環(huán)境再升級:PLIN驅(qū)動程序正式發(fā)布

    PLIN驅(qū)動程序現(xiàn)已正式發(fā)布,本文將展示如何安裝PLIN驅(qū)動程序,以及如何在Linux環(huán)境下進行基本的PLIN通信操作,確保您能夠快速掌握并應用這一新工具。
    的頭像 發(fā)表于 04-21 15:29 ?798次閱讀
    <b class='flag-5'>Linux</b>環(huán)境再升級:PLIN<b class='flag-5'>驅(qū)動程序</b>正式發(fā)布

    RTC芯片有Linux PCA2131驅(qū)動程序嗎?

    RTC 芯片有 Linux PCA2131驅(qū)動程序嗎? 1) 如果沒有,我可以使用任何兼容的驅(qū)動程序驅(qū)動這個 RTC 芯片嗎? 2) 如果是,我在哪里可以找到它?
    發(fā)表于 03-31 06:22

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux設備驅(qū)動的分類

    Drivers):這類驅(qū)動程序用于支持網(wǎng)絡接口卡(NIC)和其他網(wǎng)絡設備。它們負責管理數(shù)據(jù)包的傳輸、網(wǎng)絡連接和協(xié)議處理等功能。Linux設備驅(qū)動
    發(fā)表于 03-12 10:20

    飛凌嵌入式ElfBoard ELF 1板卡-Linux設備驅(qū)動的分類

    Drivers):這類驅(qū)動程序用于支持網(wǎng)絡接口卡(NIC)和其他網(wǎng)絡設備。它們負責管理數(shù)據(jù)包的傳輸、網(wǎng)絡連接和協(xié)議處理等功能。Linux設備驅(qū)動
    發(fā)表于 03-10 17:00

    AN3761-KSZ DSA驅(qū)動程序的使用

    電子發(fā)燒友網(wǎng)站提供《AN3761-KSZ DSA驅(qū)動程序的使用.pdf》資料免費下載
    發(fā)表于 01-22 16:28 ?0次下載
    AN3761-KSZ DSA<b class='flag-5'>驅(qū)動程序</b>的使用

    用于InterBase的ODBC驅(qū)動程序:可與多個第三方工具兼容

    、macOS 和 Linux 上從符合 ODBC 標準的報告、分析、BI 和 ETL 工具訪問 InterBase 數(shù)據(jù)庫。我們的 ODBC 驅(qū)動程序完全支持標準的 ODBC API 功能和數(shù)據(jù)類型,并
    的頭像 發(fā)表于 01-22 09:57 ?843次閱讀
    用于InterBase的ODBC<b class='flag-5'>驅(qū)動程序</b>:可與多個第三方工具兼容

    適用于MySQL的dbExpress驅(qū)動程序:提供對MySQL的快速訪問

    (包括社區(qū)版)快速訪問 MySQL,以及 macOS(32 位和 64 位)和 Linux(64 位)平臺。對于此服務器,dbExpress 將驅(qū)動程序作為實現(xiàn)通用 dbExpress 的獨立庫,提供用于
    的頭像 發(fā)表于 01-21 09:52 ?675次閱讀

    適用于Oracle的ODBC驅(qū)動程序

    Linux 上符合 ODBC 標準的報告、分析、BI 和 ETL 工具訪問 Oracle 數(shù)據(jù)庫。我們的 ODBC 驅(qū)動程序完全支持標準 ODBC API 功能和數(shù)據(jù)類型,并支持從任何地方輕松
    的頭像 發(fā)表于 01-13 09:17 ?858次閱讀

    適用于Oracle的dbExpress驅(qū)動程序

    (包括社區(qū)版)快速訪問 Oracle macOS(32 位和 64 位)和 Linux(64 位)平臺。對于此服務器,dbExpress 將驅(qū)動程序作為實現(xiàn)通用 dbExpress 的獨立庫提供 用于
    的頭像 發(fā)表于 01-09 16:04 ?692次閱讀
    適用于Oracle的dbExpress<b class='flag-5'>驅(qū)動程序</b>

    USB音頻過濾器驅(qū)動程序安裝

    電子發(fā)燒友網(wǎng)站提供《USB音頻過濾器驅(qū)動程序安裝.pdf》資料免費下載
    發(fā)表于 12-19 14:28 ?0次下載
    USB音頻過濾器<b class='flag-5'>驅(qū)動程序</b>安裝