Linux debugfs使用分享 软件查看gpio状态

本文分享了如何通过adb shell命令在Android设备上创建debugfs目录并挂载debugfs文件系统,进而查看设备上的GPIO状态以及调节器、时钟等关键系统资源的状态。此方法在设备调试过程中提供了极大的便利。

Linux debugfs使用分享 软件查看gpio状态

在调试中加入debugfs有时可以起到事半功倍的效果: 
 
adb shell
 #mkdir /data/debug
 #mount -t debugfs debugfs /data/debug
 #cd /data/debug 
 
查看gpio状态
 
root@Android:/data/debugfs # cat gpio
 GPIOs 0-15:
  gpio-0  (front_camera_rst    ) out lo
 
GPIOs 16-42:
  gpio-17  (tsl2771_int        ) in  hi
  gpio-26  (ctp_reset          ) out hi
  gpio-29  (front_camera_pwd    ) out hi
  gpio-31  (gpio_kp_out        ) out lo
  gpio-32  (gpio_kp_out        ) out lo
  gpio-35  (GPIO_E186_POWER    ) in  lo
  gpio-36  (gpio_kp_in          ) in  hi
  gpio-37  (gpio_kp_in          ) in  hi
  gpio-42  (hs_sw              ) in  hi
 
GPIOs 43-67:
  gpio-48  (ctp_irq            ) in  hi
  gpio-60  (qup_scl            ) in  hi
  gpio-61  (qup_sda            ) in  hi
 
GPIOs 68-94:
  gpio-76  (lis3dh_acc_int      ) in  lo
  gpio-82  ([auto]              ) out hi
  gpio-85  (bahama sys_rst_n    ) in  lo
  gpio-94  ([auto]              ) out hi
 
GPIOs 95-106:
  gpio-97  (MDP_VSYNC          ) in  lo
 
GPIOs 107-132:
  gpio-107 (ctp_power          ) in  hi
  gpio-115 (GPIO_E186_WAKEUP    ) in  lo
  gpio-131 (qup_scl            ) in  hi
  gpio-132 (qup_sda            ) in  hi
 
查看regulator
 root@android:/data/debugfs # cd
 regulator/                                    
dummy/ ldo03/ ldo06/ ldo09/ ldo12/ ldo15/ ldo18/ smps1/ smps4/ 
ldo01/ ldo04/ ldo07/ ldo10/ ldo13/ ldo16/ ldo19/ smps2/ 
ldo02/ ldo05/ ldo08/ ldo11/ ldo14/ ldo17/ ncp/  smps3/ 
root@android:/data/debugfs # cat
 regulator/ldo10/voltage                      
3000000
 
查看clk
 root@android:/ #
 cat /data/debugfs/clk/                                        
adm_clk/                  ebi_mddi_clk/
 sdc1_p_clk/          
adsp_clk/                ebi_vfe_clk/
 sdc2_clk/            
ahb_m_clk/                ecodec_clk/
 sdc2_p_clk/          
ahb_s_clk/                gp_clk/
 sdc3_clk/            
cam_m_clk/                grp_3d_clk/
 sdc3_p_clk/          
csi0_clk/                grp_3d_p_clk/
 sdc4_clk/            
csi0_p_clk/              gsbi1_qup_clk/
 sdc4_p_clk/          
csi0_vfe_clk/            gsbi1_qup_p_clk/
 tsif_p_clk/          
csi1_clk/                gsbi2_qup_clk/
 tsif_ref_clk/        
csi1_p_clk/              gsbi2_qup_p_clk/
 uart1_clk/            
csi1_vfe_clk/            icodec_rx_clk/
 uart1dm_clk/          
debug_suspend            icodec_tx_clk/
 uart2_clk/            
dsi_byte_clk/            imem_clk/
 uart2dm_clk/          
dsi_clk/                  mdp_clk/
 usb_hs2_clk/          
dsi_esc_clk/              mdp_dsi_p_clk/
 usb_hs_clk/          
dsi_pixel_clk/            mdp_lcdc_pad_pclk_clk/
 usb_hs_core_clk/      
dsi_ref_clk/              mdp_lcdc_pclk_clk/
 usb_hs_p_clk/        
