启动时设置 PWM 背光亮度

启动时设置 PWM 背光亮度

我正在使用 Linux 版本 3.10.17,使用设备树来启动内核。

在设备树中,我定义了一个“pwm-backlight”兼容驱动程序。该驱动程序定义了一个变量,default-brightness-level

启动时,驱动程序将该值应用于驱动程序的“亮度”值。

我想知道是否有办法保存一个值并用它来代替“默认亮度级别”。目的是能够保存亮度值并在下次启动 Linux 时使用它。

答案1

使用 sysfs

应该可以使用 sysfs 为brightness文件设置一个值。查看/sys/class/backlight;很可能有一个包含您的背光设备的子目录。在该目录中,应该有一个文件brightness

brightness-levels将与要使用的值的索引(在 中)相对应的值通过管道传输到该文件。例如:

me@mydevice:/ $ echo 3 > /sys/class/backlight/backlight_lvds.0/brightness

这应该将值设置为中的第 4 个条目brightness-levels

该文件也可以被查询:

me@mydevice:/ $ cat  /sys/class/backlight/backlight_lvds.0/brightness
3

答案2

使用自定义(便携式)dtb 文件

注意:我知道你提到过而不是“默认亮度级别”,但是如果创建了 dtb 文件,则可以使用它来保存内核之外的配置(即可以在不重建内核的情况下用不同的文件换出)。

如果您有权访问内核构建时使用的 dtsi 文件,则可以修改其中相应部分下的值。此文件应位于arch/arm/boot/dts内核源目录中。

与 同级compatible = "pwm-backlight",还有一个default-brightness-level参数。将此值更改为您喜欢的值(它对应于数组的索引brightness-levels。例如:

backlight_lvds {
        compatible = "pwm-backlight";
        pwms = <&pwm4 0 500000>;
        brightness-levels = <100 75 60 50 40 30 20 10 5 0>;
        /* Default brightness level (index into the array defined by the "brightness-levels" property) */
        default-brightness-level = <5>;
        status = "okay";
    };

然后,您可以将 dtsi 编译为包含在启动分区中的 dtb 文件。使用以下make dtbs命令进行编译。例如:

cd ~/MyOS/kernel_imx 
export CROSS_COMPILE=`pwd`/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- 
make myboard_defconfig 
make dtbs

然后,在引导加载程序脚本中引用输出的 dtb 文件。例如,对于 UBoot,它是:

setenv dtbname myCustom.dtb

myCustom.dtb是命令的输出make dtbs

答案3

内核不会为您执行此操作(保存背光值并在下次重启时应用),但如果您的内核具有 sysfs 支持,您可以将当前值保存在配置文件中(例如 /etc/backlight.conf),并在启动时应用它。

每当您更改背光时:

echo <newvalue> > /sys/class/backlight/<subdir>/brightness
echo <newvalue> > /etc/backlight.conf

启动时:

if [ -f /etc/backlight.conf ]; then
    cat /etc/backlight.conf > /sys/class/backlight/<subdir>/brightness
fi

相关内容