Есть задача: Портировать актуальный 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?