瑞芯微(RK平台)调试指令常用整理

查看Linux系统版本

bash 复制代码
uname -a

查看Kernel版本和编译信息

bash 复制代码
cat /proc/version

查看内存信息

bash 复制代码
cat /proc/meminfo

查看系统分区信息

bash 复制代码
cat /proc/partitions

查看CPU信息

bash 复制代码
cat /proc/cpuinfo

查看CPU支持的频率(x可改为0,1,2,3...)

bash 复制代码
cat /sys/devices/system/cpu/cpux/cpufreq/scaling_available_frequencies

查看CPU支持的策略(x可改为0,1,2,3...)

bash 复制代码
cat /sys/devices/system/cpu/cpux/cpufreq/scaling_available_governors

查看DDR支持的频率

bash 复制代码
cat /sys/class/devfreq/dmc/available_frequencies

查看内核日志

bash 复制代码
dmesg

查看CPU温度

bash 复制代码
cat /sys/class/thermal/thermal_zone0/temp

查看CPU当前频率(x可改为0,1,2,3...)

bash 复制代码
cat /sys/devices/system/cpu/cpux/cpufreq/scaling_cur_freq

查看GPU使用率(fb000000为GPU地址,不同SoC地址不同)

bash 复制代码
cat /sys/devices/platform/fb000000.gpu/devfreq/fb000000.gpu/load

查看DDR当前频率

bash 复制代码
cat /sys/class/devfreq/dmc/cur_freq

查看DDR带宽占用率

bash 复制代码
cat /sys/devices/platform/dmc/devfreq/dmc/load

查看GPU当前频率(fb000000为GPU地址,不同SoC地址不同)

bash 复制代码
cat /sys/class/devfreq/fb000000.gpu/cur_freq

查看NPU当前频率(fdab0000为NPU地址,不同SoC地址不同)

bash 复制代码
cat /sys/class/devfreq/fdab0000.npu/cur_freq

查看NPU使用率(fdab0000为NPU地址,不同SoC地址不同)

bash 复制代码
cat /sys/class/devfreq/fdab0000.npu/load

查看系统CLK信息

bash 复制代码
cat /sys/kernel/debug/clk/clk_summary

查看CPU/GPU/DDR/NPU的频率电压表

bash 复制代码
cat /sys/kernel/debug/opp/opp_summary

查看GPIO复用情况

bash 复制代码
cat /sys/kernel/debug/pinctrl/pinctrl/pinmux-pins

查看GPIO占用状态

bash 复制代码
cat /sys/kernel/debug/gpio

防止Android系统进入二级休眠

bash 复制代码
echo "test" > /sys/power/wake_lock

强制系统进入二级休眠

bash 复制代码
echo mem > /sys/power/state

保持PM_DOMAINS常开

bash 复制代码
echo 1 > /sys/module/pm_domains/parameters/always_on

保持CLK常开

bash 复制代码
echo 1 > /sys/module/clk_gate/parameters/always_on

查看电源域(Power Domain)信息

bash 复制代码
cat /sys/kernel/debug/pm_genpd/pm_genpd_summary

关闭CPU核(x可改为0,1,2,3...)

bash 复制代码
echo 0 > /sys/devices/system/cpu/cpux/online

开启CPU核(x可改为0,1,2,3...)

bash 复制代码
echo 1 > /sys/devices/system/cpu/cpux/online

手动清除DDR缓存占用

bash 复制代码
echo 3 > /proc/sys/vm/drop_caches

频率控制

CPU定频

bash 复制代码
# 无大小核平台只要操作policy0
# 切换到userspace模式
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
# 设置1.2GHz
echo 1200000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

# 大小核平台需要操作多个policy
# 小核cpu0~cpu3设置
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo 1200000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed

# 大核cpu4~cpu5设置
echo userspace > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_setspeed

# 大核cpu6~cpu7设置
echo userspace > /sys/devices/system/cpu/cpufreq/policy6/scaling_governor
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy6/scaling_setspeed

