Некоторый итог изысканий по просторам интернета. Возможно кого заинтересует. Это на примере титана. Но применить можно и к энигме и к нейтрино. С поправками конечно. Тем более, что для них в отличие от титана есть в git возможность сборки.
Всё делал на kubuntu 12.04 и повторял на ubuntu 11.10.
Распаковка.
Из прошивки для внутренней флеш xxx.img нам нужны kernel, root и var.
Экспериментам подвергался титан для кати ufs910. Последний и некоторые из предыдущих.
Где что находится и как пакуется выяснял по скриптам создания нейтрино и энигмы из git. Сравнивал смещение с помощью утилиты binwalk. Помогла не очень, но кое-что прояснилось.
root запакован в SquashFs LZMA. Поэтому нужно установить пакет SquashFs с поддержкой LZMA.
http://forum.ubuntu.ru/index.php?topic=156967.0
Или можно воспользоваться тем, что ставиться с git.
Проверяем в hex смещение файловой системы SquashFs LZMA.
hexdump -C -n 64 -s 1441792 titan126_21275.img
Видим hsqs - это начало SquashFs. Прибавляем размер root.
Это будет конец.
hexdump -C -n 64 -s 11796480 titan126_21275.img
Вырезаем root из прошивки.
dd if=titan126_21275.img of=root21275.img bs=1 skip=1441792 count=11796480
Получаем root21275.img.
Пробуем распаковать. Папку назначения нужно удалить если она есть. Иначе не распакуется.
Если всё верно в папке release будет лежать распакованный root.img
Я его сразу направляю куда мне нужно.
sudo unsquashfs -d /home/nik/tdt/tdt/tufsbox/release root21275.img
По идее в начале и в конце прошивки должны быть kernel и var.
Отрезаем kernel.
dd if=titan126_21275.img of=kernel21275.img bs=1 count=1441792
Получаем kernel21275.img.
Переименоввываем его в uImage и кладём в boot. Я поначалу стремился вытащить не сжатый
kernel. Вытащил, но оказалось зря. Этот отрезанный кусок перед root как раз готовый к применению
uImage. Во всяком случае очень сильно на него похож.
Вырезаем var. var как оказалось занимает не всю оставшуюся часть прошивки.
dd if=titan126_21200.img of=var21200.img bs=1 skip=11796480 count=16515071
Это прокатывало с 21200. С 21275 этот номер уже не проходит. Изменился размер и смещение jffs2.
Ребята на ходу меняют правила игры.
dd if=titan126_21275.img of=var21275.img bs=1 skip=11403264 count=13500415
Получаем var21275.img.
Просто так var не вытащить. jffs2 нужно примонтировать. А потом сохранить что примонтируется...
Нужно установить mtd-utils.
Для монтирования jffs2 выполнить команды под root
sudo modprobe mtd
sudo modprobe jffs2
sudo modprobe mtdram
sudo modprobe mtdchar
sudo modprobe mtdblock
sudo mkdir /home/nik/var21275
sudo dd if=var21275.img of=/dev/mtd0
sudo mount -t jffs2 /dev/mtdblock0 /home/nik/var21275
Переходим в var
cd /home/nik/var21275
Смотрим что там есть
ls
Сохраняем
tar -cvzf /home/nik/var21275.tar.gz -C /home/nik/var21275/ ./
Забираем var21275.tar.gz из домашнего каталога.
Распаковвываем его в каталог с титаном.
Добавляем в etc .usbimage.
Запаковвываем.
cd /home/nik/tdt/tdt/tufsbox/release
tar -czvpf /home/nik/titan21275_USB.tar.gz ./ > /dev/null 2>&1
В дрмашнем каталоге получаем titan21275_USB.tar.gz.
Теоретически он должен запустится. Но на практике вечный ребут. Ошибка 6 при запуске titan без дополнительной информации. Но при этом если не добавлять .usbimage запускается нормально.
При этом рубится имидж на внутренней флеш если там не titan.
Хотя у меня последний раз и titan внутренний всё равно слетел. Видимо сделана какая-то блокировка от запуска с USB, раз они не хотят делать внешнюю версию. Ковырять надо...
На этом пока застрял. Делаю перерыв на весеннюю посевную. Возможно кто продолжит и поправит чего... Наверное под это дело и скрипт можно было бы смастерить. Но на это моих мозгов пока не хватает...
P.S. Кстати интересно теперь обновляется онлайн. По частям. kernel, root и var раздельно. Их можно по ftp перехватить. Успеваешь скопировать...
Функция backup снова на месте...