LINUX.ORG.RU

Ползаем по деревьям устройств

 , ,


5

5
Ползаем по деревьям устройств

Совершенно неожиданно обнаружил себя копающимся в потрохах ядра, а именно — в древовидных структурах Devicetree, содержащих описание периферии, подключенной к системе (как правило, встраиваемой).

Не ожидал я такого потому, что подключенный к моему одноплатнику (Wandboard) пятидюймовый LCD-экранчик прекрасно работал с образом Ubuntu 14.04, скачанным с официального сайта. И перестал работать сразу, как я запустил там самосборный дистрибутив с распоследним ванильным ядром.

Целая неделя ушла на то, чтобы осознать причину: в очень нужном и полезном процессе принятия в апстрим ядра вендорских (тогда ещё Freescale, позже поглощённая NXP) патчей для платформы i.mx6, куда-то потеряли поддержку устройств вывода на вандбордах — ни сигналов на параллельной RGB-шине, ни управления питанием экрана, ни даже фреймбуфера /dev/fb0. И это при том, что были проверены и исключены все прочие возможные причины: конфигурация загрузчика, передаваемые ядру параметры, отсутствующие драйверы, дополнительные патчи или опции настройки ядра. Оставалась лишь одно — некорректная конфигурация Devicetree.

Ситуацию усугубил тот факт, что я, ведомый естественным желанием по-быстрому накопипастить чужого, везде натыкался лишь на устаревшие и более неактуальные фрагменты devtree-структур (работоспособные только на патченных ядрах 3.x, от которых решено было избавиться).

И не ждите, что ядро каким-либо образом отреагирует на DT-блоб, неточно или не в полной мере описывающий вашу аппаратную конфигурацию. В лучшем случае на плате ничего не сгорит ;)

Теперь про скриншот. Даже поверхностного взгляда достаточно, чтоб понять: это вам не Plug-and-Play™ :)

Итак, начиная с верхнего левого окна:

  • любимый Okular с открытой распиновкой LCD-модуля и парой висячих заметок
  • под ним — принципиальная схема одноплатника, по которой отслеживается, к какой физической ноге процессора подключен тот или иной сигнал
  • следующее окно — редактируемый .dtsi-файл (DeviceTree Source Include), в который добавляю нужные узлы дерева по аналогии с
  • тем, как это сделано в другой плате с экранчиком — SABRE Lite (окно вверху правее центра)
  • справа вверху — документация ядра с перечнем нужных узлов и параметров (Freescale i.MX DRM master device)
  • справа внизу — документация на процессор с описанием поддерживаемых режимов работы параллельного интерфейса графической подсистемы

Затем из моих правок будет сформирован патч, подсовываемый рецепту ядра для сборочной системы Yocto, которая на выходе сгенерирует мне чистенький и компактный загрузочный образ.

Рабочая система — Gentoo, KDE5.

Спрашивайте ваши ответы. Особенно интересно будет перекинуться парой фраз с имевшими со всем этим дело.

>>> Просмотр (3840x2160, 1730 Kb)

★★

Проверено: JB ()

И перестал работать сразу, как я запустил там самосборный дистрибутив с распоследним ванильным ядром.

Это потому что ты отступы табами делаешь.

ox55ff ()
Ответ на: комментарий от ox55ff

Мопед не мой, там уже до меня всё ими испортили!

TwisteR ★★ ()

