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

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

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

從Linux平臺(tái)來(lái)研究GPIO軟件框架

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:Jasonangel ? 2023-09-28 16:05 ? 次閱讀

嵌入式 Linux 平臺(tái)

先總結(jié)一句:不管是單片機(jī)還是高端 ARM 平臺(tái),最底層都是寄存器,硬件之上就是寄存器,任何封裝形式到最底層就是操作寄存器。

對(duì)于上了 Linux 系統(tǒng)的平臺(tái),我們有其他方法,讓它可以像單片機(jī)一樣簡(jiǎn)單的操作 IO 口,這得益于各路 Linux 大神對(duì)系統(tǒng)底層的封裝。

在 Linux 中有 pinctrl 和 gpio 子系統(tǒng),它們提供了 API 接口給你使用,讓你方便的操控 GPIO 口。

Linux 內(nèi)核針對(duì) PIN 的配置推出了 pinctrl 子系統(tǒng),對(duì) GPIO 的配置推出了 gpio 子系統(tǒng)。

上面這句話很重要,我詳細(xì)解釋一下:這里是將 pin 腳和控制 IO 口輸入輸出分離。

pinctrl 子系統(tǒng)管理 200 個(gè) IO 口的上拉下拉電阻電流驅(qū)動(dòng)能力,是硬件底層的存在。如果 pinctrl 將某個(gè) pin 腳初始化成了普通GPIO 而不是 IIC 或者 SPI,那么接下來(lái)我們就可以使用 gpio 子系統(tǒng)的 API 去操作 IO 口輸出高低電平。

傳統(tǒng)的配置 pin 的方式就是直接操作相應(yīng)的寄存器,但是這種配置 方式比較繁瑣、而且容易出問(wèn)題(比如 pin 功能沖突)。pinctrl子系統(tǒng)就是為了解決這個(gè)問(wèn)題而引入的,pinctrl 子系統(tǒng)主要工作內(nèi)容如下:

①、獲取設(shè)備樹(shù)中 pin 信息。

②、根據(jù)獲取到的 pin 信息來(lái)設(shè)置 pin 的復(fù)用功能

③、根據(jù)獲取到的 pin 信息來(lái)設(shè)置 pin 的電氣特性,比如上/下拉、速度、驅(qū)動(dòng)能力等。

對(duì)于我們使用者來(lái)講,只需要在設(shè)備樹(shù)里面設(shè)置好某個(gè) pin 的相關(guān)屬性即可,其他的初始化工作均由 pinctrl 子系統(tǒng)來(lái)完成,pinctrl子系統(tǒng)源碼目錄為 drivers/pinctrl。

注意,pinctrl 子系統(tǒng)也是一個(gè)標(biāo)準(zhǔn)的 platform 驅(qū)動(dòng),當(dāng)設(shè)備和驅(qū)動(dòng)匹配的時(shí)候,probe 函數(shù)會(huì)執(zhí)行,只是 pinctrl 子系統(tǒng)采用的arch_initcall 去聲明,而不是module_init(device_initcall),所以在系統(tǒng)起來(lái)的時(shí)候它會(huì)先加載。(具體原因看下面這篇文章)

Linux 驅(qū)動(dòng)掛載順序分析

圖片

gpio

可以看出其實(shí)兩者軟件框架一樣的,主要是 HW Abstract layer 具體實(shí)現(xiàn)不一樣。

