Как загрузить образ Linux на плату AS-9200

Предполагается, что микросхема DataFlash не прошита, или в ней нет загрузчика (механизм определения, являются ли данные загрузчиком, описан в докумсентации на микросхему AT91RM9200). В случае, если прошит неправильный загрузчик, можно замкнуть ножку SO (pin 14 для корпуса TSOP) на землю в процессе перезагрузки контроллера. Это приведет к тому, что микросхема не будет опознана и начнется загрузка внутреннего ROM загрузчика.

1. Загрузка DataflashBoot (первый загрузчик)

Подать питание/презагрузить плату. Если в Dataflash нет загрузчика, то на порт DBGU контроллера будет выводиться приглашение X-Modem --- буква 'C'. Загрузить DataflashBoot-AT91RM9200EK-1.05.bin по Xmodem. Здесь и далее настройки порта 115200-8N1.

C

Upload Xmodem

DataflashBoot-AT91RM9200EK-1.05.bin (11.4 KB, 0:01 min = 11656 cps eff)         

2. Сохранить DataflashBoot во flash памяти

Выбрать пункт 1, загрузить по Xmodem ТОТ же файл DataflashBoot-AT91RM9200EK-1.05.bin

ATMEL DataFlash LOADER VER 1.05 Aug 15 2006 18:34:34
*-------------------------------------------*
DataFlash[4.24 Mhz]:AT45DB642
Nb pages: 008192
Page Size: 001056
Size=08650752 bytes
Logical address: 0xC0000000
*-------------------------------------------*
1: Program Dataflashboot.bin at ...[C0000000]
2: Program U-Boot.bin at ..........[C0008400]
3: Load UBOOT from [C0008400] to [0x21f00000]
4: Program Dataflash at ...............[addr]
5: Read Memory ........................[addr]
6: Erase Dataflash containing .........[addr]
*-------------------------------------------*
Enter: 1
Download DataflashBoot.bin to [0xc0000000]
C

Upload Xmodem

DataflashBoot-AT91RM9200EK-1.05.bin (11.4 KB, 0:01 min = 11656 cps eff)  

3. Прошить во flash второй загрузчик U-Boot

Загрузить по Xmodem u-boot-at91rm9200df-2006-08-20.bin, выбрав пункт 2

ATMEL DataFlash LOADER VER 1.05 Aug 15 2006 18:34:34
*-------------------------------------------*
DataFlash[4.24 Mhz]:AT45DB642
Nb pages: 008192
Page Size: 001056
Size=08650752 bytes
Logical address: 0xC0000000
*-------------------------------------------*
1: Program Dataflashboot.bin at ...[C0000000]
2: Program U-Boot.bin at ..........[C0008400]
3: Load UBOOT from [C0008400] to [0x21f00000]
4: Program Dataflash at ...............[addr]
5: Read Memory ........................[addr]
6: Erase Dataflash containing .........[addr]
*-------------------------------------------*
Enter: 2
Download DataflashBoot.bin to [0xc0000000]
C

Upload Xmodem

DataflashBoot-AT91RM9200EK-1.05.bin (11.4 KB, 0:01 min = 11656 cps eff)


Modification of Arm Vector 6 :841a018

Write 12288 bytes in DataFlash [0xc0000000]
Verify Dataflash: OK
Hit a Key!

4. Перейти в U-Boot

Для этого выбрать третий пункт меню.


ATMEL DataFlash LOADER VER 1.05 Aug 15 2006 18:34:34
*-------------------------------------------*
DataFlash[4.24 Mhz]:AT45DB642
Nb pages: 008192
Page Size: 001056
Size=08650752 bytes
Logical address: 0xC0000000
*-------------------------------------------*
1: Program Dataflashboot.bin at ...[C0000000]
2: Program U-Boot.bin at ..........[C0008400]
3: Load UBOOT from [C0008400] to [0x21f00000]
4: Program Dataflash at ...............[addr]
5: Read Memory ........................[addr]
6: Erase Dataflash containing .........[addr]
*-------------------------------------------*
Enter:
Load UBOOT from dataflash[c0008400] to SDRAM[21f00000]

PLLA[180MHz], MCK[60Mhz] ==> Start UBOOT
Jumping...


U-Boot 1.1.4 (Aug 20 2006 - 21:33:18)

DRAM:  32 MB
Parallel flash ignored
Flash:  0 kB
DataFlash:AT45DB642
Nb pages:   8192
Page Size:   1056
Size= 8650752 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C00083FF (RO) Bootstrap
Area 1: C0008400 to C003DDFF (RO) U-Boot
Area 3: C003FF00 to C0041FFF      Environment
Area 4: C0042000 to C018BFFF      OS
Area 5: C018C000 to C083FFFF      FS
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
U-Boot>