И как же такие скрины на фуллхд разглядывать? (

vvn_black ★★ ()

Гном для тунеядцев, кеды для тех кто работает за компухтором. Выбор очевиден.

SANSLAR ★★ ()

Все-таки у фрискайла и тексаса лучшие доки и техсаппорт. В отличие от китайских поделий.

aiker ★★ ()
Ответ на: комментарий от SANSLAR

Гном для тунеядцев, кеды для тех кто работает за компухтором. Выбор очевиден.

Мне бы тут больше подошёл тайловый вм, но синдром утёнка мешает их потыкать. Я начинал с кде3, сильно привык за прошедшие годы ко многим мелким фишечкам оконного менеджера, софта, окружения в целом.

А желание заморачиваться с настройкой/полировкой UI под себя куда-то пропало с возрастом...

TwisteR ★★ ()
Ответ на: комментарий от aiker

Все-таки у фрискайла и тексаса лучшие доки и техсаппорт. В отличие от китайских поделий.

Чертовски лорчую, западные доки всегда радуют глаз. От азиатских же, напротив, наворачиваются кровавые слёзы.

Глянь на мою панель задач вверху, найди «китайца» и осознай причину :D

Самое очевидное, за что их можно упрекнуть — непонятную любовь к растру. Ладно там, чертёж не осилили запаковать в пдф в векторе (и в большинстве случаев забили болт на пропорции), НО ТАБЛИЦУ ЗА ЧТО, КАРЛ?

TwisteR ★★ ()
Последнее исправление: TwisteR (всего исправлений: 2)

Рабочая система — Gentoo, KDE5.

А почему такое адовое мыло? KDE5 не умеет нормально в HiRes?

korvin_ ★★★★★ ()
Ответ на: комментарий от Harald

А я-то что. Я пока пыталась понять как «включить часы для pwm» и побольше всякого добра наоткрывала, только что-то не помогло.

И я поняла так, что оверлеи в ванильном ядре не поддерживаются, поэтому любой эксперимент с device tree - это переборка ядра под арм, которая на самом арме идет часов этак 20. На этом мой интерес к экспериментам на этом уровне как-то пока зачах.

Но за замену слов значками типа # и <> и все остальные синтаксические сокращения в исходниках хочется послать авторов device tree на... принудительную лекцию про применение конфигов в народном хозяйстве и основные ux-приоритеты при их дизайне.

alpha ★★★★★ ()
Ответ на: комментарий от alpha

И я поняла так, что оверлеи в ванильном ядре не поддерживаются, поэтому любой эксперимент с device tree - это переборка ядра под арм, которая на самом арме идет часов этак 20.

Зачем? 0_o

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

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

что мешает собрать *.dtb отдельно и подсунуть его напрямую в загрузчик?

А есть линк на эту тему? Потому что я вообще-то искала как это сделать, но не нашла.

alpha ★★★★★ ()
Ответ на: комментарий от alpha

Конечно, вот например. Скорее всего, компилятор dtc есть в репозиториях и собирать его вручную не обязательно.

Другое дело, если загрузчик и .dtb находятся в неразмеченной области. Тогда надо либо точно знать, куда подсовывать, либо перегенерировать образ целиком.

TwisteR ★★ ()
Последнее исправление: TwisteR (всего исправлений: 1)
Ответ на: комментарий от alpha

Ну я не знаю, посмотреть, какими правилами собираются *.dtb в процессе сборки ядра и вызвать make с нужными аргументами вручную?

intelfx ★★★★★ ()
Ответ на: комментарий от alpha

то переборка ядра под арм, которая на самом арме идет часов этак 20.

кросскомпиляция для кого существует

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Кстати да, ядро как раз кроссом отлично собирается.

intelfx ★★★★★ ()
Ответ на: комментарий от TwisteR

Другое дело, если загрузчик и .dtb находятся в неразмеченной области.

А что, так бывает? Разве не U-Boot für alle?

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

А что, так бывает? Разве не U-Boot für alle?

Я про ту ситуацию, когда нет отдельного boot-раздела (стараюсь всегда его избегать из-за богомерзкого FAT).

TwisteR ★★ ()

Раз уж тут собралась почтенная публика, спрошу про это: оверлеи прямо на лету, по живому ядру можно грузить? Или они наслаиваются до загрузки системы, управляясь опциями загрузчика?

TwisteR ★★ ()

Спрашивайте ваши ответы.

Тайлинговое ДЕ по тебе плачет... Подумай, может стоит освоить?

Erepb ()
Последнее исправление: Erepb (всего исправлений: 1)
Ответ на: комментарий от Erepb

Я уже отписывался по этому поводу в текущей теме.

Добавлю лишь, что на скрине — не совсем характерная для меня деятельность, я больше с принципиальными схемами, разводками печатных плат и чертежами работаю, в полноэкранном режиме, где тайлинговые оконные менеджеры не будут иметь преимуществ.

TwisteR ★★ ()
Ответ на: комментарий от TwisteR

Я про ту ситуацию, когда нет отдельного boot-раздела (стараюсь всегда его избегать из-за богомерзкого FAT).

Кто мешает сделать на boot-разделе... да что угодно - ext2, JFFS2?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Кто мешает сделать на boot-разделе... да что угодно - ext2, JFFS2?

Прогнившая насквозь индустрия, состоящая из прогибающихся под M$ быдловендоров, башляющих ей роялти Первичные загрузчики некоторых SoC'ов, поддерживающие только FAT.

TwisteR ★★ ()
Ответ на: комментарий от TwisteR

Первичные загрузчики некоторых SoC'ов, поддерживающие только FAT.

Подло-то как. Впрочем, U-Boot,загруженный из FAT, всё равно может читать dtb (и ядро) из линуксовой файловой системы, ее даже не обязательно делать отдельным разделом.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Всё так, но проект этот — мой личный, а я у себя такого непотребства не потерплю! :)

