nboot + eboot 只在nandflash上下载内核(mini2440开发板)


         搞了一个多月终于把bootloader搞定了,说起来这已经是第二次整这个bootloader了,记得上次nboot跳转eboot时总是死机,好像没有跳转到eboot的样子,想了好久,一直以为是nboot的问题,因为mini的nboot代码(不是新的bsp包,mini新的bsp包里直接找不到下载eboot的相关代码,也没有eboot代码)开始是有问题的,一是下载eboot的功能是关闭的,二是里面有一些地方代码不对,都是自己改的,最终不得不放弃,开始学习驱动。好了,言归正传。说说我的过程吧。

        以前那个问题,通过点灯调试,轻松解决,nboot没开mmu代码也很容易懂,烧写nboot,eboot就用开发板带的SJF2440,按提示安装好驱动后就可以了。不过一开始用确实摸不到头脑。这里顺便说下:

我是把SJF2440.exe拷到c:\根目录下。要烧写的nboot.bin,eboot.nb0也拷贝到c:\用的时候不能直接点SJF2440.exe,应该运行命令提示符(开始-》运行-》cmd),切换到C:\。输入命令sjf2440 /f:nboot.bin就可以进入烧写界面选择了,一共3步,选择芯片型号,选择操作,选择烧写起始块,一般写0。烧写完成退出。输入sjf2440 /f:eboot.nb0一般烧写到第二个block。

现在还有俩个问题:1、eboot的代码网卡是cs8900而开发板的是DM9000;2、我要下载最新内核,他们的内存映射表不一样。

       cs8900换成DM9000网上博客很多都有讲解,下了个DM9000的代码,

在InitEthDevice。由于现在要通过dm9000来实现eboot,所以要改下这个函数中的设置的几个功能函数:
pfnEDbgInit      = DM9000DBG_Init;
pfnEDbgGetFrame  = DM9000DBG_GetFrame;
pfnEDbgSendFrame = DM9000DBG_SendFrame;
也就是说在dm9000中只要实现这3个功能函数就ok了。还有就是网口的基地址,我的接在了nGCS4,根据oemaddrtab_cfg.inc里

        DCD     0x88000000, 0x20000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 4

我们知道ether.c中定义 

#define DM9000DBG_IOBASE  (0xa8000300)
#define DM9000DBG_MEMBASE  (0xa8000000) 

修改

pfnEDbgInit      = DM9000DBG_Init;
pfnEDbgGetFrame  = DM9000DBG_GetFrame;
pfnEDbgSendFrame = DM9000DBG_SendFrame;
pBaseIOAddress  = (PBYTE)DM9000DBG_IOBASE;
dwMultiplier    = DM9000DBG_MEMBASE;

此外,还要修改eboot的sources中TARGETLIBS

    $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\fulllibc.lib   \
    $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\blcommon.lib   \
    $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\bootpart.lib   \
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\csp_arm.lib \
    $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\eboot.lib      \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\cs8900dbg.lib \
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\dm9000dbg.lib \

至此,第一个问题就解决了。

这时烧写nboot eboot启动已经能够进入菜单设置IP,MAC连接PB下载nk等,对了连接时还是遇到点小问题就是

Ethernet Boot Loader Configuration:
---------------------------------------
1) IP address: 192.168.0.5
   Subnet mask: 255.255.255.0
2) Boot delay: 10 seconds
3) DHCP: ENABLED
4) Reset TOC to default
5) Startup image: LAUNCH EXISTING
6) Program RAM image into Boot Media: DISABLED
7) MAC address: 12:34:56:78:9A:BC
8) Kernel Debugger: DISABLED
9) Format Boot Media for BinFS
中的第八项 我的必须是ENABLED的腰部无法连接PC,查看代码发现如果DISABLED,不会初始化网卡代码,不知道这一项是干嘛用的。

      下一个就是内存映射表的问题,原来Map.a      DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 6

现在是oemaddrtab_cfg.inc                             DCD     0x80000000, 0x30000000, 64      ; 32 MB DRAM BANK 6

因此需要把0x8c000000—0x8fffffff改到0x80000000—0x84000000

由于eboot用于下载新内核,因此把eboot从以前的工作空间里剥离了出来,重现加到新bsp下,在Src下建了个DM9000Dbg文件夹存放DM9000代码,还有一个bootloader文件夹用于存放eboot之后,主要修改 config.bib  boot.bib  loader.h(老bsp中文件),修改完之后最好整个eboot搜索下8c00,有时候在一些.bak的一些东西保留的是以前映射表的,可以直接删除。

一切没有问题就可以下载内核了,注意和PC直连用交叉网线,连路由用平行网线。

      时间延续太长,也没记录过,只说了个大概,其实现在看看也没什么,只要多查查资料,细心点就好。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyx_wq/archive/2009/12/22/5054542.aspx

posted on 2010-07-12 10:39  xilentz  阅读(809)  评论(0编辑  收藏  举报