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


     1         2       3       4       5       6       7       8       9       10   

1. Старт вторичного загрузчика SPL (Boot0)

При включении питания начальный загрузчик процессора BROM (встроенное загрузочное ПЗУ) читает карту и ищет в её начале (по смещению 8 Kbyte = 16 блоков) сигнатуру eGON.BT0, которая является признаком начала загрузчика Boot0, загружает его в память процессора и запускает.

Внимание ! Эта загрузка выполняется не в динамическую DRAM приставки, а во внутреннюю статическую SRAM-память SoC H618, поскольку в первый момент DRAM (а она может быть разного типа и конфигурации) ещё не настроена и пользоваться ей пока нельзя. SRAM (Static Random Access Memory) - cтатическая оперативная память произвольного доступа.

В связи с тем, что в разных моделях приставок может использоваться RAM разного типа (DDR3,DDR4, LPDDR и пр.) загрузчик boot0 также должен иметь несколько модификаций под каждый из типов памяти. При этом конфигурационные параметры DRAM (тайминг и пр.), вероятно, прописаны в самом Bott0 и используются для настройки памяти DRAM для загрузки в неё U-Boot и всех остальных компонентов прошивки.

Кстати, именно несоответствие содержащегося в образе прошивки загрузчика Boot0 имеющейся в приставке конкретной RAM является главной причиной фатального исхода на самой ранней стадии загрузки прошивки.

Если сравнить строки лога dram_para с аналогичными параметрами в файле sys_config.fex, который содержится в IMAGEWTY-образе прошивки, то мы обнаружим полное совпадение. Из этого следует, что папраметры конфигурации памяти RAM (а также и другие параметры) в процессе сборки блоба Boot0 извлекаются из файла sys_config.fex, полный текст этого файла с перводом комментариев приведен по ссылке ниже ( для dram_para оставлены только значения для par=0).

Файл sys_config.fex

После установки параметров DRAM определяется емкость памяти и выполняется её тестирование.
 DRAM CLK =648 MHZ
 DRAM Type =3 (3:DDR3,4:DDR4,7:LPDDR3,8:LPDDR4)
 Actual DRAM SIZE =2048 M
 DRAM SIZE =2048 MBytes, para1 = 30fb, para2 = 8000000, dram_tpr13 = 6041
 DRAM simple test OK.

Затем проверяется SD-карта:

   ***SD/MMC 0 init OK!!!*** 

И выполняется чтение с карты, распаковка пакета boot-packаge и переход к загрузке в DRAM и старту U-Boot, извлеченного из boot-packаge:
 Loading boot-pkg Succeed(index=0).
 [mmc]: b mmc 0 bias 4
 Entry_name        = u-boot
 Entry_name        = monitor
 Entry_name        = dtbo
 Entry_name        = optee
 Entry_name        = dtb
 mmc not para
Jump to second Boot.



Лог: Старт вторичного загрузчика SPL (Boot0)


[76]HELLO! BOOT0 is starting!
[79]BOOT0 commit : 4b34f2890a
[82]set pll start
[84]periph0 has been enabled
[87]set pll end
[91]unknow PMU
[92]unknow PMU
[96]PMU: AXP1530
[100]vaild para:1  select dram para0
[104]dram_para[0]:0x288
[106]dram_para[1]:0x3
[108]dram_para[2]:0x3030303
[111]dram_para[3]:0xe0e0e0e
[114]dram_para[4]:0x1c12
[116]dram_para[5]:0x1
[119]dram_para[6]:0x30fb
[121]dram_para[7]:0x0
[123]dram_para[8]:0x840
[126]dram_para[9]:0x4
[128]dram_para[10]:0x8
[130]dram_para[11]:0x0
[132]dram_para[12]:0x0
[135]dram_para[13]:0x0
[137]dram_para[14]:0x0
[139]dram_para[15]:0x0
[142]dram_para[16]:0x0
[144]dram_para[17]:0x0
[146]dram_para[18]:0x0
[148]dram_para[19]:0x0
[151]dram_para[20]:0x0
[153]dram_para[21]:0x0
[155]dram_para[22]:0xc0000c05
[158]dram_para[23]:0x0
[161]dram_para[24]:0x0
[163]dram_para[25]:0x0
[165]dram_para[26]:0x33808080
[168]dram_para[27]:0x2f0007
[171]dram_para[28]:0xffffdddd
[174]dram_para[29]:0xfedf7557
[177]dram_para[30]:0x40
[179]dram_para[31]:0x0
[181]board init ok
[183]enable_jtag
[185]DRAM BOOT DRIVE INFO: V0.651
[188]the chip id is 0x2000
[191]chip id check OK
[214]DRAM_VCC set to 1500 mv
[220]read_calibration error
[226]read_calibration error
[232]read_calibration error
[238]read_calibration error
[244]read_calibration error
[250]read_calibration error
[256]read_calibration error
[263]read_calibration error
[269]read_calibration error
[275]read_calibration error
[278]retraining final error
[286][AUTO DEBUG]32bit,1 ranks training success!
[298]DRAM CLK =648 MHZ
[300]DRAM Type =3 (3:DDR3,4:DDR4,7:LPDDR3,8:LPDDR4)
[308]Actual DRAM SIZE =2048 M
[311]DRAM SIZE =2048 MBytes, para1 = 30fb, para2 = 8000000, dram_tpr13 = 6041
[324]DRAM simple test OK.
[327]rtc standby flag is 0x0, super standby flag is 0x0
[332]dram size =2048
[335]Use rtc to store dram tuning para
[339]card no is 0
[341]sdcard 0 line count 4
[343][mmc]: mmc driver ver 2021-10-12 13:56
[348][mmc]: b mmc 0 bias 4
[356][mmc]: Wrong media type 0x0
[359][mmc]: ***Try SD card 0***
[372][mmc]: HSSDR52/SDR25 4 bit
[375][mmc]: 50000000 Hz
[377][mmc]: 30448 MB
[379][mmc]: ***SD/MMC 0 init OK!!!***

[479]Loading boot-pkg Succeed(index=0).
[483][mmc]: b mmc 0 bias 4
[485]Entry_name        = u-boot
[494]Entry_name        = monitor
[497]Entry_name        = dtbo
[500]Entry_name        = optee
[504]Entry_name        = dtb
[508]mmc not para
[509]Jump to second Boot.



     1         2       3       4       5       6       7       8       9       10