全志A33文件系统结构浅分析

来源:互联网 发布:全国网络交易平台 编辑:程序博客网 时间:2024/05/18 00:55






#define CONFIG_SYS_SDRAM_BASE     (0x40000000)
内部sdram的起始地址是:0x40000000
内部sdram的大小是1G
0x40000000-0x7ff00000


#define CONFIG_SYS_TEXT_BASE     (0x4A000000)
内部sdram偏移160M的地方是uboot的首地址




uboot常用命令解释:
以下(d)表示10进制    -xxxx 
    (h)表示16进制  0x-xxxx

1.
mw      - memory write (fill)
mw.b 40000000 ff 100000
以字节方式填充40000000地址开始的100字节个数据,
填充内容是ff


2.
md 内存显示 dump
md 40000000
3.
sunxi_flash- sunxi_flash sub-system
3.1
flash逻辑分区读




sunxi_flash log_read 40000000 8000 10






3.2
flash物理分区读


sunxi_flash phy_read 40000000 8000 10
#define BOOT0_SDMMC_START_ADDR                  (16)
boot0的起始物理地址为:物理第16(d)扇区开始
也即0x10(h)
sunxi_flash phy_read 40000000 10 a
从emmc中偏移地址为0x10(h)扇区开始
读取a扇区数据到
sdram地址0x40000000






boot1
#define UBOOT_START_SECTOR_IN_SDMMC             (38192)
就是uboot
uboot的起始物理地址为:物理第38192(d)扇区开始
也即0x9530(h)
sunxi_flash phy_read 40000000 9530 a


4.




从sys_config.fex中找到下面的配置
logical_start   = 40960(d)
A000(h)
从而将逻辑分区与物理分区联系起来
逻辑分区的起始地址是物理分区的0xA000开始
也就是物理分区的0xA000是逻辑分区0


也就是说flash的前面0x1400000(20M)是被隐藏起来的
通过逻辑分区是访问不到的
这个20M主要是用来保存系统的mbr,boot0,boot1(uboot)的
具体映射关系如下:
0-1fff 16扇区 8k
MBR


2000-a000
32k
boot0


0x12A6000-0x1400000
为boot1(uboot)的存储位置
大概1M+5*64k+10*4k 1024+360k 1384k




sunxi_flash phy_read 40000000 A000 a
















































如何引导系统之前,了解一下机器内部Flash空间是如何划分的.
各个分区又是用作存储什么内容的.
下面以我手头上8G A33为例. 
内部Flash芯片空间是8G, 这8G空间一共被分为9个分区.


--------fastboot partitions--------
-total partitions:10-
-name-        -start-       -size-      


bootloader  : 1000000       2000000   
bootloader -> /dev/block/mmcblk0p2
分区1:bootloader   (32M) 
只是一些启动的图片资源 启动动画


真正的uboot不在这里




sunxi_flash log_read 40000000 8000 10
sunxi_flash phy_read 40000000 12000 10
12000=a000+8000
  
env         : 3000000       1000000   
env -> /dev/block/mmcblk0p5  
分区2:ENV     (16M) 
这个分区保存的是UBOOT引导器的配置信息
包括启动时执行的命令,从那个分区加载
内核配置信息        
内核,又是从哪个分区加载恢复系统内核




sunxi_flash log_read 40000000 18000 10
sunxi_flash phy_read 40000000 22000 10
22000=a000+18000




boot        : 4000000       1000000  
boot -> /dev/block/mmcblk0p6  
分区3:BOOT(16M) 
存放基础的Linux内核文件(boot.img)分区没有文件系统,是直接把可运行的内核
Linux内核分区       
文件写入分区空间,BOOT分区的uboot引导区会加载本分区内容到内存运行


sunxi_flash log_read 40000000 20000 10
sunxi_flash phy_read 40000000 2a000 10
2a000=a000+20000








 
system      : 5000000       30000000   
system -> /dev/block/mmcblk0p7
分区4:SYSTEM (768M)
Android系统分区,也就是/system目录下的所有文件存放的分区,为ext3/ext4格式
Android系统分区
本分区包括Java格式的系统运行库还有部分没有编译进内核的硬件驱动库(elf格式)


