挂载 ubi 镜像及反向制作_第1页
挂载 ubi 镜像及反向制作_第2页
挂载 ubi 镜像及反向制作_第3页
挂载 ubi 镜像及反向制作_第4页
挂载 ubi 镜像及反向制作_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——挂载ubi镜像及反向制作geom.pgsz==256){

ns->options|=OPT_PAGE256;}

elseif(ns->geom.pgsz==512){

ns->options|=(OPT_PAGE512|OPT_AUTOINCR);if(ns->busw==8)

ns->options|=OPT_PAGE512_8BIT;}elseif(ns->geom.pgsz==2048){ns->options|=OPT_PAGE2048;}elseif(ns->geom.pgsz==4096){ns->options|=OPT_PAGE4096;}else{

NS_ERR(\return-EIO;}

用关键词“4kpagesizenandflash“进行google,得到一篇页大小为4KB的nandflash芯片的数据手册。根据网上的描述,nandsim后面跟的4个参数是nandflash芯片的ID。于是重点阅读ReadID命令,果真有发现,正是第4个参数决定了生成的mtd设备的PEB和页大小。

如上图所示,假使nandsim的第4个参数为0xA6,则说明PageSize为4KB,PEB为256KB。前三个参数不是很重要,依照手册上默认的即可。

于是使用下面的命令可以模拟出PageSize为4KB,PEB为256KB的mtd:

$sudomodprobenandsimfirst_id_byte=0xecsecond_id_byte=0xd3third_id_byte=0x10fourth_id_byte=0xa6

$sudocat/proc/mtd

dev:sizeerasesizename

mtd0:4000000000040000\

$mtdinfo/dev/mtd0mtd0

Name:NANDsimulatorpartition0Type:nand

Eraseblocksize:262144bytes,256.0KiB

Amountoferaseblocks:4096(1073741824bytes,1024.0MiB)Minimuminput/outputunitsize:4096bytesSubsize:1024bytesOOBsize:128bytesCharacterdevicemajor/minor:90:0Badblocksareallowed:trueDeviceiswritable:true

接下来的步骤:

将ubi与/dev/mtd0关联$sudomodprobeubimtd=0

格式化前先解绑定

$sudoubidetach/dev/ubi_ctrl-m0

格式化

注意:这里要加上-O4096的选项,显式说明UBI_VID_HDR的偏移位置是4KB,而不是默认值。从上面mtdinfo/dev/mtd0的输出结果中,有一项Subsize的选项,假使不用-O显示指定,默认偏移值则是subsize。$sudoubiformat/dev/mtd0-fuserdata.img-O4096绑定

注意:依旧要显式加上-O4096的选项

$sudoubiattach/dev/ubi_ctrl-m0-O4096

UBIdevicenumber0,total4096LEBs(1040187392bytes,992.0MiB),available0LEBs(0bytes),LEBsize253952bytes(248.0KiB)

输出结果中显示LEBsize为248KB,与我们之前计算的一致。挂载

$sudomkdir/mnt/ubi

$sudomount-tubifsubi0/mnt/ubi$ls/mnt/p

至此,挂载成功!

三,挂载分析总结要点

1,使用xxd分析ubi镜像文件,得到PageSize,PEBSize,UBI_VID_HDR的偏移;2,阅读相对应的nandflash的数据手册,找到ReadID命令,确定nandsim的4个参数的值;

3,在使用ubiformat和ubiattach时使用-O选项显示指定UBI_VID_HDR的偏移。

四,反向制作ubi镜像

在挂载ubi镜像成功后,我们往里面添加一些自己的文件,再重新制作回和原始镜像兼容的镜像。主要使用两个命令mkfs.ubifs和unbnize,包含在mtd-utils工具集中。

1,往挂载目录/mnt/ubi中添加自己的文件

2,mkfs.ubifs

$sudomkfs.ubifs-m4096-e253952-c4096-r/mnt/ubiubifs.img-m-MinimumI/Ounitsize.即页大小,由前面得知为4KB。

-e-LogicalEraseBlock(LEB)size.由前面计算得为248KB,即253952。

-c-MaxLEBcount.(vol_size/LEB).通过mtdinfo/dev/mtd0输出结果中的Amountoferaseblocks可得。-r-Path.

ubifs.img-Temporaryimagefile.

3,ubinize

首先要准备一个配置文件,内容如下,文件名为ubi.ini:

[ubi_rfs]mode=ubi

image=ubifs.imgvol_id=0

vol_size=6856704//ubifs.img的大小vol_type=dynamic

vol_name=userdata//分区卷标名,可以随便取,但最好与原来的镜像保持一致vol_alignment=1vol_flags=autoresize

这里面最重要的是vol_size和image选项,其它保持默认即可。

然后使用下面的命令:

$sudoubinize-ouserdata.ubi-p262144-m4096-s1024-O4096ubi.ini-o-Outputfile.

-p-PhysicalEraseBlock(PEB)size.由前面分析得PEB为256KB,即262144。-m-MinimumI/Ounitsize.即页大小4KB。

-s-MinimumI/OsizeforUBIheaders,eg.subsize.Subsize,从mtdinfo/dev/mtd0的结果中可以得知。

-O-VIDheaderoffsetfromstartofPEB.UBI_VID_HDR的偏移,由前面分析得为4KB。ubi.ini-UBIimageconfigurationfile.

至此,镜像反向制作成功,稍候测试能否挂载成功。

五,反向制作ubi镜像要点总结

1,依旧是要保证PageSize,PEBSize,LEBSize,SubSize,UBI_VID_HDR的偏移这些参数的正确性。

六,挂载反向制作的ubi镜像1,umount

$sudoumount/mnt/ubi

2,解绑定

$sudoubidetach/dev/ubi_ctrl-m0

3,重新格式化

$sudoubiformat/dev/mtd0-fuserdata.ubi-O4096

4,绑定

$sudoubiattach/dev/ubi_ctrl-m0-O4096

5,挂载

$sudomount-tubifsubi0/mnt/ubi$ls/mnt/ubi

pself_add_file

验证挂载反向制作的ubi镜像成功!

七,删除模拟的mtd$sudoumount/mnt/ubi

$sudoubidetach/dev/ubi_ctrl-m0$sudormmodnandsim$cat/proc/mtd

八,自动脚本

为了便利操作,写了以下自动化脚本,下面会详细讲解如何使用cal_img_para.shload_nandsim.shauto_mount_ubi.shauto_make_ubi.sh

mount_system.shmount_userdata.shmake_system.shmake_userdata.sh

cal_img_para.sh

用于从得到的ubi镜像文件中解析出关键的参数,譬如UBI_VID_HDR_Offset,PEBSize,LEBSize,volname。例如:

$./cal_img_para.shuserdata.imgvid_hdr_offset:0001000(4KB)data_offset:00002000(8KB)PEB_size:0040000(256KB)LEB_size:3E000(248KB)vol_name:userdata

Pagesize:isnotsure,dependbyvid_hdr_offsetanddata_offset,commonly,itequalvid_hdr_offsetordata_offset

load_nandsim.sh

是mtd-utils里自带的脚本,但自带的脚本不能模拟生成pagesize为4KB的mtd,我做了修改。这个脚本被后面的auto_mount_ubi.sh和auto_make_ubi.sh使用。

auto_mount_ubi.sh

将ubi镜像挂载到pc上。其内部原理是先调用load_nandsim.sh模拟生成mtd设备,再依次调用ubiformat和ubiattach,mount等命令。需要自己提供好多参数。使用方法如下:

$sudo./auto_mount_ubi.sh

Usage:auto_mount_ubi.sh\\\\Example:

auto_mount_ubi.sh102425640964096userdata.img/mnt/ubi

$sudo./auto_mount_ubi.sh102425640964096userdata.img/mnt/ubi

LoadedNANDsimulator(1024MiB,256KiBeraseblock,4096bytesNANDpage)ubidetach:error!:cannotdetachmtd0error19(Nosuchdevice)

ubiformat:mtd0(nand),size1073741824bytes(1024.0MiB),4096eraseblocksof262144bytes(256.0KiB),min.I/Osize4096bytes

libscan:scanningeraseblock4095--100%completeubiformat:4096eraseblocksaresupposedlyemptyubiformat:flashingeraseblock28--100%completeubiformat:formattingeraseblock4095--100%complete

UBIdevicenumber0,total4096LEBs(1040187392bytes,992.0MiB),available0LEBs(0bytes),LEBsize253952bytes(248.0KiB)mkdir:无法创立目录\文件已存在p

为了避免每次都输这么多的参数,因此又写了以下两个脚本mount_system.shmount_userdata.sh

里面各自都只有一条调用auto_mount_ubi.sh的命令

所以只需执行以下命令就可以自动挂载system.img和userdata.img了。但是注意,假使你拿到了其它手机的system.img和userdata.img,是要先用cal_img_para.sh计算出相应的参数,修改这两个.sh中的参数后再执行。$./mount_system.sh$./mount_userdata.sh

auto_make_ubi.sh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论