`
dss16694
  • 浏览: 144171 次
社区版块
存档分类
最新评论

重新打包ubi镜像

阅读更多

从网上了解到ubi image不能像其他格式的文件系统image那样作为loop设备mount起来,所以需要找其它方法。具体做法就是安装nandsim模块来模拟一个nand flash,然后将ubi image写到mtd设备上,再将mtd设备attach起来,最后就可一mount ubi设备了。

 

 2002  sudo modprobe ubi

(需要安装ubi模块,不然ubiattach会报错)

 2003  sudo modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte=0x15

(安装nandsim来模拟nand设备,执行后可以看到/dev/mtd0。传入的四个id在执行“read ID”命令时返回)

 2005  cat /proc/mtd

mtd设备信息)

 2008  sudo ubiformat -y /dev/mtd0 -s 512 -f ubi.img

(格式化mtd,并写入ubi image

 2009  sudo ubiattach -m 0

(将/dev/mtd0 attachubi设备。detach则用-d 0,表示detach /dev/ubi0

 2010  ls /dev/ubi0*

 2012  sudo mount -t ubifs /dev/ubi0_0 ubi

(将ubi设备0的第一个分区mountubi目录)

 

 2025  sudo mkfs.ubifs -r ubi -m 2048 -e 129024 -c 863 -o fs.img

(由ubi目录制作文件系统image-m为最小io大小,-e为逻辑擦除块leb大小,-c为最大leb个数)

 2027  sudo ubinize -o fs.img.ubinized -m 2048 -p 128KiB -s 512 -O 512 ubi.ini

(制作待烧录的ubi image-m为最小io大小,-p为物理擦除块peb大小,-s为用作ubi头的page大小,-OVID头的偏移量)

 

ubi.ini内容:

[ubifs]

mode=ubi

image=fs.img

vol_id=0

vol_type=dynamic

vol_alignment=1

vol_name=rootfs

vol_flags=autoresize

 

有关ubi可以参考:

http://www.linux-mtd.infradead.org/doc/ubi.html

 

UBI头:

每一个PEB开始处存由两个64byte的的头,分为EC头和VID头。EC头存放PEB的擦除次数。VID头存放所属volume,以及映射时对应的LEB号码。EC头位于0偏移量处,VID位置取决于是否由sub-page:如果没有,则位于第二个page处;如果由,则位于第二个sub-page处。由于PEB包含两个头,所以LEBPEB小。

 

最小io单元:

NOR flash的大小为1byteNAND的对应page大小,比如512或者2k等等。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics