




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某高速公路投标、某高速公路土建工程设计施工总承包施工组织设计方案
- 聚酰亚胺薄膜项目运营管理手册
- 八年级语文竞赛试题(附答案)
- 电力档案培训课件
- DB36T-批而未用土地清数建库技术指南编制说明
- 2024年农业植保员考试成绩评估标准试题及答案
- 禽蛋养殖场兽药质量安全技术
- 2024年模具设计师考试高效复习法试题及答案
- 2024足球裁判员的职场挑战与试题与答案
- 关于体育经纪人的职业规划试题及答案
- 煤矿反三违认定培训课件
- 2024年安全标志标识标准图册
- 航空航天知识讲座学习课件
- 浙江省嘉兴市2024-2025学年高一化学下学期期末考试试题含解析
- 应急管理概论教学课件
- 7《不甘屈辱 奋勇抗争》(教学设计)-2023-2024学年道德与法治五年级下册统编版
- (新)100篇初中生语文阅读题(含答案)汇编
- 艾梅乙知识竞赛题库及答案(80题)
- DLT 1053-2017 电能质量技术监督规程
- NBT 31021-2012风力发电企业科技文件规档规范
- 机电设备故障诊断与维修 课件 第二章 机械设备故障诊断
评论
0/150
提交评论