1. 存储资源
SDRAM: SDRAM地址空间:0x30000000 ~ 0x34000000
NORFLASH:
NANDFLASH
SRAM:
mini2440里有一个内置的SRAM,叫做stepping stone(垫脚石,很形象…),系统启动加电后,会把nand flash上的起始4KB的内容拷贝到SRAM里执行,这样就实现了从nand flash启动。如果bootloader小于4KB的话(像vboot),在SRAM里就能boot,大于4KB的话(u-boot,vivi),在SRAM里做一些基本初始化后,再把bootloader的剩余部分拷贝到SDRAM里(>0x30000000)。
==========================================================================
2. 嵌入式 Linux 软件结构与分布一般情况下嵌入式Linux系统中的软件主要分为以下几部分:
1) 引导加载程序:其中包括内部ROM 中的固化启动代码和BootLoader 两部分。
内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。
有的芯片比较复杂,比如Omap3在flash 中没有代码的时候有许多启动方式:
USB、UART或以太网等等。而S3C24x0 则很简单,只有Norboot 和
Nandboot。
2) Linux kernel和drivers。
3) 文件系统。包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4、
UBI、CRAMFS等等)。它是提供管理系统的各种配置文件以及系统执行用户应
用程序的良好运行环境及载体。
4) 应用程序。用户自定义的应用程序,存放于文件系统之中。
在Flash 存储器中,他们的分布一般如下:
但是以上只是大部分情况下的分布,也有一些可能根文件系统是initramfs,被一起压缩到了内核映像里,或者没有Bootloader参数区,等等。
==========================================================================
3. 地址空间分配和片选信号定义S3C2440支持两种启动模式:一种是从Nand Flash启动(MINI2440即是此种);一种
是从Nor Flash启动。在此两种启动模式下,各个片选的存储空间分配是不同的,如下图:
上图中,
左边是nGCS0 片选的Nor Flash启动模式下的存储分配图;
右边是Nand Flash 启动模式下的存储分配图;
说明:SFR Area为特殊寄存器地址控制
下面是器件地址空间分配和其片选定义
在进行器件地址说明之前,有一点需要注意,nGCS0片选的空间在不同的启动模式下,映射的器件是不一样的。由上图可以知道:
在NAND Flash 启动模式下,内部的4K Bytes BootSram被映射到nGCS0 片选的空间;
在Nor Flash 启动模式下(非Nand Flash启动模式),与nGCS0相连的外部存储器Nor Flash 就被映射到nGCS0 片选的空间
SDRAM 地址空间:0x30000000 ~ 0x34000000
==========================================================================
4. 内核中 NAND Flash 的分区在移植好的内核中,/arch/arm/match-s3c2440/match-mini2440.c中可以看到:
点击(此处)折叠或打开
- static struct mtd_partition friendly_arm_default_nand_part[]= {
- [0]= {
- .name = "supervivi",
- .size = 0x00040000,
- .offset = 0,
- },
- [1]= {
- .name = "param",
- .offset = 0x00040000,
- .size = 0x00020000,
- },
- [2]= {
- .name = "Kernel",
- .offset = 0x00060000,
- .size = 0x00500000,
- },
- [3]= {
- .name = "root",
- .offset = 0x00560000,
- .size = 1024 * 1024 * 1024, //
- },
- [4]= {
- .name = "nand",
- .offset = 0x00000000,
- .size = 1024 * 1024 * 1024, //
- }
- };
==========================================================================
5 这些地址是如何联系起来的呢?在《 mini2440 之 U-boot 移植详细手册 -20100419 》4.3 下载与烧写
使用U-boot 将映像文件烧写到板上的Flash,一般步骤是:
(1)通过网络、串口、U 盘、SD 卡等方式将文件传输到SDRAM;
(2)使用Nand Flash 或Nor Flash 相关的读写命令将SDRAM 中的数据烧入Flash。
下面是烧写范例:
如果使用 SD 卡和U 盘形式更新U-boot,那么首先SD 卡和U 盘中必须有FAT32 文件系统,并在里面存放了u-boot.bin 文件。
4.3.1 通过 SD 卡烧入Nand Flash:
点击(此处)折叠或打开
- [u-boot@MINI2440]# mmc init
- mmc: Probing for SDHC ...
- mmc: SD 2.0 or later card found
- trying to detect SD Card...
- Manufacturer: 0x00, OEM "Product name: " ", revision 0.0
- Serial number: 7864775
- Manufacturing date: 11/2006
- CRC: 0x4f, b0 = 1
- READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095
- size = 0
- SD Card detected RCA: 0x2 type: SD
- mmc1 is available
- [u-boot@MINI2440]# fatload mmc 1 0x30008000 u-boot.bin
- reading u-boot.bin
- 256220 bytes read
- [u-boot@MINI2440]# nand erase 0 0x40000
- NAND erase: device 0 offset 0x0, size 0x40000
- Erasing at 0x2000000000004 -- 0% complete.
- OK
- [u-boot@MINI2440]# nand write 0x30008000 0 0x40000
- NAND write: device 0 offset 0x0, size 0x40000
- Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK
使用u-boot烧写一遍就很清楚了。supervivi则省去了让我们从SDRAM写入数据到nand flash上。
==========================================================================
参考:
[1] mini2440之U-boot移植详细手册-20100419
[2] mini2440用户手册 -20100925