Структура и работа SD-карт, записанных утилитой PhoenixCard


  Структура     Прошивка     Эксперименты       RAW-образ    

RAW-образы для записи SD-карт StartUp и Product

В принципе, можно создать RAW-образы для обоих режимов, чтобы записать два варианта SD-карты, не пользуясь утилитой-прошивальщиком Phoenix Card.

RAW-образ - это файл, содержимого которого представляет собой копию записываемой карты. Поэтому такой файл можно записать на карту простым копированием командой dd (под Linux) или (более надежно и клмфортно) используя любую из предназначенных для этой цели утилит (под Windows или Linux): Win32diskimager, USBImager, Balena Etcher, Rufus и др. То есть, на любой платформе и без использования Phoenix Card.

Содержимое таких образов показано ниже на цветных схемах. Для обоих вариантов карты начало файла образа совпадает до адреса 0x4400000, с единственным отличием в двух байтах U-Boot с адресами 0x0c и 0x0e (подробнее - см. Процесс программирования ).

Главные отличие начиаются с адреса 0x4400000, который соответствует началу раздела ENV в GPT. На карте StartUp в разделах записано содержимое соответствующих файлов, а на карте Product c этого адреса записан файл исходного imagewty-образа прошивки (с начальной сигнатурой IMAGEWTY).

Для создания файла RAW-образа для StartUp необходимо записать с нужными смещениями содержимое файлов для стартовой (неразмеченной) области, а также файлы нескольких разделов (bootloader, env, boot, recovery, super). Естественно, super должен быть предварительно распакован из sparse-формата в RAW.

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

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



StartUp      Product


Содержимое карты StartUp

0x0 (0)
   gpt

 Начало: блок = 0 байт = 0 (0x0)

 Конец:  блок = 15, байт = 7680 (0x1e00)

 Размер: 16 блоков, 8 KB (8192 байт) [8.0 Kib]



0x2000 (8192)
   boot0

 Начало: блок = 16 байт = 8192 (0x2000)

 Конец:  блок = 127, байт = 65024 (0xfe00)

 Размер: 112 блоков, 56 KB (57344 байт) [48.0 Kib]



0x10000 (65536)
   free

 Начало: блок = 128 байт = 65536 (0x10000)

 Конец:  блок = 32799, байт = 16793088 (0x1003e00)

 Размер: 32672 блоков, 15,95 MB ( 16336 KB , 16728064 байт ) [16.0 MiB]



0x1004000 (16793600)
   package

 Начало: блок = 32800 байт = 16793600 (0x1004000)

 Конец:  блок = 36895, байт = 18890240 (0x1203e00)

 Размер: 4096 блоков, 2 MB ( 2048 KB , 2097152 байт ) [2.0 MiB]



0x1204000 (18890752)
   free

 Начало: блок = 36896 байт = 18890752 (0x1204000)

 Конец:  блок = 73727, байт = 37748224 (0x23ffe00)

 Размер: 36832 блоков, 17,98 MB ( 18416 KB , 18857984 байт ) [18 MiB]



0x2400000 (37748736)
   bootloader

 Начало: блок = 73728 байт = 37748736 (0x2400000)

 Конец:  блок = 139263, байт = 71302656 (0x43ffe00)

 Размер: 65536 блоков, 32 MB ( 32768 KB , 33554432 байт ) [ 32.0 MiB ]



0x4400000 (71303168)
   env

 Начало: блок = 139264 байт = 71303168 (0x4400000)

 Конец:  блок = 172031, байт = 88079872 (0x53ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0x5400000 (88080384)
   boot

 Начало: блок = 172032 байт = 88080384 (0x5400000)

 Конец:  блок = 237567, байт = 121634304 (0x73ffe00)

 Размер: 65536 блоков, 32 MB ( 32768 KB , 33554432 байт ) [ 32.0 MiB ]



0x7400000 (121634816)
   super

 Начало: блок = 237568 байт = 121634816 (0x7400000)

 Конец:  блок = 5349375, байт = 2738880000 (0xa33ffe00)

 Размер: 5111808 блоков, 2,438 GB ( 2496 MB, 2555904 KB , 2617245696 байт ) [ 2.4 GiB ]



0xa3400000 (2738880512)
   misc

 Начало: блок = 5349376 байт = 2738880512 (0xa3400000)

 Конец:  блок = 5382143, байт = 2755657216 (0xa43ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xa4400000 (2755657728)
   recovery

 Начало: блок = 5382144 байт = 2755657728 (0xa4400000)

 Конец:  блок = 5447679, байт = 2789211648 (0xa63ffe00)

 Размер: 65536 блоков, 32 MB ( 32768 KB , 33554432 байт ) [ 32.0 MiB ]



0xa6400000 (2789212160)
   cache

 Начало: блок = 5447680 байт = 2789212160 (0xa6400000)

 Конец:  блок = 8069119, байт = 4131388928 (0xf63ffe00)

 Размер: 2621440 блоков, 1,25 GB ( 1280 MB, 1310720 KB , 1342177280 байт ) [ 1.3 GiB ]



0xf6400000 (4131389440)
   vbmeta

 Начало: блок = 8069120 байт = 4131389440 (0xf6400000)

 Конец:  блок = 8101887, байт = 4148166144 (0xf73ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xf7400000 (4148166656)
   vbmeta_system

 Начало: блок = 8101888 байт = 4148166656 (0xf7400000)

 Конец:  блок = 8134655, байт = 4164943360 (0xf83ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xf8400000 (4164943872)
   vbmeta_vendor

 Начало: блок = 8134656 байт = 4164943872 (0xf8400000)

 Конец:  блок = 8167423, байт = 4181720576 (0xf93ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xf9400000 (4181721088)
   metadata

 Начало: блок = 8167424 байт = 4181721088 (0xf9400000)

 Конец:  блок = 8200191, байт = 4198497792 (0xfa3ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xfa400000 (4198498304)
   private

 Начало: блок = 8200192 байт = 4198498304 (0xfa400000)

 Конец:  блок = 8232959, байт = 4215275008 (0xfb3ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xfb400000 (4215275520)
   frp

 Начало: блок = 8232960 байт = 4215275520 (0xfb400000)

 Конец:  блок = 8233983, байт = 4215799296 (0xfb47fe00)

 Размер: 1024 блоков, 512 KB (524288 байт) [ 512.0 KiB]



0xfb480000 (4215799808)
   empty

 Начало: блок = 8233984 байт = 4215799808 (0xfb480000)

 Конец:  блок = 8265727, байт = 4232052224 (0xfc3ffe00)

 Размер: 31744 блоков, 15,5 MB ( 15872 KB , 16252928 байт ) [ 15.5 MiB ]



0xfc400000 (4232052736)
   media_data

 Начало: блок = 8265728 байт = 4232052736 (0xfc400000)

 Конец:  блок = 8298495, байт = 4248829440 (0xfd3ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xfd400000 (4248829952)
   Reserve0

 Начало: блок = 8298496 байт = 4248829952 (0xfd400000)

 Конец:  блок = 8331263, байт = 4265606656 (0xfe3ffe00)

 Размер: 32768 блоков, 16 MB ( 16384 KB , 16777216 байт ) [ 16.0 MiB ]



0xfe400000 (4265607168)
   UDISK

 Начало: блок = 8331264 байт = 4265607168 (0xfe400000)

 Конец:  блок = 15677405, байт = 8026831360 (0x1de6fba00)

 Размер: 7346142 блоков, 3,503 GB ( 3586,98 MB, 3673071 KB , 3761224704 байт ) [ 3.5 GiB ]



Примечания.

  • 1. Адресация разделов (начало-конец-размер) показана в блоках LBA (Logical block addressing),
    1 блок=512 байт

  • 2. Некоторые из разделов карты, начиная с cache и дальше (помечены серым цветом) при записи карты StartUp остаются чистыми и на загрузку системы не влияют.

  • StartUp      Product


    Содержимое карты Product

    0x0 (0)
       gpt

     Начало: блок = 0 байт = 0 (0x0)

     Конец:  блок = 15, байт = 7680 (0x1e00)

     Размер: 16 блоков, 8 KB (8192 байт) [8.0 Kib]



    0x2000 (8192)
       boot0

     Начало: блок = 16 байт = 8192 (0x2000)

     Конец:  блок = 127, байт = 65024 (0xfe00)

     Размер: 112 блоков, 56 KB (57344 байт) [48.0 Kib]



    0x10000 (65536)
       free

     Начало: блок = 128 байт = 65536 (0x10000)

     Конец:  блок = 32799, байт = 16793088 (0x1003e00)

     Размер: 32672 блоков, 15,95 MB ( 16336 KB , 16728064 байт ) [16.0 MiB]



    0x1004000 (16793600)
       package

     Начало: блок = 32800 байт = 16793600 (0x1004000)

     Конец:  блок = 36895, байт = 18890240 (0x1203e00)

     Размер: 4096 блоков, 2 MB ( 2048 KB , 2097152 байт ) [2.0 MiB]



    0x1204000 (18890752)
       free

     Начало: блок = 36896 байт = 18890752 (0x1204000)

     Конец:  блок = 73727, байт = 37748224 (0x23ffe00)

     Размер: 36832 блоков, 17,98 MB ( 18416 KB , 18857984 байт ) [18 MiB]



    0x2400000 (37748736)
       bootloader

     Начало: блок = 73728 байт = 37748736 (0x2400000)

     Конец:  блок = 139263, байт = 71302656 (0x43ffe00)

     Размер: 65536 блоков, 32 MB ( 32768 KB , 33554432 байт ) [32.0 MiB ]



    0x4400000 (71303168)
       IMAGEWTY

     Начало: блок = 139264 байт = 71303168 (0x4400000)

     Конец:  блок = 1815568, байт = 929570816 (0x37682000)

     Размер: 1676305 блоков, 818,51 MB ( 838152,5 KB , 858268160 байт ) [850 MiB]



    Примечания.

  • 1. Размер imagewty-образа показан условно (для прошивки Android OpiZero2), для ТВ-боксов это значение может лежать в интервале от 1 до 2 GB, в зависимости от модели и версии прошивки.
  • 2. В пакете Package содержатся блобы вторичного загрузчика (U-Boot), дерева устройств (DTB и DTBO), а также монитора загрузки (Monitor).