Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8|回复: 8
打印 上一主题 下一主题

分析mtk的spflashtool读出来的文件格式

[复制链接]

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
跳转到指定楼层
楼主
发表于 2016-2-29 16:53:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分析mtk的spflashtool读出来的文件格式
回复

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
沙发
 楼主| 发表于 2016-2-29 20:02:09 | 只看该作者
首先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的差别呢?

回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
板凳
 楼主| 发表于 2016-2-29 20:33:42 | 只看该作者
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的大小是不是一样的。
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
地板
 楼主| 发表于 2016-2-29 20:40:50 | 只看该作者
研究发现,目标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
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
5#
 楼主| 发表于 2016-2-29 20:44:06 | 只看该作者
下面分析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
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
6#
 楼主| 发表于 2016-2-29 20:45:51 | 只看该作者
下面分析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
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
7#
 楼主| 发表于 2016-2-29 21:04:54 | 只看该作者
下面研究最重要的段,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的内容,需要重新备份
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
8#
 楼主| 发表于 2016-3-1 14:55:09 | 只看该作者
本帖最后由 zangcf 于 2016-3-1 14:56 编辑

找到/data段的开始了

这样,可以计算出userdata段的大小

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
9#
 楼主| 发表于 2016-3-1 16:38:12 | 只看该作者
userdata和system之间还有一个cache区域:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2025-12-15 02:07 , Processed in 0.016480 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表