Edit online

调试指南

4 Dec 2024
Read time: 1 minute(s)
CMU 调试包含以下步骤:
  1. 确保打开 Debugfs。SDK 中默认已打开 Debugfs,也可以通过以下配置打开:
    Kernel hacking--->
        Generic Kernel Debugging Instruments--->
            Debug Filesystem
                Debugfs default access(Access normal)--->

    内核的 CCF 框架中定义了用于调试的接口,如需调试,仅需打开 Debugfs 开关即可。

  2. 保存配置并重新编译内核。
  3. 通过以下命令将 Debugfs 挂载到/sys/kernel/debug
    mount -t debugfs none /sys/kernel/debug

    内核启动后,Debugfs 默认未挂载。

  4. 按以下步骤调试 Clock Debugfs:
    1. 打开 Debugfs 目录:
      cd /sys/kernel/debug/clk

      该目录存储了内核中注册的所有时钟。使用 ls 命令可查看所有注册的时钟:


      clk_dir

    2. 通过 summary 结点打印系统的时钟树。
      cat clk_summary

      Summary 结点位于 /sys/kernel/debug/clk 目录下。系统时钟树会显示系统中各个时钟的父子关系、频率和使能计数等信息:


      clock_tree1

    3. 除了在时钟树中查看时钟的频率,也可以通过各个时钟,单独查询其时钟频率。以 uart0 为例进行:
      1. /sys/kernel/debug/clk 目录中,打开 uart0 目录。

        uart0 目录中,可以看到一系列结点,并能显示 uart0 时钟的各个属性。


        uart0_node

      2. 执行 cat clk_rate 命令读取 uart0 的时钟频率:


        uart0_rate

    4. 设置 clk_rate
      默认情况下,clk_rate 结点为只读,即只能读取时钟频率而不能设置频率。如需设置频率,需将 clk_rate 的属性改为读写属性。具体设置如下:
      1. 打开 menuconfig 中的下列配置,生成宏 DEBUG:
        Kernel hacking--->
            ArtInChip Debug--->
                [*] CMU driver debug

        在编译时,会根据该宏在 gcc 的-D 选项参数后定义宏 DEBUGFS。

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

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