7.8.3. 调试指南

7.8.3.1. 调试开关

参考快速入门 - 编译概述 - Kernel配置,进入kernel的功能配置,可以打开PWM模块的DEBUG选项:

Linux
    Kernel hacking
        ZX Debug
            [*] PWM driver debug

此DEBUG选项打开的影响:

  1. PWM 驱动以-O0编译

  2. PWM 的pr_dbg()和dev_dbg()调试信息会被编译

在系统运行时,如果要打印pr_dbg()和dev_dbg()信息,还需要调整loglevel为8,两个方法:

  1. 在xxx-board.dts中修改bootargs,增加“loglevel=8”

  2. 在板子启动到Linux shell后,执行命令:

echo 8 > /proc/sys/kernel/printk

7.8.3.2. Sysfs 节点

7.8.3.2.1. 状态信息

在PWM驱动初始化成功后,会在Sysfs中注册生成一个 status 节点,其中打印了当前的PWM配置及状态信息:

# cat /sys/devices/platform/soc/19240000.pwm/status
In PWM V1.00:
Module Enable: 1, IRQ Enable: 0x0
Ch En Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO
 0  0   Up           0   0   -   -   -   -   -   -
                             -   -   -   -   -   -
 1  0   Up           0   0   -   -   -   -   -   -
                             -   -   -   -   -   -
 2  1   Up    24000000   0   -   -   - Hgh Low   -
                             -   -   - Low Hgh   -
 3  0   Up           0   0   -   -   -   -   -   -
                             -   -   -   -   -   -

7.8.3.2.2. 设置背光

Linux Backlight子系统提供一些 Sysfs 节点,可用来获取、设置当前背光:

# cd /sys/class/backlight/backlight/
# ls /sys/class/backlight/backlight/
actual_brightness  device/            subsystem/
bl_power           max_brightness     type
brightness         scale              uevent
# cat max_brightness
10
# cat brightness
8
# echo 9 > brightness
[  146.913635] backlight: set brightness to 9
[  154.054433] aic-pwm 19240000.pwm: ch0 duty 900000 period 1000000
# echo 10 > brightness
[  192.145595] backlight: set brightness to 10
[  192.151118] aic-pwm 19240000.pwm: ch0 duty 1000000 period 1000000
# echo 9 > brightness
[  194.681923] backlight: set brightness to 9
[  194.687264] aic-pwm 19240000.pwm: ch0 duty 900000 period 1000000
# echo 8 > brightness
[  197.748816] backlight: set brightness to 8
[  197.753606] aic-pwm 19240000.pwm: ch0 duty 800000 period 1000000
# echo 7 > brightness

7.8.3.2.3. 动态配置 PWM 通道

通常情况下,修改PWM通道的配置,方法是:

  1. 修改xxx-board.dts中的PWM通道参数;

  2. 编译uboot、镜像;

  3. 重启板子,下载最新镜像;

  4. 然后用示波器查看该PWM通道的信号输出是否符合预期。

为了提供调试的效率,PWM驱动设计了一个 config 节点,可实现 运行时动态修改任意PWM通道的任意参数 ,并且立即生效,一步shell中的 echo 操作可实现上述1、2、3步骤的效果。如下:

# echo "0 1 0 24000000 1 0 2 0 0 1 0" > /sys/devices/platform/soc/1924000.pwm/config
[aic@] # cat /sys/devices/platform/soc/19240000.pwm/status
In PWM V1.00:
Module Enable: 1, IRQ Enable: 0x0
Ch En Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO
 0  1   Up    24000000   1   -   -   - Hgh Low   -
                             - Hgh   -   - Low   -
 1  0   Up    24000000   1   -   -   - Hgh Low Low
                             -   -   -   -   -   -
 2  0   Up    24000000   0   -   -   -   -   -   -
                             -   -   -   -   -   -
 3  0   Up    24000000   0   -   -   -   -   -   -
                             -   -   -   -   -   -

config 的参数格式定义如下(按从左到右的输入顺序):

参数名称

取值范围

含义

channel No.

[0, 3]

通道号

action No.

[0, 1]

0和1分别代表action0、action1

mode

[0, 2]

0, up-count; 1, down-count; 2, up-down-count

tb-clk-rate

[0, 24000000]

时基计数器的工作时钟

default level

[0, 1]

初始电平

CBD

[0, 3]

0, none;

1, low;

2, high;

3, inverse

CBU

CAD

CAU

PRD

ZRO