s5pv210加入recovery功能分析

1.确定分区大小

name start length
bootloader 49 ~2M
boot 8M
recovery 8M
system 512M
data 1024M
cache 256M
sdcard all reserved
2.fastboot或sdfuse刷机时最终调用的路径是rx_handle->write_to_ptn->do_movi->movi_write(bootloader, kernel, ramdisk)或rx_handle->write_to_ptn->do_mmcops(system, data, cache, fat)

3.set_partition_table中设置分区的信息,以供fastboot和sdfuse使用,其中bootloader, kernel, ramdisk不设置,而是采用硬编码。

4.int init_raw_area_table (block_dev_desc_t * dev_desc)分析

init_raw_area_table用于给变量raw_area_t raw_area_control赋值,此函数在mmc_startup是被调用,raw_area_t raw_area_control变量会在刷bootloader, kernel, ramdisk时被用到用于硬编码这些分区的烧写位置,主要在do_movi函数中被使用。do_movi函数最终也是调用do_mmcops函数来实现的,只是do_movi比起do_mmcops封装了分区的名字,可以使用名字来,从分区raw_area_t raw_area_control中找到具体的读写位置,操作分区读写时比mmc方便(此处提到的分区并不是pc硬盘分区的概念,是指人为指定的各个存储区域,每个区域用于存储一个image)。

5.s5pv210是如何分区的?

文件common/cmd_fastboot.c中的变量static fastboot_ptentry ptable[MAX_PTN]保存flash的分区划分情况。其中的fwbl1, bootloader, kernel , ramdisk是用硬编码即此处不设分区的开始位置和大小而是实际调用do_movi时从raw_area_t raw_area_contro变量中读取分区的硬编码位置和大小。其他的分区system, userdata, cache和fat格式的分区则是从mbr中读取的开始位置和大小,并在do_mmcops中被使用。patable中的flag变量则指定对分区读写时是采用do_movi还是do_mmcops。

6.do_fdisk命令对flash创建分区表并写入mbr。

7.此数据架构中的transger_buffery用于保存执行fastboot和sdfuse时下载的或从fat分区中读取的image文件的内容,rx_handler用于把文件写到对应分区

 119 static struct cmd_fastboot_interface interface = 
 120 {
 121         .rx_handler            = rx_handler,
 122         .reset_handler         = reset_handler,
 123         .product_name          = NULL,
 124         .serial_no             = NULL,
 125         .nand_block_size       = 0,
 126         .transfer_buffer       = (unsigned char *)0xffffffff,
 127         .transfer_buffer_size  = 0,
 128 };

 130 static unsigned int download_size;//当执行fastboot是保存下载的数据大小,执行sdfuse时为0

 131 static unsigned int download_bytes;

你可能感兴趣的:(s5pv210加入recovery功能分析)