我正在使用 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