Сброка toolchain для ARM и запуск Linux на AT91RM9200.
/* * Serial port configuration. * 0 .. 3 = USART0 .. USART3 * 4 = DBGU */ static struct at91_uart_config __initdata dk_uart_config = { .console_tty = 0, /* ttyS0 */ .nr_tty = 2, .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ };
Если требуется изменить параметры инициализации портов (например включить режим RS485) - смотрим в arch/arm/mach-at91rm9200/devices.c. Там находится код инициализации уартов.
2. В файле arch/arm/mach-at91rm9200/board-dk.c надо поправить строчку описания машины. Иначе на EVM9200 не запустится и будет орать о неверном коде платформы: поменять:
MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
на:
MACHINE_START(AT91RM9200, "uCrouter EVM9200")
3. Если хочется использовать две Dataflash на плате - то первую вешаем на CS0 (с нее будет идти загрузка). Вторую вешаем на CS3. Для поддержки второй флэшки надо включить поддержку "Dataflash Card" в ядре.
Загрузка из Dataflash (вообще без паралельной Flash)
Для загрузки из Dataflash я взял Atmel-овский romboot. От оригинального отличается лишь правленными настройками клоков. Свободно компилируется собраным toolchain-ом.
Как загрузить его:
- Ставим J11 (который около DBGU порта) в правое положение (в сторону ближе к процу, дальше от разъемов DB9). Это отключит CS паралельной Flash.
- Если в Dataflash-е еще нет загрузчика - ставим J14 (вроде как... в общем тот, что около Dataflash-ки) в нижнее положение (это ближе к процу). Это включит CS для Dataflash-а.
- Если в Dataflash-е уже есть загрузчик, который не функционирует как надо - ставим J14 в верхнее положение (отключаем CS для Dataflash-а). Как только проц включится на свой boot - поставим его на горячую в нормальное положение.
- В консоли (115200 8N1) на порту DBGU побегут буковки 'C' (английская большая 'Ц'). Это значит, что активирован встроенный Xmodem.
- Загружаем romboot.bin по Xmodem-у.
-
После загрузки, romboot запустится и будет возможность залить его же в Dataflash:
Даем команду: "1 C0000000"
Побегут буковки 'C' - по Xmodem-у отправляем опять romboot.bin
Если все прошло нормально - romboot скажет, что он записал в Dataflash и поправил 6-й вектор. - Теперь можно нормально грузиться с Dataflash-а. Не забываем в течение секунды после появления приглашения нажать любую кнопку, чтоб не пошел процесс автоматического запуска u-boot-а, а выйти в меню romboot-а.
U-boot
Я собирал u-boot 1.1.1 с патчем от Дмитрия Черкашина ("Dmitriy I.Cherkashin")
Распаковываем u-boot 1.1.1 и накатываем патчи от Черкашина.
Далее надо поправить конфигурацию в файле include/configs/RM9200.h:
Установить: #define CFG_ENV_IS_IN_DATAFLASH. Убедиться, что больше нигде оно не переопределено.
Поправить адреса для Ethernet. Не забыть про MAC-адрес. Именно u-boot его устанавливает, а ядро потом пользуется уже установленным.
Включить поддержку Dataflash: #define CONFIG_HAS_DATAFLASH 1
Поправить адрес конфигурации в Dataflash:
#if defined(CFG_ENV_IS_IN_DATAFLASH)
#define CFG_ENV_OFFSET 0x28000 <--- вот тут
#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
#define CFG_ENV_SIZE 0x2000 /* 0x8000 */
Вычисление смещения будет ниже, где я покажу карту памяти.
Для сборки воспользуемся собранным gcc 2.95.3 (он лежит в arm-gcc-2.95.3.tgz). Поправим Makefile на предмет переменной CROSS_COMPILE:
ifeq ($(ARCH),arm)
CROSS_COMPILE = /opt/uClinux/bin/arm-elf-
endif
Теперь собираем: make
Если все удачно - у нас получится файл u-boot.bin (gzip-версия не понадобится, т.к. romboot не держит gzip. я пробовал его привернуть, но приходится откручивать все прелести консольной работы с dataflash).
Загрузка U-boot
Запускаем EVM9200 и входим в romboot. Загружаем U-boot в dataflash:
Даем команду "1 C0008000", далее грузим u-boot.bin по Xmodem-у.
U-boot будет лежать в Dataflash со смещения 0x8000.
После окончания загрузки попробуем дать команду "3" - должен загрузиться U-boot.
Если все нормально - то после ресета - u-boot будет грузиться автоматически (если ничего не нажимать)
Карта памяти
Ниже привожу карту памяти в EVM9200 (для моей конфигурации):
Dataflash:
C000 0000 - romboot (32kb - 0x8000)
C000 8000 - u-boot (128kb - 0x20000)
C002 8000 - u-boot config (8kb - 0x2000)
C002 A000 - kernel (1240kb - 0x136000)
C016 0000 - initrd (2Mb - 0x200300)
C036 0300 - filesystem (4.9Mb - 0x4DFD00) - обязательно должен начинаться с нового сектора (адрес кратен 1056)
RAM:
2000 8000 - kernel (0x280000)
2028 8000 - initrd (0x500000)
20A0 0000 - compressed kernel (0x200000)
20C0 0000 - compressed initrd (0x200000)
20F0 0000 - u-boot
tftpd для передачи файлов u-boot-у
Все нижеследующее надо делать только в случае, если в системе еще не стоит tftpd (посмотреть для начала на /etc/inetd.conf на предмет tftp и поглядеть, есть ли файлы, на которые конфиг ссылается).
Собирается все предельно просто и прозрачно (файл tftpd.tar.gz в комплекте):
tar xvzf tftpd.tar.gz
cd ftpd
make
cp ./tftpd /usr/sbin
cp ./tftpd.8 /usr/man/man8
Прописываем в /etc/inetd.conf строчку для tftpd:
tftp dgram udp wait nobody /usr/sbin/tcpd tftpd /tftproot
Создаем каталог для tftp:
mkdir /tftproot
Если inetd уже запущен, то перезапускаем его:
killall -1 inetd
Если не запущен - запускаем.
Загрузка ядра Linux-а
Мы уже получили готовое ядро в arch/arm/boot/Image. Теперь надо сделать загрузочный образ ядра для u-boot.
Для этого существует утилита mkimage из поставки u-boot (лежит в подкаталоге tools).
Для начала сожмем ядро в gzip:
gzip Image
Получим файл Image.gz. Из него то и будем делать образ:
С помощью mkimage делаем образ ядра для u-boot:
./mkimage -A arm -O linux -C gzip -a 0x20008000 -e 0x20008000 -d Image.gz uImage
Полученный файл uImage положим в каталог для tftp (у меня это /tftproot).
- 30791 просмотр
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Recent comments
2 недели 4 дня назад
2 недели 5 дней назад
6 недель 3 дня назад
7 недель 4 дня назад
5 лет 45 недель назад
6 лет 8 недель назад
6 лет 19 недель назад
6 лет 20 недель назад
6 лет 28 недель назад
7 лет 6 дней назад