WINCE系统跑起来后,通过AP更新NBOOT+EBOOT+NK,怎么处理TOC,MBR的改变,要不要去调用BP_XXX( )那些函数接口?
WINCE系统跑起来后,通过AP更新NBOOT+EBOOT+NK,怎么处理TOC,MBR的改变,要不要去调用BP_XXX( )那些函数接口?
是不是在FMD_OEMIoControl( )函数里面,提供READSECTOR,WRITESECTOR,ERASEBLOCK接口就可以了?
但看到通过EBOOT更新NK的代码,他们都用到了BP_XXX( )那些函数接口。通过AP来更新NK,是不是也要调用这些接口?
写入NK,应该是写在DOS分区里面(已经被低级格式化了,并写入了MBR),这个时候就应该有文件系统的概念了。也就存在逻辑扇区跟物理扇区之间的转换了,应该怎么进行他们之间的转换呢?
这个工作,无非是写入MBR的以及除去老的NK。
其实都是通过FMD_IOControl函数和应用通信,然后在该函数里面调用底层的flash读写,擦除函数。即可。使用eboot是手动写入MBR的。会比ADS 的自动写入MBR会难一点,不过对于bootloader都能随意修改的人来说不是难题。
引用: 引用 5 楼 gooogleman 的回复:
这个工作,无非是写入MBR的以及除去老的NK。
其实都是通过FMD_IOControl函数和应用通信,然后在该函数里面调用底层的flash读写,擦除函数。即可。使用eboot是手动写入MBR的。会比ADS 的自动写入MBR会难一点,不过对于bootloader都能随意修改的人来说不是难题。
更新NK,要对应更新TOC结构的,如果不更新。系统启动的时候怎么知道读多少个扇区(NK的全部内容)。
那你也照抄 本来微软下的代码 啊。甚至可以调用吧。
要写NK数据进去,要进行对应低级格式化的。要进行低级格式化就得用到那些BP_XXX( )那些函数接口。
引用: 引用 7 楼 gooogleman 的回复:
那你也照抄 本来微软下的代码 啊。甚至可以调用吧。
你写的没有调用那些BP_XXX( )那些函数接口?
我现在是在照抄,但老是出问题啊。几个库文件老是编译报什么重定义错误。好烦!
引用: 引用 10 楼 xqhrs232 的回复:
我现在是在照抄,但老是出问题啊。几个库文件老是编译报什么重定义错误。好烦!
哈哈,这是初步。等不错误也有很多事情,其实应用程序只是通知FMD_IOcontrol
去做事以及弄个buf指针传到驱动。这样下面的代码还是按照原来的bootloader方式实现的。所以你放心吧。
确实挺麻烦的,更新NBOOT+EBOOT还好说,因为他们都是死的.但更新NK就难搞了,又是TOC,又是MBR,分区表,又是文件系统,又是逻辑地址与物理地址之间的映射关系.
现在还不知道通过AP更新NK应该用那个文件,是BIN文件还是NB0文件?他们怎么加载进程序,一条条记录该怎么解包,相关的知识点还真多.有的一阵子搞的了!
IsValidMBR: MBR sector = 0x140 (valid MBR)
OpenPartition: Partition Exists=0x0 for part 0x21.
CreatePartition: Enter CreatePartition for 0x21.
LastLogSector: Last log sector is: 0xfebf.
CreatePartition: Start = 0x180, Num = 0x3c80. //第6块开始!!!-----DOS分区大小为0X3C80=30976KB
Log2Phys: Logical 0x180 -> Physical 0x2c0
WriteMBR: MBR block = 0x5. //MBR-----第5块
BP_SetDataPointer at 0x0
WriteData: Start = 0x0, Length = 0x1e37940.
Log2Phys: Logical 0x180 -> Physical 0x2c0 //2009--4--30 XQH 这个转换理解是什么???
Updateded TOC! //TOC更新
//==============================================================================
为什么DOS分区开始的扇区就是0X180了?为什么不是从逻辑0号扇区开始?
Log2Phys: Logical 0x180 -> Physical 0x2c0 //2009--4--30 XQH 这个转换理解是什么???
为什么开始点是0X180扇区?
1> LBAtocCHS( )
2> CHStoLBA( )
3> Log2Phys( )
这三个函数有什么区别?
FAT表在那里?为什么NK不从第6个块开始存而要从第11个块开始存?空的那几个块用做什么用途了?
CE下的文件是怎么管理的?有没族表和DIR区的说法?