首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

关于6410+WinCE6.0开机界面logo的有关问题

2012-03-29 
关于6410+WinCE6.0开机界面logo的问题关于开机logo一般有两种实现方法:方法一:以头文件的形式打包在EBOOT.

关于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烧的位置也要看你代码。
[解决办法]

探讨
typedef struct _TOC {
    DWORD              dwSignature;
    // How to boot the images in this TOC.
    // This could be moved into the image descriptor if desired,
    // but I prefer to conserve space.
    BOOT_CFG            BootCfg;

    // Array of Image Descriptors.
    IMAGE_DESCRIPTOR    id[MAX_TOC_DESCRIPTORS];



    CHAININFO          chainInfo;
} TOC, *PTOC;          // 512 bytes
这个数组很关键我觉得,因为NandFlash的第1个block就是放了它,我现在怀疑,Eboot就是靠它区分出是Nboot.bin、Eboot.bin还是NK.bin的。继续看代码……


[解决办法]
探讨
用Eboot烧.bmp是不支持啊,怎么烧呢?
将.bmp打包进NK?

引用:
不一定要是.bin文件的啊,直接烧写bmp就是了,显示的时候解析下就行了啊,没有必要再转化成.BIN啊


[解决办法]
探讨
我们做的每个产品都有开机Logo,甚至产品序列号、PCB版本号等等。都是以二进制形式存储在Nand Flash中的,至于存在哪里?怎么写入?怎么读?你自己完全可以在代码中自己控制啊!

我就是向实现这个,可不会啊……

热点排行