Я работаю с Linux версии 3.10.17, используя дерево устройств для загрузки ядра.
В дереве устройств я определяю совместимый драйвер "pwm-backlight". Драйвер определяет переменную,default-brightness-level
При запуске драйвер применяет это значение к значению «яркости» драйвера.
Я хотел бы узнать, есть ли способ сохранить значение и использовать его вместо "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