GPU定频

bash 复制代码
# 切换到userspace模式(fb000000.gpu需根据平台修改)
echo userspace > /sys/class/devfreq/fb000000.gpu/governor

# 设置400MHz
echo 400000000 > /sys/class/devfreq/fb000000.gpu/userspace/set_freq

# 查看当前频率
cat /sys/class/devfreq/fb000000.gpu/cur_freq

NPU定频

bash 复制代码
# 切换到userspace模式(fdab0000.npu需根据平台修改)
echo userspace > /sys/class/devfreq/fdab0000.npu/governor

# 设置1GHz
echo 1000000000 > /sys/class/devfreq/fdab0000.npu/userspace/set_freq

# 查看当前频率
cat /sys/class/devfreq/fdab0000.npu/cur_freq

DDR定频

bash 复制代码
# 切换到userspace模式
echo userspace > /sys/class/devfreq/dmc/governor

# 查看可用频率
cat /sys/class/devfreq/dmc/available_frequencies

# 设置1.56GHz
echo 1560000000 > /sys/class/devfreq/dmc/userspace/set_freq

# 查看当前频率
cat /sys/class/devfreq/dmc/cur_freq

性能模式设置

bash 复制代码
# CPU性能模式
echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo performance > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
echo performance > /sys/devices/system/cpu/cpufreq/policy6/scaling_governor

# DDR性能模式
echo performance > /sys/devices/platform/dmc/devfreq/dmc/governor

(debugfs默认是关闭的,需要手动开启下 mount -t debugfs none /sys/kernel/debug)

U-Boot

U-Boot作为引导程序,其调试依赖一系列专用指令。这些指令可快速定位硬件交互、固件加载、设备树配置等问题。U-Boot调试的核心指令,涵盖内存操作、外设调试、系统状态查询等场景。

串口快捷操作

开机时长按以下组合键可触发特定功能,为调试和烧写提供便利:

ctrl+c:进入U-Boot命令行模式(调试核心入口)

ctrl+d:进入loader烧写模式(固件烧录)

ctrl+b:进入maskrom烧写模式(底层硬件烧录)

ctrl+f:进入fastboot模式(快速调试与升级)

内存操作

是U-Boot调试的基础,用于验证地址读写、固件加载地址正确性等场景。

读取内存数据

功能:按指定单位(字节/字/长字/四字)读取并打印内存地址内容。

用法:md [.b, .w, .l, .q] 地址 [数据数量]

• .b:1字节;

• .w:2字节;

• .l:4字节;

• .q:8字节

查看0x76000000开始的16个长字数据(验证内存数据完整性):

bash 复制代码
md.l 0x76000000 0x10
76000000: fffffffe ffffffff ffffffff ffffffff ................
76000010: ffffffdf ffffffff feffffff ffffffff ................

写入内存数据

功能:向指定内存地址批量写入数据。

用法:mw [.b, .w, .l, .q] 地址 数据 [数量]

向0x76000000写入长字数据0xffff1234并验证:

bash 复制代码
mw.l 0x76000000 0xffff1234
md.l 0x76000000 1  # 验证写入结果
76000000: ffff1234 ................

通过设备树读寄存器

功能:基于设备树兼容属性(compatible)直接读取硬件寄存器,无需手动计算地址。

用法:iomem <compatible关键词> <起始偏移> <结束偏移>

读取RK3568平台GRF寄存器0x00-0x1c内容(快速定位寄存器配置问题):

bash 复制代码
iomem -grf 0x0 0x1c
rockchip,rk3568-grf:
fdc60000:  00000000 00000000 00000000 00001111 
fdc60010:  00001111 00001111 00000000 00001110

I2C设备调试

I2C是外设常用通信协议,指令可直接操作I2C设备(如传感器、PMIC)

切换I2C总线

功能:指定当前操作的I2C总线编号。

用法:i2c dev [总线编号]

