Модули ядра от малины

redfox2807

New member
25.02.2024
12
0
1
Уткнулся в проблему отсутствия драйверов для аудио PiFi DAC+ для Репки. Драйвера на нее в принципе отсутствуют в mainline kernel, они только в ветке малины есть. Можно ли как-то попробовать их собрать для Репки или лучше сдаться сразу? Если имеет смысл помучиться, направьте, пожалуйста, что почитать. Я со сборкой и конфигурированием ядра только на х86 сталкивался. Пока непонятно даже как подступиться: пробовать собрать все ядро от малины или можно собрать только ветку.
 
Какие высокоуровневые новички пошли, душа радуется.
На репке ноги I2S доступны?
На H5, помнится, PCM0 могут быть выведены на ноги PA19, PA18, PA20.
На репке-3 37 нога гребенки это PA21, а не PA20, в отличие от апельсинки.
Т.е. на 3-й репке -- нет, вы не получите данные от I2S.
На 4-й всё по-другому.
Начать с того, что выводы обозначены функционально как

I2S-CLK PA6
I2S-ADC PH5
I2S-DAC PH4
I2S-LRCLK PH6


И они включаются... (та-да-бумс) ...отдельной прошивкой. Понятия не имею, на каком этапе эта прошивка применяется. Сказано же -- прошивка, чего тут непонятного?!
Но, вообще-то, I2S -- цифровой интерфейс, термины ADC/DAC к нему не применимы. Но чего я цепляюсь к мелочам...
Как собрать ядро и компилировать модули для репки, я знаю. Уже научили тут на форуме. Только, сдается мне, репка-3 не сможет по аппаратным причинам, а сборка для репки-4 еще только предстоит.
 
В Репке версии 1.6 поддержка I2S включена. Нужно выбрать dtb из вариантов i2s. Без этого действительно карта даже не обнаруживается. Но с включенной прошивкой i2s карта определяется и в alsa, и в pulseaudio. Я ее даже могу выбрать как основную, установить ей громкость и т.д. Вот только беда: звука нет. Также как и модулей, которые грузятся в Raspberry Pi.
Пины, судя по схемам, на Малинке и Репке одинаковые.
 
Очень интересно.
I2S-CLK PA6 12
I2S-ADC PA15 38
I2S-DAC PA14 40
I2S-LRCLK PA16 35

Это на репке-3 вер 1.6, которая объявлена как снабженная всё тем же Allwiner H5.
Инфа с официальной страницы.
Однако ноги PA14..PA16, если следовать руководству по H5, не подключены к устройству I2S.
В общем, предлагаю сначала разобраться с ногами на плате, как авторы этого добились. А потом уже, если выяснится, что это [не] опечатка и [не] ошибка, будем переносить дрова из малинки.
К слову сказать, "звука нет" -- понятно, звука нет. А на ногах репки похожие на нормальный I2S сигналы есть?
 
