загрузчик U-boot и сериальная отладка

встраиваемые модели

Модераторы: Olej, Sergej, vikos, dmitriev

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 09 июн 2018, 17:21

Вопросы того:
- как устроен и работает загрузчик U-boot
- как скомпилировать U-boot
- как поместить U-boot на SD-карточку для SoC
- как вести удалённую сериальную отладку U-boot, получать сообщения загрузчика

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 09 июн 2018, 17:30

Olej писал(а): - как устроен и работает загрузчик U-boot
Das U-Boot
Das U-Boot (англ. Universal bootloader — универсальный загрузчик, от нем. Das U-Boot — подводная лодка) — компьютерный загрузчик операционной системы, ориентированный на встроенные устройства архитектур MIPS, PowerPC, ARM и другие. Может быть установлен в загрузочную ПЗУ. Разработка ориентирована на Linux. Распространяется под лицензией GNU GPL.
Важность Das U-Boot в Embedded Linux систем достаточно лаконично изложена в книге Embedded Linux системы, Карим Ягмур. Текст о U-Boot начинается словами: «Хотя существует довольно много других загрузчиков, Das U-Boot, универсальный загрузчик, возможно, является самым богатым, самым гибким и наиболее активно развивающимся из загрузчиков с открытым исходным кодом».
Поддерживаемые файловые системы
Squashfs (Cramfs)
ext2
ext4
FAT
FDOS
JFFS2
ReiserFS
UBIFS
YAFFS2
ZFS

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 10 июн 2018, 13:08

По поводу U-boot для Orange Pi - очень полезные замечания, что их стоит скопировать на память:
u-boot. запросто и быстро компилируется на OPi
надо например мне включить в u-boot CONFIG_OLD_SUNXI_KERNEL_COMPAT=y

Код: Выделить всё

git clone http://git.denx.de/u-boot-sunxi.git
cd u-boot-sunxi
копирую туда .config моей платы,
затем:

Код: Выделить всё

make menuconfig
make -j4
пара минут и

Код: Выделить всё

dd if=/dev/zero of=/dev/mmcblk0 bs=1024 seek=544 count=128
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
Здесь, первая команда предназначена для очистки переменных окружения U-Boot, а вторая, – для записи начального SPL загрузчика и, непосредственно, U-Boot.
правда u-boot патчить перед сборкой надо, но для проверки сойдёт.
и да дебаг-консоль CH340/CH340G, с помощью неё можно подключится к serial console на плате, где будет выводиться информация, которую будет писать U-Boot, а потом и ядро если загрузиться.
А откуда вы взяли цифры длин и смещений?
цифры длин и смещений отсюда: https://github.com/linux-sunxi/u-boot-sunxi/wiki
И, наконец:
u-boot for Allwinner sunxi series of SoCs (A10, A13, A10s, and A20)
...
Storage map
How the SD-Card is used by u-boot-mmc, counted in 512B sectors / 1KB blocks:

sector start size
0 0 8KB Unused, available for partition table etc.
16 8 32KB Initial SPL loader
80 40 504KB u-boot (sector 64 / 32KB for 2013.07 and earlier)
1088 544 128KB environment
1344 672 128KB Falcon mode boot params
1600 800 ---- Falcon mode kernel start
2048 1024 - Free for partitions (higher if using Falcon boot)

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 10 июн 2018, 13:11

Для отладки U-boot (да и вообще отладки) используем UART отладочный выход, который есть даже на Orange Pi One (как младшей модели) ... но об этом часто не пишут.
Вот пишут: 5 Распиновка Orange Pi One & Lite
5.1 GPIO — 40 Выводов общего назначения
5.2 CSI — Разъем камеры
5.3 UART отладочный вывод
...
Изображение
1 GND
2 RX
3 TX
Просто эти 3 штырька торчат особняком, впритык к сетевому RG-45, не обозначены, и в большинстве описаний OPi One, почему то ???, вообще не упоминаются:
Изображение

Со стороны Armbian этот отладочный порт выглядит так:

Код: Выделить всё

root@orangepione:~# stty < /dev/ttyS0
speed 115200 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 10 июн 2018, 13:20

Olej писал(а):Для отладки U-boot (да и вообще отладки) используем UART отладочный выход,
А для подключения этого UART отладочного выхода к инструментальному (отладочному) компьютеру используем USB/UART конверторы:

Вот такой я нашёл/заказал вот такое чудо за 19,89 грн.
Адаптер USB COM RS232 TTL PL2303 Arduino
Изображение

P.S. Поражает размах воображения :lol: продавцов таких вот USB/UART конверторов - цены загадывают до 245 грн.