5a. Запуск tftp сервера на OS Windows

Если уже установлен tftp сервер, нужно скопировать файлы uImage.bin и fsImage.bin в каталог с образами.

Для запуска tftp сервера требуется выполнить следующие команды (предполагается, что сам сервер находится в директории c:\tftpserver\, а образы находятся в каталоге c:\tftpserver\tftpboot

cd c:\tftpserver\ & c: & TFTPSRV.EXE  dtftpboot\
параметр dtftpboot указывает, в какой директории находятся образы.

5b. Запуск tftp сервера на unix системах

Поскольку *nix системы крайне разнообразны как по набору доступных программ, так и по настройке, далее приводятся только общие руководства. Если уже установлен и настроен tftp сервер, нужно просто скопировать образы в директорию, где лежат остальные образы. В противном случае придется установить tftp сервер, либо как отдельный сервер, либо как запускаемый из-под inetd. Нужно открыть tftp сервер в настройках firewall.

6a. Настройка U-Boot, загрузка образов по сети.

Для работы с сетью необходимо предварительно настроить U-Boot: ввести MAC адрес платы, её ip адрес, адрес сервера, и адрес шлюза при необходимости. MAC это 6 байт, определяющие уникальный номер сетевой платы (микросхемы). Если в одной сети задать два одинаковых MAC, то сеть работать не будет.

U-Boot>setenv ethaddr aa:c8:f1:14:56:f3
Эта команда может выдать ошибку, в случае если сетевой адрес уже установлен. На неё внимания не обращать.
U-Boot>setenv ipaddr 192.168.0.101 ; setenv serverip 192.168.0.1 ; setenv bootargs mtdparts=AT45DB642.spi0:0x2A000(boot)ro,0x136000(kernel)ro,0x200300(initrd)ro,-(filesystem) console=ttyS0,115200 mem=32M root=/dev/mtdblock2,rw ; tftp 0x21042000 uImage.bin
U-Boot>cp.b 0x21042000 0xC0042000 0x117dbb ; tftp 0x2118C000 fsImage.bin ; cp.b 0x2118C000 0xC018c000 0x1b95ab ; setenv bootcmd bootm 0xC0042000 0xC018c000 ; printenv ; saveenv ; boot
После выполнения этих команд образ ядра, файловой системы и настройки загрузчика сохранены во flash памяти. После включения питания, или перезагрузки платы, Linux будет загружаться автоматически.

6b. Настройка U-Boot, загрузка образов через последовательный порт.

Если нет возможности подключить сеть, то загрузить образы можно через последовательный порт. Этот вариант менее предпочтителен, так как занимает больше времени.

U-Boot>setenv bootargs mtdparts=AT45DB642.spi0:0x2A000(boot)ro,0x136000(kernel)ro,0x200300(initrd)ro,-(filesystem) console=ttyS0,115200 mem=32M root=/dev/mtdblock2,rw ; loadb 0x21042000 
После этого необходимо по Kermit передать файл uImage.bin
U-Boot>cp.b 0x21042000 0xC0042000 0x117dbb ; loadb 0x2118C000
После этого необходимо по Kermit передать файл fsImage.bin
cp.b 0x2118C000 0xC018c000 0x1b95ab ; setenv bootcmd bootm 0xC0042000 0xC018c000 ; printenv ; saveenv ; boot
После выполнения этих команд образ ядра, файловой системы и настройки загрузчика сохранены во flash памяти. После включения питания, или перезагрузки платы, Linux будет загружаться автоматически.

7. Вместо заключения

Краткая справка по командам U-Boot. Все адреса и размеры указываются в HEX.

Ниже приведены все команды в виде, удобном для копирования :)

cd c:\tftpserver\ & c: & TFTPSRV.EXE  dtftpboot\

setenv ethaddr aa:bb:cc:dd:ee:f2

setenv ipaddr 195.7.171.112 ; setenv serverip 195.7.171.113 ; setenv bootargs mtdparts=AT45DB642.spi0:0x2A000(boot)ro,0x136000(kernel)ro,0x200300(initrd)ro,-(filesystem) console=ttyS0,115200 mem=32M root=/dev/mtdblock2,rw ; tftp 0x21042000 uImage.bin

cp.b 0x21042000 0xC0042000 0x117dbb ; tftp 0x2118C000 fsImage.bin ; cp.b 0x2118C000 0xC018c000 0x1b95ab ; setenv bootcmd bootm 0xC0042000 0xC018c000 ; printenv ; saveenv ; boot