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
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