Но нашёл/заказал ещё и вот такой конвертер с кабелем (с конвертерами-платками я когда-то сталкивался, а вот такое чудо вижу впервые ... новинка?):
Изображение
Тоже можно найти по цене 45 грн. ... а можно и за 100 грн. :-o

P.S. Если кого смущают единицы измерения стоимости в грн., то умножте цифры на 2 и получите руб. ;-)

Со стороны инструментального компьютера (на Linux, разумеется) этот канал отображается как /dev/ttyUSB0 (или /dev/ttyUSB1 и т.д.).
И подключаемся к нему любой утилитой монитором сериального порта.

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 10 июн 2018, 13:36

Olej писал(а): Со стороны инструментального компьютера (на Linux, разумеется) этот канал отображается как /dev/ttyUSB0 (или /dev/ttyUSB1 и т.д.).
И подключаемся к нему любой утилитой монитором сериального порта.
Как работать с этим портом?
(даже не работать, собственно, а наблюдать ... потому что нас интересует односторонний приём)

1. Тот же многоликий и вездесущий putty (так любимый выньдаунами, потому что он у них единственный :lol: ), выбрав его режим serial.

2. Возможно даже так прокатит, учитывая интерес только к однонаправленному обмену (только чтение), от root, естественно:

Код: Выделить всё

# cat /dev/ttyUSB0
...
3. Советуют/используют при отладке такую утилиту на инструментальной машине как screen.
Да, есть такой пакет (практически в любом дистрибутиве) ... требует установки...

Код: Выделить всё

[olej@xenix My.pasport]$ yum list screen
Последняя проверка окончания срока действия метаданных: 6 days, 22:30:24 назад, Пт 01 июн 2018 18:04:24.
Имеющиеся пакеты
screen.x86_64                                            4.6.2-1.fc27                                            updates

[olej@xenix My.pasport]$ sudo yum install screen
[sudo] пароль для olej: 
Последняя проверка окончания срока действия метаданных: 1:14:34 назад, Пт 08 июн 2018 15:20:33.
Зависимости разрешены.
========================================================================================================================
 Пакет                     Архитектура               Версия                            Репозиторий                Размер
========================================================================================================================
Установка:
 screen                    x86_64                    4.6.2-1.fc27                      updates                    577 k

Результат транзакции
========================================================================================================================
Установка  1 Пакет

Объем загрузки: 577 k
Объем изменений: 942 k
Продолжить? [д/Н]: y
Загрузка пакетов:
screen-4.6.2-1.fc27.x86_64.rpm                                                          1.2 MB/s | 577 kB     00:00    
------------------------------------------------------------------------------------------------------------------------
Общий размер                                                                            441 kB/s | 577 kB     00:01     
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
  Подготовка       :                                                                                                1/1 
  Запуск скриптлета: screen-4.6.2-1.fc27.x86_64                                                                     1/1 
  Установка        : screen-4.6.2-1.fc27.x86_64                                                                     1/1 
  Запуск скриптлета: screen-4.6.2-1.fc27.x86_64                                                                     1/1 
Running as unit: run-rb1f9ec94b5154fbebb2364b1c22b55ab.service
  Проверка         : screen-4.6.2-1.fc27.x86_64                                                                     1/1 

Установлено:
  screen.x86_64 4.6.2-1.fc27                                                                                            

Выполнено!
Дальше, как утверждается:

Код: Выделить всё

# screen /dev/ttyUSB0 115200
...
Как-то так ... или на любой другой скорости, как хотите.

4. Наконец ... общеизвестный и добротный:
Я пользуюсь minicom

Код: Выделить всё

# minicom -D /dev/ttyUSB0
не забудьте добавить себя в группу dialout или др. кому будут принадлежать /dev/ttyS0 .. /dev/ttyUSB0 в вашем дистрибе, ну или от рута или через sudo.

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 12 июн 2018, 13:31

Olej писал(а): Но нашёл/заказал ещё и вот такой конвертер с кабелем (с конвертерами-платками я когда-то сталкивался, а вот такое чудо вижу впервые ... новинка?):
Сегодня получил это чудо.
Единственный минус - никакого сопроводительного описания на него, конечно, нет, а его 4 шнурка UART - никак не подписаны, естественно. :-?
Называется это чудо у продавцов так: "USB-UART конвертер PL2303HX/CH340G в корпусе с кабелем", а распиновка по цвету проводов (если не врут ;-) ) - так:
Вложения
62957-1-sht-pl2303-pl2303hx-usb-k-uart-ttl-kabel-modul-4-p-4-pin-rs232-konverter.jpg

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 12 июн 2018, 14:46

