关于开机logo实现方法

caobinec   2010-6-19 15:53 楼主
关于开机logo实现方法:(因为我的图片比较大,由于eboot有512k的限制,所以想把图片烧写在NandFlash某个固定的地址,Eboot运行时读取该地址内容,放入显示缓冲里实现)
1:把图片转化为何种格式
2:如何通过eboot烧写
3:有没有方法通过设置pb 把logo编译为和nk.bin一样格式的文件(如果这样就好办了)
4:谢谢各位赐教

回复评论 (24)

图片不用转,EBOOT要实现下载LOGO,要有软件支持。就是说你的EBOOT要有这个功能。BMP格式很简单的。
点赞  2010-6-19 16:10
不知道楼主是什么logo的,怎么会有512K的大小呢?
点赞  2010-6-19 16:48
引用: 引用楼主 wangyuluyulu 的回复:
关于开机logo实现方法:(因为我的图片比较大,由于eboot有512k的限制,所以想把图片烧写在NandFlash某个固定的地址,Eboot运行时读取该地址内容,放入显示缓冲里实现)
1:把图片转化为何种格式
2:如何通过eboot烧写
3:有没有方法通过设置pb 把logo编译为和nk.bin一样格式的文件(如果这样就好办了)
4:谢谢各位赐教


1,格式可以是BMP或者BIN
2,修改EBOOT代码,跟烧写NK一样(或者你用仿真器烧)
3,你是指二进制文件吧 你可以用工具转
4,不客气。。。看下EBOOT下载NK的流程代码就应该能解决
5,自己先动手吧,遇到问题再交流  嘿嘿
点赞  2010-6-20 00:05
是动态Logo?
点赞  2010-6-20 10:16
1、图片转换为.bin格式,.bin格式有两种(个人定义):a、网上多多数工具是将bmp直接转换成bin格式,这个bin从第一个字节一直到结束开始便是图片信息,不能用Eboot直接下载,需对Eboot进行修改;b、和NK.bin相同的格式,包含有标志、起始地址、跳转地址、大小、校验和、记录等,这个可以直接用Eboot进行下载;

2、对于上述第一种bin,需要对Eboot进行修改,因为Eboot在下载bin文件时,会从bin文件中找出下载地址、大小等信息后才能下载,而直接从.bmp转的.bin不具备这样的条件,所以要修改Eboot,一般的做法是添加新的命令,在新命令下直接对固定block进行烧写,启动时,在到固定block进行读。而对于上述第二种bin可以和烧写nk.bin或Eboot.bin的方法一样,相比,第一种方法太土。

3、楼主问的很好,回答是肯定的。问题的焦点即是和Eboot.bin一样格式的文件该如何转换:
   我曾经尝试过载PB下搞,失败告终。
   最终是用WinHex这个工具实现的,涉及东西比较多,大概如下(以logo.bin为名):
   1)、熟知像Eboot.bin文件的格式;
   2)、logo.bin文件做成只有一条有用记录,一条结束记录的文件。
   
    现在能想起来的就这么多了,楼主具体做时遇到问题咱们再交流。
    另外,总感觉用WinHex的方法比较笨,不知大家还有别的好的方法没有?

引用: 引用楼主 wangyuluyulu 的回复:
关于开机logo实现方法:(因为我的图片比较大,由于eboot有512k的限制,所以想把图片烧写在NandFlash某个固定的地址,Eboot运行时读取该地址内容,放入显示缓冲里实现)
1:把图片转化为何种格式
2:如何通过eboot烧写
3:有没有方法通过设置pb 把logo编译为和nk.bin一样格式的文件(如果这样就好办了)
4:谢谢各位赐教
点赞  2010-6-20 11:57
支持5楼
点赞  2010-6-20 16:02
谢谢,各位大侠的支持,今天看了代码,发现有一条思路,就是在eboot里面添加一个命令用于下载logo.bin
(和nk.bin的格式不一样,像转化和nk.bin一样的但是不知如何转化。故转化为普通的二进制文件)当在eboot中按下该命令,就调用nandflash的烧写函数,将该logo.bin文件烧写在nandflash的固定地址,(像JTAG烧写一样)然后在eboot的main.c函数中添加NANDFLASH的读函数。把图片数据读入显示缓存中显示出来
我修改的函数有1:eboot.bib 2:loader.h 3:image_cfg.h
            4:在eboot的main.c函数中添加了下载命令
