Android 双u盘方案



1      L1813系统上双U盘设计方案——系统设计

1.1     方案背景

Android原生的磁盘管理方案,设计的思想是将EMMC上的空间通过sdcardserver模拟成一个StorageVolume,供用户作为外部存储空间使用,而该部分空间是不能通过切换大容量存储在PC侧供用户使用,只能通过MTP协议,将手机和PC侧互联,从而在PC侧读取手机侧的外部存储空间的内容。Android原生也是留出了给外置SD卡的设计接口,允许外置SD卡通过大容量存储的方式同PC侧相连接。


2.1.1 Android原生设计存储方案

这里需要分清一个概念,Android原生设计的外部存储空间,和我们常规意义上理解是不同的,Android原生将所有用户可见的存储空间都定义为外部存储空间,而本文以下所指的外部存储空间,特指外置SD卡所表示的存储空间。而本文以下所指的内部存储空间(内置U盘),特指从EMMC上独立划分出来的一个分区所表示的手机EMMC上的一块存储空间。本文所指的双U盘方案,即指的是在Android系统上,同时存在外部存储空间和内部存储空间,并且在切换大容量存储的时候,可以在PC侧同时出现两个可移动磁盘。

2.1.2 AndroidU盘生设计存储方案

U盘方案涉及到Android系统磁盘存储的整体框架,从APPFrameworkVoldKernel几个层次进行整体修改和设计。从EMMC上缩小userdata分区大小,将新增加空间做为一块固定大小的分区,作为内置U盘分区,而外置的SD卡作为外置U盘分区,从而形成双U盘的方案。系统运行时,需要保证能在不重启的前提下,动态的切换默认存储的分区,并保证上层应用的稳定性和安装第三方应用的正确性。本文将从底向上的层次顺序描述该方案。


1.2     Bootloader层对EMMC的分区调整

2.2.1背景知识

在嵌入式操作系统中,分区只是内核的概念,就是说AB[p1] 地址放内核,CD地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等,而对于bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统。。。这些起始地址在kernel的分区信息中能找到。所以bootloader对分区的概念不重要,只要它能把内核烧到A位置,把文件系统烧到C位置。

所以,在bootloaderFlash进行操作时,哪块区域放什么是以内核为主,而为了方便操作,bootloader类似也引入分区的概念。所以,如果你是通过uboot的内核命令行给kernel层传递分区信息,这种情况下,内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法);而如果你是把分区信息写在内核源代码里定义好的方法,那最好保证它和u-boot中的保持一致,即同步修改uboot及内核的相关部分。

目前L1813kernel版本已经不支持通过uboot的内核命令行给kernel传递分区信息的方式,目前采用的是一种在uboot里就配置好所有分区信息,从而直接使用。

2.2.2 L1813针对双U盘的分区调整方法

目前,L1813方案的分区设置是在bootable/bootloader/uboot/include/configs/下针对不同项目有不同的.h的配置文件,以ust802手机的P0版手机为例,需要查看并修改comip_ust802_v1_0.h的相关分区信息。

2.2.2.1分区结构体

struct partition {

       ulong sector_size;

       ulong start;

       ulong length;

       const char *name;

};

 

成员名

描述

sector_size

每个扇区大小

start

分区起始地址

length

分区长度

char *name

分区名称

2.2.2.2 分区详细信息

每个扇区大小(单位:字节)

分区起始位置

分区所占扇区数目(分区长度)

分区名称

5120x200

0x00000000

0x00000100

Uboot

5120x200

0x00000400

0x00000400

lcboot

5120x200

0x00000800

0x00002000

logo

5120x200

0x00002800

0x00000800

fota

5120x200

0x00003000

0x00000800

panic

5120x200

0x00003800

0x00001000

amt

5120x200

0x00004800

0x00008000

modemarm

5120x200

0x0000C800

0x00001620

modemdsp0

5120x200

0x0000DE20

0x000009E0

modemdsp1

5120x200

0x0000E800

0x00002000

kernel

5120x200

0x00010800

0x00000800

ramdisk

5120x200

0x00011000

0x00000800

ramdisk_amt1

5120x200

0x00011800

0x00000800

ramdisk_amt3

5120x200

0x00012000

0x00000800

ramdisk_recovery

5120x200

0x00012800

0x00002000

kernel_recovery

5120x200

0x00018000

0x00001000

misc

5120x200

0x00020000

0x00040000

cache

5120x200

0x00060000

0x000c0000

system

5120x200

0x00120000

0x005e0800

userdata

1ust802_v1_0手机分区详表

2.2.2.3分区修改方法

U盘方案需要将EMMC上缩小userdata[p2] 分区的1G空间,将该空间作为一个1G大小的新分区,称为udisk分区,作为内置存储空间。

调整后的分区信息如下标红部分(udisk分区从userdata分区头部划分,是为了方便后期调整EMMC大小时,可以直接从userdata分区尾部调整):

每个扇区大小(单位:字节)

分区起始位置

分区所占扇区数目(分区长度)

分区名称

5120x200

0x00000000

0x00000100

uboot

5120x200

0x00000400

0x00000400

lcboot

5120x200

0x00000800

0x00002000

logo

5120x200

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值