RM新时代网站-首页

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

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

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

從Linux平臺來研究GPIO軟件框架

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

嵌入式 Linux 平臺

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

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

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

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

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

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

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

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

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

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

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

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

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

圖片

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

    關(guān)注

    5082

    文章

    19103

    瀏覽量

    304700
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11290

    瀏覽量

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

    關(guān)注

    69

    文章

    4914

    瀏覽量

    87373
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

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

    關(guān)注

    1

    文章

    1014

    瀏覽量

    21331
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

    針對現(xiàn)有 IPSec VPN 系統(tǒng)在效率和可靠性方面存在的問題,提出并改進(jìn)了一種基于Linux最新內(nè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í)平臺研究

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

    嵌入式Linux軟件測試框架研究

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

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

    Linux軟件開發(fā)平臺軟件配置 8.1 Linux 體系結(jié)構(gòu) 8.2 Linux開發(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系列。 我們介紹了基本的用戶和內(nèi)核空間GPIO使用情況,以及GPIOGPIO
    的頭像 發(fā)表于 11-26 07:02 ?4069次閱讀

    Linux DMA Engine框架的介紹

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

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

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

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

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

    硬件軟件角度理解Gadget框架

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