WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(1)-NBoot

GEC2410开发板自带的Eboot需要通过自带的Bootloader下载后才能运行,这个Eboot只起到下载内核镜像的作用,重启后是通过Nboot启动内核而不是Eboot。而且也不支持KITL,BSP的结构也完全是4.2下的,非常凌乱。不知道开发板商为什么不能按照5.0的架构做一个支持KITL内核调试的Eboot。
因此产生了移植一个上电后能直接运行的Eboot的想法。由于S3C2410支持4K的Steppintstone,可以从Nand Flash启动,我把Eboot放在Nand Flash中,用Nboot进行引导。NBoot位于NandFlash的Block 0,Eboot位于Block 2。上电后,位于前4K的Nboot被复制到RAM中运行,然后Nboot复制Eboot到RAM中,最后跳转到Eboot,由Eboot进行下一步的工作。
或者把Eboot放到Nor Flash中,也不需要Nboot,之后将介绍基于Nor Flash的移植
整个工程位于:http://download.csdn.net/source/620556中的NBoot_2410(Eboot)目录下。

 

一、开发环境
编译器: ADS1.2
目标板: GEC2410 S3C2410A,NAND Flash:64M K9F1208,NOR Flash:2M SST39VF1601 SDRAM 64M,CS8900

 

二、开始移植
(1)一般Nboot的结构
板子自带的Nboot是用来直接引导CE内核的,它需要一个toc结构的变量,保存了被引导镜像的地址大小等信息。 
开发板自带的Eoot被下载后将在Block 1写入这个toc结构,然后Nboot在读取信息来引导CE Image。
同理如果用来启动Eboot,只需要把Eboot的信息写入这个结构即可。我们不把toc放入Block 1然后再去读,而是直接在程序中定义好,因为Eboot大小位置都是固定的。

 

(2)修改Nboot
我在网上找到一个最近似我需求的Nboot,已经把toc结构成员进行了初始化,只需要修改相应的参数即可。

 

(3)串口驱动
我使用UART1 38400kbps,用来输出Nboot的启动信息。
其他的初始化部分我参考我的资源中的工程

 

(4)ReadEbootFromNand函数
ReadEbootFromNand这个函数是这个工程中的核心,用来读取NandFlash起始位置为Block 2的Eboot到指定的SDRAM地址中,然后跳转到Eboot运行。
几个重要的参数为
  
(5)启动Eboot
通过调用Launch(JumpAddr)函数跳转到Eboot
Launch是用汇编写的,Eboot中也会调用这个函数来跳转到内核

  
(6)Main
  
(7)超级终端中的显示结果,关于Eboot的移植将在后文中阐述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值