LINUX.ORG.RU

U-boot для Amlogic s922x, скомпилить смог, но не работает USB и EMMC

 ,


0

1

Собирал по этому гайду:ю-бут для амлогик

При попытке в консоли юбута выбрать emmc говорить:

unable to select a mode : -5

Усб при команде

usb start
при конфиге на усб 3.0 выполняется, но ни одно устройство не определяет. Если выбрать усб 2.0 в конфигураторе, то ошибка при инициализации усб.

Перепробовал всё, что нашёл в конфигураторе про усб и emmc, но результата нет.

Кто опытный?

★★★★★

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

Ну для начала может поискать готовый бинарник, например, выдрать из официальной прошивки?

Там может быть как-то конфиг можно вытащить или найти исходники и сравнить с той же ванильной веткой, увидеть патчи, применить к современному U-boot, может просто у тебя борда не поддерживается..

Xenius ★★★★★
()

А есть полная уверенность, что плата изначально исправна? Если нет, то надо сначала проверить на заводской прошивке (скачать с оф. сайта, спросить на форуме сообщества).

Затем, можно запостить уже твою сборку в сообщество, чтобы тамошние её потестировали.

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

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

Я не знаю способов по декомпиляции бутлоадера. Конфиги не распространяют. Но точно скажу, что исходники у них свои, у меня в исходниках юбута нет команд amlmmc, а в родном бутлоадере есть.

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

Значит нужно лезть в исходники - разбираться с кодами ошибок.

Судя по инструкции, убут используется upstream. Значит конфигурация железа скорее всего описана в device tree. Нужно поглядеть DTS на предмет странностей. Может там usb вообще не описан.

Далее надо понять, какой именно исходник содержит драйверы для usb и mmc. Это можно узнать по параметру «compatible» в соответствующем узле.

Тогда можно будет понять, какие функции драйвера отдают ошибку в cli, и примерно прикинуть, почему.

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

Да, я писал им, но они молчат

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

Есть ещё странная ветка от амлогика, но там один китайский чёрт знает, как её собирать

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

Ну тут я имел ввиду следующее.

Вот ты уже знаешь по инструкции, что для сборки используется конф файл beelink-gtking_defconfig

В нём ты видишь, что используется DTS под именем meson-g12b-gtking.

Находишь этот DTS: https://github.com/u-boot/u-boot/blob/master/arch/arm/dts/meson-g12b-gtking.dts

В нём не видишь ничего особо интересного в плане настроек, но видишь такое:

#include "meson-g12b-w400.dtsi"

Это значит, что данный DTS использует какие-то общие для серии настройки. Находишь этот .dtsi. В нём тоже мало настроек, но есть следующий .dtsi, в котором ещё один.

В итоге приходишь на верхний DTSI, в котором объявлено всё железо данного SoC: https://github.com/u-boot/u-boot/blob/master/arch/arm/dts/meson-g12-common.dtsi

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

В этом верхнем DTSI есть несколько узлов:

В них ты видишь атрибуты «compatible» со значениями «amlogic,g12a-usb2-phy» и «amlogic,meson-g12a-usb», «snps,dwc2» соответственно. В исходниках делаешь:

> git grep amlogic,g12a-usb3-pcie-phy
...
drivers/phy/meson-g12a-usb3-pcie.c:     { .compatible = "amlogic,g12a-usb3-pcie-phy" },

и

> git grep amlogic,meson-g12a-usb-ctrl
...
drivers/usb/dwc3/dwc3-meson-g12a.c:     { .compatible = "amlogic,meson-g12a-usb-ctrl" }

Понимаешь, что в этих файлах и находится код, отвечающий за данные устройства. Смотришь, что есть в upstream и в ветке от amlogic в этих файлах.

Аналогичные действия для USB 3 и eMMC/SD.

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

Да особо не за что. Это только небольшая часть того, что может понадобиться сделать.

Например, для eMMC и его кода возврата -5 ещё может нужно будет следующее:

  • Идёшь в исходник u-boot’а, где реализованы команды CLI для eMMC
  • Там находишь реализацию того, что вводил, и смотришь, где именно оно тебе вернуло -5
  • Смотришь, какая это сишная ф-я. Внутри неё в итоге проходишь до того места, где подсистема eMMC вызвала callback из конкретного драйвера amlogic.
  • Вот тут самое неприятное: надо найти, где этот callback задаётся. Если повезёт, и ты уже знаешь, что за исходник реализует драйвер eMMC amlogic, то можешь сразу пойти туда и поискать там ту структуру, в которой хранятся callback’и и соответствующие им ф-и в драйвере. Если не повезёт, то придётся повозиться ещё и с поиском правильной задаваемой структуры куря «compatible» и defconfig.

И вот уже тут может получиться такой провал: ты найдёшь, какой этап настройки железа возвращает ошибку, но не поймёшь, почему. Например, если в DTS не правильно указаны источники тактирования для блока SDIO, который рулит eMMC. Вот тут я уже не знаю, кто кроме авторов платы может помочь. Если только выдрать рабочий DTB из их убута и декомпилировать его в текст при помощи утилиты dtc.

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

Случайно, а не из исходников юбута drivers/usb/host или /drivers/mmc оно берёт драйвера, по которым будет работать загрузившийся потом юбут?

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

Ну. Сишные файлы из этих директорий будут вкомпилированы в итоговый бинарник u-boot в зависимости от параметров в конфигурационном файле. Если ты об этом.

apt_install_lrzsz ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.