Olej писал(а):
5.3 UART отладочный вывод
...
Изображение
1 GND
2 RX
3 TX
Проверяю подключение соединения со стороны UART (SoC)...
И, конечно, как всегда - для начала ошибся.
Потому как:

1. Картинка выше - "вывернута наизнанку", этот разъём UART и увидеть нельзя в такой ориентации (слева-направо), его закрывает RG-45 ... или только можно, но с тыльной стороны, со стороны печатной платы. А нам нужны штырьки для подключения, которые слева-направо выглядят так: TX - RX - GND - так как на 2-й картинке:
Изображение

2. Но на этой 2-й картинке штырьки подписаны с точки зрения функционального назначения SoC. А нам кабель UART нужно подключить перекрёстно, поменяв TX - RX относительно того, что на картинке, с точностью до наоборот...

3. В итоге, подключение штырьков - слева-направо:
3 - белый (со стороны края платы, TX SoC)
2 - зелёный
1 - чёрный

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 12 июн 2018, 14:57

Olej писал(а): 3. В итоге, подключение штырьков - слева-направо:
3 - белый (со стороны края платы, TX SoC)
2 - зелёный
1 - чёрный
Теперь можно проверять соединение...

Со стороны Orange Pi:

Код: Выделить всё

root@orangepione:~# stty < /dev/ttyS0
speed 115200 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel iutf8
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
Со стороны десктопа Linux:

Код: Выделить всё

nvidia ~ # stty -F/dev/ttyUSB0 -a
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Подгоняем скорость:

Код: Выделить всё

nvidia ~ # stty -F/dev/ttyUSB0 115200

nvidia ~ # stty -F/dev/ttyUSB0 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
Подгонять скорость нужно при каждом размыкании-соединении кабеля, т.к. устройство /dev/ttyUSB0 создаётся заново со своими дефаултными характеристиками.

Передача со стороны десктопа:

Код: Выделить всё

nvidia ~ # echo 12345 > /dev/ttyUSB0
Со стороны Orange Pi видим:

Код: Выделить всё

root@orangepione:~# cat /dev/ttyS0
12345
^C
Всё путём ;-) - соединение ОК.

Аватара пользователя
Olej
Писатель
Сообщения: 12655
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: загрузчик U-boot и сериальная отладка

Непрочитанное сообщение Olej » 12 июн 2018, 16:11

Olej писал(а):Всё путём ;-) - соединение ОК.
Для работы с сериальной консолью можно использовать любой монитор последовательной линии ... а их миллион.
Если не установлен - можете установить дополнительно:

Код: Выделить всё

olej@nvidia ~/2018_WORK/Bilety/06.14_malevich $ apt install minicom
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Рекомендуемые пакеты:
  lrzsz
НОВЫЕ пакеты, которые будут установлены:
  minicom
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 232 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 928 kB.
Пол:1 http://archive.ubuntu.com/ubuntu xenial/universe amd64 minicom amd64 2.7-1build1 [232 kB]
Получено 232 kБ за 0с (328 kБ/c)
Выбор ранее не выбранного пакета minicom.
(Чтение базы данных … на данный момент установлено 468685 файлов и каталогов.)
Подготовка к распаковке …/minicom_2.7-1build1_amd64.deb …
Распаковывается minicom (2.7-1build1) …
Обрабатываются триггеры для man-db (2.7.5-1) …
Настраивается пакет minicom (2.7-1build1) …
Или / И :D

Код: Выделить всё

olej@nvidia ~/2018_WORK/Bilety/06.14_malevich $ apt install screen
[sudo] пароль для olej:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
  iselect | screenie | byobu ncurses-term
НОВЫЕ пакеты, которые будут установлены:
  screen
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 560 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 972 kB.
Пол:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 screen amd64 4.3.1-2build1 [560 kB]
Получено 560 kБ за 0с (830 kБ/c)
Выбор ранее не выбранного пакета screen.
(Чтение базы данных … на данный момент установлено 468626 файлов и каталогов.)
Подготовка к распаковке …/screen_4.3.1-2build1_amd64.deb …
Распаковывается screen (4.3.1-2build1) …
Обрабатываются триггеры для systemd (229-4ubuntu21.2) …
Обрабатываются триггеры для ureadahead (0.100.0-19) …
ureadahead will be reprofiled on next reboot
Обрабатываются триггеры для install-info (6.1.0.dfsg.1-5) …
Обрабатываются триггеры для man-db (2.7.5-1) …
Настраивается пакет screen (4.3.1-2build1) …
Обрабатываются триггеры для systemd (229-4ubuntu21.2) …
Обрабатываются триггеры для ureadahead (0.100.0-19) …
И др.

Ответить

Вернуться в «Одноплатные компьютеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость