调试指南
CMU 调试包含以下步骤:
- 打开
debugfs内核的 CCF 框架中定义了一些用于调试的接口,调用这些接口,只需要打开 debugfs 的开关即可。SDK 中默认已打开 debugfs,也可以通过以下配置打开:
Kernel hacking---> Generic Kernel Debugging Instruments---> Debug Filesystem Debugfs default access(Access normal)--->
然后再重新编译内核
- 挂载 debugfs内核启动后,debugfs 默认是没有挂载的,可以通过以下命令将 debugfs 挂载到/sys/kernel/debug:
mount -t debugfs none /sys/kernel/debug
- 调试 clock debugfs
- 打开 debugfs 目录打开 clock 的 debugfs 目录:
cd /sys/kernel/debug/clk
所有在内核中注册的时钟都在该目录下:
- 打印时钟树在/sys/kernel/debug/clk 目录下,存在一个结点 summary,可以通过该结点,打印系统的时钟树,该时钟树会显示系统中各个时钟的父子关系,频率,使能计数等信息。对于时钟驱动的调试,非常有帮助。
cat clk_summary
- 时钟频率查询
除了可以在时钟树中查看时钟的频率外,也可以通过各个时钟单独查询。下面以 uart0 为例进行说明:
在/sys/kernel/debug/clk 目录下,打开 uart0 目录,该目录也有一系列结点,可以显示 uart0 时钟的各个属性。
可以通过如下命令查询 uart0 的时钟频率:cat clk_rate
- 设置时钟频率默认情况下,clk_rate 结点是只读的,也就是只能读取时钟频率,而不能设置频率。如果需要设置频率,那么就需要将 rate 的属性改为读写属性。具体设置如下:
- 配置 menuconfig
Kernel hacking---> Artinchip Debug---> [*] CMU driver debug
配置后,会生成宏 DEBUG,在编译时,会根据该宏在 gcc 的-D 选项参数后定义宏 DEBUGFS。
在源码 drivers/clk/clk.c 文件中,注释
//#undef CLOCK_ALLOW_WRITE_DEBUGFS
- 源码修改。重新编译内核,clk_rate 结点的属性即变为可读写。
- 通过以下命令,设置模块的时钟频率
echo target-frequency > clk_rate
- 配置 menuconfig
- 打开 debugfs 目录