Обновление прошивки

В MiniOS предусмотрена возможность обновления прошивки непосредственно на плеере, без участия компьютера. Для этого необходимо собрать nand.bin, loader.bin, def_boot.bin, img_boot.bin, minios.bin и res.bin в специальный файл-контейнер UPDATE.BIN. После этого файл UPDATE.BIN можно копировать в корневую директорию устройства и запустить "Обновление микропрограммы"



Чтобы в ваших прошивках имелась возможность обновляться с помощью UPDATE.BIN предлагается сделать поправку на наш тип процессора:
В файле /mtv_50/sysupdate/sysupdate.h необходимо заменить строку:
#define   CPUTYPE  =  "Jz4740"
на
#define   CPUTYPE  =  "Jz4725B"

Создание файла UPDATE.BIN

Программы для создания файла UPDATE.BIN я к сожалению не нашел, поэтому пришлось на скорую руку написать свою маленькую утилиту do_update.
В архиве так же находиться исходный код программы (Free/Virtual Pascal).

Утилиту необходимо положить в один каталог с файлами nand.bin, loader.bin, def_boot.bin, img_boot.bin, minios.bin и res.bin, после чего запустить ее без всяких параметров. После работы утилиты будет создан файл UPDATE.BIN в текущем каталоге.

Формат файла UPDATE.BIN

Сперва в файле находиться заголовок со следующей структурой:


typedef struct

unsigned char cputype[32];            // "Jz4725B"
unsigned char sdram_size[8];          // 32
unsigned char nand_flash_size[8];     // 1024
unsigned char softwareversion[32];    // "1.0sp1"
unsigned char nand_bin_offset[8];     // Смещение nand.bin относительно update.bin
unsigned char nand_bin_len[8];        // Размер файла nand.bin
unsigned char nand_bin_pageoffset[8]; // Начальная страница в NAND, куда прошивать
unsigned char loader_bin_offset[8];
unsigned char loader_bin_len[8];
unsigned char loader_bin_pageoffset[8];
unsigned char logo_on_bin_offset[8];  // Вместо logo_on.bin у нас def_boot.bin
unsigned char logo_on_bin_len[8];
unsigned char logo_on_bin_pageoffset[8];
unsigned char logo_off_bin_offset[8]; // Вместо logo_off.bin у нас img_boot.bin
unsigned char logo_off_bin_len[8];
unsigned char logo_off_bin_pageoffset[8];
unsigned char minios_bin_offset[8];
unsigned char minios_bin_len[8];
unsigned char minios_bin_pageoffset[8];
unsigned char res_bin_offset[8];
unsigned char res_bin_len[8];
unsigned char res_bin_pageoffset[8];
unsigned char headcrc[4];            // CRC32 заголовка
}FileHead;


Непосредственно за ней начинают располагаться файлы nand.bin, loader.bin, def_boot.bin, img_boot.bin, minios.bin и res.bin.

Тут нужно заметить, что программа обновления микропрошивки в устройстве сначала считает для каждого файла CRC32, и если оно не равно нулю - признает файл поврежденным. Поэтому, следует при добавлении файлов в update.bin позаботиться о том, чтобы контрольная сумма каждого из добавляемых файлов была равна нулю. Я реализовал это в программе do_update.exe следующим образом: я увеличиваю размер каждого добавляемого файла на 4 байта в самом конце и записываю в эти четыре байта такие значения, при которых контрольная сумма станет равна нулю.


Comments