




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
作者:wogoyixikexiegliet 2008-12-10=一直在用优龙的ADS bootloader,对eboot的认识还停留在在刚来公司时候的水平,貌似我只看过eboot的startup.s,现在使用优龙的bootloader遇到很多障碍,最大缺陷就是不支持binfs以及FAT分区,这个导致了不能实现multibin,FAT的问题还可以配置注册表实现自动化分区功能,但是这样还是不理想,但是优龙的bootloader太好用了,不想放弃这块肥肉,所以决定参考eboot增加优龙bootloader的binfs以及FAT分区功能。我的一贯做法是查找关键字眼,然后从关键点入手看程序。现在就看实现eboot功能的菜单程序吧。=平台描述:2440+64M flash/SDRAM+ 5.0BSP1. 0)IPaddress:192.168.0.12 2. 1)Subnetmask:255.255.255.0 3. 2)DHCP:Disabled 4. 3)Bootdelay:5seconds 5. 4)Resettofactorydefaultconfiguration 6. 5)Startupimage:DOWNLOADNEW 7. 6)ProgramdiskimageintoSmartMediacard:Disabled 8. 7)ProgramCS8900MACaddress(11:12:22:33:44:55) 9. 8)KernelDebugger:DISABLED 10. 9)FormatBootMediaforBinFS/- 11. E)EraseReservedBlock 12. B)MarkBadBlockatReservedBlock 13. F)Low-levelformattheSmartMediacard/- 14. D)Downloadimagenow 15. L)LAUNCHexistingBootMediaimage 16. R)ReadConfiguration 17. U)DOWNLOADimagenow(USB) 18. W)WriteConfigurationRightNow 19. A)EraseAllBlocks 20.21. Enteryourselection:1. /* 2. funcBOOL|MainMenu|ManagestheSamsungbootloadermainmenu. 3. rdescTRUE=SuccessandFALSE=Failure. 4. comm 5. xref 6. */ 7.8. staticBOOLMainMenu(PBOOT_CFGpBootCfg) 9. 10. BYTEKeySelect=0; 11. BOOLbConfigChanged=FALSE; 12. BOOLEANbDownload=TRUE; 13. DWORDi; 14.15. while(TRUE) 16. 17. KeySelect=0; 18.19. EdbgOutputDebugString(/r/nEthernetBootLoaderConfiguration:/r/n/r/n); 20. EdbgOutputDebugString(0)IPaddress:%s/r/n,inet_ntoa(pBootCfg-EdbgAddr.dwIP); 21. EdbgOutputDebugString(1)Subnetmask:%s/r/n,inet_ntoa(pBootCfg-SubnetMask); 22. EdbgOutputDebugString(2)DHCP:%s/r/n,(pBootCfg-ConfigFlags&CONFIG_FLAGS_DHCP)?Enabled:Disabled); 23. EdbgOutputDebugString(3)Bootdelay:%dseconds/r/n,pBootCfg-BootDelay); 24. EdbgOutputDebugString(4)Resettofactorydefaultconfiguration/r/n); 25. EdbgOutputDebugString(5)Startupimage:%s/r/n,(g_pBootCfg-ConfigFlags&BOOT_TYPE_DIRECT)?LAUNCHEXISTING:DOWNLOADNEW); 26. EdbgOutputDebugString(6)ProgramdiskimageintoSmartMediacard:%s/r/n,(pBootCfg-ConfigFlags&TARGET_TYPE_NAND)?Enabled:Disabled); 27. EdbgOutputDebugString(7)ProgramCS8900MACaddress(%B:%B:%B:%B:%B:%B)/r/n, 28. g_pBootCfg-EdbgAddr.wMAC0&0x00FF,g_pBootCfg-EdbgAddr.wMAC08, 29. g_pBootCfg-EdbgAddr.wMAC1&0x00FF,g_pBootCfg-EdbgAddr.wMAC18, 30. g_pBootCfg-EdbgAddr.wMAC2&0x00FF,g_pBootCfg-EdbgAddr.wMAC28); 31. EdbgOutputDebugString(8)KernelDebugger:%s/r/n,(g_pBootCfg-ConfigFlags&CONFIG_FLAGS_DEBUGGER)?ENABLED:DISABLED); 32. EdbgOutputDebugString(9)FormatBootMediaforBinFS/r/n); 33.34. /N.B:weneedthisoptionheresinceBinFSisreallyaRAMimage,whereyouformatthemedia 35. /withanMBR.ThereisnowaytoparsetheimagetosayitsmenttobeBinFSenabled. 36. EdbgOutputDebugString(E)EraseReservedBlock/r/n); 37. EdbgOutputDebugString(B)MarkBadBlockatReservedBlock/r/n); 38. EdbgOutputDebugString(F)Low-levelformattheSmartMediacard/r/n); 39. EdbgOutputDebugString(D)Downloadimagenow/r/n); 40. EdbgOutputDebugString(L)LAUNCHexistingBootMediaimage/r/n); 41. EdbgOutputDebugString(R)ReadConfiguration/r/n); 42. EdbgOutputDebugString(U)DOWNLOADimagenow(USB)/r/n); 43. EdbgOutputDebugString(W)WriteConfigurationRightNow/r/n); 44. EdbgOutputDebugString(A)EraseAllBlocks/r/n); 45. EdbgOutputDebugString(/r/nEnteryourselection:); 46.47. while(!(KeySelect=0)&(KeySelectConfigFlags&=CONFIG_FLAGS_DHCP;/clearDHCPflag 69. bConfigChanged=TRUE; 70. break; 71. case1:/Changesubnetmask. 72. SetMask(pBootCfg); 73. bConfigChanged=TRUE; 74. break; 75. case2:/Togglestatic/DHCPmode. 76. pBootCfg-ConfigFlags=(pBootCfg-ConfigFlagsCONFIG_FLAGS_DHCP); 77. bConfigChanged=TRUE; 78. break; 79. case3:/Changeautobootdelay. 80. SetDelay(pBootCfg); 81. bConfigChanged=TRUE; 82. break; 83. case4:/Resetthebootloaderconfigurationtodefaults. 84. OALMSG(TRUE,(TEXT(ResettingdefaultTOC./r/n); 85. TOC_Init(DEFAULT_IMAGE_DESCRIPTOR,(IMAGE_TYPE_RAMIMAGE|IMAGE_TYPE_BINFS),0,0,0); 86. if(!TOC_Write() 87. OALMSG(OAL_WARN,(TEXT(TOC_WriteFailed!/r/n); 88. 89. OALMSG(TRUE,(TEXT(.TOCcomplete/r/n); 90. break; 91. case5:/Toggledownload/launchstatus. 92. pBootCfg-ConfigFlags=(pBootCfg-ConfigFlagsBOOT_TYPE_DIRECT); 93. bConfigChanged=TRUE; 94. break; 95. case6:/ToggleimagestoragetoSmartMedia. 96. pBootCfg-ConfigFlags=(pBootCfg-ConfigFlagsTARGET_TYPE_NAND); 97. bConfigChanged=TRUE; 98. break; 99. case7:/ConfigureCrystalCS8900MACaddress. 100. SetCS8900MACAddress(pBootCfg); 101. bConfigChanged=TRUE; 102. break; 103. case8:/ToggleKD 104. g_pBootCfg-ConfigFlags=(g_pBootCfg-ConfigFlagsCONFIG_FLAGS_DEBUGGER); 105. g_bWaitForConnect=(g_pBootCfg-ConfigFlags&CONFIG_FLAGS_DEBUGGER)?TRUE:FALSE; 106. bConfigChanged=TRUE; 107. continue; 108. break; 109. case9: 110. /formatthebootmediaforBinFS 111. /N.B:thisdoesnotdestroyourOEMreservedsections(TOC,bootloaders,etc) 112. if(!g_bBootMediaExist) 113. OALMSG(OAL_ERROR,(TEXT(ERROR:BootMonitor:bootmediadoesnotexist./r/n); 114. continue; 115. 116. /N.B:formatoffsetby#ofreservedblocks, 117. /decreasethettl#blocksavailablebythatamount. 118. if(!BP_LowLevelFormat(g_dwImageStartBlock, 119. wNUM_BLOCKS-g_dwImageStartBlock, 120. 0) 121. 122. OALMSG(OAL_ERROR,(TEXT(ERROR:BootMonitor:Low-levelbootmediaformatfailed./r/n); 123. continue; 124. 125. break; 126. caseF: 127. casef: 128. /low-levelformat 129. /N.B:thiserasesimages,BinFs,FATFS,userdata,etc. 130. /However,wedontformatBootloaders&TOCbolcks;useJTAGforthis. 131. if(!g_bBootMediaExist) 132. OALMSG(OAL_ERROR,(TEXT(ERROR:BootMonitor:bootmediadoesnotexist./r/n); 133. continue; 134. else 135. SectorInfosi; 136.137. /tokeepbootpartoffofourreservedblockswemustmarkitasbad,reserved&read-only 138. si.bOEMReserved=OEM_BLOCK_RESERVED|OEM_BLOCK_READONLY; 139. si.bBadBlock=BADBLOCKMARK; 140. si.dwReserved1=0xffffffff; 141. si.wReserved2=0xffff; 142.143. OALMSG(TRUE,(TEXT(ReservingBlocks0x%x-0x%x./r/n),0,IMAGE_START_BLOCK-1); 144. for(i=0;iIMAGE_START_SECTOR;i+) 145. FMD_WriteSector(i,NULL,&si,1); 146. 147. OALMSG(TRUE,(TEXT(.reservecomplete./r/n); 148.149. OALMSG(TRUE,(TEXT(Low-levelformatBlocks0x%x-0x%x./r/n),IMAGE_START_BLOCK,wNUM_BLOCKS-1); 150. for(i=IMAGE_START_BLOCK;iwNUM_BLOCKS;i+) 151. FMD_EraseBlock(i); 152. 153. OALMSG(TRUE,(TEXT(.erasecomplete./r/n); 154. break; 155. caseA: 156. casea: 157. OALMSG(TRUE,(TEXT(AllblockErase./r/n); 158. for(i=0;iwNUM_BLOCKS;i+) 159. FMD_EraseBlock(i); 160. 161. break; 162. caseB: 163. caseb: 164. /low-levelformat 165. /N.B:thiserasesimages,BinFs,FATFS,userdata,etc. 166. /However,wedontformatBootloaders&TOCbolcks;useJTAGforthis. 167. if(!g_bBootMediaExist) 168. OALMSG(OAL_ERROR,(TEXT(ERROR:BootMonitor:bootmediadoesnotexist./r/n); 169. continue; 170. else 171. DWORDi; 172. SectorInfosi; 173.174. /tokeepbootpartoffofourreservedblockswemustmarkitasbad,reserved&read-only 175. si.bOEMReserved=OEM_BLOCK_RESERVED|OEM_BLOCK_READONLY; 176. si.bBadBlock=BADBLOCKMARK; 177. /si.bBadBlock=0xff; 178. si.dwReserved1=0xffffffff; 179. si.wReserved2=0xffff; 180.181. OALMSG(TRUE,(TEXT(ReservingBlocks0x%x-0x%x./r/n),0,IMAGE_START_BLOCK-1); 182. for(i=0;iIMAGE_START_SECTOR;i+) 183. FMD_WriteSector(i,NULL,&si,1); 184. 185. OALMSG(TRUE,(TEXT(.reservecomplete./r/n); 186. break; 187. caseE: 188. casee: 189. /low-levelformat 190. /N.B:thiserasesimages,BinFs,FATFS,userdata,etc. 191. /However,wedontformatBootloaders&TOCbolcks;useJTAGforthis. 192. if(!g_bBootMediaExist) 193. OALMSG(OAL_ERROR,(TEXT(ERROR:BootMonitor:bootmediadoesnotexist./r/n); 194. continue; 195. else 196. inti; 197.198. OALMSG(TRUE,(TEXT(Low-levelformatBlocks0x%x-0x%x./r/n),0,IMAGE_START_BLOCK-1); 199. for(i=NBOOT_BLOCK;i(NBOOT_BLOCK+NBOOT_BLOCK_SIZE);i+) 200. FMD_EraseBlock(i); 201. 202. for(i=EBOOT_BLOCK;i 8 )/#endif/#ifndef BLOCK_TO_SECTOR#define BLOCK_TO_SECTOR(block) (block) 8 )/#endif=#define EBOOT_RAM_IMAGE_SIZE 0x00040000 /256K#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)#define EBOOT_BLOCK_SIZE SECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)/求出block数目,eboot.nb0占据2个block/ fs: file size in bytes/ returns sector aligned value 求出EBOOT_RAM_IMAGE_SIZE占用的flash页数_inline DWORD FILE_TO_SECTOR_SIZE(DWORD fs) return ( (fs / SECTOR_SIZE) + ( (fs % SECTOR_SIZE) ? 1 : 0) );/#define SECTOR_SIZE512从上面可以看出IMAGE_START_SECTOR=(NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE)=1+1+2=4(block)=根据上面的准备,我现在把这个F菜单程序摘抄下来详细分析SectorInfo si; / to keep bootpart off of our reserved blocks we must mark it as bad, reserved & read-only si.bOEMReserved = OEM_BLOCK_RESERVED | OEM_BLOCK_READONLY; si.bBadBlock = BADBLOCKMARK; si.dwReserved1 = 0xffffffff; si.wReserved2 = 0xffff; OALMSG(TRUE, (TEXT(Reserving Blocks 0x%x - 0x%x ./r/n), 0, IMAGE_START_BLOCK-1);/给非FAT区域写入标志 for (i = 0; i IMAGE_START_SECTOR; i+) FMD_WriteSector(i, NULL, &si, 1); OALMSG(TRUE, (TEXT(.reserve complete./r/n); OALMSG(TRUE, (TEXT(Low-level format Blocks 0x%x - 0x%x ./r/n), IMAGE_START_BLOCK, wNUM_BLOCKS-1); for (i = IMAGE_START_BLOCK; i wNUM_BLOCKS; i+) FMD_EraseBlock(i); OALMSG(TRUE, (TEXT(.erase complete./r/n);我看了eboot的sources文件,发现 FMD_WriteSector函数居然是来自$(_TARGETPLATROOT)/Src/Common/Smartmedia/Fmd也就是说这个FMD驱动是Src/Common/Smartmedia/Fmd的代码(充分利用了代码)FMD_WriteSector(i, NULL, &si, 1)这个函数到底做了什么呢?现在就要详细看看这个函数的各个参数的作用3. BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors): 这个函数用于写nandflash的一个扇区。对于nandflash来说,分大page和小page,大page是2048个bytes一页,小page是512个bytes一页。所以大page每个扇区有2048 bytes,小page每个扇区有512 bytes。 startSectorAddr: nandflash物理扇区的起始地址,对于nandflash来说,就是nandflash中从哪个page开始。 pSectorBuff:扇区数据buffer,从nandflash中写入的每一个扇区的数据都存放在这个buffer中。 pSectorInfoBuff:扇区信息buffer,一般每个扇区的信息会被保存在nandflash的带外数据中,针对小page,带外数据有16 bytes,大page有64 bytes。从nandflash的带外数据将该扇区的相关信息读出来,存放在这个buffer中。 dwNumSectors:读取多少个扇区,对于nandflash来说相当于读取多少个page。 再来摘抄一下慕水大哥的文章对的结构认识,其中忽略了非常重要的一块,就是用来保存其它信息的一块区域,这些信息包括块好坏的标记,块的逻辑地址,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025烟花买卖安全合同
- 农产品收购合同协议书
- 2024-2025学年新教材高中生物 第2章 细胞的结构和生命活动 第3节 第2课时 被动运输不需要细胞供能 主动运输需要细胞供能 细胞的胞吞和胞吐说课稿 苏教版必修1
- 第26课《诗词五首:春望》说课稿 2024-2025学年统编版语文八年级上册
- 本册综合说课稿-2025-2026学年初中劳动技术浙教版八年级上册-浙教版
- 九年级道德与法治下册 第二单元 世界舞台上的中国 第四课 与世界共发展 第2框 携手促发展说课稿+教学反思 新人教版
- 武汉市第一职业教育中心招聘高中教师2人笔试备考试题及答案解析
- 辅警招聘考试行政职业能力测验(常识判断)模拟试卷标准卷
- 重难点突破03 直线与圆的综合应用(七大题型)( )
- 安全主体责任培训讲义课件
- 升降机风险辨识及防范措施
- 中医治未病健康宣教
- 食堂员工服务培训
- 提升心理抗压能力的技巧
- 中医医术确有专长人员(多年实践人员)医师资格考核申请表
- 低空飞行器设计
- 《穴位埋线疗法》课件
- 【大型集装箱船舶港口断缆事故预防应急处理及案例探析7500字(论文)】
- 脑梗塞并出血护理查房
- 三对三篮球赛记录表
- 中医基础之五行学说与五脏六腑
评论
0/150
提交评论