WinCE6.0 修改开机Logo方法
中秋假期已过,回来继续该博文主题。今天讲解第二种方法,将 Logo 图片的数据写入到 Nand Flash 中,在启动初始化 LCD 的时候,从固定的地址将数据读出并填充到显示缓存中。
lash的某一位置上。
#define NBOOT_BLOCK 0
#define NBOOT_BLOCK_SIZE 1
#define NBOOT_SECTOR BLOCK_TO_SECTOR(NBOOT_BLOCK)
// TOC @ Block 1
#define TOC_BLOCK 1
#define TOC_BLOCK_SIZE 1
#define TOC_SECTOR BLOCK_TO_SECTOR(TOC_BLOCK)
// Eboot @ Block 2
#define EBOOT_BLOCK 2
#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)
#define EBOOT_BLOCK_SIZE SECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)
#define EBOOT_SECTOR BLOCK_TO_SECTOR(EBOOT_BLOCK)
#define EBOOT_BLOCK 2
#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)
#define EBOOT_BLOCK_SIZE SECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)
#define EBOOT_SECTOR BLOCK_TO_SECTOR(EBOOT_BLOCK)
//-----------------------add by jazka 2011.09.04-------------------------
//-----------------------------start--------------------------------------
// Logo @ Block 6~
#define LOGO_BLOCK 6
#define LOGO_BLOCK_SIZE 20
#define LOGO_SECTOR BLOCK_TO_SECTOR(LOGO_BLOCK)
//----------------------------- end ---------------------------------------
//-----------------------modify by jazka 2011.09.04-----------------------
//-----------------------------start---------------------------------------
//#define RESERVED_BOOT_BLOCKS (NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE)
#define RESERVED_BOOT_BLOCKS (NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE + LOGO_BLOCK_SIZE)
//add by jazka 2011.09.05
//-----------------------------start---------------------------------
EdbgOutputDebugString ( "G) DOWNLOAD Logo now(USB)\r\n");
//----------------------------- end ---------------------------------
EdbgOutputDebugString ( "L) LAUNCH existing Boot Media image\r\n");
EdbgOutputDebugString ( "R) Read Configuration \r\n");
EdbgOutputDebugString ( "U) DOWNLOAD image now(USB)\r\n");
EdbgOutputDebugString ( "W) Write Configuration Right Now\r\n");
EdbgOutputDebugString ( "\r\nEnter your selection: ");
while (! ( ( (KeySelect >= '0') && (KeySelect <= '9') ) ||
( (KeySelect == 'A') || (KeySelect == 'a') ) ||
( (KeySelect == 'B') || (KeySelect == 'b') ) ||
( (KeySelect == 'C') || (KeySelect == 'c') ) ||
( (KeySelect == 'D') || (KeySelect == 'd') ) ||
( (KeySelect == 'E') || (KeySelect == 'e') ) ||
( (KeySelect == 'F') || (KeySelect == 'f') ) ||
( (KeySelect == 'G') || (KeySelect == 'g') ) || //add by jazak 2011.09.05
( (KeySelect == 'L') || (KeySelect == 'l') ) ||
( (KeySelect == 'R') || (KeySelect == 'r') ) ||
( (KeySelect == 'U') || (KeySelect == 'u') ) ||
( (KeySelect == 'W') || (KeySelect == 'w') ) ))
{
KeySelect = OEMReadDebugByte();
}
//--------------------------start-----------------------------
case 'G':
case 'g':
{
OALMSG(TRUE, (TEXT("Please send the Logo through USB.\r\n")));
g_bUSBDownload = TRUE;
{
DWORD dwStartAddr = 0;
LPBYTE lpDes = NULL;
lpDes = (LPBYTE)(FILE_CACHE_START);
if (!OEMReadData(LCD_WIDTH*LCD_HEIGHT*2, lpDes))
{
OALMSG(TRUE, (TEXT("Error when sending the Logo through USB.\r\n")));
SpinForever();
}
dwStartAddr = (DWORD)lpDes;
if (!WriteLogoToBootMedia(dwStartAddr, (DWORD)(LCD_WIDTH*LCD_HEIGHT*2), dwStartAddr))
{
OALMSG(TRUE, (TEXT("Error when WriteLogoToBootMedia.\r\n")));
SpinForever();
}
}
}
break;
//-------------------------- end -----------------------------
#if(SMDK6410_LCD_MODULE == LCD_MODULE_UT_LCD35A)
memcpy((void *)EBOOT_FRAMEBUFFER_UA_START, (void *)InitialImage_rgb16_320x240, 320*240*2);
#elif (LCD_BPP == 16)
{
//delete by jazka 2011.08.31 修改开机启动界面
/* int i;
unsigned short *pFB;
pFB = (unsigned short *)EBOOT_FRAMEBUFFER_UA_START;
for (i=0; i<LCD_WIDTH*LCD_HEIGHT; i++)
{
//*pFB++ = 0x0000;//0x001F; // Blue
//*pFB++ = 0x001F; //modify by jazka 2011.07.22
*pFB++ = InitialImage_rgb16_480x272[i];
}
*/
//add by jazka 2011.08.31
//memcpy((void *)EBOOT_FRAMEBUFFER_UA_START, (void *)InitialImage_rgb16_480x272, 480*272*2);
//modify by jazka 2011.09.07
DWORD dwReadAddr = (DWORD)EBOOT_FRAMEBUFFER_UA_START;
if (!DisplayLogoFromBootMedia(dwReadAddr, (DWORD)LCD_WIDTH*LCD_HEIGHT*2, dwReadAddr))
{
int i;
unsigned short *pFB;
pFB = (unsigned short *)EBOOT_FRAMEBUFFER_UA_START;
for (i=0; i<LCD_WIDTH*LCD_HEIGHT; i++)
*pFB++ = 0x0000;//0x001F; // Blue
}
Write the Logo data to Nand Flash
add by jazka 2011.09.05
*/
BOOL WriteLogoToBootMedia(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
DWORD dwBlock,dwNumBlocks;
LPBYTE pbBuffer;
SectorInfo si;
OALMSG(TRUE, (TEXT("+WriteLogoToBootMedia\r\n")));
dwBlock = LOGO_BLOCK;
pbBuffer = (LPBYTE)dwImageStart;
OALMSG(TRUE, (TEXT("^^^^^^^^ 0x%x ^^^^^^^^\r\n"), (unsigned short *)pbBuffer));
dwNumBlocks = (dwImageLength/(g_FlashInfo.wDataBytesPerSector*g_FlashInfo.wSectorsPerBlock)) +
(dwImageLength%(g_FlashInfo.wDataBytesPerSector*g_FlashInfo.wSectorsPerBlock) ? 1: 0);
OALMSG(TRUE, (TEXT("dwImageLength = 0x%x \r\n"), dwImageLength));
OALMSG(TRUE, (TEXT("dwNumBlocks = 0x%x \r\n"), dwNumBlocks));
while (dwNumBlocks--)
{
OALMSG(TRUE, (TEXT("dwBlock(0x%x) X "), dwBlock));
OALMSG(TRUE, (TEXT("g_FlashInfo.wSectorsPerBlock(0x%x)"), g_FlashInfo.wSectorsPerBlock));
OALMSG(TRUE, (TEXT(" = 0x%x \r\n"), dwBlock*g_FlashInfo.wSectorsPerBlock));
FMD_ReadSector(dwBlock*g_FlashInfo.wSectorsPerBlock, NULL, &si, 1);
// Stepldr & Eboot image in nand flash
// block mark as BLOCK_STATUS_RESERVED & BLOCK_STATUS_READONLY & BLOCK_STATUS_BAD
if ((si.bBadBlock == 0x0) && (si.bOEMReserved !=3 ))
{
++dwBlock;
++dwNumBlocks; // Compensate for fact that we didn't write any blocks.
continue;
}
if (!ReadBlock(dwBlock, NULL, g_pSectorInfoBuf))
{
OALMSG(OAL_ERROR, (TEXT("WriteData: failed to read block (0x%x).\r\n"), dwBlock));
return(FALSE);
}
if (!FMD_EraseBlock(dwBlock))
{
OALMSG(OAL_ERROR, (TEXT("WriteData: failed to erase block (0x%x).\r\n"), dwBlock));
return FALSE;
}
if (!WriteBlock(dwBlock, pbBuffer, g_pSectorInfoBuf))
{
OALMSG(OAL_ERROR, (TEXT("WriteData: failed to write block (0x%x).\r\n"), dwBlock));
return(FALSE);
}
++dwBlock;
pbBuffer += g_FlashInfo.dwBytesPerBlock;
OALMSG(TRUE, (TEXT("dwBytesPerBlock : %d\r\n"), g_FlashInfo.dwBytesPerBlock));
}
OALMSG(TRUE, (TEXT("_WriteLogoToBootMedia\r\n")));
return TRUE;
}
Read the Logo data from Nand Flash
add by jazka 2011.09.05
*/
BOOL DisplayLogoFromBootMedia(DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
unsigned int * pFB32 = (unsigned int *)EBOOT_FRAMEBUFFER_UA_START;
unsigned int * dst = pFB32;
//unsigned int * p = NULL;
SectorInfo si;
DWORD dwBlock,dwNumBlocks;
OALMSG(TRUE, (TEXT("+ReadLogoFromBootMedia\r\n")));
dwBlock = LOGO_BLOCK;
OALMSG(TRUE, (TEXT("dwImageLength = 0x%x \r\n"), dwImageLength));
OALMSG(TRUE, (TEXT("dwImageLength = 0x%x \r\n"), g_FlashInfo.wDataBytesPerSector));
OALMSG(TRUE, (TEXT("dwImageLength = 0x%x \r\n"), g_FlashInfo.wSectorsPerBlock));
if (0 == g_FlashInfo.wDataBytesPerSector || 0 == g_FlashInfo.wSectorsPerBlock)
{
return FALSE;
}
dwNumBlocks = (dwImageLength / (g_FlashInfo.wDataBytesPerSector*g_FlashInfo.wSectorsPerBlock)) +
(dwImageLength%(g_FlashInfo.wDataBytesPerSector*g_FlashInfo.wSectorsPerBlock) ? 1: 0);
OALMSG(TRUE, (TEXT("dwNumBlocks = 0x%x \r\n"), dwNumBlocks));
while (dwNumBlocks--)
{
OALMSG(TRUE, (TEXT("dwBlock(0x%x) X "), dwBlock));
OALMSG(TRUE, (TEXT("g_FlashInfo.wSectorsPerBlock(0x%x)"), g_FlashInfo.wSectorsPerBlock));
OALMSG(TRUE, (TEXT(" = 0x%x \r\n"), dwBlock*g_FlashInfo.wSectorsPerBlock));
//BOOL ReadBlock(DWORD dwBlock, LPBYTE pbBlock, PSectorInfo pSectorInfoTable)
if (!ReadBlock(dwBlock, (LPBYTE)dst, g_pSectorInfoBuf))
{
OALMSG(OAL_ERROR, (TEXT("WriteData: failed to read block (0x%x).\r\n"), dwBlock));
return(FALSE);
}
dst += g_FlashInfo.dwBytesPerBlock/4;
++dwBlock;
}
OALMSG(TRUE, (TEXT("_ReadLogoFromBootMedia\r\n")));
return TRUE;
}
今天就到这里,改天上实现方法二:将 Logo.bin 做成和 Eboot.bin 一样的格式,这样下载 Eboot.bin 的很多代码就可以直接使用。
本文出自 “飞雪待剑” 博客,请务必保留此出处http://jazka.blog.51cto.com/809003/664131
WinCE6.0 修改开机Logo方法相关推荐
- WinCE6.0 修改开机Logo方法集锦(二)
中秋假期已过,回来继续该博文主题.今天讲解第二种方法,将Logo图片的数据写入到Nand Flash中,在启动初始化LCD的时候,从固定的地址将数据读出并填充到显示缓存中.<?xml:na ...
- 修改服务器系统显示logo,Win10修改开机LOGO界面样式怎么改?教你修改win10开机LOGO界面样式的方法...
正常情况下,Windows10系统开机界面显示"田字格"LOGO,看久了感觉很疲惫,想要将默认LOGO换成其他样式,这可以随意更改吗?答案是可以的.那么Win10修改开机LOGO界 ...
- 高通平台msm8916修改开机logo【原创】
经过两天的奋战终于把开机logo给搞定了啊. 首先修改开机logo要从哪里入手呢?先分析一下源码看看. ---> 1 void display_image_on_screen() 2 { 3 s ...
- [RK3588 Android12]修改开机logo和播放开机视频
1.修改开机logo 替换kernel-5.10/logo.bmp和logo_kernel.bmp两个图片文件即可修改开机logo,替换后编译报错 error: out/target/product/ ...
- Android 8.0 开机动画,RK3326 android10.0(Q) 开机logo+开关机动画替换
RK3326 android10.0(Q) 开机logo+开关机动画替换 2020年08月14日 | 萬仟网移动技术 | 我要评论 开机logouboot和kernel阶段的logo分别为开机显示的第 ...
- MT6765 + Android9.0修改开机动画
工作中经常因客户不同需要修改开机动画.开机第一帧.不同平台修改方式也不同,为此整理此文档希望能帮助大家. 下面是3大厂商修改开机动画后对GMS.OTA升级影响列表: 可以知道MTK.高通平台如果只修改 ...
- 修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位
修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位 文章目录 修改开机LOGO图片教程及注意事项/通过C++实现bmp图位深度从32位转换为8位 修改开机LOGO图片教 ...
- Android修改开机Logo和开机动画
做车机一般都会修改开机Logo和开机动画,下面只是记录我项目中修改开机Logo和开机动画的方法,仅供参考: 关于开机logo的修改,是将一张分辨率合适的名字必须为boot_logo.bmp格式的位深是 ...
- Rockchip3066 修改开机 LOGO 和开机动画
Rockchip3066 修改开机 LOGO 和 开机动画: 一.主要使用的工具是:FirmwareTool_Release_v3.3 文件夹,RK30DevelopTool 文件夹,还有 RKFac ...
最新文章
- 关于Python的一点学习总结(55-time的使用)
- React中跨域问题的完美解决方案
- 第一课 计算机组成原理(哈工大)
- 软件工程的实践项目课程的自我目标
- 五十五、Java单元测试类Junit
- 机器学习笔试面试超详细总结(一)
- Maven精选系列--标准目录结构
- 51 -算法 -LeetCode 53最大子序和 动态规划
- pip安装mysql python_使用pip安装MySQL在Windows上安装MySQL python不工作?
- 自己写的一个 游标 实例
- objective-C 的OOP(上)--类定义、继承及方法调用
- Python玩转emoji表情 一行代码的事儿!
- 全民一起玩python实战篇百度云_【全民一起玩python】下载 - 面包树
- 基于JSP小型超市管理系统
- Manjaro 安装xmind 8
- php文件上传管理系统,介绍14款实用的开源的PHP在线文档管理系统
- ActiveMQ 默认用户名和密码
- 喝王老吉可延长寿命大约10%?
- Redis的那些事儿:关系型和非关系型数据库,非关系型数据库的类型,redis数据类型、编码格式、高性能、可以做什么、分布式锁失效的原因,string为采用sds数据类型,为什么是二进制安全的,
- ASO检索规则-热词覆盖如何来做?
热门文章
- 用numpy,matplotlib库画笛卡尔爱心曲线
- 1008 数组元素循环右移问题 (20分)
- oracle不属于集合操作,Oracle的几个集合操作
- 【C语言进阶深度学习记录】二十一 # 和 ## 号操作符的使用与分析
- Hive分区和桶的概念
- mysql数据库之事务与存储过程
- Selenium 自动化测试基础知识
- solr的一些查询语法
- WCF从理论到实践(14):WCF解决方案模板 (转)
- [安全模型][Cambria Math][A][]敌手A-> 怎么打出来?