Настройка яркости подсветки ШИМ при загрузке

Настройка яркости подсветки ШИМ при загрузке

Я работаю с 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

Связанный контент