Потому и выбрал не самый дешёвый SoC, а самый нормальный, который такими задвигами не страдает и умеет инициализироваться даже с пустотынеразмеченного места.

На данном этапе работ всё выглядит так, что вообще без единого блоба будем плясать, с ванильным ядром и даже с графикой (благодаря etnaviv).

TwisteR ★★ ()
Ответ на: комментарий от TwisteR

Всё так, но проект этот — мой личный, а я у себя такого непотребства не потерплю! :)

По опыту могу сказать, что загрузка всего, чего можно, из нормальной ФС - это хорошо. А отдельные неразмеченные области - плохо.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Инициализация толковым и надёжным образом — вопрос открытый, актуальный и совсем не праздный, вариантов тут очень много.

В списке текущих хотелок:

  • загрузка ~1 сек с холодного старта (благодаря u-boot Falcon mode, загрузке SPL->kernel, минуя сам u-boot)
  • защита от окирпичивания
    • программная, с помощью RO-корня+overlayfs (как в OpenWRT)
    • аппаратная (энергонезависимая память с основной системой + microsd с более высоким приоритетом при наличии)
  • переключение корневых фс при обновлениях, как в хромобуках?
  • всякие удобные отладочные режимы, про которые ещё и не задумывался
TwisteR ★★ ()

Что за наркомания с порядком цветных байт у фрискейла, не пойму. В таблице (на скрине внизу справа) белым по тёмному видно порядок «BGR» при продвижении по шине, тогда как у белых людей принято RGB. По этой причине у меня при загрузке в углу экрана сидят пингвины с СИНИМИ клювами и ногами...

Читаем перечень поддерживаемых форматов:

- interface-pix-fmt: How this display is connected to the display interface. Currently supported types: «rgb24», «rgb565», «bgr666» and «lvds666».

Ну и куда дели bgr24 (который, на секундочку, умолчательный на этой платформе)? Или мне резать цвет до 18-битного, выбирая bgr666, или я чего-то не понимаю.

TwisteR ★★ ()
Ответ на: комментарий от Lifun

Что по F4 в крусейдере открылось, тем и пользуюсь. Движок текстового редактора везде в кедах абсолютно одинаков, вплоть до настроек. Отличается лишь степень обвешивания главного окна не особо (мне) нужными рюшечками.

TwisteR ★★ ()

Ты чего тут извращаешься? Используй любой тайлинговый wm. Зачем отдавать ресурсы пк этому жирному кдешному монстру?

Odalist ★★★★★ ()
Ответ на: комментарий от TwisteR

Может, там 6 бит и FRC, как на всех подобных мониторах?

Aceler ★★★★★ ()
Ответ на: комментарий от Lifun

в Кразадере свой, а у КДЕ есть Kate и KWrite.

никто не отрицает. И мой предыдущий тезис про единый двиг остаётся в силе. На скрине, кстати, представлено два из трёх. Нужности Kate не понимаю :)

