Использование SD-карт с прошивкой Android на ТВ-боксах


  Часть 1     Часть 2       Часть 3       Часть 4  

3. Структура загрузочной карты

Когда записанная загрузочная карта подключается к USB ПК с Windows, то в её проводнике (или в файловом менеджере) может отобразиться огромное количество (на все буквы алфавита) дисков, якобы подключенных к USB. Почему это происходит ?

Причина проста: на этой карте записана таблица разделов GPT, содержащая 25 строк, описывающих 25 разделов (или партиций - partition).

Когда какое-то устройство хранения (HDD или SSD диск, USB-флешка, SD-карта и пр.) разбивается на разделы, то это не означает, что вся память как-то делится или размечается (существует даже термин - "разметка"). На самом деле с памятью ничего не происходит, а лишь в самое её начало записывается крохотная таблица, содержащая описание этой самой "разметки", т.е. адреса начала и конца каждого раздела, которые указываются в виде номеров логических блоков LBA по 512 байт. Заметим, что иногда употребляемое название "сектор" неточно, оно из эпохи жестких дисков с их круглой формой и делением на геометрические сектора.

Если выполнить в любом терминале непосредственно на приставке (или на ПК c Linux) консольную команду:
sgdisk --print /dev/block/sda
(здесь sda - это загрузочная карта с Android12, подключенная к USB-порту устройства), то её результат будет таким:


Number  Start     End       Size    Code  Name
   1    73728    139263   32.0 MiB  0700  bootloader_a
   2   139264    204799   32.0 MiB  0700  bootloader_b
   3   204800    205311   256.0 KiB 0700  env_a
   4   205312    205823   256.0 KiB 0700  env_b
   5   205824    336895   64.0 MiB  0700  boot_a
   6   336896    467967   64.0 MiB  0700  boot_b
   7   467968    533503   32.0 MiB  0700  vendor_boot_a
   8   533504    599039   32.0 MiB  0700  vendor_boot_b
   9   599040   6890495   3.0 GiB   0700  super
  10  6890496   6923263   16.0 MiB  0700  misc
  11  6923264   6923519   128.0 KiB 0700  vbmeta_a
  12  6923520   6923775   128.0 KiB 0700  vbmeta_b
  13  6923776   6923903   64.0 KiB  0700  vbmeta_system_a
  14  6923904   6924031   64.0 KiB  0700  vbmeta_system_b
  15  6924032   6924159   64.0 KiB  0700  vbmeta_vendor_a
  16  6924160   6924287   64.0 KiB  0700  vbmeta_vendor_b
  17  6924288   6925311   512.0 KiB 0700  frp
  18  6925312   6956031   15.0 MiB  0700  empty
  19  6956032   6988799   16.0 MiB  0700  metadata
  20  6988800   7021567   16.0 MiB  0700  private
  21  7021568   7025663   2.0 MiB   0700  dtbo_a
  22  7025664   7029759   2.0 MiB   0700  dtbo_b
  23  7029760   7062527   16.0 MiB  0700  media_data
  24  7062528   7095295   16.0 MiB  0700  Reserve0
  25  7095296  15675391   4.1 GiB   0700  UDISK

Файл IMAGEWTY-образа прошивки Android 12(13) - это архив специального формата, содержащий 45 файлов с расширением .fex.

  1. arisc.fex
  2. aultls32.fex
  3. aultools.fex
  4. board.fex
  5. boot.fex
  6. boot_package.fex
  7. boot0_nand.fex
  8. boot0_sdcard.fex
  9. boot-resource.fex
  10. cardscript.fex
  11. cardtool.fex
  12. config.fex
  13. dlinfo.fex
  14. dtbo.fex
  15. env.fex
  16. fes1.fex
  17. misc.fex
  18. split_xxxx.fex
  19. sunxi.fex
  20. sunxi_gpt.fex
  21. sunxi_mbr.fex
  22. super.fex
  23. sys_config.fex
  24. sys_partition.fex
  25. toc0.fex
  26. toc1.fex
  27. u-boot.fex
  28. u-boot-crash.fex
  29. usbtool.fex
  30. usbtool_crash.fex
  31. vbmeta.fex
  32. vbmeta_system.fex
  33. vbmeta_vendor.fex
  34. Vboot.fex
  35. Vboot-resource.fex
  36. Vdtbo.fex
  37. vendor_boot.fex
  38. Venv.fex
  39. Vmisc.fex
  40. vmlinux.fex
  41. Vsuper.fex
  42. Vvbmeta.fex
  43. Vvbmeta_system.fex
  44. Vvbmeta_vendor.fex
  45. Vvendor_boot.fex

Примечание. Файлы, имена которых начинаются на V, и имеющие длину 4 байта (их 10 штук) - это контрольные суммы соответствующих файлов с именем без первой V.

Однако в эти 25 разделов, имеющихся на карте, непосредственно в разделы записываются только 10 файлов:

    Раздел            Файл
1)  bootloader_a     boot-resource.fex
2)  env_a            env.fex
3)  boot_a           boot.fex
4)  vendor_boot_a    vendor_boot.fex
5)  super            super.fex
6)  misc             misc.fex
7)  vbmeta_a         vbmeta.fex
8)  vbmeta_system_a  vbmeta_system.fex
9)  vbmeta_vendor_a  vbmeta_vendor.fex
10) dtbo_a           dtbo.fex

Примечание. Кроме того, несколько файлов записываются в неразмеченную область памяти.

При этом только один раздел bootloader_a становится настоящим диском, отформатированным в FAT16. Это диск с ресурсами (картинками и шрифтами) для загрузчика U-Boot. При подключении карты к USB компьютера этот диск (получивший первую свободную букву, например, F), становится доступным, что позволяет копировать его файлы непосредственно на ПК.

Команда dir (или проводник или файловый менеджер) показывают файловую структуру этого диска:





Нетрудно увидеть, что среди этих файлов папка BAT с никому и никогда не нужными картинками анимации заряда батарейки (которую спокойно можно удалить), а также графический файл со стартовой заставкой bootlogo.bmp. Кстати, этот файл можно отредактировать в любом графическом редакторе и скопировать обратно на диск F. В результате получим новую картинку в момент загрузки Android.

Из приведенного выше списка записываемых файлов видно, что при записи прошивки на карту в раздел UDISK ничего не записывается. Этот раздел позже меняет имя на userdata и монтируется с именем DATA, хранит все настройки, конфигурационные данные приложений и пользовательские данные.

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

Однако, в том случае, когда повторно записыватся совсем чужая прошивка, то существует вероятность, что её система будет конфликтовать с уже имещимися в разделе DATA файлами (например с бутанимацией) и процедура загрузки не закончится полностью, т.е. запуском лаунчера. В такой ситуации могут помочь два (как минимум) способа:
1) загрузить приставку с этой картой в Recоvery и сделать сброс с очисткой данных
2) перед записью новой прошивки войти на работающей приставке в Настройки и дать команду сброса и очистки, после чего выключить приставку и извлечь карту.

Заметим, что обычная процедура форматирования карты также не очистит раздел DATA, а только удалит таблицу разделов. При этом сами данные останутся на своем месте и при повторной записи на эту карту таблицы GPT, имеющей такие же начальные адреса разделов, раздел DATA может благополучно восстановиться с прежними данными.


   ВНИМАНИЕ ! Важно подчеркнуть, что описанная здесь структура прошивки на загрузочной карте полностью совпадает со структурой прошивки во внутренней (eMMC) флеш-памяти приставки.





  Часть 1     Часть 2       Часть 3       Часть 4