Загрузчики Blackfin Печать
Добавил(а) microsin   

На сайте uclinux.org [1] описано несколько способов готовых загрузчиков для Blackfin, поддерживаемых uclinux:

Boot ROM. Стандартная опция для загрузки - встроенное в кристалл процессора Blackfin ПЗУ с кодом загрузчика (on-chip bootrom).
Das U-Boot. Расширяемый, портируемый и конфигурируемый загрузчик.
MicroMonitor. Бесплатная платформа загрузки для встраиваемых систем.

Также это может быть и самописный загрузчик [4]. Ниже показан общий обзор того, что происходит при включении питания/сбросе типовой системы на основе процессора Blackfin.

1. При включении питания процессоре переходит в режим супервизора на уровне приоритета прерывания IVG5.

I. Если происходит пропуск загрузки (bypass), то выполнение кода начинается с адреса 0x20000000 (первый банк асинхронной памяти).

II. Если активируется встроенный загрузчик, то код начинает выполняться с адреса 0xEF000000 (Boot ROM [2]).

2. Начинает выполняться код Boot ROM.

I. Проверяются логические уровни на выводах BMODE (они определяют режим загрузки процессора [3]).

II. Проверяется память OTP (если она доступна).

III. Конфигурируется выбранный источник загрузки.

IV. Загружается LDR (что такое LDR и его формат описано в статье [4]) из выбранного источника, и выполняется код инициализации (init section).

• Перепрограммируется тактирование процессора (SCLK, CCLK).
• Инициализируется память SDRAM (если она присутствует).
• Происходит возврат в Boot ROM.

V. Загружается остальная часть приложения во внутреннюю и внешнюю память (если это необходимо).

• Обычно этим приложением служит загрузчик Das U-Boot.
• Или это может быть MicroMonitor.
• Это может быть обычная встроенная программа (на основе VDK, другой RTOS или просто приложение с одним потоком и прерываниями).
• Это может быть ядро Linux.

VI. Происходит переход на начало приложения.

3. Если не приложение, то на этом шаге работает так называемый загрузчик второй стадии (2nd stage boot loader, Das U-Boot или MicroMonitor).

I. Выполняется любое необходимое перераспределение памяти.

II. Опционально выполнение кода переводится на более низкий уровень приоритета IVG15.

III. Инициализируются устройства (встроенные в процессор, внешние, и т. д.).

IV. Выполняется последовательность команд:

a. Настройка рабочего окружения (setup environment).
b. Загрузка приложения. Это может происходит из источника, который поддерживает загрузчик (локальная сеть, SPI Flash, NOR Flash, NAND Flash, HDD, флешка USB, привод CD-ROM, последовательный порт UART, и т. д.).
c. Подготовка приложения к запуску (перераспределение памяти, распаковка).
d. Запуск приложения на выполнение.

• Это может быть обычная встроенная программа (на основе VDK, другой RTOS или просто приложение с одним потоком и прерываниями).
• Также это может быть uC/OS.
• Это может быть и приложение U-Boot.
• Если это ядро Linux, тогда:

4. Загружается Linux.

I. Инициализируются устройства (встроенные в процессор, внешние, и т. д.).

II. Запускаются приложения уровня пользователя.

5. Возврат на верхний уровень:

I. Если приложение не уничтожило содержимое областей памяти, где находится U-Boot, то приложение может вернуть управление в U-Boot.

II. Выполняется программный сброс системы (software system reset) для возврата в Boot ROM.

[Ссылки]

1. Blackfin Bootloaders site:blackfin.uclinux.org.
2. Blackfin Boot ROM.
3. Как происходит загрузка ADSP-BF533 Blackfin.
4. Blackfin: практическая реализация загрузчика (bootloader).
5. Blackfin: утилита elfloader.exe.