« | July 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | |
| 公告 |
☆★☆★☆★☆★☆★☆ 生活的点点记录,以及一些体会...........
喜欢是淡淡的爱,爱是深深的喜欢.
时间会见证一切.......................
欢迎大家指出错误,共同进步..........
期待中..............................
☆★☆★☆★☆★☆★☆ |
Blog信息 |
blog名称: 日志总数:162 评论数量:312 留言数量:0 访问次数:940568 建立时间:2005年5月17日 |

| |
[wince study]Nboot的流程 文章收藏
oceanblue 发表于 2008/6/16 14:24:24 |
Nboot (Nand flash bootloader) 主要的作用就是初始化硬件,把后面的功能比较完善的引导程序像eboot之类的映像拷贝到SDRAM中让后跳到SDRAM中继续跑eboot。
为什么要有nboot这个东西呢,其实主要是因为现在的soc上考虑到成本的问题,基本是都是自带一个nand flash的控制器并支持开机nand flash引导来取代相对来说昂贵的nor flash。
一般来说nand flash的控制器都会内置一个SRAM之类的buffer来支持nand flash的开机引导,在nand启动的方式下,板子上电的时候,nand控制器会自动把nand flash最前面的buffer大小的数据自动拷贝到buffer中然后让pc指针可以从buffer中直接读取指令。一般来说这个buffer不会很大,2410的芯片是4k,而像freescale的imx21更是只有2k,所以由于这个局限性,我们只能把bootloader拆分成两部分,前面一部分来完成基本初始化功能,而后面一部分来完成比较完善的功能,让控制器自动拷贝前一部分,然后前一部分再拷贝后一部分到RAM中,这样引导程序就可以做任何它想做的事情了。
其实,实现一个nboot并没有多大难度,以下是一个大概流程:
1. 当然是配置时钟了,没这个系统跑不起来啊 o(∩_∩)o…
2. 不用说SDRAM的配置也是少不了,不然我们怎么把程序拷贝到SDRAM中。
3. 就是flash控制器的配置了,一般来说就是GPIO和相应的控制器寄存器配一下。
4. 拷贝文件从nand到SDRAM中,nand flash读的话一般来说都是先拉片选位,然后发命令,接着是地址,最后就是读数了。
上面几步做完,其实整个nboot也就差不多了,不过在WinCE下开发的话有几个点需要特别注意:
1. 因为要用PB来编译,所以为了能生成.nb0文件,所以一定要在 代码里加上:
pTOC DCD -1
EXPORT pTOC
这个是让ROMIMG.exe做image时用的.
2. 生成.nb0文件,bib文件也是不能少的。
3. 因为微软编译器的原因,导致了我们按一般方法来编译.nb0时,前面的4K都是空的,所以如果直接把编译出来的.nb0烧进去的话是不能用的,所以的在bib改一下:
把: NBOOT 00000000 00002000 RAMIMAGE 这个定义成8k的大小,然后后面的
ROMSTART=00001000
ROMSIZE=1000
把start地址往后移一下,然后大小改为4k,这样出来的nb0就会 把前面空的4k给截掉了。
以上的都做完的话,基本上应该不会有什么问题了。 |
|
|