Edit online

调试指南

目前 CMU 没有专有的调试命令,只能通过读写 CMU 寄存器对照芯片手册来核对配置。Luban-Lite 下读写寄存器的通用命令为 p ,例如:
aic /> p 0x18020000
18020000: 881d3110 88153100 00000000 00000000
18020010: 00000000 00000000 00000000 00000000
18020020: 88152900 881d2701 88151d01 00000000
18020030: 00000000 00000000 00000000 00000000
CMU 调试包含以下步骤:
  1. 打开 debugfs
    内核的CCF框架中定义了一些用于调试的接口,调用这些接口,只需要打开debugfs的开关即可。SDK中默认已打开debugfs,也可以通过以下配置打开:
    Kernel hacking--->
        Generic Kernel Debugging Instruments--->
            Debug Filesystem
                Debugfs default access(Access normal)--->

    然后再重新编译内核

  2. 挂载 debugfs
    内核启动后,debugfs 默认是没有挂载的,可以通过以下命令将 debugfs 挂载到/sys/kernel/debug
    mount -t debugfs none /sys/kernel/debug
  3. 调试 clock debugfs
    1. 打开debugfs目录
      打开clock的debugfs目录:
      cd /sys/kernel/debug/clk

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

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

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

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

      ../../images/uart0_node.png
      可以通过如下命令查询uart0的时钟频率:
      cat clk_rate
      ../../images/uart0_rate.png
    4. 设置时钟频率
      默认情况下,clk_rate结点是只读的,也就是只能读取时钟频率,而不能设置频率。如果需要设置频率,那么就需要将clk_rate的属性改为读写属性。具体设置如下:
      1. 配置menuconfig
        Kernel hacking--->
            Artinchip Debug--->
                [*] CMU driver debug

        配置后,会生成宏CONFIG_ARTINCHIP_CMU_DEBUG,在编译时,会根据该宏在gcc的-D选项参数后定义宏CLOCK_ALLOW_WRITE_DEBUGFS。

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

      2. 源码修改。重新编译内核,clk_rate结点的属性即变为可读写。
      3. 通过以下命令,设置模块的时钟频率
        echo target-frequency > clk_rate