#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