ebi1_clk/                mdp_vsync_clk/
 usb_phy_clk/          
ebi2_clk/                pbus_clk/
 vdc_clk/              
ebi_acpu_clk/            pcm_clk/
 vfe_clk/              
ebi_adm_clk/              pmdh_clk/
 vfe_mdc_clk/          
ebi_grp_3d_clk/          sdac_clk/                
ebi_lcdc_clk/            sdc1_clk/ 

root@android:/ #
 cat /data/debugfs/clk/mdp_clk/rate                            
200000000

Linux设备树中,将GPIO引脚配置为GPIO功能通常需要以下步骤: --- ### **1. 定义GPIO引脚复用** 在设备树中,GPIO的复用配置通常通过`pinmux`或`pinctrl-*`属性实现。以下是两种常见方法: #### **(1) 直接使用`pinmux`属性(部分平台支持)** ```dts &gpio0 { pinmux = <PINMUX_GPIO(0)>, // 引脚0复用为GPIO <PINMUX_GPIO(1)>; // 引脚1复用为GPIO }; ``` - `PINMUX_GPIO(n)`是板级定义的宏,需对应硬件寄存器的复用值。 #### **(2) 通过`pinctrl`子系统(推荐)** ```dts &pinctrl { gpio0_default: gpio0-default { pinmux = <PINMUX_GPIO(0)>, // 引脚0复用为GPIO <PINMUX_GPIO(1)>; // 引脚1复用为GPIO }; }; &gpio0 { pinctrl-names = "default"; pinctrl-0 = <&gpio0_default>; // 关联复用状态 }; ``` --- ### **2. 配置GPIO控制器** 确保设备树中正确定义了GPIO控制器节点,并启用驱动: ```dts &gpio0 { compatible = "vendor,gpio-controller"; // 替换为实际驱动 reg = <0x10000000 0x1000>; // 寄存器地址和大小 interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; gpio-controller; // 声明为GPIO控制器 #gpio-cells = <2>; // 参数格式(如引脚号、标志) status = "okay"; // 启用设备 }; ``` --- ### **3. 定义GPIO使用节点** 其他设备(如LED、按键)通过`gpios`属性引用GPIO: ```dts &led0 { compatible = "gpio-leds"; led-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; // 使用gpio0的第0引脚 default-state = "off"; }; &button0 { compatible = "gpio-keys"; button-gpios = <&gpio0 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; label = "User Button"; }; ``` - `#gpio-cells`定义了参数格式(通常为引脚号和标志)。 - 标志如`GPIO_ACTIVE_HIGH`、`GPIO_PULL_UP`需包含在设备树绑定中。 --- ### **4. 平台特定注意事项** #### **(1) 复用值定义** 在板级头文件中定义`PINMUX_GPIO(n)`: ```c #define PINMUX_GPIO(n) (0x100 | (n)) // 示例:复用值=基址+引脚号 ``` #### **(2) 多功能引脚冲突** 如果引脚可能被复用为其他功能(如UART),需在设备树中明确优先级: ```dts &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pins>; // 避免与GPIO冲突 status = "disabled"; // 默认禁用UART }; ``` --- ### **5. 验证配置** #### **(1) 检查设备树解析** 编译设备树并检查`.dts`展开结果: ```bash dtc -I dts -O dtb -o /dev/null your_board.dts # 查看是否有警告 ``` #### **(2) 内核日志** 启动时观察GPIO控制器注册日志: ```bash dmesg | grep -i gpio ``` #### **(3) 运行时状态** 通过`sysfs`或`debugfs`检查引脚状态: ```bash cat /sys/kernel/debug/gpio # 查看GPIO配置 ``` --- ### **6. 常见问题** #### **(1) 复用未生效** - 原因:`pinctrl`驱动未加载,或设备树节点未关联。 - 解决:确保`pinctrl-0`指向有效的状态节点。 #### **(2) GPIO无法操作** - 原因:未正确设置`gpio-controller`或`#gpio-cells`。 - 解决:检查控制器节点定义。 #### **(3) 引脚冲突** - 原因:多个设备尝试使用同一引脚。 - 解决:通过`status = "disabled"`禁用冲突设备。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值