我正在使用 Linux 版本 3.10.17,使用設備樹來引導核心。
在裝置樹中,我定義了一個「pwm-backlight」相容驅動程式。驅動程式定義了一個變量,default-brightness-level
啟動時,驅動程式將此值套用至驅動程式的「亮度」值。
我想知道是否有辦法保存值並使用它而不是“預設亮度等級”。目的是能夠保存一個亮度值並在Linux下次啟動時使用它。
答案1
使用系統檔案系統
應該可以使用 sysfs 為brightness
檔案設定一個值。看看下面/sys/class/backlight
;您的背光設備很可能有一個子目錄。在該目錄中,應該有一個文件brightness
.
brightness-levels
透過管道將與要使用的值(在 中)的索引相對應的值傳輸到該檔案。例如:
me@mydevice:/ $ echo 3 > /sys/class/backlight/backlight_lvds.0/brightness
這應該將該值設為 中的第四個條目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