sunxi_flash log_read 40000000 28000 10
sunxi_flash phy_read 40000000 32000 10
32000=a000+28000


 
misc        : 35000000      1000000   
misc -> /dev/block/mmcblk0p8
分区5:MISC (16M)    
这个分区一般不使用,唯一作用是为了让Android系统与内核引导时交流,可以指引
Android配置分区 重启机器后让内核进行一些特殊的操作,如:进入恢复程序,更新系统文件等操作
sunxi_flash log_read 40000000 1a8000 10
sunxi_flash phy_read 40000000 1b2000 10
1b2000=a000+1a8000




  
recovery    : 36000000      2000000  
recovery -> /dev/block/mmcblk0p9
分区6:RECOVERY(32M)
一个特殊的微型Linux系统,可以不依靠BOOT和SYSTEM分区启动,类似PC的一键还原
Android恢复系统
可对其他分区进行更新或备份. 
如何实现恢复损坏的系统或者系统内核在后面说明.
sunxi_flash log_read 40000000 1b0000 10
sunxi_flash phy_read 40000000 1ba000 10
1ba000=a000+1b0000
   
cache       : 38000000      20000000
cache -> /dev/block/mmcblk0p10    
分区7: CACHE(512M)  
这个分区并不是做虚拟内存之类的缓存,
这个分区最大的作用是做系统升级时保存
缓存分区            
更新文件的(FAT格式). 配合MISC分区的配置语句来使用,详细以后介绍.
sunxi_flash log_read 40000000 1c0000 10
sunxi_flash phy_read 40000000 1ca000 10
1ca000=a000+1c0000




metadata    : 58000000      1000000 
metadata -> /dev/block/mmcblk0p11
分区8: metadata (16M)   
不知道干啥用的










 


sunxi_flash log_read 40000000 2c0000 10
sunxi_flash phy_read 40000000 2ca000 10
2ca000=a000+2c0000








    
private     : 59000000      1000000  
private -> /dev/block/mmcblk0p12
分区9: private
(16M)   
不知道干啥用的


sunxi_flash log_read 40000000 2c8000 10
sunxi_flash phy_read 40000000 2d2000 10
2d2000=a000+2c8000












   
UDISK       : 5a000000      0     
分区10: UDISK(所有)
UDISK -> /dev/block/mmcblk0p1
没错,剩下的所有空间,都被划分给内置卡作为存储空间,8G空间扣除1-9分区的
内置存储卡分区      
使用后,大概就是剩下的空间,这就是为什么内置卡容量只有很小一部分
Android数据分区,也就是/data/data/目录对应的分区,为ext3/ext4格式
Android数据分区,这就是我们所说的把应用安装到机器内存所对应的空间,
同时保存各种动态系统设置,lib等
sunxi_flash log_read 40000000 2d0000 10
sunxi_flash phy_read 40000000 2da000 10
2da000=a000+2d0000
      
-----------------------------------
base bootcmd=run setargs_nand boot_normal








lrwxrwxrwx root     root              2017-04-13 13:42 UDISK -> /dev/block/mmcblk0p1
lrwxrwxrwx root     root              2017-04-13 13:42 boot -> /dev/block/mmcblk0p6
lrwxrwxrwx root     root              2017-04-13 13:42 bootloader -> /dev/block/mmcblk0p2
lrwxrwxrwx root     root              2017-04-13 13:42 cache -> /dev/block/mmcblk0p10
lrwxrwxrwx root     root              2017-04-13 13:42 env -> /dev/block/mmcblk0p5
lrwxrwxrwx root     root              2017-04-13 13:42 metadata -> /dev/block/mmcblk0p11
lrwxrwxrwx root     root              2017-04-13 13:42 misc -> /dev/block/mmcblk0p8
lrwxrwxrwx root     root              2017-04-13 13:42 private -> /dev/block/mmcblk0p12
lrwxrwxrwx root     root              2017-04-13 13:42 recovery -> /dev/block/mmcblk0p9
lrwxrwxrwx root     root              2017-04-13 13:42 system -> /dev/block/mmcblk0p7














fastboot -i 0x1f3a reboot
















 
0 0