MT6572用NAND编译出来的system.img怎么解包?
如果是MT6515平台上的system.img ,则可以用此方式解包。
NAND的PAGE是2K的。我用4K的unyaffs也解不了。
有谁搞过?
谢谢!
NAND的PAGE是4K的可以解?
以前MT6515时可以解的,现在MT6572不知道为何都不行了。
解的时候报什么错误么?
broken image file
试下这个:
[DESCRIPTION]
MTK codebase编译出来的image必须使用MTK codebase里的工具才能解开或打包,网络上的打包/解包工具不能在MTK的image里使用
[KEYWORD]
打包
解包
diff.pyc
pack.pyc
[SOLUTION]
解包/打包工具放在:mediatek/build/tools/images/
请先确认是否有打过patch:ALPS00393168,如果没有请打上再解包/打包
解包方法:使用diff.pyc工具
使用方法: python ./diff.pyc <image file>
<image file> 只能为 boot.img, system.img, userdata.img, or recovery.img
例子:
python ./diff.pyc boot.img
output ramdisk folder: /tmp/xxxx
output kernel file: /tmp/xxxx-kernel
打包方法:使用pack.pyc工具
使用方法:
python ./pack.pyc [-2|-4|-eMMC size] <folder>
Option:
-2: NAND 2K block
-4: NAND 4K block
-eMMC size: eMMC image size, ex. -512 for 512MB
<folder> 只能是system, data, 或cache,否则制作出来的image权限不对,会开不了机
例子:
python ./pack.pyc -512 data
将data目录的文件打包生成EXT4格式的userdata.img
用这个方法试了。
解包还是报错,可能还需要patch.
解压system.img
用file命令查看文件格式:
system.img: HIT archive data
解压缩步骤如下:
查看system.img文件长度,这里举例文件大小为190MB,所以使用虚拟NAND容量为256MB,以下命令载入nandsim:
modprobe nandsim first_id_byte=0xec second_id_byte=0xd5 third_id_byte=0x51 fourth_id_byte=0xa6
dmesg可以看到系统模拟出一个2048MiB的NAND flash。
复制system.img数据到虚拟nand:
dd if=system.img of=/dev/mtd0 bs=4096
载入ubi文件系统:
modprobe ubi
把mtd设备attach到ubi系统中:
ubiattach -m 0
如果系统提示以下错误信息:
ubiattach: error!: cannot attach mtd0
error 22 (Invalid argument)
使用dmesg可以发现类似错误:
UBI error: validate_ec_hdr: bad VID header offset 4096, expected 1024
UBI error: validate_ec_hdr: bad EC header
那么使用offset参数载入:
ubiattach -m 0 -O 4096
正确调用的话,系统返回信息:
UBI device number 0, total 8192 LEBs (2080374784 bytes, 1.9 GiB), available 0 LEBs (0 bytes), LEB size 253952 bytes (248.0 KiB)
最后用mount命令载入文件系统:
mount -t ubifs /dev/ubi0_0 /mnt/system/
成功载入的关键是选择正确的nandsim类型。