调试文件系统(debugfs)
来自百问网嵌入式Linux wiki
目录
简介
Debugfs是一个简单易用的基于RAM的Linux内核调试的虚拟文件系统,专门用于调试目的。
它是内核开发人员使信息可用于用户空间的一种简单方法。
它是伪文件系统的一部分。与仅用于过程信息的procfs或具有严格的每个文件一个值规则的sysfs不同,debugfs根本没有规则。
开发人员可以自由地将任何信息放入debugfs。
如何配置debugfs
Debugfs默认已启用,如需配置通过在Linux ®内核配置CONFIG_DEBUG_FS,默认设置为是。
Symbol: DEBUG_FS
Location:
Kernel Hacking --->
Compile-time checks and compiler options -->
[*] Debug Filesystem
- 请参考Menuconfig或如何配置内核一文,以获取有关在内核源码中修改配置和重新编译Linux内核映像的说明。
入门
如何挂载debugfs
- Debugfs通常使用以下命令挂载在 /sys /kernel/debug中:
Board $> mount -t debugfs none /sys/kernel/debug
如何在Linux内核驱动程序中使用debugfs
- Debugfs是内核驱动程序使信息可用于用户空间的一种简单方法。
- 可以使用linux内核中C头文件 include/linux/debugfs.h 中的几个调用来操纵它,例如:
debugfs_create_file → for creating a file in the debug filesystem.
debugfs_create_dir → for creating a directory in the debug filesystem.
debugfs_create_symlink → for creating a symbolic link in the debug filesystem.
debugfs_create_u32 → for creating a file containing a single 32-bit unsigned integer value
debugfs_remove → for removing a debugfs entry from the debug filesytem.
...
- 有关更多详细信息,请参考Linux内核文档中的debugfs
如何可视化debugfs信息
- 在目标板上,进入debugfs安装目录:
Board $> cd /sys/kernel/debug
- 在此目录将找到Linux内核框架创建的所有debugfs条目。
Board $> ls -l
drwxr-xr-x 2 root root 0 Jan 1 1970 49000000.usb-otg
drwxr-xr-x 4 root root 0 Jan 1 1970 asoc
drwxr-xr-x 40 root root 0 Jan 1 1970 bdi
drwxr-xr-x 10 root root 0 Jan 1 1970 block
drwxr-xr-x 2 root root 0 Jan 1 1970 bluetooth
drwxr-xr-x 3 root root 0 May 28 15:52 cec
drwxr-xr-x 225 root root 0 Jan 1 1970 clk
drwxr-xr-x 2 root root 0 Jan 1 1970 dma_buf
drwxr-xr-x 3 root root 0 Jan 1 1970 dri
drwxr-xr-x 2 root root 0 Jan 1 1970 dynamic_debug
drwxr-xr-x 2 root root 0 Jan 1 1970 extfrag
-rw-r--r-- 1 root root 0 Jan 1 1970 fault_around_bytes
drwxr-xr-x 3 root root 0 May 28 15:52 gc
-r--r--r-- 1 root root 0 Jan 1 1970 gpio
drwxr-xr-x 2 root root 0 Jan 1 1970 hid
drwxr-xr-x 2 root root 0 Jan 1 1970 ieee80211
drwxr-xr-x 7 root root 0 Jan 1 1970 iio
-r--r--r-- 1 root root 0 Jan 1 1970 irq_domain_mapping
drwxr-xr-x 2 root root 0 Jan 1 1970 memblock
drwxr-xr-x 3 root root 0 Jan 1 1970 mmc0
drwxr-xr-x 3 root root 0 Jan 1 1970 mmc1
drwxr-xr-x 11 root root 0 Jan 1 1970 mtd
drwxr-xr-x 4 root root 0 Jan 1 1970 pinctrl
drwxr-xr-x 4 root root 0 Jan 1 1970 pm_genpd
drwxr-xr-x 2 root root 0 Jan 1 1970 pm_qos
-r--r--r-- 1 root root 0 Jan 1 1970 pwm
drwxr-xr-x 2 root root 0 Jan 1 1970 ras
drwxr-xr-x 13 root root 0 Jan 1 1970 regmap
drwxr-xr-x 21 root root 0 Jan 1 1970 regulator
drwxr-xr-x 3 root root 0 Jan 1 1970 remoteproc
-r--r--r-- 1 root root 0 Jan 1 1970 sleep_time
drwxr-xr-x 3 root root 0 Jan 1 1970 stmmaceth
-r--r--r-- 1 root root 0 Jan 1 1970 suspend_stats
dr-xr-xr-x 3 root root 0 Jan 1 1970 tracing
drwxr-xr-x 2 root root 0 Jan 1 1970 ubi
drwxr-xr-x 2 root root 0 Jan 1 1970 ubifs
drwxr-xr-x 4 root root 0 Jan 1 1970 usb
-r--r--r-- 1 root root 0 Jan 1 1970 wakeup_sources
- 然后,您可以浏览以查找所需的信息。
- 一些例子:
- 列出唤醒源:
Board $> cat /sys/kernel/debug/wakeup_sources
name active_count event_count wakeup_count expire_count active_since total_time max_time last_change prevent_suspend_time
5c002000.i2c:stpmu1@33:onkey 0 0 0 0 0 0 0 4075 0
0-0033 0 0 0 0 0 0 0 3949 0
alarmtimer 0 0 0 0 0 0 0 3901 0
5c004000.rtc 1 1 0 0 0 0 0 5246 0
deleted 0 0 0 0 0 0 0 0 0
- 获取时钟设置摘要:
Board $> cat /sys/kernel/debug/clk/clk_summary
clock enable_cnt prepare_cnt rate accuracy phase
----------------------------------------------------------------------------------------
ck_usbo_48m 1 1 48000000 0 0
usbo_k 1 1 48000000 0 0
ck_dsi_phy 1 1 0 0 0
dsi_k 1 1 0 0 0
i2s_ckin 0 0 0 0 0
clk-csi 1 1 4000000 0 0
ck_csi 1 1 4000000 0 0
rng2_k 0 0 4000000 0 0
rng1_k 0 0 4000000 0 0
clk-lsi 1 1 32000 0 0
ck_lsi 1 1 32000 0 0
dac12_k 0 0 32000 0 0
clk-lse 1 1 32768 0 0
ck_lse 1 1 32768 0 0
ck_rtc 2 2 32768 0 0
rtc_lsco 1 1 32768 0 0
lptim5_k 0 0 32768 0 0
lptim4_k 0 0 32768 0 0
cec_k 0 0 32768 0 0
clk-hsi 1 1 64000000 0 0
clk-hsi-div 1 1 64000000 0 0
ck_hsi 2 2 64000000 0 0
ck_mco1 0 0 64000000 0 0
uart8_k 0 0 64000000 0 0
uart7_k 0 0 64000000 0 0
uart6_k 0 0 64000000 0 0
uart5_k 0 0 64000000 0 0
uart4_k 1 1 64000000 0 0
usart3_k 0 0 64000000 0 0
usart2_k 1 1 64000000 0 0
usart1_k 0 0 64000000 0 0
i2c6_k 0 0 64000000 0 0
i2c4_k 0 0 64000000 0 0
i2c5_k 0 0 64000000 0 0
i2c3_k 0 0 64000000 0 0
i2c2_k 0 0 64000000 0 0
i2c1_k 0 0 64000000 0 0
spi6_k 0 0 64000000 0 0
spi5_k 0 0 64000000 0 0
spi4_k 0 0 64000000 0 0
clk-hse 1 1 24000000 0 0
ck_hse 7 7 24000000 0 0
ck_hse_rtc 0 0 1000000 0 0
stgen_k 1 1 24000000 0 0
usbphy_k 1 1 24000000 0 0
ck_per 1 1 24000000 0 0
adc12_k 1 1 24000000 0 0
ref4 1 1 24000000 0 0
pll4 1 1 594000000 0 0
pll4_r 0 0 74250000 0 0
pll4_q 1 1 31263158 0 0
ltdc_px 1 1 31263158 0 0
dsi_px 0 0 31263158 0 0
fdcan_k 0 0 31263158 0 0
pll4_p 0 0 74250000 0 0
ref3 1 1 24000000 0 0
pll3 2 3 786431640 0 0
pll3_r 1 1 98303955 0 0
sdmmc3_k 0 0 98303955 0 0
sdmmc2_k 1 1 98303955 0 0
sdmmc1_k 0 0 98303955 0 0
pll3_q 0 1 49151978 0 0
adfsdm_k 0 0 49151978 0 0
sai4_k 0 0 49151978 0 0
sai3_k 0 0 49151978 0 0
sai2_k 0 2 49151978 0 0
sai1_k 0 0 49151978 0 0
spi3_k 0 0 49151978 0 0
spi2_k 0 0 49151978 0 0
spi1_k 0 0 49151978 0 0
spdif_k 0 0 49151978 0 0
pll3_p 1 1 196607910 0 0
ck_mcu 6 16 196607910 0 0
dfsdm_k 0 0 196607910 0 0
gpiok 0 0 196607910 0 0
gpioj 0 0 196607910 0 0
gpioi 0 1 196607910 0 0
gpioh 0 1 196607910 0 0
gpiog 0 1 196607910 0 0
gpiof 0 1 196607910 0 0
gpioe 0 1 196607910 0 0
gpiod 0 1 196607910 0 0
gpioc 0 1 196607910 0 0
gpiob 0 1 196607910 0 0
gpioa 0 1 196607910 0 0
ipcc 2 2 196607910 0 0
hsem 0 0 196607910 0 0
crc2 0 0 196607910 0 0
rng2 0 0 196607910 0 0
hash2 0 0 196607910 0 0
cryp2 0 0 196607910 0 0
dcmi 0 0 196607910 0 0
sdmmc3 0 0 196607910 0 0
usbo 0 0 196607910 0 0
adc12 1 1 196607910 0 0
dmamux 1 1 196607910 0 0
dma2 0 0 196607910 0 0
dma1 1 1 196607910 0 0
pclk3 1 1 98303955 0 0
lptim3_k 0 0 98303955 0 0
lptim2_k 0 0 98303955 0 0
hdp 0 0 98303955 0 0
pmbctrl 0 0 98303955 0 0
tmpsens 0 0 98303955 0 0
vref 0 0 98303955 0 0
syscfg 1 1 98303955 0 0
sai4 0 0 98303955 0 0
lptim5 0 0 98303955 0 0
lptim4 0 0 98303955 0 0
lptim3 0 0 98303955 0 0
lptim2 0 0 98303955 0 0
pclk2 0 0 98303955 0 0
fdcan 0 0 98303955 0 0
dfsdm 0 0 98303955 0 0
sai3 0 0 98303955 0 0
sai2 0 0 98303955 0 0
sai1 0 0 98303955 0 0
usart6 0 0 98303955 0 0
spi5 0 0 98303955 0 0
spi4 0 0 98303955 0 0
spi1 0 0 98303955 0 0
tim17 0 0 98303955 0 0
tim16 0 0 98303955 0 0
tim15 0 0 98303955 0 0
tim8 0 0 98303955 0 0
tim1 0 0 98303955 0 0
ck2_tim 0 0 196607910 0 0
tim17_k 0 0 196607910 0 0
tim16_k 0 0 196607910 0 0
tim15_k 0 0 196607910 0 0
tim8_k 0 0 196607910 0 0
tim1_k 0 0 196607910 0 0
pclk1 0 2 98303955 0 0
lptim1_k 0 0 98303955 0 0
mdio 0 0 98303955 0 0
dac12 0 0 98303955 0 0
cec 0 0 98303955 0 0
spdif 0 0 98303955 0 0
i2c5 0 0 98303955 0 0
i2c3 0 0 98303955 0 0
i2c2 0 0 98303955 0 0
i2c1 0 0 98303955 0 0
uart8 0 0 98303955 0 0
uart7 0 0 98303955 0 0
uart5 0 0 98303955 0 0
uart4 0 0 98303955 0 0
usart3 0 0 98303955 0 0
usart2 0 0 98303955 0 0
spi3 0 0 98303955 0 0
spi2 0 1 98303955 0 0
lptim1 0 0 98303955 0 0
tim14 0 0 98303955 0 0
tim13 0 0 98303955 0 0
tim12 0 0 98303955 0 0
tim7 0 0 98303955 0 0
tim6 0 0 98303955 0 0
tim5 0 0 98303955 0 0
tim4 0 0 98303955 0 0
tim3 0 0 98303955 0 0
tim2 0 0 98303955 0 0
ck1_tim 0 1 196607910 0 0
tim14_k 0 0 196607910 0 0
tim13_k 0 0 196607910 0 0
tim12_k 0 0 196607910 0 0
tim7_k 0 0 196607910 0 0
tim6_k 0 1 196607910 0 0
tim5_k 0 0 196607910 0 0
tim4_k 0 0 196607910 0 0
tim3_k 0 0 196607910 0 0
tim2_k 0 0 196607910 0 0
ref1 2 2 24000000 0 0
pll2 2 2 533000000 0 0
pll2_r 1 1 533000000 0 0
pll2_q 0 0 533000000 0 0
gpu_k 0 0 533000000 0 0
pll2_p 1 1 266500000 0 0
ck_axi 8 9 266500000 0 0
ck_trace 0 0 133250000 0 0
ck_sys_dbg 0 0 266500000 0 0
qspi_k 0 0 266500000 0 0
fmc_k 0 0 266500000 0 0
ethstp 0 0 266500000 0 0
usbh 1 1 266500000 0 0
crc1 0 0 266500000 0 0
sdmmc2 0 0 266500000 0 0
sdmmc1 0 0 266500000 0 0
qspi 0 0 266500000 0 0
fmc 0 0 266500000 0 0
ethmac 1 1 266500000 0 0
ethrx 1 1 266500000 0 0
ethtx 1 1 266500000 0 0
gpu 0 0 266500000 0 0
mdma 1 1 266500000 0 0
bkpsram 0 0 266500000 0 0
rng1 0 0 266500000 0 0
hash1 0 0 266500000 0 0
cryp1 0 0 266500000 0 0
gpioz 0 1 266500000 0 0
tzc2 0 0 266500000 0 0
tzc1 0 0 266500000 0 0
pclk5 1 1 66625000 0 0
stgen 0 0 66625000 0 0
bsec 0 0 66625000 0 0
iwdg1 0 0 66625000 0 0
tzpc 0 0 66625000 0 0
rtcapb 2 2 66625000 0 0
usart1 0 0 66625000 0 0
i2c6 0 0 66625000 0 0
i2c4 0 0 66625000 0 0
spi6 0 0 66625000 0 0
pclk4 1 1 133250000 0 0
stgenro 0 0 133250000 0 0
usbphy 0 0 133250000 0 0
iwdg2 1 1 133250000 0 0
dsi 0 0 133250000 0 0
ltdc 0 0 133250000 0 0
pll1 1 1 650000000 0 0
pll1_p 1 1 650000000 0 0
ck_mpu 1 1 650000000 0 0
ck_mco2 0 0 650000000 0 0
clk-hse-div2 0 0 12000000 0 0
ethptp_k 0 0 0 0 0
ethck_k 0 0 0 0 0
- 获取电源相关设置的摘要:
Board $> cat /sys/kernel/debug/regulator/regulator_summary
regulator use open bypass voltage current min max
-------------------------------------------------------------------------------
regulator-dummy 0 11 0 0mV 0mA 0mV 0mV
49000000.usb-otg 0mV 0mV
49000000.usb-otg 0mV 0mV
5a000000.dsi.0 0mV 0mV
vddcore 0 0 0 1200mV 0mA 800mV 1350mV
vdd_ddr 0 1 0 1350mV 0mA 1350mV 1350mV
vtt_ddr 0 0 0 675mV 0mA 675mV 675mV
vdd 0 1 0 3300mV 0mA 3300mV 3300mV
vref 1 1 0 2500mV 0mA 2500mV 2500mV
48003000.adc 0mV 0mV
v3v3 0 5 0 3300mV 0mA 3300mV 3300mV
0-004a 0mV 0mV
58007000.sdmmc 3300mV 3300mV
58005000.sdmmc 3300mV 3300mV
v1v8_audio 0 3 0 1800mV 0mA 1800mV 1800mV
0-004a 0mV 0mV
0-004a 0mV 0mV
0-004a 0mV 0mV
v1v2_hdmi 0 1 0 1200mV 0mA 1200mV 1200mV
0-0039 0mV 0mV
v3v3_hdmi 0 1 0 3300mV 0mA 3300mV 3300mV
0-0039 0mV 0mV
vdd_usb 2 2 0 3300mV 0mA 3300mV 3300mV
phy-5a006000.usbphyc.1 0mV 0mV
phy-5a006000.usbphyc.0 0mV 0mV
vdda 0 0 0 2900mV 0mA 2900mV 2900mV
bst_out 0 2 0 5000mV 0mA 0mV 0mV
vbus_otg 0 0 0 5000mV 0mA 0mV 0mV
vbus_sw 0 0 0 5000mV 0mA 0mV 0mV
reg11 1 1 0 1100mV 0mA 1100mV 1100mV
5a006000.usbphyc 0mV 0mV
reg18 2 2 0 1800mV 0mA 1800mV 1800mV
5a006000.usbphyc 0mV 0mV
5a000000.dsi 0mV 0mV
usb33 1 1 0 3300mV 0mA 3300mV 3300mV
49000000.usb-otg 0mV 0mV
vref_ddr 0 0 0 675mV 0mA 0mV 0mV
- 列出引脚控制相关设置
Board $> cat /sys/kernel/debug/pinctrl/soc\:pin-controller@50002000/pinconf-pins
Pin config settings per pin
Format: pin (name): configs
pin 0 (PA0): analog
pin 1 (PA1): alternate 11 (ETH1_GMII_RX_CLK ETH1_MII_RX_CLK ETH1_RGMII_RX_CLK ETH1_RMII_REF_CLK) - push pull - floating - low speed
pin 2 (PA2): alternate 11 (ETH1_MDIO) - push pull - floating - very high speed
pin 3 (PA3): alternate 14 (LCD_B5) - push pull - floating - high speed
pin 4 (PA4): analog
pin 5 (PA5): analog
pin 6 (PA6): analog
pin 7 (PA7): alternate 11 (ETH1_GMII_RX_DV ETH1_MII_RX_DV ETH1_RGMII_RX_CTL ETH1_RMII_CRS_DV) - push pull - floating - low speed
pin 8 (PA8): analog
pin 9 (PA9): analog
pin 10 (PA10): output - high - push pull - floating - low speed
pin 11 (PA11): analog
pin 12 (PA12): analog
pin 13 (PA13): output - low - open drain - floating - very high speed
pin 14 (PA14): input - high - floating
pin 15 (PA15): analog
pin 16 (PB0): alternate 11 (ETH1_GMII_RXD2 ETH1_MII_RXD2 ETH1_RGMII_RXD2) - push pull - floating - low speed
pin 17 (PB1): alternate 11 (ETH1_GMII_RXD3 ETH1_MII_RXD3 ETH1_RGMII_RXD3) - push pull - floating - low speed
pin 18 (PB2): alternate 8 (UART4_RX) - push pull - floating - low speed
pin 19 (PB3): alternate 9 (SDMMC2_D2) - push pull - pull up - very high speed
pin 20 (PB4): alternate 9 (SDMMC2_D3) - push pull - pull up - very high speed
pin 21 (PB5): analog
pin 22 (PB6): alternate 5 (CEC) - open drain - floating - low speed
pin 23 (PB7): analog
pin 24 (PB8): alternate 14 (LCD_B6) - push pull - floating - high speed
pin 25 (PB9): analog
pin 26 (PB10): analog
pin 27 (PB11): alternate 11 (ETH1_GMII_TX_EN ETH1_MII_TX_EN ETH1_RGMII_TX_CTL ETH1_RMII_TX_EN) - push pull - floating - very high speed
pin 28 (PB12): analog
pin 29 (PB13): analog
pin 30 (PB14): alternate 9 (SDMMC2_D0) - push pull - pull up - very high speed
pin 31 (PB15): alternate 9 (SDMMC2_D1) - push pull - pull up - very high speed
pin 32 (PC0): alternate 14 (LCD_R5) - push pull - floating - high speed
pin 33 (PC1): alternate 11 (ETH1_MDC) - push pull - floating - very high speed
pin 34 (PC2): alternate 11 (ETH1_GMII_TXD2 ETH1_MII_TXD2 ETH1_RGMII_TXD2) - push pull - floating - very high speed
pin 35 (PC3): analog
pin 36 (PC4): alternate 11 (ETH1_GMII_RXD0 ETH1_MII_RXD0 ETH1_RGMII_RXD0 ETH1_RMII_RXD0) - push pull - floating - low speed
pin 37 (PC5): alternate 11 (ETH1_GMII_RXD1 ETH1_MII_RXD1 ETH1_RGMII_RXD1 ETH1_RMII_RXD1) - push pull - floating - low speed
pin 38 (PC6): analog
pin 39 (PC7): analog
pin 40 (PC8): analog
pin 41 (PC9): analog
pin 42 (PC10): analog
pin 43 (PC11): analog
pin 44 (PC12): analog
pin 45 (PC13): analog
pin 46 (PC14): analog
pin 47 (PC15): analog
pin 48 (PD0): analog
pin 49 (PD1): analog
pin 50 (PD2): analog
pin 51 (PD3): alternate 7 (USART2_CTS USART2_NSS) - push pull - floating - low speed
pin 52 (PD4): alternate 7 (USART2_RTS USART2_DE) - push pull - floating - very high speed
pin 53 (PD5): alternate 7 (USART2_TX) - push pull - floating - very high speed
pin 54 (PD6): alternate 7 (USART2_RX) - push pull - floating - low speed
pin 55 (PD7): analog
pin 56 (PD8): alternate 14 (LCD_B7) - push pull - floating - high speed
pin 57 (PD9): alternate 14 (LCD_B0) - push pull - floating - high speed
pin 58 (PD10): alternate 14 (LCD_B3) - push pull - floating - high speed
pin 59 (PD11): output - low - push pull - floating - low speed
pin 60 (PD12): alternate 5 (I2C1_SCL) - open drain - floating - low speed
pin 61 (PD13): analog
pin 62 (PD14): analog
pin 63 (PD15): analog
pin 64 (PE0): alternate 10 (SAI2_MCLK_A) - push pull - floating - high speed
pin 65 (PE1): analog
pin 66 (PE2): alternate 11 (ETH1_GMII_TXD3 ETH1_MII_TXD3 ETH1_RGMII_TXD3) - push pull - floating - very high speed
pin 67 (PE3): alternate 9 (SDMMC2_CK) - push pull - pull up - very high speed
pin 68 (PE4): output - high - push pull - floating - low speed
pin 69 (PE5): alternate 14 (LCD_G0) - push pull - floating - high speed
pin 70 (PE6): alternate 14 (LCD_G1) - push pull - floating - high speed
pin 71 (PE7): analog
pin 72 (PE8): analog
pin 73 (PE9): analog
pin 74 (PE10): analog
pin 75 (PE11): analog
pin 76 (PE12): analog
pin 77 (PE13): analog
pin 78 (PE14): analog
pin 79 (PE15): alternate 14 (LCD_R7) - push pull - floating - high speed
pin 80 (PF0): analog
pin 81 (PF1): analog
pin 82 (PF2): input - high - floating
pin 83 (PF3): analog
pin 84 (PF4): analog
pin 85 (PF5): analog
pin 86 (PF6): analog
pin 87 (PF7): analog
pin 88 (PF8): analog
pin 89 (PF9): analog
pin 90 (PF10): alternate 14 (LCD_DE) - push pull - floating - high speed
pin 91 (PF11): alternate 10 (SAI2_SD_B) - push pull - floating - low speed
pin 92 (PF12): analog
pin 93 (PF13): analog
pin 94 (PF14): analog
pin 95 (PF15): alternate 5 (I2C1_SDA) - open drain - floating - low speed
pin 96 (PG0): analog
pin 97 (PG1): input - high - floating
pin 98 (PG2): analog
pin 99 (PG3): analog
pin 100 (PG4): alternate 11 (ETH1_GMII_GTX_CLK ETH1_RGMII_GTX_CLK) - push pull - floating - very high speed
pin 101 (PG5): alternate 11 (ETH1_GMII_CLK125 ETH1_RGMII_CLK125) - push pull - floating - very high speed
pin 102 (PG6): alternate 10 (SDMMC2_CMD) - push pull - pull up - very high speed
pin 103 (PG7): alternate 14 (LCD_CLK) - push pull - floating - high speed
pin 104 (PG8): analog
pin 105 (PG9): output - high - push pull - floating - low speed
pin 106 (PG10): alternate 14 (LCD_B2) - push pull - floating - high speed
pin 107 (PG11): alternate 6 (UART4_TX) - push pull - floating - low speed
pin 108 (PG12): alternate 14 (LCD_B1) - push pull - floating - high speed
pin 109 (PG13): alternate 11 (ETH1_GMII_TXD0 ETH1_MII_TXD0 ETH1_RGMII_TXD0 ETH1_RMII_TXD0) - push pull - floating - very high speed
pin 110 (PG14): alternate 11 (ETH1_GMII_TXD1 ETH1_MII_TXD1 ETH1_RGMII_TXD1 ETH1_RMII_TXD1) - push pull - floating - very high speed
pin 111 (PG15): analog
pin 112 (PH0): analog
pin 113 (PH1): analog
pin 114 (PH2): alternate 14 (LCD_R0) - push pull - floating - high speed
pin 115 (PH3): alternate 14 (LCD_R1) - push pull - floating - high speed
pin 116 (PH4): output - high - push pull - floating - low speed
pin 117 (PH5): analog
pin 118 (PH6): analog
pin 119 (PH7): analog
pin 120 (PH8): alternate 14 (LCD_R2) - push pull - floating - high speed
pin 121 (PH9): alternate 14 (LCD_R3) - push pull - floating - high speed
pin 122 (PH10): alternate 14 (LCD_R4) - push pull - floating - high speed
pin 123 (PH11): analog
pin 124 (PH12): alternate 14 (LCD_R6) - push pull - floating - high speed
pin 125 (PH13): alternate 14 (LCD_G2) - push pull - floating - high speed
pin 126 (PH14): alternate 14 (LCD_G3) - push pull - floating - high speed
pin 127 (PH15): alternate 14 (LCD_G4) - push pull - floating - high speed
pin 128 (PI0): alternate 14 (LCD_G5) - push pull - floating - high speed
pin 129 (PI1): alternate 14 (LCD_G6) - push pull - floating - high speed
pin 130 (PI2): alternate 14 (LCD_G7) - push pull - floating - high speed
pin 131 (PI3): analog
pin 132 (PI4): alternate 14 (LCD_B4) - push pull - floating - high speed
pin 133 (PI5): alternate 10 (SAI2_SCK_A) - push pull - floating - medium speed
pin 134 (PI6): alternate 10 (SAI2_SD_A) - push pull - floating - medium speed
pin 135 (PI7): alternate 10 (SAI2_FS_A) - push pull - floating - medium speed
pin 136 (PI8): analog
pin 137 (PI9): alternate 14 (LCD_VSYNC) - push pull - floating - high speed
pin 138 (PI10): alternate 14 (LCD_HSYNC) - push pull - floating - high speed
pin 139 (PI11): analog
- 获取GPIO引脚设置
Board $> cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-15, parent: platform/soc:pin-controller@50002000, GPIOA:
gpio-10 ( |reset ) out lo
gpiochip1: GPIOs 16-31, parent: platform/soc:pin-controller@50002000, GPIOB:
gpiochip2: GPIOs 32-47, parent: platform/soc:pin-controller@50002000, GPIOC:
gpiochip3: GPIOs 48-63, parent: platform/soc:pin-controller@50002000, GPIOD:
gpio-59 ( |heartbeat ) out lo
gpiochip4: GPIOs 64-79, parent: platform/soc:pin-controller@50002000, GPIOE:
gpio-68 ( |reset ) out hi
gpiochip5: GPIOs 80-95, parent: platform/soc:pin-controller@50002000, GPIOF:
gpiochip6: GPIOs 96-111, parent: platform/soc:pin-controller@50002000, GPIOG:
gpio-105 ( |reset ) out hi
gpiochip7: GPIOs 112-127, parent: platform/soc:pin-controller@50002000, GPIOH:
gpio-116 ( |reset ) out hi
gpiochip8: GPIOs 128-143, parent: platform/soc:pin-controller@50002000, GPIOI:
gpiochip9: GPIOs 400-415, parent: platform/soc:pin-controller-z@54004000, GPIOZ:
进阶
Regmap(寄存器映射)缓存
Debugfs包含一个基于regmap API的驱动程序/外围设备的寄存器缓存(镜像)。
Regmap是Linux内核的寄存器映射抽象API。它主要用于串行总线设备驱动程序(I2C和SPI),但也可以用于内部外围设备驱动程序。
这些驱动程序中有许多包含一些非常相似的代码,用于访问已连接的硬件设备寄存器。
regmap内核API提出了一种解决方案,该解决方案将这些代码从驱动程序中剔除,从而节省了代码并使其更易于共享基础架构。
- regmap寄存器高速缓存在debugfs中的路径
Board $> cd /sys/kernel/debug/regmap
- 基于regmap API的驱动程序的设备列表:
Board $> ls -la .
total 0
drwxr-xr-x 18 root root 0 Jan 1 1970 .
drwx------ 32 root root 0 Jan 1 1970 ..
drwxr-xr-x 2 root root 0 Jan 1 1970 0-001b
drwxr-xr-x 2 root root 0 Jan 1 1970 0-0042
drwxr-xr-x 2 root root 0 Jan 1 1970 2-0033
drwxr-xr-x 2 root root 0 Jan 1 1970 40004000.timer
drwxr-xr-x 2 root root 0 Jan 1 1970 4000d000.audio-controller
drwxr-xr-x 2 root root 0 Nov 30 12:19 40016000.cec
drwxr-xr-x 2 root root 0 Jan 1 1970 40017000.dac
drwxr-xr-x 2 root root 0 Jan 1 1970 4400b004.audio-controller
drwxr-xr-x 2 root root 0 Jan 1 1970 4400b024.audio-controller
drwxr-xr-x 2 root root 0 Jan 1 1970 4400d000.dfsdm
drwxr-xr-x 2 root root 0 Jan 1 1970 50027004.audio-controller
drwxr-xr-x 2 root root 0 Jan 1 1970 dummy-interrupt-controller@5000d000
drwxr-xr-x 2 root root 0 Jan 1 1970 dummy-pwr@50001000
drwxr-xr-x 2 root root 0 Jan 1 1970 dummy-rcc@50000000
drwxr-xr-x 2 root root 0 Jan 1 1970 dummy-syscon@50020000
drwxr-xr-x 2 root root 0 Jan 1 1970 dummy-tamp@5c00a000
- 检查相应的驱动程序:2-0033 regmap条目的示例
Board $> cat 2-0033/name stpmic1
- 然后,在STM32MPU设备树文件上,可以检查设备以及相应的驱动程序
pmic: stpmic@33 {
compatible = "st,stpmic1";
reg = <0x33>;
interrupts-extended = <&exti_pwr 55 IRQ_TYPE_EDGE_FALLING>;
interrupt-controller;
#interrupt-cells = <2>;
status = "okay";
:基于regmap API的驱动程序的设备列表:
- Regmap条目,由dummy- 声明
- 当没有关联的/ dev条目(devtmpfs)时,将设置这种条目。
- 要在设备树中找到相应的节点,可以在dummy-之后查找后缀名称:
- dummy-interrupt-controller@5000d000的示例
exti: interrupt-controller@5000d000 {
compatible = "st,stm32mp1-exti", "syscon";
interrupt-controller;
#interrupt-cells = <2>;
reg = <0x5000d000 0x400>;
};
- 寄存器列表:2-0033 regmap条目的示例
Board $> cat 2-0033/registers
01: 10
02: 00
03: 00
04: 00
05: 60
06: 10
10: 04
11: 00
12: 00
13: 00
14: 00
15: c0
16: 00
17: 00
18: 04
19: 00
1a: 00
1b: 00
1c: 00
1d: 0f
1e: 04
20: 61
21: 79
22: d9
23: d9
24: 01
25: 51
26: 4c
27: 7d
28: 01
29: 51
2a: 25
30: 61
31: 50
32: d9
33: d9
34: 00
35: 24
36: 24
37: 24
38: 01
39: 51
3a: 04
40: 35
50: 00
51: 00
52: 00
53: 80
60: 00
61: 00
62: 00
63: 00
70: 00
71: 00
72: 00
73: 00
80: fc
81: 8f
82: c4
83: cf
90: fc
91: 8f
92: c4
93: cf
a0: 03
a1: 70
a2: 3b
a3: 00
b0: 00
b1: 00
b2: 00
b3: 80
- 第一列代表寄存器地址,第二列代表寄存器值。
- 有关寄存器的定义,请参考设备规范。