UbiFS - repack

mercury2014

Новичок
Сообщения
11
Реакции
0
Учусь, разбираюсь. Распаковал прошивку Cisco RV340, в итоге там FS линуксовая упакованная в Ubi.
Запаковываю обратно вот так, не делая изменений в самой фс:

sudo /usr/sbin/mkfs.ubifs -m 2048 -e 129024 -c 852 -r rootfs/ rootfs.img
sudo ubinize -o rootfs.ubi -p 131072 -m 2048 -s 2048 -O 2048 ubinize.cfg

ubinize.cfg:

[ubifs]
mode=ubi
image=rootfs.img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize

Проблема в том, что я не понимаю откуда брать параметры и взял рандомные со StackOverflow, после выровнял VID header offset. Прошивка не признается валидной. Плюс после первой команды размер rootfs.img на порядок(12%) больше конечно размера изначальной fs от cisco.
Вопрос: как имея запакованную ubi определить эти параметры, необходимые для собственной запаковки? Заранее спасибо, при необходимости могу сколько-то денег за помощь скинуть.
 

Barboska

Зарегистрированный
Сообщения
6
Реакции
5

mercury2014

Новичок
Сообщения
11
Реакции
0
@Barboska, ubi_reader ne guglilsya, spasibo ogromnoe, dopilil project !

Esli modificiruu file bez izmeneniya razmera vnutri firmware - vse good.
No esli menyau razmer, firmware detectitsya kak invalid.
Kto-nibud znaet, v kakuu storonu smotret ? Zaranee spasibo!
 

mercury2014

Новичок
Сообщения
11
Реакции
0
После пары дней мучений приходится внось просить помощи(

Прошивка CISCO RV34X-v1.0.03.20 (https://software.cisco.com/download/home/286287791/type/282465789/release/1.0.03.20)

Значит я выровнял UBI образ, но при его сборке прошивка становится невалидной. Дело не в MD5 хэшах, они в отдельных файлах и я их патчу + валидатор показывает разные ошибки для разных событий: на хэши он ругался отдельно и был быстро пофикшен.

Значит вот эти 2 команды показывают одинаковый результат(rootfs.ubi - то, что пакую я ; _openwrt... - оригинал):
Bash:
ubireader_utils_info  -r rootfs.ubi
ubireader_utils_info -r ../_openwrt-comcerto2000-hgw-rootfs-ubi_nand.img

Volume rootfs
        alignment       -a 1
        default_compr   -x zlib
        fanout          -f 8
        image_seq       -Q 1141170928
        key_hash        -k r5
        leb_size        -e 126976
        log_lebs        -l 5
        max_bud_bytes   -j 8388608
        max_leb_cnt     -c 1984
        min_io_size     -m 2048
        name            -N rootfs
        orph_lebs       -p 1
        peb_size        -p 131072
        sub_page_size   -s 2048
        version         -x 1
        vid_hdr_offset  -O 2048
        vol_id          -n 0

        #ubinize.ini#
        [rootfs]
        vol_type=dynamic
        vol_flags=autoresize
        vol_id=0
        vol_name=rootfs
        vol_alignment=1
        vol_size=76947456
Пакую я автоматом вот так(ubinize.cfg правильно выведен выше):
# cp fs/rootfs.ubi openwrt-comcerto2000-hgw-rootfs-ubi_nand.img - при таком варианте я юзаю свой образ
# cp _openwrt-comcerto2000-hgw-rootfs-ubi_nand.img openwrt-comcerto2000-hgw-rootfs-ubi_nand.img - при таком оригинальный образ
Bash:
#!/bin/bash
/usr/sbin/mkfs.ubifs -x zlib -m 2048 -e 126976 -c 1984 -r rootfs/ rootfs.img
ubinize -o rootfs.ubi -p 131072 -m 2048 -s 2048 -O 2048 -Q 1141170928 ubinize.cfg

Ошибки в других этапах исключаются тем, что пакую я скриптом:

#!/bin/bash

build_md5sums()
{

        md5=($(md5sum openwrt-comcerto2000-hgw-rootfs-ubi_nand.img))

        echo 67edf56af0c462a9dfcbb878f7e7ed8c *RV34X-v1.0.03.20-2020-09-17-09-10-48-AM.img > md5sums_fw
        echo 639d569e54ba558c5c06d303fd6b9b37 *md5sum_fw-rv340-img >> md5sums_fw
        echo 8ec34a0ca7366a3aaf8903e7e0f4d2ab *md5sums_fw >> md5sums_fw
        echo 64db77ff254fb2c661813ddd57ff0703 *openwrt-comcerto2000-hgw-rootfs-jffs2-128k.img >> md5sums_fw
        echo 98ec0160997289cdf6c179ee2fb664e1 *openwrt-comcerto2000-hgw-rootfs-jffs2-256k.img >> md5sums_fw
        echo a79531fd65ace77ae54b206c1d3bcaf4 *openwrt-comcerto2000-hgw-rootfs-jffs2-64k.img >> md5sums_fw
        echo $md5 *openwrt-comcerto2000-hgw-rootfs-ubi_nand.img >> md5sums_fw
        echo a817c5882b12fa27096d888dc4e28e00 *openwrt-comcerto2000-hgw-rootfs-ubi_nor.img >> md5sums_fw
        echo 0c93195db0126b28da9a514fdfe42c42 *openwrt-comcerto2000-hgw-uImage.img >> md5sums_fw
        echo 63d16034ff97a701ac7eb07868bd30c6 *openwrt-comcerto2000-hgw-vmlinux >> md5sums_fw
        echo 23c491e463625f5e7b81ac6a7ba1dbe2 *preupgrade.gz >> md5sums_fw
        echo fd60883a3d275902f0bc7cd54413ac68 *preupgrade_md5sum >> md5sums_fw
        echo f0676e6e6f4a44740948296638e40d5f *root_avcsign.yaffs2 >> md5sums_fw
        echo dc1c993abf77eb21ff23526c86c32902 *root_configcert.yaffs2 >> md5sums_fw
        echo 6a8656ae8e7ad872d997d084023ba06b *root_license.yaffs2 >> md5sums_fw
        echo ad39b7336a307d1d2bf27d428325a4f6 *root_webrootdb.yaffs2 >> md5sums_fw
        echo 252821dc24122d34dc6f7ec09657a988 *rv340_fw_pack.sh >> md5sums_fw
        echo 21eca34f9f3aeca8643930680cb6c861 *script.sh >> md5sums_fw
        echo 3df09d36c19b51e514debaf41ea2633b *sha256sums >> md5sums_fw
        echo ab2bca8161a5f229fc94d2236b031a33 *test.tgz >> md5sums_fw
        echo c1b07e6045af5b8be62a9228e93e60a5  barebox-c2krv340.bin >> md5sums_fw

}

preupgrade_patch()
{

        cd _preupgrade.extracted
                if test -f 0.tar ; then rm 0.tar ; fi
                tar cv preup* > 0.tar
        cd ../

        if test -f preupgrade; then rm preupgrade ; fi
        mv _preupgrade.extracted/0.tar preupgrade

        if test -f preupgrade.gz; then rm preupgrade.gz ; fi
        gzip preupgrade

        md5=($(md5sum preupgrade.gz))
        echo $md5 > preupgrade_md5sum

}

firmwareName='RV34X-v1.0.03.20-2020-09-17-09-26-57-AM.img'
dstDir="_$firmwareName.extracted"

cd $dstDir

        cd _40.extracted

                cd _fw.extracted
                        cp _openwrt-comcerto2000-hgw-rootfs-ubi_nand.img openwrt-comcerto2000-hgw-rootfs-ubi_nand.img
                        #cp fs/rootfs.ubi openwrt-comcerto2000-hgw-rootfs-ubi_nand.img
                        build_md5sums
                        if test -f 0.tar ; then rm 0.tar ; fi

                        preupgrade_patch

                        tar cv bare* firm* img* md5* open* pre* > 0.tar
                cd ../

                if test -f fw; then rm fw ; fi
                mv _fw.extracted/0.tar fw

                if test -f fw.gz; then rm fw.gz ; fi
                gzip fw

                md5=($(md5sum fw.gz))
                echo $md5 > md5sum_fw-rv340

                ###
                preupgrade_patch
                ###

                if test -f 0.tar ; then rm 0.tar ; fi
                tar cv fw.gz md5sum_fw-rv340 preupgrade* > 0.tar
        cd ../

        if test -f 40; then rm 40 ; fi
        mv _40.extracted/0.tar 40

        if test -f 40.gz; then rm 40.gz ; fi
        gzip 40

cd ../

if test -f $firmwareName; then rm $firmwareName ; fi
mkimage -A ARM -O linux -T kernel -C none -a 0 -e 0 -n "RV340 Firmware Package" -d _RV34X-v1.0.03.20-2020-09-17-09-26-57-AM.img.extracted/40.gz $firmwareName
Что делать?) Что прочитать ? Куда посмотреть ?) HELP!
 

sefkrd

Свой в доску..
Ветеран
Сообщения
83
Реакции
128
По гитхабу гулял?
 

mercury2014

Новичок
Сообщения
11
Реакции
0

Barboska

Зарегистрированный
Сообщения
6
Реакции
5
это шапка .img
Bash:
mkimage -A ARM -O linux -T kernel -C none -a 0 -e 0 -n "RV340 Firmware Package" -d _RV34X-v1.0.03.20-2020-09-17-09-26-57-AM.img.extracted/40.gz $firmwareName
вот здесь поправь -T kernel -C none на нужный, полагаю на -T firmware -C gzip проверь список командой mkimage -h
 

mercury2014

Новичок
Сообщения
11
Реакции
0
это шапка .img

вот здесь поправь -T kernel -C none на нужный, полагаю на -T firmware -C gzip проверь список командой mkimage -h
Не, ведь если у меня остается UbiFS изначальная, то все ок. Значит это не причина же.
 
Верх Низ