Собираем u-boot 1.1.2

Понадобилось мне собрать u-boot для моей железки. По сути, это переразведённый и несколько модернизированный at91rm9200dk. Конфигурация такая:
- AT91RM9200CJ
- MT48LC16M16A2-75IT x2
- AT49BV642D-70TU
- RTL8201BL

И так, надо обеспечить поддержку 64Мб ОЗУ, новой микросхемы флэша, пришедшей на смену AT49BV6416, и микросхемы PHY.

1. Скачиваем u-boot-1.1.2 и патч.

2. Распаковываем

3. Настраиваем кросс-компиляцию. Приводим Makefile к такому виду:

export HOSTARCH
ARCH=arm
export ARCH


ifeq ($(ARCH),arm)
CROSS_COMPILE = /opt/arm/bin/arm-linux-

/opt/arm/bin/arm-linux- - это путь к моему тулчейну. не забудьте исправить на свой.

4. Конфигурируем исходники:
make at91rm9200dk_config


5. Поскольку флэш 642D от 6416 отличается незначительно, я просто исправил ID в файле include/flash.h
#define ATM_ID_BV6416 0x000001D6 /* 49BV642D ID */

Решение не очень красивое, но работает.

6. Удваиваем объем доступной ОЗУ. Правим файл include/configs/at91rm9200dk.h
#define PHYS_SDRAM_SIZE 0x4000000 /* 0x2000000 - 32 megs, 0x4000000 - 64 megs */


7. Интересный момент: в файле cpu/at91rm9200/config.mk указано, что этот процессор относится к arm7tdmi. Спорное утверждение. Мой конфиг выглядит так:

LATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float
PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4t -mtune=arm920t


8. На этом простая часть закончилась. Чтобы добавить поддержку PHY RTL8201BL нужно наложить соответствующий патч. Однако, он много чего меняет и я решил пойти обходным путём - добавить нужные изменения вручную. Имеет смысл разбить diff на отдельные файлы и убрать плюсики в первом столбце командой sed 's/^.//' oldfile > newfile.
- добавляем в дерево исходников u-boot файлы board/at91rm9200dk/rtl8201.c, include/rtl8201.h
- в файле board/at91rm9200dk/Makefile заменяем dm9161.o на rtl8201.o
- вносим 3 изменения в cpu/at91rm9200/at91rm9200_ether.c
- в файле include/configs/at91rm9200dk.h

#ifndef __CONFIG_H
#define __CONFIG_H
#define CONFIG_RM9200 /* for rtl8201 phy */


#define CONFIG_DRIVER_ETHER
#define CFG_PHY_MDI_ADDRESS 1
#define CONFIG_NET_RETRY_COUNT 20
#undef CONFIG_AT91C_USE_RMII


9. Собираем командой make, получаем u-boot.bin

10. Запускаем плату в режиме отладочной загрузки, загружаем loader.bin по протоколу X-modem. В ответ на предложение лоадера загрузить u-boot, отправляем по тому же X-modem'у собранный u-boot.bin.