Внесение изменений в bin-прошивку медиацентров TVIP

:!: Информация актуальна для медиацентров на ОС Linux и Linux-Qt с bin-прошивками (TVIP S213/S300/S310).

mktvipfw

Для извлечения прошивки понадобится утилита mktvipfw. Для linux/i386 она доступна по адресу: http://update.tvip.ru/utils/mktvipfw.gz

mktvipfw - Tool for making/extracting tvip_firmware, version: 2.0.0

Usage: mktvipfw [OPTION]

Available options:
-h                        print this text and exit
-b                        add 0xFF bytes to the end of images if it size is not divided by 1024
-a <blockname>=<filename> use file for block name when creating firmware
-t <type>                 device type
-v <version>              firmware version
-x <fileName>             extract firmware file to current directory
-p <prefix>               use <prefix> for .bin and .info file instead of default

Добавление файлов в прошивку

Прошивку можно скачать по адресу: http://update.tvip.ru/stb/<модель>/<ос>/release/tvip_firmware.bin
Здесь, модель - модель медиацентра, например s300; ос - тип ОС (linux или linux-qt).

Распаковка прошивки:

 ./mktvipfw -x tvip_firmware-s300.bin
Extracting firmware "tvip_firmware-s300.bin"
good fw header
type = s300, ver = 1.1.0
blockName = kernel
blockName = rootfs
blockName = splash
blockName = uboot

$ ls -la
total 31540
drwxr-xr-x  3 vovan vovan     4096 Feb  7 15:09 .
drwxr-xr-x 22 root  root      4096 Feb  1 06:40 ..
-rw-rw-r--  1 vovan vovan  3441630 Nov  6 16:59 kernel.img
-rwxrwxr-x  1 vovan vovan    61894 Nov  6 16:44 mktvipfw
-rw-rw-r--  1 vovan vovan 28499968 Nov  6 16:59 rootfs.img
-rw-rw-r--  1 vovan vovan  2764854 Nov  6 16:59 splash.img
-rw-rw-r--  1 vovan vovan   327684 Nov  6 17:45 uboot.img
-rw-r--r--  1 vovan vovan 34706580 Nov  5 14:40 tvip_firmware-s300.bin

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

sudo mount -t cramfs -o loop ./rootfs.img /tmp/rootfs/mc
sudo cp -aR  /tmp/rootfs /tmp/newrootfs

Теперь в каталог /tmp/newrootfs/ можно вносить необходимые изменения.

Сборка нового образа rootfs из каталога /tmp/newrootfs/:

sudo mkcramfs /tmp/newrootfs newrootfs.img
Directory data: 23960 bytes
Everything: 27856 kilobytes
Super block: 76 bytes
CRC: 318254da

:?: для ubuntu утилита mkcramfs входит в пакет cramfsprogs

Сборка прошивки с новым образом rootfs:

./mktvipfw -a kernel=kernel.img -a rootfs=newrootfs.img -a splash=splash.img -a uboot=uboot.img -t s300 -v "my_provider_1.1.0"
Using default prefix "tvip_firmware-s300-my_provider_1.1.0" for filenames
Writing tvip_firmware-s300-my_provider_1.1.0.bin
Writing block "kernel" from "kernel.img"
Writing block "rootfs" from "newrootfs.img"
Writing block "splash" from "splash.img"
Writing block "uboot" from "uboot.img"
Successfully written tvip_firmware-s300-my_provider_1.1.0.bin
Writing tvip_firmware-s300-my_provider_1.1.0.info
Successfully written tvip_firmware-s300-my_provider_1.1.0.info

Распаковка rootfs начиная с прошивки 3.1.0

Для распаковки образа rootfs прошивки 3.1.0 и выше потребуется модифицированный пакет cramfstools http://sourceforge.net/projects/cramfs/

patch:

--- linux/cramfs_fs.h_orig	2002-02-20 11:03:32.000000000 +0300
+++ linux/cramfs_fs.h	2014-06-26 17:56:28.454219511 +0400
@@ -18,7 +18,7 @@
  */
 #define CRAMFS_MODE_WIDTH 16
 #define CRAMFS_UID_WIDTH 16
-#define CRAMFS_SIZE_WIDTH 24
+#define CRAMFS_SIZE_WIDTH 26
 #define CRAMFS_GID_WIDTH 8
 #define CRAMFS_NAMELEN_WIDTH 6
 #define CRAMFS_OFFSET_WIDTH 26

Бинарная сборка утилит cramfstools для платформы linux i386

Распаковка rootfs в папку current_rootfs:

./cramfsck -x current_rootfs rootfs.img

Создание образа rootfs

cd current_rootfs
../mkcramfs . ../newrootfs.img

Перевод этой страницы: