Образ Android


  Образ       Файлы       GPT     Разделы     RAW  

  super.fex     boot-resource.fex     boot_package.fex     boot0_sdcard.fex     cardscript.fex     cardtool.fex     split_xxxx.fex       fes1.fex    

Файл fes1.fex
fes1.fex - вспомогательный загрузчик, который используется в режиме FES. Точнее, он имеет структуру и признаки загрузчика, которые определяются сигнатурой eGON.BT0, имеющейся в заголовке файла. Поэтому можно предполагать, что fes1.fex выполняет часть функций загрузчика при программировании устройства через USB-интерфейс в режиме FEL-FEX.


Описание режима FES SoC Allwinner

Файл fes1.fex содержит магическое слово eGON.BT0, которое означает, что этот файл является загрузчиком.

Список текстовых строк этого файла полностью совпадает с началом аналогичного списка двух версий основных вторичных загрузчиков boot0_nand.fex и boot0_sdcard.fex:

  • 93cf83
  • RAM.ext
  • RAM.ext
  • RAM simple test FAIL-----%x != %x at address %x
  • RAM simple test OK.
  • OWER SETTING ERROR!
  • RAM_VCC set to %d mv
  • The register 0x2d = %x
  • The pull down dri = %x
  • The pull up dri = %x
  • The pull down odt = %x
  • The pull up odt = %x
  • The dram_dx_dri = %x
  • The dram_ca_dri = %x
  • The dram_dx_odt = %x
  • V0.52
  • DRAM BOOT DRIVE INFO: %s
  • DRAM CLK =%d MHZ
  • DRAM Type =%d (3:DDR3, 4:DDR4, 7:LPDDR3, 8:LPDDR4)
  • DRAM initial error : 1 !
  • NO support for more than 2048M
  • Actual DRAM SIZE =%d M
  • DRAM SIZE =%d MBytes, para1 = %x, para2 = %x, dram_tpr13 = %x
  • PMU: AXP858
  • PMU: AXP1530
  • PMU: AXP806

    Примечние. Сообщение "NO support for more than 2048M" может говорить о том, что загрузчик Boot0 не поддерживает оперативную память с размером, превышающим 2 Гб (но это не точно...).

    Эти строки представляют собой консольные сообщения, которые появляются (или могут появляться) в процессе выполнения этого загрузчика. Для полноценного Boot0 загрузчика этот список продолжают строки:

  • HELLO! BOOT0 is starting %s %s!
  • BOOT0 commit : %s
  • Jump to second Boot.

    Их отсутствие свидетельствует о том, что загрузчик fes1.fex не стартует и не передает управление вторичному загрузчику U-Boot, но выполняет все подготовительные процедуры с оперативной памятью, заканчивающиеся проверкой (или конфигурированием) контроллера питания PMU AXP806.
    То есть это какой-то усеченный вариант загрузчика eGON. Из этого сравнения следует также, что любой загрузчик eGON и загрузчик FEX имеют общую начальную составную часть.

    Для входа в режим FEL на ТВ-боксах используется специальная кнопка (обычно доступная через сквозное гнездо для подключения AV-кабеля). Если эта кнопка нажата в момент подачи питания, то происходит вход в режим FEL, при котором выполняются команды, передаваемые по кабелю на OTG-порт (т.е. на разъем микро-USB или Тип С). Если при этом на ПК запущен прошивальщик феникс-сюита (или аналогичный), то происходит обновление прошивки.

    При отсутствии кнопки FEL переход в этот режим происходит при замыкании на землю контакта с именем BSP (Boot Select Pin).

    Для программирования платы OpiZero2 режим FEL/FES не актуален (из-за отсутствия встроенной nand-памяти), однако его можно использовать для тестирования или в отладочных целях. В этом случае файл fes1.fex может пригодиться.


    По адресу: https://github.com/hno/Allwinner-Info/tree/master/FES лежат 6 папок (1 - 6) с файлами fes.fex, fes.hex

    Существует описание режима FES , ниже приведен его частичный перевод.

    FES — это низкоуровневый USB-интерфейс, используемый LiveSuit для прошивки устройства. Он работает поверх FEL. Сначала активируется режим FEL, а затем выполняется вход в режим FES с помощью FEL-команд.

    Ссылки на информацию о режиме FEL:

  • 1) на GitHub: Текст протокола FEL
  • 2) на Linux-Sunxi.org: Описание FEL

    FEL — это средство связи с BROM Allwinner SoC через USB. Сначала нужно активировать режим FEL на устройстве, чтобы получить к нему доступ.

    FEL - протокол низкого уровня использует массовые передачи USB с одной входной и одной конечной точкой вывода.

    Существует две версии протокола FES. В более новой (2.0) доступно больше команд и проще переключить устройство на FES. Allwinner использует обозначения boot1.0 и boot2.0 в своем SDK для указания версии протокола FES. Версия 2.0 впервые появилась в конце 2013 года вместе с выпуском Android 4.4 SDK и используется на большинстве устройств с более поздними версиями Android .


    Загрузка FES

    Можно использовать инструмент sunxi-fel из Sunxi-tools для загрузки в FES или FELix, у которого есть специальная команда для этого.

    sunxi-fel

    Основная программа, предоставляющая скриптовый интерфейс для общения с FEL. Если вы не выберете конкретное устройство с помощью параметров --dev или --sid, инструмент будет обращаться к первому найденному устройству Allwinner (в режиме FEL). Вы можете распечатать список всех устройств FEL, подключенных/обнаруженных в данный момент, с помощью команды sunxi-fel --list --verbose.

    При вызове без аргументов sunxi-fel отобразит help-информацию:


    Usage: ./sunxi-fel [options] command arguments... [command...]
    -v, --verbose Подробное ведение журнала
    -p, --progress Показывает прогресс-бар (индикатор выполнения)
    -l, --list Перечисляет все (USB) устройства FEL и выходит
    -d, --dev bus:devnum Использовать определенную шину USB и номер устройства
    --sid SID Выбрать устройство по совпадению ключа SID

    Команды sunxi-fel

    • hex[dump] address length - Выводит область памяти в шестнадцатеричном формате

    • dump address length - Двоичный дамп памяти

    • exe[cute] address - Адрес функции вызова

    • reset64 address - Запрос RMR на горячую перезагрузку AArch64

    • readl address - Чтение 32-битного значения из памяти устройства

    • writel address value - Запись 32-битное значение в память устройства

    • read address length file - Запись содержимого памяти в файл

    • write address file - Сохранить содержимое файла в памяти

    • write-with-progress addr file - Запись с индикатором выполнения

    • write-with-gauge addr file - Вывод прогресса для dialog --gauge

    • write-with-xgauge addr file - Расширенный вывод датчика (подсказка об обновлении)

    • multi[write] # addr file ... - Записать несколько файлов "write-with-progress" с общим состоянием выполнения

    • multi[write]-with-gauge ... - как и их аналог "write-with-*",

    • multi[write]-with-xgauge ... - но следуя синтаксису 'multi': <#> addr file [addr file [...]]

    • echo-gauge "some text" - Обновить приглашение/заголовок для выходных данных

    • ver[sion] - Показать BROM-версию

    • sid - Получить и вывести 128-битный ключ SID

    • clear address length - Очисить память

    • fill address length value - Заполнить память

    Для загрузки FES nребуются два файла из образа Imagewty: fes1.fex и u-boot.fex. Для версии Boot 2.0 выполняются следующие действия:

  • Запиcать содержимое файла fes1.fex по адресу 0x2000

  • Выполнить код по адресу 0x2000 для получения доступа к DRAM устройства

  • Запиcать u-boot.fex по адресу 0x4a000000 (в u-boot Sunxi не реализован протокол FES)

  • Установить USB-режим работы U-Boot: Запиcать 0x10 по адресу 0x4a0000e0

    Примечание. В оригинале содержится неточность: нужно записать 0x11 (это dec 17 )

  • Выполнить код по адресу 0x4a00000

    Команды FES

  • FES_TRANSMITE 0x201 Чтение или запись данных

  • FES_RUN 0x202 Выполнить код по адресу

  • FES_INFO 0x203 Принять 16 байт

  • FES_GET_MSG 0x204

  • FES_UNREG_FED 0x205

  • FES_DOWNLOAD 0x206 Запись данных в устройство

  • FES_UPLOAD 0x207 Чтение данных из устройства

  • FES_VERIFY 0x208 Делает то же самое, что и FES_VERIFY_VALUE и FES_VERIFY_STATUS

  • FES_QUERY_STORAGE 0x209 Проверить, откуда загружено устройство (с NAND или SDCard)

  • FES_FLASH_SET_ON 0x20A Включить доступ к NAND Flash / SD-карте, выполняет sunxi_sprite_init(0)

  • FES_FLASH_SET_OFF 0x20B Отключить доступ к NAND Flash / SD-карте, выполняет sunxi_sprite_init(1)

  • FES_VERIFY_VALUE 0x20C Проверить контрольную сумму заданного блока памяти

  • FES_VERIFY_STATUS 0x20D Проверить результат последней операции

  • FES_FLASH_SIZE_PROBE 0x20E Получить размер хранилища

  • FES_TOOL_MODE 0x20F Установить режим работы u-boot (может использоваться для перезагрузки устройства)

  • FES_MEMSET 0x210 Заполнить блок памяти значением байта

  • FES_PMU 0x211 Изменить конфигурацию PMU ( контроллера питания)

  • FES_UNSEQMEM_READ 0x212 Прямое чтение памяти

  • FES_UNSEQMEM_WRITE 0x213 Прямая запись памяти

    Команда FES_PMU посылает следующую структуру:


    struct pmu_config_t
    {
    char pmu_type[16];
    char vol_name[16];
    u32 voltage;
    u32 gate;
    };

    Команда FES_PMU получает код возврата axp_set_supply_status_byname (pmu_config.pmu_type, pmu_config.vol_name, pmu_config.voltage, pmu_config.gate)

    Команды FES_UNSEQMEM_READ и FES_UNSEQMEM_WRITE посылают следующую структуру после запроса:
    unseq_mem_config
    {
    u32 addr;
    u32 value;
    };