Linux核心層和使用者層配置GPIO引腳
Linux BSP 開發的基礎就是和GPIO打交道, 下面總結下這幾天對某家開發板的GPIO控制的知識。公司的開發板用的是 DTB 模式 ,首先,進入 dts,dtsi檔案檢視關於GPIO 的模組。
soc {
.
.
.
gpio0: [email protected]****addr {
compatible = "**********";
reg = <0 0x****addr 0 0x50>;
interrupts = <SPI 4 IRQ_TYPE_LEVEL_HIGH>;
#gpio-cells = <2>;
gpio-controller;
gpio-ranges = <&pfc 0 0 16>;
#interrupt-cells = <2>;
interrupt-controller;
clocks = <&cpg CPG_MOD 912>;
power-domains = <*****>;
};
.
.
.
};
可以看到 GPIO 節點 掛在 SOC node 下 ,手上這塊開發板 把GPIO分成了8個 bank : gpio0 - gpio7
reg =<0 地址 0 長度>
#gpio-cells =<2> 表示 要用2個cell描述一個 GPIO引腳
如 I2C中定義 : pwd-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
表示 bank 6 的gpio 用 2個cell 描述 :7,GPIO_ACTIVE_HIGH (7表示bank 6 下的第七個引腳一般是 GP 6_07表示 ;GPIO_ACTIVE_HIGH則為高電平有效)
gpio-controller; interrupt-controller; 表示 bank 0 下的引腳 既可以作為中斷引腳 ,也可以作為 通用的GPIO引腳
gpio-ranges = <&pfc 0 0 16>; 表示 bank 0下有16個 GPIO引腳
GPIO 使用 pinctrl 方式來驅動 ,pin control subsystem 會 :
1. 列舉所有可用的pin 腳 ,於是每個引腳就有的唯一的 ID (num) ,這個ID 很關鍵,對於以後的操作。
enum {
PINMUX_RESERVED = 0,
PINMUX_DATA_BEGIN,
GP_ALL(DATA), /* add GP_0_1_DATA ,GP_0_1_DATA..... */
PINMUX_DATA_END,
#define F_(x, y)
.....
}
2.管理 這些Pin腳的, 由於pin 可以複用 比如 SPI 和GPIO 複用一個pin腳 如: GP2_08 / MISO,於是引申出 pin group 和 pin functon 兩個概念:
i2c2_pins: i2c2 {
groups = "i2c2_a";
function = "i2c2";
};
在dts 中如上所示 ,其中 i2c2_a 在 pinctl 原始碼中 如下所示,i2c的兩根引腳使用 GP5_0 ,GP5_4.
static const unsigned int i2c2_a_pins[] = {
/* SDA, SCL */
GP_PIN(5, 0),GP_PIN(5, 4),
};
function 如下 :
struct sh_pfc_function {
const char *name;
const char * const *groups;
unsigned int nr_groups;
};
#define SH_PFC_FUNCTION(n = i2c2) \
{ \
.name = #n, \
.groups = n##_groups, \
.nr_groups = ARRAY_SIZE(n##_groups), \
}
好了 ,基本概念就先寫這麼多 。
核心層配置 GPIO
在 寫核心驅動的時候 如果希望配置某個GPIO引腳 , 可以在dts中 新增: pwd-gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
在 driver 程式碼中 , 需要包含 #include <linux/gpio.h>使用 :
gpio_id = of_get_named_gpio(your_driver->dev->of_node,"pwd-gpios", 0);
獲取 GP0_07的 ID號 ,然後申請 一個GPIO 操作物件。
if (gpio_is_valid(gpio_id)) //判斷一個IO是否合法
devm_gpio_request_one(&platform_device->dev, gpio_id,GPIOF_OUT_INIT_LOW, name);
設定GPIO的方向,如果是輸出同時設定電平:
/* set as input or output, returning 0 or negative errno */
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);
獲取輸入引腳的電平:
/* GPIO INPUT: return zero or nonzero */
int gpio_get_value(unsigned gpio);
設定輸出:
void gpio_set_value(unsigned gpio, int value);
釋放申請的GPIO物件
void gpio_free(unsigned gpio);
將GPIO對映為IRQ中斷:
/* map GPIO numbers to IRQ numbers */
int gpio_to_irq(unsigned gpio);
/* map IRQ numbers to GPIO numbers (avoid using this) */
int irq_to_gpio(unsigned irq);
設定GPIO IRQ中斷型別:
set_irq_type(gpio_to_irq( gpio), IRQ_TYPE_EDGE_FALLING);
使用者層配置 GPIO
需要確認 核心 menuconfig 中 Device Drivers -》 GPIO Support 設 y .
在 /sys/class/gpio 目錄下如下所示 :
[email protected]:/sys/class/gpio# ls
export gpiochip361 gpiochip419 gpiochip453 gpiochip496
gpiochip357 gpiochip393 gpiochip437 gpiochip468 unexport
gpiochip 後面的數字 是每個bank 的基地址 也就是 GP0 對應 gpiochip468
那麼 GP0_07 的 ID 就是 468 + 7 ;(可能不同的核心版本,或者 開發板不一樣 )通過 :
會對應生成 gpio475 目錄
通過
來控制輸出輸入 ,電平高低 。
最後,關於 Pinctrl 的內容還有太多要寫,就先寫到這把。
相關推薦
Linux核心層和使用者層配置GPIO引腳
Linux BSP 開發的基礎就是和GPIO打交道, 下面總結下這幾天對某家開發板的GPIO控制的知識。公司的開發板用的是 DTB 模式 ,首先,進入 dts,dtsi檔案檢視關於GPIO 的模組。 soc { .
【Linux之旅-7】Linux使用者和組的配置檔案
一、使用者(user)的配置檔案 1.1配置檔案位置 /etc/passwd 1.2作用 記錄使用者的各種資訊。 1.3檔案每行的含義 使用者名稱:口令:使用者標識號:組標識號:註釋性描述:
應用層配置GPIO方法
以配置GPIO9為例: 1. 從shell命令列配置: 建立操作節點: echo 9 > /sys/class/gpio/export 設定方向(in/out): echo out >
Android 底層驅動開發步驟——linux核心層、HAL層、JNI層
1.Linux驅動實現2.Linux核心驅動測試3.Android HAL層實現4.Aidl實現5.Service java實現6.Service jni 實現7.註冊service和jni方法8.Android App呼叫測試1.linux驅動實現。2.Linux核心驅動測
esp接收gpio引腳中斷處理按鍵觸發
20181025w gpio按鍵觸發 –定義變數 –wifi模組旁邊的LED燈D4引腳 ledwifi=4 –設定引腳模式:0(輸入模式) gpio.mode(ledwifi,0) –此時任然可以設定引腳電平輸出高/底(最後引腳1高電平,接低電平觸發) gp
全誌R58平臺的GPIO引腳控制
can conf direct 開發板 oot strong fine 調試 ace 全誌R58平臺的GPIO引腳控制 2017/8/18 15:50 版本:V1.0 開發板:SC5806(全誌R58平臺) SDK:android4.4.4 本文以GPIO引腳P
如何在PIC微控制器的GPIO引腳上生成PWM訊號
轉載於國外課棧(含視訊) PWM訊號生成是每個嵌入式工程師工具庫中的重要工具,它們非常適用於控制伺服電機位置,在轉換器/逆變器中切換少量電源電子積體電路等許多應用,甚至用於簡單的LED亮度控制。在pic 微控制器中, pwm 訊號可以通過設定所需的暫存器使用比較、捕獲和 pwm (ccp)
樹莓派下java對GPIO引腳的引用
2) 安裝Pi4j開啟樹莓派的控制檯輸入下面的命令下載Pi4j檔案: wget http://pi4j.googlecode.com/files/pi4j-0.0.5.deb 複製程式碼 (如果你已經安裝了Pi4j的其他版本,請先執行如下命令將其解除安裝掉:sud
控制樹莓派上gpio引腳
一. 首先下載工具wiringpi,具體操作看資料: 二、 gpio readall 顯示此時樹莓派所有引腳狀態: 2號引腳改為輸出狀態(BCM編號): gpio -g mode 2 output 2號引腳改為高電平 gpio -g write 2 1
《Linux深度攻略》一書,講述Linux日常系統管理和服務器配置內容
linuxLinux深度攻略 首先從介紹Linux系統的安裝入手,講述了Linux系統管理和服務器配置兩部分的知識。系統管理方面內容有Linux系統簡介和安裝,Linux字符界面,目錄和文件管理,Linux常用命令,Shell編程,用戶和組群賬戶管理,權限、所有者和ACL,歸檔、壓縮和備份,軟件包管理,磁盤和
Microsoft SQL Server for Linux安裝和配置
fig fcm zone linux for onf targe 查看 nbsp 客戶端 雖說mssql for linux早已經出來了,但原本沒有打算這麽早就去嘗試的,無奈之下還是得先嘗試用了,這裏分幾篇介紹我在用mssql for linux時遇到的問題,不得不說作
Linux 網卡驅動學習(六)(應用層、tcp 層、ip 層、設備層和驅動層作用解析)
local acc 每次 letter auto sizeof style article inode 本文將介紹網絡連接建立的過程、收發包流程,以及當中應用層、tcp層、ip層、設備層和驅動層各層發揮的作用。 1、應用層 對於使用socket進行網絡連接的serv
學習linux——用戶和組的配置文件
幫助 shel 修改時間 改密碼 span tor 時間 刪除 變化 2017-07-21 19:57:10 @惟願此心無怨尤 原創 我有認真寫,你有認真看嗎 linux用戶和組的主要配置文件有四個,如下: /etc/passwd: 用戶及其屬性信息
Linux chmod和chown更改文件目錄的所屬者命令的用法
操作 擁有 所有權限 其他 chang 交換 chan chm 訪問權限 一、chown 命令 用途:更改文件的所有者或組。命令由單詞change owner組合而成。 使用示例: 1,更改文件的所有者: chown jim program.c 文件 program.c 的
Mac下使用PF進行端口轉發和防火墻配置(類似Linux的iptables)
火墻 get 端口 生效 proto 保護 功能 net inet6 在Mac沒有iptables這些,替代的軟件為PF,命令為pfctl。在早些版本用ipfw(<=10.10),後面改為PF。還有一些可以使用OpenBsd,不過這個不太好用。 網上關於pfctl的
Linux 124課程 9、配置和安全OpenSSH服務
數據加密 gen listen 認證 基於 for 公鑰加密 重啟 打開 SSH 基於RSA算法 遠程登錄工具RSA 非對稱加密算法: 公鑰: 對外公開 私鑰: 私有保管 用公鑰加密,私鑰才能打開;用私鑰加密,公鑰才能打開;數據加密的方法,將對方的公鑰用於加密數據
Linux學習命令匯總十——linux網絡管理及配置和網絡檢測工具
網絡配置 網絡管理 網絡檢測 ifconfig ip 本章Blog相關Linux知識點CSMA/CD(Carrier Sense Multiple Access with Collision Detection)基帶沖突檢測的載波監聽多路訪問技術(載波監聽多點接入/碰撞檢測),是一種爭用型
5-華為防火墻:二層和三層接入的安全策略配置差異
分享 fire static com color vlan rust 技術 -a 一、實驗拓撲: 二、實驗要求:1、內網:連接R2接口G0/0/2是三層接口,其它接口都是二層接口;R1、R2、R3部署默認路由到USG;2、USG上創建VLAN 10、202,並將G0/0/0
Linux 筆記 - 第十三章 Linux 系統日常管理之(四)Linux 數據備份工具 rsync 和網絡配置
方法 target speed cnblogs rsync -av html links 布爾值 單個 博客地址:http://www.moonxy.com 一、前言 sync 命令是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機間的文件,可以理解為 rem
基於Linux系統的網絡配置和yum命令及軟件的安裝
network mar 上網 sat ping通 自動 接收 2.4 res 1、相關概念 1.1面向連接的TCP協議(Transmission Control Protocol,傳輸控制協議) ??TCP(Transmission Control Protocol,傳輸控