AVNET EMBEDDED MSC SM2S-IMX8M Отладка порта UART для компьютеров на базе ARM с инструкциями модуля
Предисловие
Уведомление об авторских правах
Авторские права © 2023 Avnet Embedded GmbH. Все права защищены. Копирование этого документа, предоставление его другим лицам, а также использование или передача его содержания запрещены без специального разрешения Avnet Embedded/MSC Technologies.
ГмбХ. Нарушители несут ответственность за возмещение ущерба. Все права сохраняются в случае выдачи патента или регистрации полезной модели или конструкции.
Важная информация
Эта документация предназначена только для квалифицированной аудитории. Описанный здесь продукт не является продуктом для конечного пользователя. Он был разработан и изготовлен для дальнейшей переработки обученным персоналом.
Отказ от ответственности
Несмотря на то, что этот документ был составлен с особой тщательностью, никакие гарантии или ответственность за его правильность или пригодность для какой-либо конкретной цели не подразумеваются. Информация в этом документе предоставляется «как есть» и может быть изменена без предварительного уведомления.
Торговые марки
Все используемые названия продуктов, логотипы и товарные знаки являются собственностью соответствующих владельцев.
Общая информация
Объем
Этот документ применим ко всем встраиваемым компьютерам-на-модулях Avnet на базе процессоров NXP серий i.MX8 и i.MX9, например,
- SM2S-IMX8PLUS
- SM2S-IMX8M
- SM2S-IMX8МИНИ
- SM2S-IMX8NANO
- SM2S-IMX8 (QuadPlus/QuadMax)
- SM2S-IMX93
- OSM-SF-IMX91
- OSM-SF-IMX93
- OSM-MF-IMX8NANO
- OSM-MF-IMX8МИНИ
Этот список не претендует на исчерпывающий характер, тем более что могут быть выпущены новые платы, к которым могут применяться те же процедуры, в то время как этот документ не всегда может быть обновлен немедленно.
Пересмотры и модификации
Пересмотр | Дата | Комментарий | |
1.0 | 25.05.2023 | М. Кох | Первоначальная версия |
Как изменить порт отладки UART
Введение
Многие системы на базе ARM поставляются с последовательной консолью в качестве основного средства доступа для целей отладки и запуска системы. В зависимости от требований заказчика в таких системах часто возникает необходимость переключить порт отладки UART по умолчанию на другой последовательный порт. Под отладочным портом UART мы подразумеваем порт UART, который будет обеспечивать весь ввод/вывод U-Boot, вывод журнала загрузки ядра и оболочку ядра, в основном все соединения UART, которые можно увидеть в минимальном образе Yocto. Поскольку порт UART по умолчанию используется не только одним программным компонентом, а скорее многими компонентами, включая u-boot, прошивку atf, optee-os и само ядро, установка порта UART по умолчанию может быть сложной задачей, иview можно быстро потерять. В этом документе будут описаны все шаги, которые необходимо предпринять для достижения этой задачи. Для более простого объяснения этот документ был написан для процессора NXP i.MX8 MINI и mscldk, но его можно без особых усилий применить ко всем процессорам серий i.MX8 и i.MX9 и другим системам сборки.
Подготовка среды
Изменение порта UART для отладки по умолчанию потребует изменения кода в Yocto, и самый простой способ сделать это — использовать Yocto devtool для подготовки исходников для нас. Необходимо будет изменить следующие пакеты Yocto:
- u-boot-imx (виртуальный/загрузчик)
- Linux-IMX (виртуальный/ядро)
- атф-IMX
- optee-os (только если используется optee)
Исходники должны быть подготовлены с помощью devtool:
$ ./devtool изменить u-boot-imx
$ ./devtool изменить linux-imx
$ ./devtool изменить atf-imx
$ ./devtool изменить optee-os
Все исходники можно найти в каталоге «workspace».
Изменение кода
Изменение загрузчика
В загрузчике произойдет базовая инициализация UART, поэтому необходимо будет изменить мультиплексирование и базовый адрес порта UART. Вторая задача u-boot — передать аргументы загрузки ядру, и здесь необходимо будет изменить аргумент tty консоли. Инициализация и мультиплексирование UART происходят в самые ранние секунды.tage процесса загрузки в SPL. Исходный код можно найти в файле spl.c для конкретной платы. file.
Цель file: рабочая область/источники/u-boot-imx/board/msc/sm2s_imx8mm/spl.c
Откройте file и перейдите к функции init_ser0():
статическая пустота init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads (ser0_pads, ARRAY_SIZE (ser0_pads)); init_uart_clk (1);
}
Функция активирует часы для UART2(индекс 1 для физического UART 2).
Теперь, если мы хотим вместо этого использовать UART1, мы можем определить нашу собственную функцию init_ser1:
статическая пустота init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads (ser1_pads, ARRAY_SIZE (ser1_pads)); init_uart_clk (0);
}
Замените вызов функции init_ser0 на init_ser1() в функции board_early_init_f(). Далее мы замечаем, что структура ser1_pads не определена. Здесь необходимо будет знать о разводке UART1. На imx8mm UART1 можно подключить к контактам uart1 или к контактам sai2. Соответственно, ser1_pads можно определить как:
static iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_UART1_RXD_UART1_RX | DEFAULT_UART_PAD_CTRL, IMX8MM_PAD_UART1_TXD_UART1_TX | DEFAULT_UART_PAD_CTRL, НОЛЬ
};
Или же, используя sai2:
static iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_SAI2_RXFS_UART1_TX | DEFAULT_UART_PAD_CTRL, IMX8MM_PAD_SAI2_RXC_UART1_RX | DEFAULT_UART_PAD_CTRL NULL };
Теперь базовый адрес UART должен быть изменен, адрес определяется в конфигурации заголовка платы. file.
Цель file: рабочая область/источники/u-boot-imx/include/configs/msc_sm2s_imx8mm.h
Измените определение CONFIG_MXC_UART_BASE. Для UART1 это будет:
- // #define CONFIG_MXC_UART_BASE
- UART2_BASE_ADDR
- #define CONFIG_MXC_UART_BASE
- UART1_BASE_ADDR
Наконец, следует изменить аргумент ядра консоли. Значение можно найти в том же заголовке. file. Искать «console=ttymxc1…» и измените «ttymxc1» на «ttymxc0». Номер индекса соответствует индексу UART и всегда равен индексу UART минус 1. Таким образом, для UART 2 мы используем ttymxc1, для UART 3 — ttymxc2 и т.д.
Изменение доверенной прошивки ARM
Прошивка Arm Trusted Firmware (imx-atf) не имеет собственной процедуры инициализации UART, однако имеет жестко закодированный базовый адрес UART и полагается на правильную инициализацию UART из u-boot. Другая конфигурация базового адреса в u-boot и imx-atf, скорее всего, приведет к тому, что процессор застрянет в обработчике исключений, и на UART ничего не будет видно (похоже, что процессор зависает без видимой причины). При изменении порта UART это изменение должно произойти и в imx-atf! Изменение порта UART в imx-atf требует изменения базового адреса. Это значение установлено в файле Platform.mk. file процессора.
Цель file: рабочая область/источники/imx-atf/plat/imx/imx8m/imx8mm/platform.mk
Правильный базовый адрес UART можно найти в справочном руководстве imx8. В этом бывшемample мы меняем UART2 на UART1 на imx8mm:
# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000
Изменение optee-os
Операционная система Optee обычно загружается, когда в системе используется криптография модуля CAAM. Optee работает на тех же ядрах ARM Cortex-A53, но в другом, полностью независимом от ядра экземпляре. Optee также требует доступа к UART, и в данном случае это означает изменение базового адреса.
Цель file: рабочая область/источники/optee-os/core/arch/arm/plat-imx/conf.mk
Этот бывшийampФайл установит базовый адрес UART с UART2 на UART1:
#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE
Изменение ядра
Ядру потребуется лишь несколько модификаций дерева устройств, и только если UART еще не доступен в ядре. Во многих случаях никаких изменений вообще не требуется. Однако проверьте, существует ли экземпляр tty, который вы хотите использовать! Проверьте наличие tty с помощью команды оболочки:
$ ls /dev/ttymxc*
Если ttymxc уже доступен, никаких изменений не требуется. Для бывшегоample, для UART2 это будет /dev/ttymxc1. Как мы уже знаем, индекс tty всегда равен индексу физического UART минус 1. Если требуемый tty недоступен, следуйте обычной процедуре интеграции UART.
Сборка и тестирование
Для безопасного восстановления следует применить полную очистку:
$ ./bitbake –c cleanall u-boot-imx linux-imx imx-atf optee-os
Снова создайте образ с помощью команды сборки по умолчанию, напримерampль:
$ ./bitbake msc-image-base
В целях тестирования адаптер UART следует подключить к старому UART. На старом UART выхода больше быть не должно! Новый UART должен быть полностью функциональным, для этого проверьте соединение с помощью оболочки u-boot UART и консоли Linux.
Поддержка продукта
Инженеры и технические специалисты Avnet Embedded готовы оказать поддержку нашим клиентам в любое время. Прежде чем обращаться в службу технической поддержки Avnet Embedded, ознакомьтесь с соответствующими страницами нашего webсайт на
https://embedded.avnet.com/support/
для получения последней документации, драйверов и программного обеспечения.
Если предоставленная там информация не решает вашу проблему, обратитесь в нашу службу технической поддержки Avnet Embedded следующим образом:
Электронная почта: support.boards@avnet.eu
Телефон: +49 (0)8165 906-200
Документы/Ресурсы
![]() |
AVNET EMBEDDED MSC SM2S-IMX8M Отладочный порт UART Компьютеры на базе ARM на модуле [pdf] Инструкции MSC SM2S-IMX8M, MSC SM2S-IMX8M Отладочный порт UART для компьютеров на базе ARM на модуле, Порт отладки UART для компьютеров на базе ARM на модуле, Порт UART Компьютеры на базе ARM на модуле, Порт компьютеров на базе ARM на модуле, Компьютеры на базе ARM на модуле, Компьютеры на базе ARM на модуле, Компьютеры на модуле, Модуль |