关于6410+WinCE6.0开机界面logo的问题
关于开机logo一般有两种实现方法:
方法一:以头文件的形式打包在EBOOT.bin中,但是该方法往往导致EBOT.bin太大;
方法二:将bmp转换成bin文件,烧写在NandFlash某个固定的地址,Eboot运行时读取该地址内容,放入显示缓冲里实现。
第一种方法在此不讨论,关于第二种方法,刚开始做就遇到问题,(我用的是UT-6410),问题如下:
1、在image_cfg中有以下配置:
#define DRAM_BASE_PA_START (0x50000000) //DRAM物理起始地址?
#define DRAM_BASE_CA_START (0x80000000) //
#define DRAM_BASE_UA_START (0xA0000000) //DRAM经过MMU映射后的虚拟起始地址?
后面的注释是我加的,请问加的是否正确?0x80000000是什么地址?难道是DMA缓存地址?这个问题很菜,哈哈
2、在使用SD卡进行烧写EBOOT.bin时,提示地址是:
ImageStart = 0x80030000, ImageLength = 0x42F38, LaunchAddr = 0x80066D64
这个0x80030000肯定不是NandFlash物理地址,问题就是什么时候将EBOOT.bin的内容写到了NandFlash里?写到了什么地
方?谁干的?
因为在烧写NK.bin的时候,提示地址是:mageStart = 0x80100000, ImageLength = 0x1F3C49C, LaunchAddr =
0x801076EC,在写完后要等待一段时间(1分钟?)系统才能自启动,这一分钟肯定是将先写到0x80030000(到底是DRAM还
是缓存)中NK.bin解析到NandFlash中,同样我也不知道烧到了NandFlash的什么地方?
先问两个问题吧,有关开机界面遇到的问题以及最终解决方法,努力在这个帖子有个完整结贴。
[解决办法]
#define DRAM_BASE_PA_START (0x50000000) // ARM,物理地址
#define DRAM_BASE_CA_START (0x80000000) // WINCE系统物理地址
#define DRAM_BASE_UA_START (0xA0000000) // 加了0X20000000
ImageStart = 0x80030000, 内存映像载入地址
ImageLength = 0x42F38, 映像长度
LaunchAddr = 0x80066D64 映像执行地址
NK.BIN是从闪存运到内存的,在内存中解压缩....
开机的LOGO可以在EBOOT阶段加入初始化DISPlay,阶段内存开辟一端控制放LOGO,然后系统起来的加载...............
[解决办法]
我们做的每个产品都有开机Logo,甚至产品序列号、PCB版本号等等。都是以二进制形式存储在Nand Flash中的,至于存在哪里?怎么写入?怎么读?你自己完全可以在代码中自己控制啊!
关于你的问题,看我的解答:
1、在image_cfg中有以下配置:
#define DRAM_BASE_PA_START (0x50000000) //DRAM物理起始地址?
#define DRAM_BASE_CA_START (0x80000000) //
#define DRAM_BASE_UA_START (0xA0000000) //DRAM经过MMU映射后的虚拟起始地址?
后面的注释是我加的,请问加的是否正确?0x80000000是什么地址?难道是DMA缓存地址?这个问题很菜,哈哈
注释基本都是对的,第一行是DRAM的物理地址,第二行是经过MMU映射之后的虚拟地址,第三行是在虚拟地址的基础上增加了Cache(即缓存)后的地址。和DMA没什么关系,这些地址你在MMU映射转换表中应该能看得到的。
2、在使用SD卡进行烧写EBOOT.bin时,提示地址是:
ImageStart = 0x80030000, ImageLength = 0x42F38, LaunchAddr = 0x80066D64
这个0x80030000肯定不是NandFlash物理地址,问题就是什么时候将EBOOT.bin的内容写到了NandFlash里?写到了什么地方?谁干的?
因为在烧写NK.bin的时候,提示地址是:mageStart = 0x80100000, ImageLength = 0x1F3C49C, LaunchAddr =
0x801076EC,在写完后要等待一段时间(1分钟?)系统才能自启动,这一分钟肯定是将先写到0x80030000(到底是DRAM还
是缓存)中NK.bin解析到NandFlash中,同样我也不知道烧到了NandFlash的什么地方?
EBoot的ImageStart=0x80030000是指Eboot运行时在DRAM中的地址,这是在Build Eboot时在Eboot.bib中指定的。后面的LaunchAddr是指Eboot运行起来时真正执行代码的地方,因为Paltform Builder做出来的Eboot.bin中,前面有一段头的,最开始是跳转指令,后面一部分是空的,真正的代码在后面偏移0x76EC的地方。至于将Eboot.bin烧到了什么地方,这里是看不出来的,要看你的具体代码。
同理,NK.bin显示的ImageStart=0x80100000也是指NK将来在DRAM中运行时的地址。LaunchAddr也是跳转过去真正执行的代码的位置。NK.bin烧的位置也要看你代码。
[解决办法]