切换到I2C总线0(后续操作默认在此总线上执行):

bash 复制代码
i2c dev 0
Setting bus to 0

读取I2C设备寄存器

功能:读取指定I2C设备的寄存器数据。

用法:i2c md <设备地址> <寄存器地址> [.0, .1, .2] [数据数量]

设备地址:7位I2C地址(无需左移)

读取I2C设备(地址0x1b)寄存器0x2e开始的32字节(验证传感器数据是否正常):

bash 复制代码
i2c md 0x1b 0x2e 0x20
002e: 11 0f 00 00 11 0f 00 00 01 00 00 00 09 00 00 0c ................
003e: 00 0a 0a 0c 0c 0c 00 07 07 0a 00 0c 0c 00 00 00 ................

写入I2C设备寄存器

功能:向I2C设备指定寄存器写入数据。

用法:i2c mw <设备地址> <寄存器地址> <数据> [数量]

向I2C设备(地址0x1b)寄存器0x2e写入0x10并验证:

bash 复制代码
i2c mw 0x1b 0x2e 0x10
i2c md 0x1b 0x2e 1  # 验证写入结果
002e: 10 ................

GPIO调试

GPIO用于硬件交互(如按键、LED、外设复位),指令可直接控制引脚状态。

查看GPIO状态

功能:显示GPIO的输入/输出模式、电平值及关联设备。

用法:gpio status [-a] [<bank> | <pin>]

• -a:显示所有GPIO;

• <bank>:指定GPIO组(如gpio0);

• <pin>:指定引脚(如gpio05)

查看RK3568平台GPIO05状态(验证外设控制引脚是否正常):

bash 复制代码
gpio status gpio05   
Bank gpio0:
gpio05: output: 0 [x] vcc5v0-otg-regulator.gpio  # 输出低电平,关联OTG电源

控制GPIO状态

功能:设置GPIO为输入、输出高低电平或切换状态。

用法:

• gpio input <pin>:设为输入

• gpio set <pin>:输出高电平

• gpio clear <pin>:输出低电平

• gpio toggle <pin>:切换电平

控制GPIO05电平(验证外设复位逻辑):

bash 复制代码
gpio set gpio05    # 输出高电平
gpio: pin gpio05 (gpio 5) value is 1
gpio toggle gpio05 # 切换为低电平
gpio: pin gpio05 (gpio 5) value is 0

设备树(DTB)调试

设备树描述硬件配置,指令用于验证和修改节点配置,确保硬件设备正确被系统识别和使用。

指定设备树地址

功能:设置当前操作的设备树(DTB)在内存中的地址,后续所有设备树操作都将基于此地址进行。

用法:fdt addr [-c] <地址> [<长度>]

• -c:指定操作的是控制设备树

• <地址>:设备树在内存中的起始地址

• <长度>:可选参数,指定设备树的大小

指定设备树地址为0x08300000,后续设备树操作将基于此地址(如不执行,以默认地址操作):

bash 复制代码
fdt addr 0x08300000

打印设备树内容

功能:递归打印指定路径的设备树节点及其属性,用于验证节点是否正确加载和配置。

用法:fdt print <路径> [属性]

• <路径>:设备树节点的绝对路径

• [属性]:可选参数,指定需要打印的特定属性

打印uart2节点(路径为/serial@fe650000)的配置信息,验证串口硬件配置:

bash 复制代码
fdt print /serial@fe650000
No FDT memory address configured. Default at 0x08300000
serial@fe650000 {
        compatible = "rockchip,rk3568-uart", "snps,dw-apb-uart";
        reg = <0x00000000 0xfe650000 0x00000000 0x00000100>;
        interrupts = <0x00000000 0x00000075 0x00000004>;
        clocks = <0x00000023 0x0000011f 0x00000023 0x0000011c>;
        clock-names = "baudclk", "apb_pclk";
        reg-shift = <0x00000002>;
        reg-io-width = <0x00000004>;
        dmas = <0x00000046 0x00000002 0x00000046 0x00000003>;
        pinctrl-names = "default";
        pinctrl-0 = <0x00000107>;
        status = "disabled";
        phandle = <0x000001e6>;
};

