- Вопрос или проблема
- Использование sysfs
- Использование пользовательского (портативного) файла dtb
- Ответ или решение
- Установка яркости подсветки PWM при загрузке в Linux
- 1. Использование sysfs
- 2. Использование пользовательского (портируемого) dtb файла
- 3. Сохранение значения яркости
- Сохранение нового значения яркости:
- Применение значения при загрузке
- Заключение
Вопрос или проблема
Я работаю с версией 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, облегчая вашу работу с системой.