LINUX.ORG.RU

Запуск Linux c Micro-SD на плате ST

 , ,


0

2

Здравствуйте, хотел бы попросить помощи с запуском linux с Micro-SD на отладочной плате ST. Что у меня получилось: Линукс получается грузить через Debug JTAG, но операционная система заливается в оперативную память и этот вариант, особо не подходит, так после выключения питания, все нужно делать заново. По документации предполагается возможность загрузки MicroSD; Чтобы собрать линукс, u-boot и rootfs.ext2(4) используется builtroot 2017 года,u-boot +- такого же года, Получилось через Debug JTAG прокинуть u-boot, отсюда я сделал вывод ,что собирался он правильно, тогда почему он не запускался с SD, я так не понимал, если брать аналгии ST, то там используется SPL, (так как при загрузки через JTAG возможно была инициализация всей периферии т.д.) , но его у меня при сборки не было. Попытки прочитать SD в u-boot, было удачно и одновременно неудачным, так как mmc start не прокатывало, а mmc dev 0 срабатывало, но нельзя было выбрать раздел, после сохранения загрузки с SD командой setenv, выводило запись: «Start Linux…» зависало. В общем, если есть какие-то идеи, буду рад выслушать, так как у меня их уже не осталось.Спасибо.

Ищи инструкцию на свою плату. Там должен быть пошаговый алгоритм, как все скомпелять и вкатить на плату. Может там джамперы надо правильно расставить и т.д.

отладочной плате ST.

Вот как люди должны понять, что это за плата? ST - это название компании? Она этих плат тысячи делает.

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

Вот как люди должны понять, что это за плата?

Виноват, забыл написать Family -> Stih(sthid)390 Model -> stid337 Board -> b2232 Процессор -> Двухъядерный прикладной процессор ARM® Cortex®-A9 ОЗУ -> 16-разрядный интерфейс DDR3/3L, работающий на частоте до 1066 МГц (DDR3-2133)

Там должен быть пошаговый алгоритм, как все скомпелять и вкатить на плату

Если бы было такое в документации, я бы не писал бы на форм. В документации есть описание как заливать временный образ через JTAG.

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

Странно, что ст это не выложили, у них обычно очень хорошая документация (хотя я именно линукс у них ни на чем не запускал).

Ну тогда TRM читай в части загрузки и изобретай все сам. Начни с bootrom, там должно быть описано, что и в какой последовательности он ищет (на каких накопителях и в каком виде). Ну типа ищет первую mmc и на нулевом адресе ищет SPL. Или ищет файловую систему FAT16 и там ищет файл MLO (это TI так называет SPL, в качестве примера). Ну и т.д. Найди какой-нидь популярный арм на а9 (вроде цинки на таком ядре делают) и смотри как они все организовывают. Попробуй повторить у себя с учетом своей специфики (типы и размер памяти и т.д.).

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

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

Ну тогда TRM читай в части загрузки и изобретай все сам. Начни с bootrom, там должно быть описано, что и в какой последовательности он ищет (на каких накопителях и в каком виде). Ну типа ищет первую mmc и на нулевом адресе ищет SPL. Или ищет файловую систему FAT16 и там ищет файл MLO (это TI так называет SPL, в качестве примера). Ну и т.д.

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

Такое ощущение ,что нужно что-то включать в конфигах buildroo,uboot, вопрос,что.

Почитай вообще про загрузку систем от включения до запуска ядра линукса

Читал, и схемы рисовал, но я даже близко не подходил к запуску ядра через microSD, хотя бы строчку boot увидеть, но ее нет. Никакого ответа от платы по UART не приходит.

Po5aXal
() автор топика

не знаю про специфику ST, но я встречала контроллеры, которые с flash читали бинари каким-то особым ракообразным способом. например, в Altera надо было менять местами старшие и младшие слова в образе именно при записи на flash. я даже написала утильку для записи образов. а при загрузке через JTAG всё проходило без этого цирка. они это сделали, чтобы люди покупали специальные чипы флэша от Альтеры, там это было встроенной фичей, но они были дороже обычного флэша в несколько раз. может, и тут такие же грабли? обычно для таких целей есть прошивалки для разных flash'ей.

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

надо было менять местами старшие и младшие слова в образе именно при записи на flash

То есть, название u-boot.bin то надо было в toob-u.bin, ну и наркомания

люди покупали специальные чипы флэша

Было такое предположение, так как ST любил всякую свою хрень подсовывать, для работы с их платами

обычно для таких целей есть прошивалки для разных flash’ей

Это вы про SD-Card или SPI flash?

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

не название, а саму прошивку, которая грузилась с обычного флэша, надо было перед загрузкой сперва обработать утилькой :) причём мы напоролись на это, когда уже были распаяны платы для проекта. в тестовых платах был альтеровский флэш, а на серийных решили сэкономить и поставили обычный. нормальные чипы, никакой специфики. но с них вдруг прошивка не стартовала. и я разбиралась, почему. это была недокументированная фича Альтеры. я поняла это, когда посмотрела, что грузится в память. написала утильку по перелопачиванию слов в прошивке - всё заработало.

Это вы про SD-Card или SPI flash?

ну, в случае, с которым мы столкнулись, это был flash на чипах (SPI). SD-карта тоже флэш, вот я и подумала, что вдруг там что-нибудь такое же.

если есть возможность посмотреть, что загрузилось при попытке чтения с флэша, может, это поможет понять, почему не стартует.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 3)
Ответ на: комментарий от Po5aXal

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

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

если есть возможность посмотреть, что загрузилось при попытке чтения с флэша, может, это поможет понять, почему не стартует.

Как это посмотреть,что он считывает с SD?

