四极管:EBoot支持SD卡下载升级Bootloader和WinCE系统
来源:互联网 发布:淘宝一元秒杀 技巧 编辑:程序博客网 时间:2024/06/05 07:31
void main(void)
{
//MemoryTest_Function();
BootloaderMain();
// Should never get here.
SpinForever();
}
BOOL OEMReadData(DWORD dwData, PUCHAR pData)
{
BOOL ret;
OALMSG(OAL_FUNC, (TEXT("+OEMReadData.\r\n")));
if ( g_dwDownloadDevice == DOWNLOAD_DEVICE_NONE )
{
ret = EbootEtherReadData(dwData, pData);
}
else if ( g_dwDownloadDevice == DOWNLOAD_DEVICE_USB )
{
ret = USBReadData(dwData, pData);
}
else if ( g_dwDownloadDevice == DOWNLOAD_DEVICE_SD )
{
ret = SDReadData(dwData, pData);
}
return(ret);
}
BOOL ReadFileFromSD( const char *sFileName, UINT32 dwImageType, BYTE *Buffer )
{
ULONG nFileNumber;
ULONG i;
BYTE * ptxBuf;
unsigned int nCheckSum = 0;
ULONG fileSize;
FILEINFO hFile = {0};
if (!FATOpenFile(&hFile, sFileName))
return FALSE;
EdbgOutputDebugString("Reading '%s' from SD Card, Waitting\r\n", sFileName);
EdbgOutputDebugString("Please don't remove Card\r\n");
if ( dwImageType == UBIIMAGE || dwImageType == BINIMAGE )
{
fileSize = FATGetFileSize (&hFile);
if ( !fileSize )
{
EdbgOutputDebugString("%s file Get size Error\n", sFileName);
return FALSE;
}
FATReadFile(&hFile, Buffer, fileSize);
g_pDownPt += fileSize;
EdbgOutputDebugString("Read from Card OK\r\n");
}
else if ( dwImageType == NB0IMAGE || dwImageType == DIOIMAGE )
{
nFileNumber = 1;
memset((void *)Buffer, 0, 7+4+4+4+4+MAX_PATH);
ptxBuf = Buffer;
*(ptxBuf++)=0x4E;//N000FF\x0A
*(ptxBuf++)=0x30;
*(ptxBuf++)=0x30;
*(ptxBuf++)=0x30;
*(ptxBuf++)=0x46;
*(ptxBuf++)=0x46;
*(ptxBuf++)=0xa;
fileSize = FATGetFileSize (&hFile); //nb0 filesize
// Read nb0 file
if (!FATReadFile(&hFile, (BYTE *)(Buffer+7+4+4+4+4+MAX_PATH + 1), fileSize))
{
RETAILMSG(1,(TEXT("#### File READ ERROR\r\n")));
while(1);
}
// 缓冲区字节对齐读取后,数据被后移一个字节,拷贝回来
memcpy(Buffer+7+4+4+4+4+MAX_PATH, Buffer+7+4+4+4+4+MAX_PATH + 1, fileSize);
ptxBuf = Buffer + 7 + 4 + 4;
*(ptxBuf+0) = 0; //nb0 start address == 0
*(ptxBuf+1) = 0; //nb0 start address == 0
*(ptxBuf+2) = 0; //nb0 start address == 0
*(ptxBuf+3) = 0; //nb0 start address == 0
*(ptxBuf+4) = (BYTE)((fileSize >> 0) & 0xff);
*(ptxBuf+5) = (BYTE)((fileSize >> 8) & 0xff);
*(ptxBuf+6) = (BYTE)((fileSize >> 16) & 0xff);
*(ptxBuf+7) = (BYTE)((fileSize >> 24) & 0xff);
strcpy((char *)(ptxBuf+8), sFileName);
nCheckSum = 0;
for ( i = 0; i < 4+4+MAX_PATH; i++ )
{
nCheckSum += (unsigned char)(*(ptxBuf+i));
}
ptxBuf = Buffer+7;
*(ptxBuf+0) = (BYTE)((nCheckSum >> 0) & 0xff);
*(ptxBuf+1) = (BYTE)((nCheckSum >> 8) & 0xff);
*(ptxBuf+2) = (BYTE)((nCheckSum >> 16) & 0xff);
*(ptxBuf+3) = (BYTE)((nCheckSum >> 24) & 0xff);
*(ptxBuf+4) = (BYTE)((nFileNumber >> 0) & 0xff);
*(ptxBuf+5) = (BYTE)((nFileNumber >> 8) & 0xff);
*(ptxBuf+6) = (BYTE)((nFileNumber >> 16) & 0xff);
*(ptxBuf+7) = (BYTE)((nFileNumber >> 24) & 0xff);
g_pDownPt += (7+4+4+4+4+MAX_PATH);
g_pDownPt += FATGetFileSize (&hFile);
}
else
{
EdbgOutputDebugString("SDInterface Parsing param error!!!\r\n");
}
FATCloseFile(&hFile);
return TRUE;
}
其实大部分的功能实现都是仿照USB下载来完成的,如果EBOOT中没有USB下载可以仿照,也可以仿照网络下载,实现方式都是大同小异。只是FAT文件系统和SD读写需要自己实现。
- EBoot支持SD卡下载升级Bootloader和WinCE系统
- EBoot支持SD卡下载升级Bootloader和WinCE系统
- EBoot支持SD卡下载升级Bootloader和WinCE系统
- 四极管:EBoot支持SD卡下载升级Bootloader和WinCE系统
- imx53通过SD卡升级EBOOT和NK
- s3c2443Eboot支持SD卡升级
- wince添加SD卡的支持
- Android系统SD卡升级
- uboot,eboot和bootloader的联系
- SD卡升级实现方法之UBOOT+WINCE应用
- Wince bootloader和内核定制
- Wince bootloader和内核定制
- Wince bootloader和内核定制
- WinCE Eboot中加入Linux boot的支持
- 修改wince系统识别的SD卡和U盘的名字
- Mobile的SD卡升级系统之二:热升级
- Mobile的SD卡升级系统之二:热升级
- 6410 wince IROM引导SD升级 回忆
- 算法导论代码 第12章 二叉查找树
- 什么是AOP? AOP .Net 框架,AOP 资源
- 数据结构——二叉树的遍历
- GXT之旅:第一章:初识ExtGWT(5)——用GXT组件替换GWT组件
- 关于oracle导出excel和excel导入oracle的经验总结
- 四极管:EBoot支持SD卡下载升级Bootloader和WinCE系统
- openwrt -- virtulabox
- 注册表操作技巧
- Android 开发人员必须掌握的 10 个开发工具
- iPhone/Mac Objective-C内存管理教程和原理剖析(一)
- 算法导论代码 第13章 红黑树
- Android Service解析
- 执行添加删除操作时提示代码元素类名是只读的
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)