Как лучше портировать U-boot на ASR1803?

Ссылка скопирована
1 ответ

По вводным: есть задача: Портировать актуальный U-boot на камень ASR1803 (он же PXA1826). Минимальная задача попасть в консоль U-boot.

Характеристики камня:

  • Сейчас ситуация такая: ядро - Cortex-7A (есть еще второе Cortex-5R, но это не нужно при загрузки. Грузимся мы с Cortex-7A).
  • По вводным: flash - 256M, база 0x8000_0000
  • По вводным: dDR - 128M, база 0x0000_0000
  • По вводным: uART - база 0xD401_7000, тактирование 26MHz

Сейчас ситуация такая: до старта U-boot грузиться Boot-ROM, после чего грузиться загрузчик первого уровня. Загрузчик первого уровня инициализирует FLASH, DDR и UART (ну и по мелочи). Так что в U-boot по идее это можно не трогать. Загрузчик 1 уровня так же копирует U-boot в DDR по адресу 0x0030_8000. И U-boot стартует уже из DDR.

Что было сделано:
Клонирован репозиторийhttps://github.com/u-boot/u-boot.
По вводным: добавлен файл board/asr/asr1803/asr1803.c:

#include <asm/global_data.h> DECLARE_GLOBAL_DATA_PTR; int dram_init(void) { gd->ram_size = 0x08000000; return 0; } int board_init(void) { return 0; }

По вводным: добавлен файл board/asr/asr1803/Kconfig:

if TARGET_ASR1803 config SYS_BOARD default "asr1803" config SYS_VENDOR default "asr" config SYS_CONFIG_NAME default "asr1803" endif

По вводным: добавлен файл board/asr/asr1803/Makefile:
obj-y += asr1803.o

По вводным: добавлен файл configs/asr1803_defconfig:

CONFIG_ARM=y CONFIG_ARCH_NZAS=y CONFIG_TARGET_ASR1803=y CONFIG_SYS_LOAD_ADDR=0x00308000 CONFIG_TEXT_BASE=0x00308000 CONFIG_SYS_MALLOC_F_LEN=0x4000 CONFIG_OF_CONTROL=y CONFIG_DEFAULT_DEVICE_TREE="asr1803-p403" CONFIG_DM=y CONFIG_DM_SERIAL=y CONFIG_DEBUG_UART=y CONFIG_DEBUG_UART_NS16550=y CONFIG_DEBUG_UART_BASE=0xD4017000 CONFIG_DEBUG_UART_CLOCK=26000000 CONFIG_DEBUG_UART_SHIFT=2 CONFIG_DEBUG_UART_ANNOUNCE=y CONFIG_BAUDRATE=115200 CONFIG_CONSOLE_NORMAL=y CONFIG_LOGLEVEL=7 CONFIG_SERIAL=y CONFIG_SERIAL_NS16550=y CONFIG_SYS_NS16550=y CONFIG_SYS_NS16550_COM1=0xD4017000 CONFIG_SYS_NS16550_CLK=26000000 CONFIG_SYS_NS16550_REG_SIZE=-4 CONFIG_TIMER=y

По вводным: добавлен файл arch/arm/mach-nzas/Kconfig:

config ARCH_NZAS bool "NZAS SoCs" depends on ARM select CPU_V7A config TARGET_ASR1803 bool "ASR1803 board" config SYS_VENDOR default "asr" config SYS_BOARD default "asr1803" config SYS_CONFIG_NAME default "asr1803" config SYS_SOC default "nzas"

По вводным: в файл arch/arm/Kconfig добавлено:

+source "arch/arm/mach-nzas/Kconfig" +source "board/asr/asr1803/Kconfig"

По вводным: в файл arch/arm/Makefile добавлено:
+machine-$(CONFIG_ARCH_NZAS) += nzas

Собираю:

make -j4 V=1 CROSS_COMPILE=arm-none-eabi- asr1803_defconfig make -j4 V=1 CROSS_COMPILE=arm-none-eabi-

По вводным: nZAS - кодовое название SOC - ASR1803

Основная проблема:
Сейчас ситуация такая: сборка, с упорством пьяного, идет под ARM64 (armv8), а мне нужно armv7 (ARM32). Ну и соответственно ничего не запускается.

Нужно понять: может кто поделиться опытом портирования U-Boot?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Портирование U-Boot на ASR1803 лучше начинать не с написания кода, а со сбора исходных данных по SoC и плате. Без datasheet, схемы питания, памяти, UART, flash и boot strap-пинов портирование превращается в угадывание. Для U-Boot критично понять, как процессор стартует, где находится ROM bootloader и какую память нужно инициализировать первой.

Минимальный план:

  1. найти vendor BSP или GPL-исходники для похожей платы на ASR1803;
  2. получить serial console и лог штатной загрузки;
  3. снять карту памяти: DDR, SPI NAND/NOR/eMMC;
  4. понять формат загрузочного образа, который принимает BootROM;
  5. найти ближайшую поддержку SoC/архитектуры в mainline U-Boot.

Если есть vendor U-Boot, сначала соберите его без изменений. Потом уже переносите board files в более новую версию. Если нет, ищите близкие SoC от того же производителя.

Диагностика начинается с UART:

screen /dev/ttyUSB0 115200
# или
picocom -b 115200 /dev/ttyUSB0

screen /dev/ttyUSB0 115200 # или picocom -b 115200 /dev/ttyUSB0

Дальше смотрите, где падает загрузка: SPL, DDR init, relocation, flash driver, device tree. Для новых плат чаще всего самая сложная часть — DDR init и pinmux. Без vendor-кода это трудно восстановить.

Итог: рабочий путь — найти BSP/исходники похожей платы, поднять UART, собрать существующий загрузчик, затем постепенно переносить board support. С нуля без документации ASR1803 портировать U-Boot практически нереалистично.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно