EBoot支持SD卡下载升级Bootloader和WinCE系统
来源:互联网 发布:java swing 按键监听 编辑:程序博客网 时间:2024/06/05 19:06
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升级 回忆
- 盐碱地治理-泥炭土方法
- 6年漂泊,回来了
- OC方法关键字
- HDU 4373 Mysterious For
- How to get your ASP.NET application working in IE11
- EBoot支持SD卡下载升级Bootloader和WinCE系统
- OpenCV---在图片上添加文字
- Hbase与MapReduce
- nyoj-803-A/B Problem
- magent编译安装及常见错误
- mac os jdk1.7 还原成1.6
- hdu-1213-How Many Tables
- C++ Socket编程 基础三:网络嗅探器Sniffer
- 微软资深软件工程师:阅读代码真的很难