修改设备树属性

功能:修改设备树中指定节点的属性值,常用于动态调整硬件配置(如启用/禁用设备)。

用法:fdt set <路径> <属性> <值>

• <路径>:设备树节点的绝对路径

• <属性>:需要修改的属性名称

• <值>:属性的新值

启用uart2节点(将status属性从"disabled"修改为"okay"):

bash 复制代码
fdt set /serial@fe650000 status okay

修改后再次打印节点信息,验证配置是否生效:

bash 复制代码
fdt print /serial@fe650000          
serial@fe650000 {
        compatible = "rockchip,rk3568-uart", "snps,dw-apb-uart";
        reg = <0x00000000 0xfe650000 0x00000000 0x00000100>;
        interrupts = <0x00000000 0x00000075 0x00000004>;
        clocks = <0x00000023 0x0000011f 0x00000023 0x0000011c>;
        clock-names = "baudclk", "apb_pclk";
        reg-shift = <0x00000002>;
        reg-io-width = <0x00000004>;
        dmas = <0x00000046 0x00000002 0x00000046 0x00000003>;
        pinctrl-names = "default";
        pinctrl-0 = <0x00000107>;
        status = "okay";  // 已成功修改为启用状态
        phandle = <0x000001e6>;
};

通过fdt set可以灵活调整设备树配置,无需重新编译DTB文件即可测试不同的硬件参数设置,修改之后执行boot即可使用最新的配置开机运行,注意是单次有效,重启后修改无效。

MMC/SD设备调试

MMC(eMMC/SD卡)是主要存储介质,指令用于验证存储设备功能。

查看MMC设备信息

功能:显示当前MMC设备的制造商、容量、速度等信息。

用法:mmc info

查看eMMC设备信息(验证存储设备是否正常识别):

bash 复制代码
mmc info
Device: sdhci@fe310000
Manufacturer ID: 15
OEM: 100
Name: BJTD4 
Timing Interface: HS200
Tran Speed: 200000000
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 29.1 GiB
Bus Width: 8-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 29.1 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 4 MiB ENH

切换MMC设备

功能:指定当前操作的MMC设备(如eMMC为0,SD卡为1)。

用法:mmc dev <设备编号>

切换到SD卡(设备1):

bash 复制代码
mmc dev 1
switch to partitions #0, OK
mmc1 is current device

读写/擦除MMC数据

功能:直接操作MMC块数据,验证存储介质可靠性。

用法:

• mmc read <内存地址> <块编号> <块数量>

• mmc write <内存地址> <块编号> <块数量>

• mmc erase <块编号> <块数量>

读取MMC第0块数据到内存0x70000000(验证存储数据完整性):

bash 复制代码
mmc read 0x70000000 0 1
md.l 0x70000000 1  # 查看读取结果
70000000: 00000000 ................

USB调试

USB用于外接设备(U盘、网卡等),指令用于调试USB功能。

进入RockUSB烧写模式

功能:启动RockUSB协议,通过USB烧写固件(支持eMMC/Nand等介质)。

用法:rockusb <USB控制器> <设备类型> <设备[:分区]>

通过USB控制器0烧写eMMC设备0:

bash 复制代码
rockusb 0 mmc 0
RKUSB: LUN 0, dev 0, hwpart 0, sector 0x0, count 0x3a3e000

初始化/重置USB控制器

功能:usb start初始化控制器并扫描设备;usb reset重置控制器并重新扫描。

用法:

• usb start [控制器编号]

• usb reset [控制器编号]

初始化USB控制器0并扫描设备:

bash 复制代码
usb start
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found

查看/切换USB设备

用法:

• usb tree:显示USB设备层级关系(验证设备枚举)