TwisteR ★★ ()
Ответ на: комментарий от Aceler

Может, там 6 бит и FRC, как на всех подобных мониторах?

Проц поддерживает шину любой вменяемой разрядности на цветовой канал, просто не все варианты реализованы в отрефакторенном коде. В старых вендорских патчах всё это было, в т.ч. и нужный мне BGR24. Сейчас пытаюсь перенести это в ваниль.

TwisteR ★★ ()
Ответ на: комментарий от RazrFalcon

Вы там с лупой сидите? Мелко же.

Мелко — это 4K на 13" ноуте (без масштабирования). Знакомый рассказывал, что один тип на его работе даже экран не блокирует — всё равно никто нихера прочитать не может :D

TwisteR ★★ ()
Ответ на: комментарий от TwisteR

У меня 27" и я ничего не могу разобрать на вашем скрине, ибо мелко + дикое ШГ.

У меня же множитель 2 и всё прекрасно.

RazrFalcon ★★★ ()

Сдалека смотрится неплохо, а при приближении KDE.

Bruce_Lee ()

Респект таким девелоперам (в том числе за юзание инверсии в Okular).

Какой монитор, если не секрет? Сам являюсь грустным владельцем BDM4350UC.

UPD: А, это 28", тогда не нужно.

zezic ★★★ ()
Последнее исправление: zezic (всего исправлений: 1)
Ответ на: комментарий от Aceler

Всё решилось гораздо проще :)

--- a/drivers/gpu/drm/imx/parallel-display.c
+++ b/drivers/gpu/drm/imx/parallel-display.c
@@ -225,6 +225,8 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data)
        if (!ret) {
                if (!strcmp(fmt, "rgb24"))
                        bus_format = MEDIA_BUS_FMT_RGB888_1X24;
+               else if (!strcmp(fmt, "bgr24"))
+                       bus_format = MEDIA_BUS_FMT_BGR888_1X24;
                else if (!strcmp(fmt, "rgb565"))
                        bus_format = MEDIA_BUS_FMT_RGB565_1X16;
                else if (!strcmp(fmt, "bgr666"))

С одной стороны — мега-фичастое графическое ядро (обязанное поддерживать вывод в таком формате), с другой стороны — кадровый буфер Линукса (ну тут ещё поискать надо такой формат вывода, который бы не поддерживался).

Проблемка была в новой прослойке для это платформы, которая появилась совсем недавно и ещё не такая матёрая, как старая.

Посиневшие пингвины оттаяли и приобрели естественные цвета.

Люблю, когда копипастнутые быстрофиксы мало того, что работают, так ещё и в общую концепцию вписываются :)

TwisteR ★★ ()
Последнее исправление: TwisteR (всего исправлений: 1)

Уважаемый ТС, ты разбираешься в device tree? Тебя можно будет спрашивать на эту тему?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

«разбираюсь» — это очень громко звучит. Скажем так, получалось пару-тройку раз невозбранно тыр... эм, адаптировать под свои нужды чужие фрагменты. Ведь большинство (если не все) сценариев использования аппаратуры уже реализованы в том или ином виде, изобретать ничего не приходится.

Но да, спрашивать конечно можно, вдруг чем помогу.

TwisteR ★★ ()
Ответ на: комментарий от alpha

Эврика, оно заработало!

Я оказывается заблудилась с загрузчиками.

В Fedora по умолчанию U-Boot грузит extlinux, а extlinux уже грузит ядро и всё остальное. И в /boot/extlinux/extlinux.conf есть отличный легко редактируемый параметр fdtdir

label Fedora (Customized)
	kernel /vmlinuz-4.14.8-300.fc27.armv7hl
	append ro root=UUID=b35d7f9e-3d7c-4e43-8ba9-4c5439ca27e3 LANG=en_US.UTF-8
	fdtdir /custom/
	initrd /initramfs-4.14.8-300.fc27.armv7hl.img

Так что достаточно положить пропатченное дерево в /boot/custom/bcm2837-rpi-3-b.dtb и хардварный pwm готов к работе.

alpha ★★★★★ ()
Последнее исправление: alpha (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)