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

在调试Android设备时,通过adb shell命令创建并挂载debugfs文件系统,可以方便地查看和操作GPIO、调节器、时钟等硬件资源,提高调试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在调试中加入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作为字符设备驱动的重要性 将GPIO归类为字符设备驱动有助于开发者更好地理解和实现GPIO驱动,从而更高效地利用GPIO引脚进行嵌入式系统的开发[^1]。 #### 二、准备阶段:获取必要的文档和支持材料 对于任何硬件的操作来说,数据手册都是非常重要的参考资料。以BCM2835为例,在Linux内核下实现一个真正的GPIO驱动程序前,需要先拥有一本BCM2835的数据手册,以便了解底层硬件的具体工作原理和寄存器配置方法[^3]。 #### 三、创建基础的LED控制驱动实例 下面是一个简单的基于Linux内核空间下的C语言编写的LED灯开关驱动示例: ```c #include <linux/init.h> #include <linux/module.h> #include <linux/gpio.h> #define LED_PIN 17 /* 定义使用GPIO编号 */ static int __init led_driver_init(void){ printk(KERN_INFO "Loading LED driver...\n"); if (!gpio_is_valid(LED_PIN)){ printk(KERN_ERR "Invalid GPIO number\n"); return -ENODEV; } gpio_request(LED_PIN, "sys_led");/* 请求占用该管脚 */ gpio_direction_output(LED_PIN, 0);/* 设置方向并初始化电平状态 */ printk(KERN_INFO "LED Driver loaded successfully.\n"); return 0; } static void __exit led_driver_exit(void){ gpio_set_value(LED_PIN, 0); gpio_free(LED_PIN); printk(KERN_INFO "Unloading LED driver...\n"); } module_init(led_driver_init); module_exit(led_driver_exit); MODULE_LICENSE("GPL"); ``` 这段代码展示了如何定义一个基本的加载/卸载函数来管理特定GPIO端口的状态变化过程[^2]。 #### 四、深入探讨Pinctrl与GPIO子系统的关系及其应用 为了使能或禁用某些功能模块(比如IIC/SPI),通常还需要配合使用`pinctrl`子系统来进行多路复用设置;而在实际项目中,则可能涉及到更多复杂的场景——例如通过修改设备树节点的方式指定具体要操作哪些物理引脚,并且在驱动内部调用相应的API接口完成最终的功能实现[^4]。 #### 五、确保调试信息可见性的措施 如果遇到无法查看到预期的日志输出等问题时,请确认已经正确挂载了debugfs文件系统,因为很多有用的诊断工具和服务都依赖于此虚拟文件系统才能正常运作[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值