• usb dev <编号>:切换当前USB存储设备

• usb info:查看当前USB设备信息

查看USB设备树并切换设备:

bash 复制代码
usb tree
USB device tree:
  1  Hub (0x0000:0x0000)
    |
    +- 2  Mass Storage (0x1234:0x5678)  # U盘设备
usb dev 2  # 切换到该U盘
switched to usb storage device 2

系统状态调试

用于排查启动卡死、驱动异常等问题,查看系统整体状态。

查看设备驱动绑定状态

功能:显示设备与驱动的绑定关系及探针(probe)状态,验证驱动是否加载。

用法:dm tree

查看驱动加载状态([ + ]表示探针成功):

bash 复制代码
dm tree
Class     Probed  Driver                Name
serial    [ + ]   ns16550_serial        |-- serial@11030000  # 串口驱动加载成功
mmc       [ + ]   rockchip_rk3288_dw_mshc |-- dwmmc@30020000*

内存块管理信息

功能:

• bidram_dump:显示系统总内存及预留块(如ATF、OPTEE占用)

• sysmem_dump:显示内核可见内存及固件(U-Boot、kernel)占用块

用法:命令行调用或开机按ctrl+m打印

排查内存重叠问题(如KERNEL与RAMDISK地址冲突):

bash 复制代码
sysmem_dump_all:
memory.total = 0x7e000000 (2016 MiB)
allocated.rgn[0].name = "U-Boot" 0x71dd6140 - 0x80000000
allocated.rgn[1].name = "KERNEL" 0x80080000 - 0x88000000

U-Boot的调试指令并非默认全部开启,需在编译配置阶段通过Kconfig选项启用对应功能。

进入配置界面,在U-Boot源码目录执行:

bash 复制代码
make menuconfig

核心配置项(路径:Command line interface)

内存操作 CONFIG_CMD_MEM

I2C调试 CONFIG_CMD_I2C 依赖CONFIG_DM_I2C、平台I2C驱动

GPIO调试 CONFIG_CMD_GPIO 依赖CONFIG_DM_GPIO、CONFIG_ROCKCHIP_GPIO

设备树调试 CONFIG_CMD_FDT

MMC调试 CONFIG_CMD_MMC 依赖CONFIG_DWMMC、平台MMC驱动

USB调试 CONFIG_CMD_USB 依赖CONFIG_CMD_USB_STORAGE(存储支持)

驱动状态 CONFIG_CMD_DM

配置生效

①保存配置(默认存为.config)

②生成defconfig,替换系统的defconfig

bash 复制代码
make savedefconfig
mv defconfig configs/rk3568_defconfig

③重新编译U-Boot,并烧录新镜像后即可使用配置的指令

相关推荐
papaofdoudou2 小时前
Linux内核任务调度时机总结
linux·运维·网络
草莓熊Lotso2 小时前
Ext 系列文件系统核心:块、分区、inode 与块组结构详解
android·linux·c语言·开发语言·c++·人工智能·文件
~黄夫人~11 小时前
Linux 权限管理:用户组 + 特殊权限 + ACL 解析
linux·运维·计算机·学习笔记·权限管理
2501_9071368213 小时前
离线工具箱 内含53个小工具
linux·服务器·网络
时空潮汐13 小时前
神卓N600 NAS身份核验功能深度解析
linux·运维·网络·神卓nas·神卓n600 pro·家庭轻nas
哈哈浩丶13 小时前
安卓系统全流程启动
android·linux·驱动开发
小李独爱秋13 小时前
模拟面试:用自己的话解释一下lvs的工作原理
linux·运维·面试·职场和发展·操作系统·lvs
一路往蓝-Anbo13 小时前
第 7 章:内存地图 (Memory Map) 深度设计——DDR 与 SRAM
linux·stm32·单片机·嵌入式硬件·网络协议
BHXDML13 小时前
VMware Workstation Pro 安装详细教程(超详细图文讲解)
linux·虚拟机