среда, 11 сентября 2013 г.

BeagleBone Black - New AM3359 Boot (Initialization)

Эта является дополнением к предыдущей статье про инициализацию AM3359. Сделано это было т.к. наконец вышла новая документация по данному МП. Хотя ревизия документа касается Августа 2013 года, чип который имеется на плате был выпущен явно раньше августа, что накладывает определённые сомнения на актуальность документации на официальном сайте. Также есть небольшие изменения которые коснулись статьи про настройку microSD и загрузку U-Boot.

Предыстория
Всё началось с переписки касательно моей группы в ВК. В ходе переписки я и Сергей спорили касательно загрузчика. Сергей утверждал что то что я описал в своих статьях соответствует только документации, но не реальности. Сравнив результаты я изначально сделал вывод о том что просто указано не то что надо и всё. Однако в последствии я пришёл к выводу что не всё так просто как кажется. Итогом расследования причины странного образа явилась эта статья

Разбор загрузочного образа U-Boot (файл MLO)
Первые два слова в образе который создаёт загрузчик U-Boot после сборке - 0x00000040 и 0x0000000C. По первому взгляду размер не соответствует реальности, да и адрес загрузки принадлежит не инициализированной части внешнего ОЗУ (GPMC). Далее идёт не код как предполагалось, а слова с нулевыми значениями, потом ещё куча всяких разных значений. Потом слова со значением 0xFFFFFFFF, и так далее, потом идут опять же либо нули либо непонятные значения.
Открыв образ в Hex-редакторе я увидел следующую картину:
На первый взгляд было что-то не то, однако прокрутив ниже я увидел, коды безусловного перехода (начинаются с байта 0хEX, где X является частью действительного значения прыжка относительно текущей позиции) и перед ними 2 слова стандартного заголовка GP образа (выделены фиолетовым):
Итак не считая GP заголовка у нас 512 байт занятых непонятным заголовком (просматривая различные варианты образов и различные посты на форумах TI я убедился что это заголовок).

Далее я изучил создание образа утилитами U-Boot и выяснил что это некий OMAP_IMAGE. Что и привело меня к выводу о том что между МП семейств Sitara и OMAP гораздо больше общего чем кажется вначале. После недолгих поисков среди исходников U-Boot было найдено описание образа. Также в обновлённой версии документации от TI указан обязательный заголовок правда для RAW режима при загрузке с MMC. Итого по данным с документации OMAP (т.к. этот тип образа первым был введён именно для этого семейства, а позднее - буквально в прошлом году он мигрировал на семейство Sitara) полный образ имеет следующий вид:
1) для всех устройств не-XIP с загрузкой в память, 2) для XIP устройств с загрузкой в память, 3) простой образ для загрузки. Как понятно из структуры обязательным является только исполняемый код. Теперь поговори про заголовки их 2 - первый CH (Configuration Header), заголовок для настройки системы, второй же GP, основной служит для указания размера образа и адреса загрузки кода. В нашем случае значения этих параметров - размер: 0x00018438, 99384 байта, и адрес 0x402f4000, соответствующий адресу буферного набортного ОЗУ куда и осуществляется загрузка исполняемого кода.

Структура заголовка конфигурации
Заголовок состоит из 2 частей:

  1. Заголовка настроек. Объём 64 байта. Общая структура заголовка:
    Служебные поля как в нашем случае могут иметь другие значения однако в общем виде структура неизменна.
  2. Далее идут сами настройки. Которые в случае AM335x имеют нулевое значение, т.к они не используются:

    Здесь указано только то что есть первая секция и она помечена как выключенная.
Более подробно о параметрах вы можете почитать воспользовавшись руководством на МП семейства OMAP. Для тех же кому это не представляется необходимым, просто могут пользоваться утилитами входящими в состав универсального загрузчика U-Boot.

При подготовке мануала использовались исходные коды и информация по U-Boot. Также использовалась обновлённая версия мануала от TI - AM335x ARM® Cortex™-A8 Microprocessors (MPUs) Technical Reference Manua. И конечно же мануал на процессоры семейства OMAP 3 - OMAP36xx Multimedia Device ES 1.x Public TRM - Version AA (Rev. AA)