我明天会贴出自己修改的函数望各位仁兄多多支持,指教,万分感谢!
我想遇到的问题是:
1:nandflash的烧写函数不知添加在哪个文件夹下
2:同时读取函数放哪里。
明天坚持看代码。谢谢!
3:
点赞  2010-6-21 21:16
最终是用WinHex这个工具实现的,涉及东西比较多,大概如下(以logo.bin为名):
1)、熟知像Eboot.bin文件的格式;
  2)、logo.bin文件做成只有一条有用记录,一条结束记录的文件。
请问五楼仁兄是把logo转化为和NK.bin一样的文件了吗?可以转化吗?如果转化成功的话那么我只要在blcomm.c文件的在下载之前添加case一下判断logo.bin的头文件7个字节,然后直接调用DOWNIMAGEBIN()
函数,想烧写nk.bin一样就可以了啊。就不用在写nandflash函数,只要读nandflash函数就可以了啊!
请五楼仁兄明示。谢谢,明天继续跟进,请各位大侠关注,谢谢!
点赞  2010-6-21 21:25
引用: 引用 8 楼 wangyuluyulu 的回复:
最终是用WinHex这个工具实现的,涉及东西比较多,大概如下(以logo.bin为名):
1)、熟知像Eboot.bin文件的格式;
  2)、logo.bin文件做成只有一条有用记录,一条结束记录的文件。
请问五楼仁兄是把logo转化为和NK.bin一样的文件了吗?可以转化吗?如果转化成功的话那么我只要在blcomm.c文件的在下载之前添加case一下判断logo.bin的头文件7个字节,……

logo文件可以自己做成像nk.bin和eboot.bin一样的格式的BIN文件,只要熟悉那个格式就行,可以通过WINHEX手动修改,也可以自己编写一个WINDOWS下的应用程序,读取BMP图片然后转换成EBOOT能直接下载的BIN文件,这样也不需要修改BLCOMMON.C,只需要修改的是OEMVerifyMemory()函数用来判断出是LOGO.BIN。

EBOOT通过bin文件形式读取、下载LOGO
点赞  2010-6-22 09:39
上边是个参考的链接
点赞  2010-6-22 09:39
下面是我在各个文件里添加的代码:请各位指教:
1:在D:\WINCE600\PLATFORM\SMDKC100\SRC\BOOTLOADER_FMD\EBOOT\ebbot.bin里面添加
    LOGO        89000000    00500000    RESERVED ; LOGO           :Muscle Boy
开辟5M的空间
2:在D:\WINCE600\PLATFORM\SMDKC100\SRC\INC\image_cfg.h里面添加
//logo Area Muscle Boy
#define IMAGE_LOGO_OFFSET           (0x09000000)
#define IMAGE_LOGO_PA_START         (DRAM_BASE_PA_START+IMAGE_LOGO_OFFSET)
#define IMAGE_LOGO_CA_START         (DRAM_BASE_CA_START+IMAGE_LOGO_OFFSET)
#define IMAGE_LOGO_UA_START         (DRAM_BASE_UA_START+IMAGE_LOGO_OFFSET)
#define IMAGE_LOGO_SIZE             (0x00500000 ) //5M
//logo Area Muscle Boy
3:在D:\WINCE600\PLATFORM\SMDKC100\SRC\BOOTLOADER_FMD\EBOOT\loader.h里面添加
//Muscle Boy   logo
#define LOGO_BLOCK                 6
#define LOGO_BLOCK_SIZE            25
#define LOGO_SECTOR BLOCK_TO_SECTOR(LOGO_BLOCK)  
//Muscle Boy
#define RESERVED_BOOT_BLOCKS  (NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE +EBOOT_BLOCK_SIZE+ LOGO_BLOCK_SIZE)
4:
点赞  2010-6-22 10:40
请问10楼仁兄
只需要修改的是OEMVerifyMemory()函数用来判断出是LOGO.BIN。?
同时我还在loader.h里面添加

