解包HIT archive data格式system.img,解决ubiattach: error!: cannot attach mtd0 error 22问题


mtk6572一批机器文件系统格式采用ubifs格式,解包和打包system.img的包格式采用的是HIT archive data,与以往的完全不一样

具体步骤如下:
我的测试环境ubuntu12.10;
1.创建一个需要被挂载的目录:
# mkdir /mnt/rom
# modprobe mtdblock

3.载入ubi模块(前提你的linux环境以支持ubi模块)
# modprobe ubi
4.载入nandsim来模拟nand设备
# modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=0x15
5.检查加入模块的环境
# cat /proc/mtd
dev: size erasesize name
mtd0: 10000000 00020000 "NAND simulator partition 0"

# ls -la /dev/mtd*
crw-rw---- 1 root root 90, 0 2013-08-17 20:02 /dev/mtd0
crw-rw---- 1 root root 90, 1 2013-08-17 20:02 /dev/mtd0ro
brw-rw---- 1 root disk 31, 0 2013-08-17 20:03 /dev/mtdblock0

6.把system.img直接载到mtd的块设备
# dd if=system.img of=/dev/mtdblock0 bs=2048
以上步骤一般都可以顺利进行下去.
7.在这里 需要安装mtd-utils工具箱(ubuntu下 直接apt-get install mtd-utils),这一步是将ubi模块与已载入了system.img的mtd模块关联
# ubiattach /dev/ubi_ctrl -m 0
在这里 很多Linux环境会不成功,提示
ubiattach: error!: cannot attach mtd0
error 22 (Invalid argument)

此时 可以通过查看dmesg,可以看到
UBI error: validate_ec_hdr: bad VID header offset 2048, expected 512
UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 0

预期512开始的header,实际是2048
我们修改 为
# ubiattach /dev/ubi_ctrl -m 0 -O 2048
到这里,模块载入成功
UBI device number 0, total 2048 LEBs (264241152 bytes, 252.0 MiB), available 0 LEBs (0 bytes), LEB size 129024 bytes (126.0 KiB)
8.挂载该模块到指定目录就OK
# mount -t ubifs ubi0_0 /mnt/system/
以上内容借鉴于
http://wiki.network-crawler.de/index.php/Mount_ubifs
http://www.linux-mtd.infradead.org/faq/ubi.html
 
常见问题处理:
“ UBI error: validate_ec_hdr: bad data offset 8192, expected 6144
UBI error: validate_ec_hdr: bad EC header”
先说说原因:因为初始化nandsim 大小和块大小(即上面的modprobe nandsim)时 定义的块大小使用了默认的 2048,所以 当我们的system.img 所需的块大小为4096时
无论怎么载入 都无法载入成功!
此时我们可以修改modprobe nandsim 为
# modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=0x16
此时的nandsim 块大小为4096
 
这样的话 ubiattach 载入不成功的问题就能解决掉了
注: Linux 内核在2.6.32及以下版本 nandsim块大小最大支持不超过2048 所以 要解这种4096的system.img 必须在内核高于2.6.32的Linux环境中

转载请注明来自cofface.com:Cofface Blog » 解包HIT archive data格式system.img,解决ubiattach: error!: cannot attach mtd0 error 22问题

赞 (1) 打赏

感谢您的支持,我会继续努力的!

支付宝扫一扫打赏

微信扫一扫打赏