Discuz! Board
标题:
分析mtk的spflashtool读出来的文件格式
[打印本页]
作者:
zangcf
时间:
2016-2-29 16:53
标题:
分析mtk的spflashtool读出来的文件格式
分析mtk的spflashtool读出来的文件格式
作者:
zangcf
时间:
2016-2-29 20:02
首先PRELOADER是从0开始的,那么preloader是多大呢?preloader的大小就是MBR开始的位置:
MBR的结束位置标志是55 AA,其大小是0x100,也就是0xFF那么大::
这样分析目标机器,其preloader的大小是0x880000
后面就到了ebr1,ebr1的开始地址是0x900000,所以,mbr的长度就是0x80000。
下面是四个非下载段,按照我的理解,这个部分的内容是不应该修改的大小的,我认为可以直接从其他72平台移植的。
这个部分的内容大小应该是EBR结束位置到lk开头的位置。
LK的开头标记是88 16 88 58 ** ** ** ** 4c 4b
这样,我们的目标rom的lk开始位置在:0x25a0000,而对比研究的Qplayer ROM在0x3120000,差了B80000h,这个大小是不是就是preloader的差别呢?
作者:
zangcf
时间:
2016-2-29 20:33
PRO_INFO这个分区的存在一个开始地址,还有一个就是分区大小,这两个信息,一定是存在mbr,或者是ebr中间。
=================
- partition_index: SYS0
partition_name: PRELOADER
file_name: preloader_s5001.bin
is_download: true
type: SV5_BL_BIN
linear_start_addr: 0x0
physical_start_addr: 0x0
partition_size: 0x880000
region: EMMC_BOOT_1
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: BOOTLOADERS
reserve: 0x00
- partition_index: SYS1
partition_name: MBR
file_name: MBR
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x880000
physical_start_addr: 0x0
partition_size: 0x80000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
- partition_index: SYS2
partition_name: EBR1
file_name: EBR1
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x900000
physical_start_addr: 0x0
partition_size: 0x80000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
- partition_index: SYS3
partition_name: PRO_INFO
file_name: NONE
is_download: false
type: NONE
linear_start_addr: 0x980000
physical_start_addr: 0x0
partition_size: 0x300000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: PROTECTED
reserve: 0x00
- partition_index: SYS4
partition_name: NVRAM
file_name: NONE
is_download: false
type: NONE
linear_start_addr: 0xc80000
physical_start_addr: 0x0
partition_size: 0x500000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: BINREGION
reserve: 0x00
- partition_index: SYS5
partition_name: PROTECT_F
file_name: NONE
is_download: false
type: NONE
linear_start_addr: 0x1180000
physical_start_addr: 0x0
partition_size: 0xa00000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: PROTECTED
reserve: 0x00
- partition_index: SYS6
partition_name: PROTECT_S
file_name: NONE
is_download: false
type: NONE
linear_start_addr: 0x1b80000
physical_start_addr: 0x0
partition_size: 0xa00000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: PROTECTED
reserve: 0x00
- partition_index: SYS7
partition_name: SECCFG
file_name: NONE
is_download: false
type: NONE
linear_start_addr: 0x2580000
physical_start_addr: 0x0
partition_size: 0x20000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: INVISIBLE
reserve: 0x00
- partition_index: SYS8
partition_name: UBOOT
file_name: lk.bin
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x25a0000
physical_start_addr: 0x0
partition_size: 0x60000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
使用这个文件,现在来说,scatter文件是正确的,下面就看看lk的大小是不是一样的。
作者:
zangcf
时间:
2016-2-29 20:40
研究发现,目标ROM有两个kernel。
第一个kernel在0x2600000位置,
第二个kernel在0x2c00000位置
===================================
上面分析是错误的,两个kernel,一个是正常的kernel,一个是recovery,符合下面定义。
- partition_index: SYS9
partition_name: BOOTIMG
file_name: boot.img
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x2600000
physical_start_addr: 0x0
partition_size: 0x600000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
- partition_index: SYS10
partition_name: RECOVERY
file_name: recovery.img
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x2c00000
physical_start_addr: 0x0
partition_size: 0x600000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
作者:
zangcf
时间:
2016-2-29 20:44
下面分析SECRO这个段的内容,发现,和808的定义完全一样:
- partition_index: SYS11
partition_name: SEC_RO
file_name: secro.img
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x3200000
physical_start_addr: 0x0
partition_size: 0x40000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
作者:
zangcf
时间:
2016-2-29 20:45
下面分析logo.bin的定义了:
确实还是一样的:
- partition_index: SYS12
partition_name: MISC
file_name: NONE
is_download: false
type: NONE
linear_start_addr: 0x3240000
physical_start_addr: 0x0
partition_size: 0x80000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: INVISIBLE
reserve: 0x00
- partition_index: SYS13
partition_name: LOGO
file_name: logo.bin
is_download: true
type: NORMAL_ROM
linear_start_addr: 0x32c0000
physical_start_addr: 0x0
partition_size: 0x300000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
作者:
zangcf
时间:
2016-2-29 21:04
下面研究最重要的段,system.img了,看看开始位置:
system分区的开始地址也符合:
- partition_index: SYS15
partition_name: ANDROID
file_name: system.img
is_download: true
type: YAFFS_IMG
linear_start_addr: 0x3fc0000
physical_start_addr: 0x0
partition_size: 0x13600000
region: EMMC_USER
storage: HW_STORAGE_EMMC
boundary_check: true
is_reserved: false
operation_type: UPDATE
reserve: 0x00
下面计算system分区的大小:
搜/DATA没有搜到,看样子没有备份下来/DATA的内容,需要重新备份
作者:
zangcf
时间:
2016-3-1 14:55
本帖最后由 zangcf 于 2016-3-1 14:56 编辑
找到/data段的开始了[attach]86[/attach]
这样,可以计算出userdata段的大小
作者:
zangcf
时间:
2016-3-1 16:38
userdata和system之间还有一个cache区域:
[attach]87[/attach]
欢迎光临 Discuz! Board (http://47.89.242.157:9000/bbs/discuz/)
Powered by Discuz! X3.2