怎么样才能使bootloader支持binfs?
最近想搞multi bin后来发现我的bootloader是优龙的,不支持binfs分区格式化,
我想把eboot下的代码移植过来,应该可以的。
但是我对则个binfs有点疑惑。按照道理说,binfs是针对nk.bin的,但是我们下载的时候却是nk.nb0,有些人下载nk.bin,但是下载完还是要解压成nk.nb0的。
我想问,binfs是怎么和nk.nb0联系起来的?
请大家指点。
这个问题还是有点意思的。
[解决办法]
下载的时候是bin啊,下载的过程中解压的。
[解决办法]
nk.bin是烧写到NAND,是有压缩的,ce启动后将其解压到RAM里,这时RAM里与nk.nb0其实是一样的。
调试当中,有更改时不必要每次都烧写到NAND,build后通过usb将nk.nb0下载到RAM里执行,就可看到运行结果。
都没问题了,再将nk.bin烧写到NAND里。对我来说,nk.nb0只在调试时有用。
理论上如果NOR足够大,就可以直接下载nk.nb0到NOR,而且程序可以在NOR里运行,节省了RAM。
如果是用nk.nb0不用解压缩就可直接执行,如果是nk.bin就需要解压缩后才能执行。所以binfs跟是不用nk.bin,还是nk.nb0是没关系的。
在下载nk.bin的eboot里就有个FORMAT BINFS命令,将NAND格式成binfs,后面就是驱动要识别的问题。
你如果想实现binfs的话,一个办法是按照网上binfs实现方法的文章去改你的bsp。
还有就是找个别的开发板的已实现binfs的bsp试试。
[解决办法]
移植 Windows CE 里面的 BootPart 驱动到 Bootloader 就行了。
[解决办法]
2. binfs
binfs是微软设计的一套文件系统,主要是为了解决非XIP存储设备上,操作系统镜像的加载会导致RAM大量浪费的问题。
跑WINCE的肯定都是带SDRAM的,即使NOR支持XIP,也不会在NOR上跑,速度太慢。更别提NAND或者硬盘了,非线性寻址的,都必须将系统镜像加载到SDRAM,然后跳转到SDRAM继续执行。而系统镜像多大?10多MB,20多MB,40多MB的都有,而SDRAM呢?很痛苦的。
binfs就是给镜像中的每个单独文件一个定位坐标。就是将系统镜像的实际数据分成n个小块,每个小块占一定的基本空间(按byte算),每个文件、dll、lib、程序放置的位置,在PB编译后就确定了。系统加载时,就找到需要加载的文件在flash中存放的位置,单独读出该文件加载,而不需要将整个镜像都读到sdram了。
这个作用有点类似fat的文件表了,需要哪个读哪个,不需要的就不动。不过在eboot中不采用fat,难道是因为fat对空间浪费很大吗?
[解决办法]
不是我们不想帮你,而是实在没有精力来研究你的贴子,看代码研究问题也很费时间的
给你一个思路:
1. 在bootloader中按正常的FAT格式格式化Image的分区
2. 读出这个分区的分区表,也就是第一个Sector,这个应该不能叫MBR,但CE里的代码是叫CreateMBR
3. 修改这个分区表的标志位成BINFS,记下分区的起始Sector,查一下PPARTENTRY结构体
4. 把生成出来的xip.bin文件烧到从起始Sector开始的位置
在开机的时候只需要读出前面XIPKernel大小的Image,然后跳转到相应的地址就OK了