Мда. Проблема, однако. Неужели я один такой (или первый?!)
Всё-таки мне кажется, что тут redboot руку приложил. Я его сам не собирал, взял готовый:
G:\Tion\tools\utils\util>md5sum redboot_322D.bin
1450b4be1f8a86b85cd2bf2326d8d906 redboot_322D.bin
при старте:
Код
+EP93xx - no EEPROM, static ESA, or RedBoot config option.
No network interfaces found
RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version UNKNOWN - built 16:31:15, May 28 2007
Platform: Cirrus Logic EDB9312 Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
Copyright (C) 2003, 2004, 2005, 2006 eCosCentric Limited
RAM: 0x00000000-0x04000000, [0x00042e80-0x03fdd000] available
FLASH: 0x60000000 - 0x60800000, 64 blocks of 0x00020000 bytes each.
RedBoot>
Смотрел eCos и eCos-2.0, скачивал с
ftp://ecos.sourceware.org/pub/ecos/releases, поскольку redboot является частью екоса.
Не вижу поддержки ep93xx в этих исходниках. Если бы была, то можно было бы найти информацию по прерываниям (например,
здесь) и отмапливанию памяти.
Значит, какой-то добрый человек сделал поддержку ep93xx в редбуте минимум, а то и в екосе (официальные релизы по ссылке выше - 2003-й год.) Какое отношение автор этого порта имеет к изготовителям Тиона - мне неизвестно. На сайте ЗАО ЗЕО информации о порте екоса и редбута не вижу.
Остаётся надеяться, что кто нибудь, владеющий информацией, направит меня на путь истинный.
Тем не менее: значение регистра 1 CP15: 0xC000007B. Если считать бит V (high vectors) 13-м, то тут 0.
Посмотрел и отмапливание памяти: рег 2 CP15 содержит значение 0x00004000, дамп этого места в памяти:
Код
00004000: 1E 0C 00 00 1E 0C 10 00 1E 0C 20 00 1E 0C 30 00 |.......... ...0.|
00004010: 1E 0C 40 00 1E 0C 50 00 1E 0C 60 00 1E 0C 70 00 |..@...P...`...p.|
00004020: 1E 0C 80 00 1E 0C 90 00 1E 0C A0 00 1E 0C B0 00 |................|
00004030: 1E 0C C0 00 1E 0C D0 00 1E 0C E0 00 1E 0C F0 00 |................|
00004040: 1E 0C 00 01 1E 0C 10 01 1E 0C 20 01 1E 0C 30 01 |.......... ...0.|
00004050: 1E 0C 40 01 1E 0C 50 01 1E 0C 60 01 1E 0C 70 01 |..@...P...`...p.|
00004060: 1E 0C 80 01 1E 0C 90 01 1E 0C A0 01 1E 0C B0 01 |................|
00004070: 1E 0C C0 01 1E 0C D0 01 1E 0C E0 01 1E 0C F0 01 |................|
00004080: 1E 0C 00 04 1E 0C 10 04 1E 0C 20 04 1E 0C 30 04 |.......... ...0.|
00004090: 1E 0C 40 04 1E 0C 50 04 1E 0C 60 04 1E 0C 70 04 |..@...P...`...p.|
000040A0: 1E 0C 80 04 1E 0C 90 04 1E 0C A0 04 1E 0C B0 04 |................|
000040B0: 1E 0C C0 04 1E 0C D0 04 1E 0C E0 04 1E 0C F0 04 |................|
000040C0: 1E 0C 00 05 1E 0C 10 05 1E 0C 20 05 1E 0C 30 05 |.......... ...0.|
000040D0: 1E 0C 40 05 1E 0C 50 05 1E 0C 60 05 1E 0C 70 05 |..@...P...`...p.|
000040E0: 1E 0C 80 05 1E 0C 90 05 1E 0C A0 05 1E 0C B0 05 |................|
000040F0: 1E 0C C0 05 1E 0C D0 05 1E 0C E0 05 1E 0C F0 05 |................|
00004100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
...тут флеш-память:
00005800: 12 0C 00 60 12 0C 10 60 12 0C 20 60 12 0C 30 60 |...`...`.. `..0`|
... регистры и пр - пропустил, не так интересно.
дальше нули.
Интерпретирую это так: это описание 64-х секций длиной по 1Мб, виртуальная память объемом 64Мб, состоит из двух физических блоков по 32Мб, первый с физического адреса 0x00000000, и отображен сам на себя, второй с физического адреса 0x04000000, отображен на 0x02000000.
Флешь с физического адреса 0x60000000, вирт. адрес также 0x60000000.
Интересно, что в разных местах Интернета разная информация по редбуту:
одни говорят, что редбут не использует прерываний вообще,
"It seems easy,because redboot will not use IRQ vector" (правда, там процессор ARM7TDMI), в другом месте сообщается. что
"RedBoot uses an interrupt vector table which is located at address 0xA000A004." (IQ80310). Отсюда я делаю вывод, что использование или неиспользование прерываний в redboot - платформенно-зависимое. И надо бы мне найти исходники или документацию по порту редбута на ep93xx. Но... см выше.
Еще момент. redboot кроме загрузчика, еще и отладчик. Звучит фантастически, но может быть, там отладчик перехватывает обращения к адресам 0..0x1C?