Как происходит запись прошивки Android с карты Product


   1       2       3       4       5         6         7       8       9       10   

6. Чтение конфигурации

Выполняется чтение конфигурации разделов из содержащегося в IMAGEWTY-образе файла dlinfo.fex.

Исходный код функции чтения dlinfo.fex
Поиск блоба dlinfo.fex выполняется в теле образа IMAGEWTY по заголовку 1234567890DLINFO


int sprite_card_fetch_download_map(sunxi_download_info *dl_map)
{   imgitemhd = Img_OpenItem(imghd, "12345678", "1234567890DLINFO");
    if(!imgitemhd)
      return -1;

	debug("try to read item dl map");
	if(!Img_ReadItem(imghd, imgitemhd, (void *)dl_map, sizeof(sunxi_download_info)))
	{ printf("sunxi sprite error : read dl map failed");
       return -1;
	}
	Img_CloseItem(imghd, imgitemhd);
	imgitemhd = NULL;
	// Проверяем корректность полученной длины
	return sunxi_sprite_verify_dlmap(dl_map);
}

Содержимое этого бинарного файла соответствует текстовому файлу конфигурации sys_partition.fex, из которого взяты только разделы, имеющие в конфигурации имя загружаемого файла. Таких разделов всего 10.

Текстовый файл разделов sys_partition.fex

Прочитанный dlinfo.fex выводится на терминал в виде дампа функцией __dump_dlmap(dl_map):

void __dump_dlmap(sunxi_download_info *dl_info)
{  dl_one_part_info *part_info;
   u32 i;
   char buffer[32];

printf("*************DOWNLOAD MAP DUMP************\n");
printf("total download part %d\n", dl_info->download_count);

for (part_info = dl_info->one_part_info, i = 0;
     i < dl_info->download_count; i++, part_info++)
 { memset(buffer, 0, 32);
  memcpy(buffer, part_info->name, 16);

  printf("download part[%d] name  :%s\n", i, buffer);
  memset(buffer, 0, 32);
  memcpy(buffer, part_info->dl_filename, 16);

  printf("download part[%d] download file :%s\n", i, buffer);
  memset(buffer, 0, 32);
  memcpy(buffer, part_info->vf_filename, 16);

  printf("download part[%d] verify file   :%s\n", i, buffer);

  printf("download part[%d] lenlo   :0x%x\n", i,
 	       part_info->lenlo);

  printf("download part[%d] addrlo  :0x%x\n", i,
 	       part_info->addrlo);

  printf("download part[%d] encrypt  :0x%x\n", i,
 	       part_info->encrypt);

  printf("download part[%d] verify  :0x%x\n", i,
 	       part_info->verify);
  }
}

Сравнение этого дампа (см. лог ниже) с содержимым текстового файла sys_partition.fex показывает, что из файла использованы строки таблицы, содержащие непустой параметр downloadfile. Текстовый файл разделов sys_partition.fex




Лог: Чтение конфигурации



[05.308]fetch download map

*************DOWNLOAD MAP DUMP************
total download part 10

download part[0] name          :bootloader_a
download part[0] download file :BOOT-RESOURCE_FE
download part[0] verify file   :VBOOT-RESOURCE_F
download part[0] lenlo         :0x10000
download part[0] addrlo        :0x8000
download part[0] encrypt       :0x0
download part[0] verify        :0x1

download part[1] name          :env_a
download part[1] download file :ENV_FEX000000000
download part[1] verify file   :VENV_FEX00000000
download part[1] lenlo         :0x200
download part[1] addrlo        :0x28000
download part[1] encrypt       :0x0
download part[1] verify        :0x1

download part[2] name          :boot_a
download part[2] download file :BOOT_FEX00000000
download part[2] verify file   :VBOOT_FEX0000000
download part[2] lenlo         :0x20000
download part[2] addrlo        :0x28400
download part[2] encrypt       :0x0
download part[2] verify        :0x1

download part[3] name          :vendor_boot_a
download part[3] download file :VENDOR_BOOT_FEX0
download part[3] verify file   :VVENDOR_BOOT_FEX
download part[3] lenlo         :0x10000
download part[3] addrlo        :0x68400
download part[3] encrypt       :0x0
download part[3] verify        :0x1

download part[4] name          :super
download part[4] download file :SUPER_FEX0000000
download part[4] verify file   :VSUPER_FEX000000
download part[4] lenlo         :0x600000
download part[4] addrlo        :0x88400
download part[4] encrypt       :0x0
download part[4] verify        :0x1

download part[5] name          :misc
download part[5] download file :MISC_FEX00000000
download part[5] verify file   :VMISC_FEX0000000
download part[5] lenlo         :0x8000
download part[5] addrlo        :0x688400
download part[5] encrypt       :0x0
download part[5] verify        :0x1

download part[6] name          :vbmeta_a
download part[6] download file :VBMETA_FEX000000
download part[6] verify file   :VVBMETA_FEX00000
download part[6] lenlo         :0x100
download part[6] addrlo        :0x690400
download part[6] encrypt       :0x0
download part[6] verify        :0x1

download part[7] name          :vbmeta_system_a
download part[7] download file :VBMETA_SYSTEM_FE
download part[7] verify file   :VVBMETA_SYSTEM_F
download part[7] lenlo         :0x80
download part[7] addrlo        :0x690600
download part[7] encrypt       :0x0
download part[7] verify        :0x1

download part[8] name          :vbmeta_vendor_a
download part[8] download file :VBMETA_VENDOR_FE
download part[8] verify file   :VVBMETA_VENDOR_F
download part[8] lenlo         :0x80
download part[8] addrlo        :0x690700
download part[8] encrypt       :0x0
download part[8] verify        :0x1

download part[9] name          :dtbo_a
download part[9] download file :DTBO_FEX00000000
download part[9] verify file   :VDTBO_FEX0000000
download part[9] lenlo         :0x1000
download part[9] addrlo        :0x6a8400
download part[9] encrypt       :0x0
download part[9] verify        :0x1



   1       2       3       4       5         6         7       8       9       10