你以為兩者是分離的,實(shí)際上不是的,gpio 子系統(tǒng)是基于 pinctrl 子系統(tǒng)的,gpio 的 API 接口的實(shí)現(xiàn)很多都是基于 pinctrl子系統(tǒng)的函數(shù)。

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

    關(guān)注

    5045

    文章

    18816

    瀏覽量

    298442
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207891
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4570

    瀏覽量

    86693
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1172

    瀏覽量

    51510
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1002

    瀏覽量

    21216
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文搞懂Linux pinctrl/gpio子系統(tǒng)

    注: 所有文章基于linux-3.13以上,本系列主要介紹 GPIO的一些基本知識(shí),驅(qū)動(dòng)操作GPIO的接口,應(yīng)用層通過(guò)sysfs操作GPIO的接口,
    發(fā)表于 06-09 09:52 ?2301次閱讀

    需求的角度去理解Linux系列:總線、設(shè)備和驅(qū)動(dòng)

    %的開(kāi)發(fā)工作量,而你只需要完成20%的開(kāi)發(fā)工作量。Linux平臺(tái)上的各個(gè)子系統(tǒng),如設(shè)備驅(qū)動(dòng)模型、input子系統(tǒng)、I2C總線、frame buffer驅(qū)動(dòng)等等都屬于軟件框架,它是針對(duì)特
    發(fā)表于 03-11 14:45

    Windows平臺(tái)遷移到Linux平臺(tái)怎么實(shí)現(xiàn)?

    我們?cè)噲DWindows平臺(tái)遷移到Linux平臺(tái)。所以我們正在嘗試為先前的塊設(shè)計(jì)重新生成位文件。但是我們遇到了異常錯(cuò)誤。是否有任何過(guò)程來(lái)編譯
    發(fā)表于 08-28 12:38

    Linux系統(tǒng)的功耗研究

    Linux正在嵌入式領(lǐng)域發(fā)揮著越來(lái)越重要的作用。對(duì)于嵌入式設(shè)備尤其是移動(dòng)設(shè)備來(lái)說(shuō),功耗是系統(tǒng)的重要指標(biāo),系統(tǒng)設(shè)計(jì)的重要目標(biāo)之一就是要盡可能地降低功耗?,F(xiàn)在,對(duì)功耗的研究主要集中在硬件解決方案上,而軟件
    發(fā)表于 11-04 06:45

    Linux 驅(qū)動(dòng) = 軟件框架 + 硬件操作

    ??Linux 驅(qū)動(dòng) = 軟件框架 + 硬件操作??驅(qū)動(dòng)程序依賴(lài)于 Linux 內(nèi)核,你為開(kāi)發(fā)板 A 開(kāi)發(fā)驅(qū)動(dòng),那就先在 Ubuntu 中得到、 配置、編譯開(kāi)發(fā)板 A 所使用的
    發(fā)表于 12-17 07:11

    基于Linux的XFRM框架下IPSec VPN的研究

    針對(duì)現(xiàn)有 IPSec VPN 系統(tǒng)在效率和可靠性方面存在的問(wèn)題,提出并改進(jìn)了一種基于Linux最新內(nèi)核平臺(tái)的 IPSec VPN網(wǎng)關(guān)系統(tǒng)。給出Linux 的XFRM 框架結(jié)構(gòu)和函數(shù)調(diào)用
    發(fā)表于 04-13 09:31 ?31次下載

    基于Linux的實(shí)時(shí)平臺(tái)研究

    主要介紹了一個(gè)基于Linux 操作系統(tǒng)的實(shí)時(shí)平臺(tái)的技術(shù)研究和實(shí)現(xiàn)方法。所研究的實(shí)時(shí)平臺(tái)以X86 體系PC 為硬件環(huán)境,
    發(fā)表于 06-01 10:31 ?11次下載

    嵌入式Linux軟件測(cè)試框架研究

    嵌入式Linux 軟件是最難測(cè)試的一類(lèi)軟件。在測(cè)試過(guò)程中通過(guò)使用有效的測(cè)試框架,可以顯著提高測(cè)試效率,最終確保軟件質(zhì)量。通過(guò)對(duì)嵌入式
    發(fā)表于 06-07 17:14 ?29次下載

    第8章 Linux軟件開(kāi)發(fā)平臺(tái)軟件配置

    Linux軟件開(kāi)發(fā)平臺(tái)軟件配置 8.1 Linux 體系結(jié)構(gòu) 8.2 Linux開(kāi)發(fā)
    發(fā)表于 04-11 14:38 ?3次下載

    TI達(dá)芬奇軟件框架技術(shù)的研究與改進(jìn)

    TI達(dá)芬奇軟件框架技術(shù)的研究與改進(jìn)
    發(fā)表于 10-21 09:23 ?1次下載
    TI達(dá)芬奇<b class='flag-5'>軟件</b><b class='flag-5'>框架</b>技術(shù)的<b class='flag-5'>研究</b>與改進(jìn)

    如何在嵌入式Linux中使用GPIO

    了解如何在嵌入式Linux中使用GPIO,特別強(qiáng)調(diào)Zynq-7000系列。 我們介紹了基本的用戶(hù)和內(nèi)核空間GPIO使用情況,以及GPIO,GPIO
    的頭像 發(fā)表于 11-26 07:02 ?3987次閱讀

    Linux DMA Engine框架的介紹

    此會(huì)話描述如何設(shè)備驅(qū)動(dòng)程序在Linux中使用DMA。 這包括內(nèi)存分配,緩存控制和DMA設(shè)備控制。 詳細(xì)介紹了Linux DMA Engine框架。
    的頭像 發(fā)表于 11-23 06:29 ?6119次閱讀

    嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ)到框架

    一眾嵌入式Linux驅(qū)動(dòng)書(shū)中筆者最推崇宋寶華的《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》,但他完全可以更進(jìn)一步上升到驅(qū)動(dòng)框架個(gè)例(比如USBwifi模塊驅(qū)動(dòng))和應(yīng)用層調(diào)用。有些書(shū)c語(yǔ)言基礎(chǔ)談起,
    發(fā)表于 11-01 16:58 ?14次下載
    嵌入式<b class='flag-5'>Linux</b>驅(qū)動(dòng)開(kāi)發(fā)<b class='flag-5'>從</b>基礎(chǔ)到<b class='flag-5'>框架</b>

    Linux驅(qū)動(dòng)分析之RTC框架

    當(dāng)Linux內(nèi)核啟動(dòng)時(shí),它會(huì)RTC中讀取時(shí)間與日期,作為基準(zhǔn)值。然后通過(guò)軟件來(lái)維護(hù)系統(tǒng)時(shí)間和日期。Linux系統(tǒng)中提供了RTC核心層,對(duì)于
    的頭像 發(fā)表于 05-26 15:12 ?916次閱讀
    <b class='flag-5'>Linux</b>驅(qū)動(dòng)分析之RTC<b class='flag-5'>框架</b>

    硬件軟件角度理解Gadget框架

    2. 硬件軟件角度理解 Gadget 框架 USB 傳輸?shù)暮诵氖?endpoint,使用 endpoint 可以收發(fā)數(shù)據(jù)。在 endpoint 之上,就可以模擬 USB 串口、USB 觸碰屏
    的頭像 發(fā)表于 07-13 11:32 ?818次閱讀
    <b class='flag-5'>從</b>硬件<b class='flag-5'>軟件</b>角度理解Gadget<b class='flag-5'>框架</b>