DSP

dm6446 系统引导过程

2019-07-13 15:09发布

一、引导过程 1、系统接收        DM6446基于ARM9+DSP架构,存储空间的分配与一般的ARM9处理器不同,DM6446的存储空间利用率很高,有很大部分空间是ARM与DSP核共用或只分配给DSP用。 EMIF: external Memory Interface 外部存储接口,共有四个可用Bank,每个Bank 32M。通过CS2,CS3,CS4,CS5 PIN来片选,对应CE0,CE1,CE2,CE3。 地址分配如下:
CE0:      0x0200 0000----0x03FF FFFF
CE1:      0x0400 0000----0x05FF FFFF
CE2:      0x0600 0000----0x07FF FFFF
CE3:      0x0800 0000----0x09FF FFFF
  2、引导过程         DM6446上电复位后,将运行片内ROM中的RBL(Rom BootLoader)程序,RBL根据BTSEL[0-3]来确定启动方式,如果是从Nand启动,RBL将从NandFlash的Block 1处加载UBL程序到内部RAM指定地址处(0x0100)运行。该指定地址是在烧写UBL二进制文件时由烧录程序自动添加在UBL文件前面的,保存在头信息(Header)的第一个字(Uint32)。之后UBL再加载u-boot到DDR指定地址(0x81080000),该地址也同样是由烧录程序添加在u-boot前面的文件头的第一个字(Uint32)。之后控制权就交给了U-boot。 3、空间大小        在我们设计的板子中,nandflash使用的是128Mib的,每页大小为2048bytes,每块有64页。UBL放在block1,U-boot放在block6,其后的kernel和rootfs可自行调整。 实际设计时我们的NandFlash 分区如下: Partition      start                               end                    size
Uboot:        0x000C      0000----------0x000F FFFF     256k (0x0004 0000)
Kernel:       0x0014      0000----------0x0033 FFFF      2M    (0x0020 0000)
Rootfs:       0x0034      0000----------0x0433 FFFF      64M  (0x0400 0000)
Userfs:    0x0434      0000----------0x0800 0000     ~61M  (0x03CC 0000)
  4、启动信息       Linux 启动时信息
      DaVinci NAND Controller rev. 2.1
      NAND device: Manufacturer ID: 0x2c, Chip ID: 0xa1 (Unknown NAND 128MiB 1,8V 8-bit)
      Scanning device for bad blocks
      Creating 4 MTD partitions on "NAND 128MiB 1,8V 8-bit":
      0x000c0000-0x00100000 : "uboot"
      0x00140000-0x00340000 : "kernel"
      0x00340000-0x04340000 : "rootfs"
      0x04340000-0x08000000 : "userfs"
5、NandFlash 烧写示意图       NandFlash烧写存储空间示意图:                           Header信息是烧写程序根据在烧录过程中加入的,并非UBL或U-boot本身含有。 6、DDR       DDR空间为0x8000 0000到0x8FFF FFFF 共256M。 系统由UBL引导到u-boot后,控制权就给了u-boot,由u-boot进行一系列的初始化工作。然后加载linux 内核镜像,启动linux。       DDR存储空间示意图:                             U-boot 会在内核镜像文件前加0x40 个字节的头信息,所以真正内核的入口地址在 0x82000040处,这点在用mkimage制作uImage时要注意。
   ./mkimage -n  'linux-2.6.10' -A  arm -O  linux -T  kernel -C  none -a  0x82000000 -e  0x8200040 -d zImage uImage