"А на ногах репки похожие на нормальный I2S сигналы есть?"
А как их диагностировать можно? Есть какая-то утилита? Я не железячник =(

"Очень интересно.
I2S-CLK PA6 12
I2S-ADC PA15 38
I2S-DAC PA14 40
I2S-LRCLK PA16 35
Это на репке-3 вер 1.6, которая объявлена как снабженная всё тем же Allwiner H5."

А тут пишут, что пины на малинке те же самые (шапка i2s же не от апельсинки, а от малинки):
 
> А как их диагностировать можно? Есть какая-то утилита? Я не железячник =(
Осциллограф для начала, потом -- логический анализатор.
На ноге I2S-LRCLK должен быть меандр с частотой дискретизации (от 44100 Гц до 384КГц)
На ноге I2S-CLK могут быть пакеты импульсов, прижатые к фронту/спаду I2S-LRCLK, но может быть и непрерывная последовательность.
На ноге, котора отвечает за передачу данных из репки, должны быть пакеты импульсов, прижатые к фронту/спаду I2S-LRCLK, при условии, что там что-то звучит, иначе, скорее всего, будет просто логический 0.

> пины на малинке те же самые (шапка i2s же не от апельсинки, а от малинки):
те же самые как и где?
Ну ок, шапка от малинки. Она ожидает I2S на определенных ногах, а именно 12, 35, 40, с соответствующим смыслом сигналов на них.
На репке тоже какие-то выводы процессора подключены к ногам на 40-ножечном разъеме.
Но эти ноги по документации на процессор должны быть другими.
Возможно, кто-то ошибся: нумерация ног 40-ножечного разъема в описании на сайте репки. Или документация на процессор H5 (например, в устройстве стоит более поздняя версия, а у меня документация от версии 1.0). Или есть возможность в самом устройстве перебросить функциональность с выводов PA18..PA20 на ноги 12, 35, 40. Это делается при помощи мультиплексора. Есть таковой в репке?
Короче, практика -- критерий истины. Осциллограф.
 
"Осциллограф для начала, потом -- логический анализатор."
Я думал, что есть какая-то софтовая утилита для i2s, которая позволяет послать определенный сигнал, а потом посмотреть, где он идет. Вариант с покупкой дополнительного оборудования для одноразовой цели для проверки гипотезы, не наврал ли производитель в своих спецификациях, не самое рациональное вложение средств и времени. К тому же для того, чтобы проверить, передаются ли данные или нет, нужны корректно работающие драйвера. А их нет.

"те же самые как и где?"
Как и на Raspberry Pi. Шапка работает на Raspberry Pi, а не на Orange Pi. И совместимость для Репки заявлена с Raspberry Pi, а не с Orange Pi: "предназначен в качестве полноценной альтернативы Raspberry Pi, выполнен в полностью идентичном форм-факторе, включая габаритные размеры, размеры и расположение основных интерфейсов, места и размеры отверстий для крепления, распиновку GPIO-разъема". Поэтому гораздо разумнее предположить, что распиновка на официальном сайте составлена корректно. И неважно, что на Orange Pi предыдущей версии она другая. Совместимость с Orange Pi никто не заявлял, несмотря на тот же процессор. Косвенно совместимость распиновки с шапкой подтверждает тот факт, что без прошивки i2s звуковая карта не определяется вообще, а с прошивкой определяется. И даже звуковой сервер поднимается без ошибок. А вот за настройки звуковой карты и собственно сигнал отвечают драйвера, которых под Репку нет. А есть они только под Малинку. Отсюда и первоначальный вопрос.
 
Итак.
На малинке процессор BCM2837, у него какой-то адаптер I2S, и в системе какой-то драйвер для этого железа.
На репке процессор H5, и у него другой адаптер I2S, а в системе нет драйвера для него.
Топикстартер не готов проверять работоспособность путем просмотра осциллограмм. Хотя заявляет, что
> с включенной прошивкой i2s карта определяется и в alsa, и в pulseaudio.
но почему-то
> звука нет. Также как и модулей,
если карта определилась системой, может быть, другие модули и не нужны?
В /dev/ есть файл, соответствующий звуковому устройству?
 
Конечно, файл устройства есть. Иначе бы в alsa и pulseaudio устройства бы не было

А драйвера не какого-то не хватает, а конкретно этого:
И родственных ему
 
Так, кое-что прояснилось. На какой системе вы пытаетесь завести звук на репке?
 
К сожалению, у меня с репкой ОС как-то не сложилось. Не стартует. Возможно, я даже напишу статью с обзором, где поделюсь статистикой по всем объявленным операционным системам, вернее, сборкам.
То есть, я оперативно не смогу помочь. Но вопросы контрольные позадаю.
там исходники или хедеры ядра для того ядра, которое грузится, есть?
 
Исходники я не нашел, заголовки можно установить. ОС не проблема сменить. Но проблема в том, что указанный драйвер есть только в ветке Raspberry, в Mainline их нет. То есть требуется не просто сборка ядра, а нужно тянуть драйвера из ветки Малинки
 
Ну так будем тянуть?
Правда, я не совсем понимаю, как потом прикручивать этот скомпиленный модуль.
 
Модуль можно попробовать просто положить в /usr/lib/modules/...
А компилировать то его как?
 
Есть сборочные скрипты, т.е. берем исходник модуля (просто копируем из дерева исходников малинки нужный файл), добавляем к нему эти скрипты, запускаем -- модуль собирается (появляется hifiberry_dacplus.ko). Но дальше полный туман, потому что даже если установить этот модуль, вовсе не факт, что он сделает всё как нужно. Я хотел посмотреть, как это сделано на малинке, но что-то малинка у меня отказалась загружаться. Надо сидеть, разбираться с исходниками, как потрошки этого модуля взаимодействуют с остальными частями ядра, относящимися к звуку. Но вот прямо сейчас у меня немного другие приоритеты.
И еще: модуль написан для малинки, он использует две ноги, одну для сброса шляпы, другую для мьюта.
На репке придется, наверное, на другие выводы их перенести. Я не смог выяснить, на какие ноги они подключены, это, скорее всего, в .dtb/.dts прописано.
 
Я правильно понимаю, что в самом простом случае достаточно просто положить в исходники ядра содержимое каталога bcm от малинки, включая Kconfig и Makefile?
А собирать как? Все ядро или можно как-то только один модуль собрать?
Исходя из заявленной совместимости с Raspberry для Репки, пины должны быть те же самые.
 
Исходя из заявленной совместимости с Raspberry для Репки, пины должны быть те же самые.

Это коммерция, не более. На 40-контактном разъеме пины питания на репке находятся в тех же местах, что и на малинке.
Пины земли -- аналогично. Ноги, предназначенные для gpio, будут gpio. Вот и вся совместимость.
Но можете попробовать задать этот вопрос представителям фирмы-изготовителя (https://repka-pi.ru/contacts)
На распиновке малинки пины обозначены как gpio XX, где XX -- какое-то число.
Как эти обозначения соотносятся с обозначениями на репке (PXnn, X -- бука, nn -- число): gpio0 это PA0. gpio31 это PA31. gpio32 это PB0.
и так далее.

Я правильно понимаю, что в самом простом случае достаточно просто положить в исходники ядра содержимое каталога bcm от малинки, включая Kconfig и Makefile?

Скорее всего, нет. Тут нужен специалист по ядру, конкретно -- человек, который понимает, в чем могут быть подводные камни при таком переносе.
На малинке модуль hifiberry_dacplus.c лезет напрямую в PCM512x, а будет ли на репке (H5) совместимость с PCM512x? Да, принципы одинаковы, а регистры? А порядок их заполнения?