Образ Android


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

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

Файл cardscript.fex

При запуске прошивальщика PhoenixCard в его папке создается временный конфигурационный файл с именем script.cfgf, который является копией файла cardscript.fex из образа прошивки с небольшими изменениями:

  • 1) параметр mode = product заменен на mode = bromrun (в соответствии с флажком startup)
  • 2) добавлены два параметра startpos=2006844 и data=0 в категорию [process]
  • 3) изменен текст сообщений с китайского на английский (burn 1st part: boot0 и burn 2nd part: boot1)

    Этот файл script.cfgf создается (копируется из образа и модифицируется) при старте прошивальщика a, феникс, а по заверершении работы он удаляется. Таким образом, файл cardscript.fex из образе прошивки - это конфигурационный файл прошивальщика, который определяет режим программирования (poduct или startup) и управляет записью на карту загрузчика Boot0 (файл прошивки boot0_sdcard.fex) и загрузочного пакета для раздела bootloader (файл прошивки boot_package.fex).

    Забавно, что когда-то в этом файле комментарии были на китайском, но в процесссе упорных улучшений они превратились в бессмысленные (на любом языке и в любой кодировке) наборы символов, да так и кочуют из одной прошиивки в другую. И ни у кого рука не поднялась их вычистить. Однако мне удалось восстановить исходный текст этих китайских комметариев и перевести их на русский.

    В этом конфигурационном файле имеются следующие секции:

  • process - режим записи: product или startup (в комментариях он обозначен как bromrun)
  • boot_0_0 - параметры записи загрузчика Boot0
  • boot_1_0 - параметры записи загрузчика Boot1
  • card_boot - здесь только один параметр: start = 40960, который задает значение (в блоках) для изменения адресов разделов в таблице GPT

    Ниже представлен текст этого файла с восстановленными комментариями (звездочкой помечены строки, отсутствующие в исходном файле и добавленные прошивальщиком).



    ;---------------------
    ;
    ; card_script.cfg
    ;
    ; 2022-03-24
    ;
    ;---------------------
    ; этапы обработки
    ;---------------------
    [process]
    version = 300
    mode = product
    ;null - недопустим 0
    ;product - карта для производства 1
    ;bromrun - карта для старта 2
    ;update - карта для обновления 3
    ;test - тестовая карта 4
    ;null - означает пропустить

    ;start - номер начального сектора
    ;sectors - количество секторов ( 0 - по размеру файла )
    ;

    * startpos = 2006844
    * data = 0

    [boot_0_0]
    main = 12345678
    sub = 1234567890BOOT_0
    start = 16
    sectors = 0
    type = 1
    ;0 raw (необработанный)
    ;1 1 уровень
    ;2 2 уровень
    ;x другое
    param0 = 0
    param1 = 0
    param2 = 0
    param3 = 0
    param4 = 0
    param5 = 0
    param6 = 0
    param7 = 0
    commen = pheonix card_00
    commchs = запрограммирована первая часть

    [boot_1_0]
    main = 12345678
    sub = BOOTPKG-00000000
    start = 32800
    sectors = 0
    type = 1
    ;0 raw (необработанный)
    ;1 1 уровень
    ;2 2 уровень
    ;x другое
    param0 = 0
    param1 = 0
    param2 = 0
    param3 = 0
    param4 = 0
    param5 = 0
    param6 = 0
    param7 = 0
    commen = pheonix card_10
    commchs = запрограммирована вторая часть

    [card_boot]
    start = 40960

    ;---------------
    ; конец
    ;---------------

    Анализ этого конфигурационного файла показывает, что PhoenixCard будет записывать:
  • 1) загрузчик ( файл boot0.fex ) - со смещением 16 блоков (по 512 байт), файл целиком
  • 2) файл boot_package.fex (пакет, содержащий U-Boot и DTB) - со смещением 32800 блоков (по 512 байт), файл целиком

    Таким образом, загрузчик Boot0 записывается на карту сразу после таблицы GPT, а boot_package записывется перед разделом bootloader со смещением в 32800 блоков от начала карты.

    Параметр [card_boot] имеет только одно значение: start = 40960. Это не что иное, как значение дельты (в блоках по 512 байт), на которую увеличены адреса всех разделов GPT при его модифицировании фениксом в процессе записи на загрузочный носитель (на SD-карту).


    Примечание. В строках конфигурационного файла commen = pheonix card_00 и commen = pheonix card_10 однажды при переводе с китайского на английский кто-то перепутал порядок букв в слове Phoenix (т.е. Феникс). А эти сообщения отображаются в окне лога прошивальщика PhoenixCard. Так и осталось навсегда...