Я могу предоставить логи, как я через JTAG прокидываю

https://github.com/Po5aXal/LogsGNU_UART

Лог, установка Линукса как заявлено производителем: LogGNU_1.txt,LogUART_1.txt

Лог, где я смог прокинуть uboot: LogGNU_2.txt,LogUART_2.txt

Используется вот такой JTAG от ST https://data.electronshik.ru/z/Datasheet/D/DB%20STMC2-40-200.pdf

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

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

возможно, вот это наведёт на какие-то идеи (просто поиск в интернете, я эти платы не юзала): https://community.st.com/t5/stm32-mpus-products-and-hardware/boot-a-custom-bo...

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

нет! это не LE/BE. потому что переставлялись только слова, внезапно. байты - нет. при том, что сами FPGA вообще имели ширину 32 бита. скорее всего, это просто была уловка для впаривания их частных решений с чипами для загрузки, насколько я понимаю. это не было нигде документировано и на мои вопросы по этому поводу они мне просто не ответили. с обычным флэшем все прочие процы и PLD нормально работали. и те же прошивки (сгенерированные их фирменным Квартусом, не чем попало) без всяких приседаний заливались через JTAG. это была странная и нездоровая фигня. я за много лет работы с железом такое видела только с Альтерами. это были 2-е и 3-е Циклоны.

и да, вы серьёзно мне решили рассказать про LE/BE? я как бы более 25 лет работаю программистом и из них лет 10 в разработке железа. но, кстати, Моторолы мне ни разу не попадались в рабочих проектах. как-то не популярны они у нас, или вообще.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 4)
Ответ на: комментарий от yars068

хотя про LE/BE был забавный случай. я тогда ещё работала в офисе и услышала, как соратники о чём-то бурно спорят. выяснилось, что они написали утильку для приёма данных из сети для одного проекта и утилька у них почему-то не работает. как они мне сказали «данные принимаются неправильно». я посмотрела, увидела там обычный сетевой порядок байтов и сказала им, что, типа, надо приводить данные в порядок специальными функциями. так вот они мне не поверили! мне пришлось им долго доказывать, что это так. они про это никогда не слышали. и это были не студенты, это были взрослые мужики лет по 30, которые не первый год работали. правда, работали в чисто абстрактном софте верхнего уровня, но всё же. иногда бывают странные открытия.

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

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

Iron_Bug ★★★★★
()

После сборки файла u-boot и u-boot.bin, если их проверить командой file u-boot и file u-boot.bin, получаем следующий текс

file u-boot
u-boot: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /usr/lib/ld.so.1, with debug_info, not stripped

u-boot.bin: data

В этом может быть ошибка, что не идет запуск u-boot с флешки или нет?

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

При чём тут файловая система? Твой процессор при старте считывает какие-то байты с SD-карты по определённым адресам и передаёт на них управление, если по-простому. По этим адресам должен быть прошит u-boot (или любой другой код, но тебя, видимо, интересует именно он). u-boot должен каким-то образом найти ядро линукса (например тоже считав его с SD-карты по каким-то другим адресам, а может быть уже примонтировав раздел и считав ядро, как файл) и передать управление ядру, а ядро уже точно будет монтировать разделы и передавать управление init-у.

Ещё эту всю схему усложняют аналоги secure boot и тренировка DDR-памяти, но в целом концептуально ничего не меняется.

В общем это далеко не то, как грузится линукс на UEFI компьютере, тут всё примитивней и одновременно запутанней. Если под твой SoC нет чёткой 100% повторяемой инструкции, то тебе надо погружаться в эту тему глубоко, с отладчиком, компилируя исходники uboot-а и линукса и отлаживая их и тд и тп. Если ты этим раньше не занимался, готовься потратить год-другой на разборки со всем этим.

Собственно поэтому лучше выбрать нормальный SoC/SoM от хорошего производителя, который всё это за тебя сделал и даст тебе нормальные инструкции и техподдержку. И, что немаловажно, будет обновлять это для актуальных версий. buildroot 2017 года это несерьёзно.

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

При чём тут файловая система?

В данный момент она не причем тут, сейчас цель,чтобы u-boot увиделся через флешку, или хотя бы ответ пришел ,что он прочитался.

Если под твой SoC нет чёткой 100% повторяемой инструкции, то тебе надо погружаться в эту тему глубоко, с отладчиком, компилируя исходники uboot-а

Если у меня была документация, как ставить SoC через SD, я бы не писал бы сюда, но так документации нет, я и написал сюда, чтобы мне подсказали, где что посмотреть, свой опыт показали, аналоги привели и т.д. То есть , если ты нашел какую-то плату, 10 лет давности, а по ней, нет документации, ты просто забьешь на попытки ее оживить? С каким мне отладчики погружаться через JTAG? Я компилирую u-boot, записываю на его SD, пока безрезультатно.

На данный момент, перечитав документацию на похожие SoC, требуется SPL,которого у меня нет, а собрать его не получается, так как это сделано либо специально,либо нужно,что-то в исходниках менять,и поэтому копаю в этой сторону.

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

по идее SPL должен у тебя сгенериться вместе с обычным образом U-boot.

может, вот это поможет (ST пишет про настройку U-boot): https://wiki.st.com/stm32mpu/index.php?title=U-Boot_overview&oldid=66680#...

наверняка у них не так много разнообразия и сделано одинаково для разных SoC.

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

Вообще, почитал эту документацию, подключал конфиги в buildroot, не помогло, скачал другою версию uboot того же uода, при выборе stm, так же не было пункта выбора SPL, так не собирался. Решил откатиться к прошивке NAND через uboot, чтобы от туда стартовать, но пока безрезультатно.

Po5aXal
() автор топика