EBoot支持SD卡下载升级Bootloader和WinCE系统
来源:互联网 发布:74153数据选择器 编辑:程序博客网 时间:2024/05/29 18:16
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升级 回忆
- STL map 和 string
- Android 控件开发之ToggleButton
- 寇 纲 老师
- 不要以你的现状来判断你的未来—俞敏洪6月2号在同济大学的演讲
- JDBC事务隔离级别
- EBoot支持SD卡下载升级Bootloader和WinCE系统
- ios的一个架构小例子---异步请求的封装
- java序列化的一点经验
- 间隔一段时间实现页面跳转
- python基础_序列
- 一个需求引发的关于平板电脑的思考
- ResolveInfo.activityInfo.applicationInfo.name与ResolveInfo.activityInfo.name
- DP/單調隊列::poj3250 Bad Hair Day
- Java 序列化的高级认识