4.2.3. 调试指南

4.2.3.1. 打开debugfs

内核的CCF框架中定义了一些用于调试的接口,调用这些接口,只需要打开debugfs的开关即可。SDK中默认已打开debugfs,也可以通过以下配置打开:

Kernel hacking--->
    Generic Kernel Debugging Instruments--->
        Debug Filesystem
            Debugfs default access(Access normal)--->

然后再重新编译内核

4.2.3.2. 挂载debugfs

内核启动后,debugfs默认是没有挂载的,可以通过以下命令挂载:

mount -t debugfs none /sys/kernel/debug

将debugfs挂载到/sys/kernel/debug

4.2.3.3. clock debugfs调试

4.2.3.3.1. 打开debugfs目录

打开clock的debugfs目录:

cd /sys/kernel/debug/clk

所有在内核中注册的时钟都在该目录下:

../../../_images/clk_dir.png

4.2.3.3.2. 打印时钟树

在/sys/kernel/debug/clk目录下,存在一个结点clk_summary,可以通过该结点,打印系统的时钟树,该时钟树会显示系统中各个时钟的父子关系,频率,使能计数等信息。对于时钟驱动的调试,非常有帮助。

cat clk_summary
../../../_images/clock_tree.png

4.2.3.3.3. 时钟频率查询

除了可以在时钟树中查看时钟的频率外,也可以通过各个时钟单独查询。下面以uart0为例进行说明:

在/sys/kernel/debug/clk目录下,打开uart0目录,该目录也有一系列结点,可以显示uart0时钟的各个属性。

../../../_images/uart0_node.png

可以通过如下命令查询uart0的时钟频率:

cat clk_rate
../../../_images/uart0_rate.png

4.2.3.3.4. 设置时钟频率

默认情况下,clk_rate结点是只读的,也就是只能读取时钟频率,而不能设置频率。如果需要设置频率,那么就需要将clk_rate的属性改为读写属性。具体设置如下:

4.2.3.3.4.2. 源码修改

在源码drivers/clk/clk.c文件中,注释

//#undef CLOCK_ALLOW_WRITE_DEBUGFS

然后重新编译内核,clk_rate结点的属性即变为可读写。

4.2.3.3.4.3. 设置频率

通过以下命令,设置模块的时钟频率

echo target-frequency > clk_rate