//Muscle Boy
#define LOGO_RAM_IMAGE_BASE    (IMAGE_LOGO_CA_START)
#define LOGO_RAM_IMAGE_SIZE    (IMAGE_LOGO_SIZE)

#define LOGO_STORE_OFFSET      (0)
#define LOGO_STORE_ADDRESS     (LOGO_RAM_IMAGE_BASE + LOGO_STORE_OFFSET)
#define LOGO_STORE_MAX_LENGTH  (LOGO_RAM_IMAGE_SIZE)
//Muscle Boy
同时在OEMVerifyMemory()函数里面添加

//MUscle BOY
   else if ((dwStartAddr >= LOGO_STORE_ADDRESS) &&
        ((dwStartAddr + dwLength - 1) < (LOGO_STORE_ADDRESS + LOGO_STORE_MAX_LENGTH)))
    {
        EdbgOutputDebugString("OEMVerifyMemory: Eboot image\r\n");
        g_ImageType = IMAGE_TYPE_LOADER;     // Eboot image.
        return TRUE;
    }
   //Muscle Boy
现在的任务就是用WINHEX软件改写自己的.bmp格式的转化为和eboot.bin格式一样的文件就可以了吗?
接下边分别是4字节映像的起始地址dwImageStart、4字节映像大小dwImageLength,接着分别是4字节接收地址dwRecAddr、4字节接收长度dwRecLen、4字节接收检验和dwRecChk,接下来是.bmp压缩后的数据,
然后在用nandflash的读取函数读取该地址的数据就可以了吗?
请指教哦
点赞  2010-6-22 10:53
请问我的logo.bin文件该如何做啊
谢谢!
点赞  2010-6-22 11:07
如果仅仅为了解决问题的话,我觉得一般LOGO图案不会太复杂,简单压缩一下放在EBOOT中问题应该不大。
我的LOGO就是写了个matlab程序,把320x240x24bit的bmp转换成RGB565,并使用最简单的RLE压缩了一下,不到10K字节,直接放到数组里面了。
点赞  2010-6-22 11:32
你用的是基于什么硬件环境的什么操作系统?
点赞  2010-6-22 13:55
wince6.0 友坚的S5PC100
点赞  2010-6-22 14:15
顶起。
点赞  2010-6-22 14:17
引用: 引用 13 楼 wangyuluyulu 的回复:
请问我的logo.bin文件该如何做啊
谢谢!

你理解了EBOOT.BIN或者NK.bin文件结构,就可以自己做你的LOGO.BIN~基本要求:
1,怎么让系统知道要下载的是LOGO.BIN且能正确下载
2,下载完后能正确完整的读到显存。

关于这个BIN结构,要研究下NK.BIN~注意NK.BIN和EBOOT.BIN是分段的哦~
这个只是思路,具体怎么写函数,加代码,这个LZ参考下载EBOOT.BIN的过程。

点赞  2010-6-22 20:42
Veabol说的没错,利用WinHex的关键是弄清楚类试Eboot.bin的结构!
如何弄清楚Eboot.bin的结构,用WinHex打开Eboot.bin结合Veabol提供的链接,仔细读16进制码,没有开玩笑,真得这么干,不然很难理解。

引用: 引用 9 楼 veabol 的回复:
引用 8 楼 wangyuluyulu 的回复:
最终是用WinHex这个工具实现的,涉及东西比较多,大概如下(以logo.bin为名):
1)、熟知像Eboot.bin文件的格式;
2)、logo.bin文件做成只有一条有用记录,一条结束记录的文件。
请问五楼仁兄是把logo转化为和NK.bin一样的文件了吗?可以转化吗?如果转化成功的话那么我只要在blcomm.c文件的在下载之前添加c……
点赞  2010-6-23 11:44
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复