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

Вопрос или проблема

Я работаю с версией Linux 3.10.17, используя дерево устройств для загрузки ядра.

В дереве устройств я определяю драйвер, совместимый с “pwm-backlight”. Драйвер определяет переменную default-brightness-level.

При старте драйвер применяет это значение к значению “яркость” драйвера.

Я хотел бы узнать, есть ли способ сохранить значение и использовать его вместо “default-brightness-level”. Цель заключается в том, чтобы иметь возможность сохранить значение яркости и использовать его при следующем запуске Linux.

Использование 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

Использование пользовательского (портативного) файла dtb

Примечание: Я знаю, что вы упоминаете вместо “default-brightness-level”,
но если файл 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>;
        /* Уровень яркости по умолчанию (индекс в массиве, определенном свойством "brightness-levels") */
        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.

Ядро не сделает это за вас (не сохранит значение подсветки и не применит его при следующем перезапуске), но если ваше ядро поддерживает 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

Ответ или решение

Установка яркости подсветки PWM при загрузке в Linux

При работе с системой Linux версии 3.10.17 и использованием дерева устройств (Device Tree) для загрузки ядра, вы сталкиваетесь с необходимостью установить яркость подсветки с помощью драйвера, совместимого с «pwm-backlight». Давайте рассмотрим, как можно сохранить значение яркости и использовать его при следующем старте системы.

1. Использование sysfs

Существует возможность установить значение яркости с помощью интерфейса sysfs. Вам следует проверить, есть ли подкаталог вашего устройства подсветки в /sys/class/backlight. В этом каталоге должен находиться файл brightness, который отвечает за текущую яркость.

Для задания значения яркости вы можете использовать следующую команду:

echo 3 > /sys/class/backlight/backlight_lvds.0/brightness

Эта команда установит яркость на индекс, соответствующий четвёртому элементу в массиве brightness-levels. Для проверки текущего значения яркости можно выполнить:

cat /sys/class/backlight/backlight_lvds.0/brightness

2. Использование пользовательского (портируемого) dtb файла

Если вы хотите избежать изменения default-brightness-level в самом ядре, вы можете создать собственный dtb файл. Это позволит сохранить конфигурацию за пределами ядра, что даст вам возможность менять его без необходимости пересборки ядра.

Для этого откройте файл dtsi, с которым было собрано ядро, находящийся в директории arch/arm/boot/dts. В этом файле найдите секцию, относящуюся к вашему устройству подсветки, и измените значение default-brightness-level на желаемое.

Пример изменения в dtsi файле:

backlight_lvds {
    compatible = "pwm-backlight";
    pwms = <&pwm4 0 500000>;
    brightness-levels = <100 75 60 50 40 30 20 10 5 0>;
    /* Уровень яркости по умолчанию (индекс в массиве "brightness-levels") */
    default-brightness-level = <5>;
    status = "okay";
};

После выполнения изменений вам нужно собрать 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

3. Сохранение значения яркости

К сожалению, ядро Linux не предоставляет механизм для автоматического сохранения значения яркости и его применения при следующем запуске. Однако, если ваша система поддерживает 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

Заключение

Таким образом, вы можете использовать комбинацию sysfs и пользовательских dtb файлов для настройки яркости подсветки вашего устройства при загрузке системы. Этот метод не только обеспечивает гибкость, но и позволяет избежать необходимости постоянных изменений в ядре Linux, облегчая вашу работу с системой.

Оцените материал
Добавить комментарий

Капча загружается...