7320|27

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个关于Eboot跳转OAL的问题 [复制链接]

原来的系统是正常的,现在由于需要将NK的位置向后一段,于是在CONFIG.BIB中做了如下更改:
EMORY
    RESERVED     80000000        00008000        RESERVED
    DRV_GLB      80008000        00001000        RESERVED
    CS8950       80010000        00030000        RESERVED
    EDBG         80040000        00080000        RESERVED
    FRAMEBUF     800C0000        00200000        RESERVED
    RAM          802C0000        01D40000        RAM
    NK           88080000        01d40000        RAMIMAGE
                (原先为88000000)
CONFIG           

    COMPRESSION=ON
    PROFILE=OFF
    ROMSTART=88080000(原先为88000000)
    ROMSIZE=1d40000
    ROMWIDTH=32

    ;
    ; Used for making a copy to RAM 0x80000000
    ;
    ; 0x88000000 + 0xD8000000 = 0x60000000
    ROMOFFSET=0xD8000000
    ROMFLAGS=1
    KERNELFIXUPS=OFF
    AUTOSIZE=ON

其中88000000为FLASH起始地址对应物理地址为60000000

改好后发现OS无法启动,通过点灯发现没有进入到OAL的STARTUP中.烧写过程应该没问题
这个是超级终端的信息
INFO: Found file 'nk.bin' (start cluster = 0x00000000:00000003 size = 0x17F45CF)

Downloading BIN file using Hard Drive/CF card.
System ready!
Preparing for download...
Reading Image File.Erasing flash blocks: start Addr = 0x60080000  length = 0x182
7758
.......................OK
Continue to Erase the rest of Flash.
................................................................................
.....
Flash Erase Successfully Finished
Writing to flash at Address= 0x60080000, Length = 0x1827758
................................................................................
................Found pTOC signature.
ROMHDR at Address 60080044h
RomHdr.ulRAMStart=00FF0C07h RomHdr.physfirst=29A00C07h.
INFO: Jumping to image at 0x60081006...


这个是原来可以启动的信息
INFO: Found file 'nk.bin' (start cluster = 0x00000000:00000003 size = 0x17CECD3)

Downloading BIN file using Hard Drive/CF card.
System ready!
Preparing for download...
Reading Image File.Erasing flash blocks: start Addr = 0x60000000  length = 0x180
0504
.......................OK
Continue to Erase the rest of Flash.
................................................................................
......
Flash Erase Successfully Finished
Writing to flash at Address= 0x60000000, Length = 0x1800504
................................................................................
................Found pTOC signature.
ROMHDR at Address 60000044h
RomHdr.ulRAMStart=00FF0C07h RomHdr.physfirst=29900C07h.
INFO: Jumping to image at 0x60001006...

RomHdr.ulRAMStart=00FF0C07h RomHdr.physfirst=29900C07h.
INFO: Jumping to image at 0x60001006...
Windows CE Kernel for ARM (Thumb Enabled) Built on Mar 13 2003 at 22:52:56
ProcessorType=0920  Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddre) Sp=ffffc7cc
ERROR: f:\wince420\platform\ep931x\drivers\wavdev\wav.cpp line 730: AudioDriver:
:Initialize: Failed to initialize AC97Codec
                                           Data Abort: Thread=83ffcbb4 Proc=802e
90b0 'device.exe'
AKY=00000005 PC=031a6d58 RA=031a6d50 BVA=06000004 FSR=00000007
Init Raster engine
Clearing screen
Returning from DDI init
OEMResetWakeupSource dwSource = 0x11
OEMSetWakeupSource dwSource = 0x11

最新回复

已经搞定了,是烧FLASH时的一个地址没有偏移,导致烧进去的数据不对,感谢各位的帮助,结贴  详情 回复 发表于 2009-8-3 15:03
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你要看看在你的EBOOT中是否还有这些类似的地址或地址长度的定义,好好查查你的EBOOT程序,
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
用的是NOR?怎么没拷贝到ram里面运行?看起来是有RAM的虚拟地址的。

正确的镜像->写入flash成功->写入正确的地址->跳转到正确的地址->执行就肯定正确。

要判断这个,最简单的是在eboot时将0x60081006开始的N个block都读出来并打印出来,跟正确的nb0文件进行对比,就知道是否写入成功,以及写入的地址是否正确。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 shuiyan 的回复:
用的是NOR?怎么没拷贝到ram里面运行?看起来是有RAM的虚拟地址的。

正确的镜像->写入flash成功->写入正确的地址->跳转到正确的地址->执行就肯定正确。

要判断这个,最简单的是在eboot时将0x60081006开始的N个block都读出来并打印出来,跟正确的nb0文件进行对比,就知道是否写入成功,以及写入的地址是否正确。



用得是NOR 在FLASH本地运行的
如果要把这些地址读出来的话该怎么操作,能不能直接打印这些地址的数据,还是要写个类似FLASH驱动的东西.还有我的是.BIN的文件
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

6
 
刚才又去做了下实验,发现可以跑到STARTUP里了,一直到调用了KENKELSTART,然后就不动了
STARTUP.S文件
SMCBCR_IDCY_MASK        EQU         0x0000000F
SMCBCR_IDCY_SHIFT       EQU         0
SMCBCR_WST1_MASK        EQU         0x000003E0
SMCBCR_WST1_SHIFT       EQU         5
SMCBCR_RBLE             EQU         0x00000400
SMCBCR_WST2_MASK        EQU         0x0000F800
SMCBCR_WST2_SHIFT       EQU         11
SMCBCR_WPERR            EQU         0x02000000
SMCBCR_WP               EQU         0x04000000
SMCBCR_PME              EQU         0x08000000
SMCBCR_MASK             EQU         0x30000000
SMCBCR_MW_8BIT          EQU         0x00000000
SMCBCR_MW_16BIT         EQU         0x10000000
SMCBCR_MW_32BIT         EQU         0x20000000
SMCBCR_EBIBRKDIS        EQU         0x40000000

ROMHDR_dllfirst         EQU         0x8
ROMHDR_dlllast          EQU         0xC
ROMHDR_physfirst        EQU         0x10
ROMHDR_physlast         EQU         0x14


                IMPORT          KernelStart
                IMPORT          OEMAddressTable
                IMPORT          SysconSetup
                IMPORT          SdramCfg
                IMPORT          pTOC


;**********************************************************************
;  StartUp routine to initialize the processor.
;**********************************************************************
                STARTUPTEXT
                DCB             "CRUS", 0

                LEAF_ENTRY      StartUp

;
;  Kill watch dog timer. Before any thing else.
;
                ldr             r0, =0x80940000
                ldr             r1, =0xAA55
                str             r1, [r0]

;
; ensure SVC32 mode with IRQ and FIQ disabled
;
        
                mov             r0, #0xd3
                msr             cpsr_c, r0

;
; Check to see if we are executing in flash, if so we may need to
; setup SDRAM.
;
                cmp             pc, #0x60000000
                bls             DontConfigureSDRAM

;
; If we loaded through eboot, SDRAM is already configured.
; Check the CLKSET1 register to see if it has been modified.
;
                ldr             r0, =0x80930020
                ldr             r1, [r0]
                ldr             r0, =CLKSET1DEFAULT
                cmp             r0, r1
                bne             DontConfigureSDRAM

;               
;
; Configure SDRAM
;
                bl              SdramCfg

DontConfigureSDRAM

;
; Turn off the MMU
;
                ldr             r0, =0xC0001078           
                mcr             p15, 0, r0, c1, c0, 0

;
; Configure the flash chips
;
                ldr             r0, =((4:SHL:SMCBCR_WST2_SHIFT)  :or: \
                                      (15:SHL:SMCBCR_WST1_SHIFT) :or: \
                                      (1 :and:SMCBCR_IDCY_MASK)  :or: \
                                      SMCBCR_MW_32BIT            :or: \
                                      SMCBCR_WP                  :or: \
                                      SMCBCR_PME                 :or: \
                                      SMCBCR_RBLE)

                ldr             r1, =0x80080018
                str             r0, [r1]
                nop            
ExecuteFromRam
                mov             sp, #0x40000
                bl              SysconSetup

;
; clear out magic words for memory and heap
; (r0) = physical address of OEMAddressTable
;
;
; Calculate the physical address of the table.
;
; r0 - Virtual address of OEMAddressTable
; r1 - Physical Address of Startup
; r2 - Virtual Address of Startup
;
; r0 = r0 - r2 + r1 = Physical address of OEMAddressTable
;            
                ldr             r0,=OEMAddressTable
                adr             r1,StartUp
                ldr             r2,=StartUp        
                add             r0, r0, r1
                sub             r0, r0, r2
===============================================到这里也可以点灯                bl              KernelStart
;
; KernelStart should never return:
;
    =============================================点不亮,说明跳到KERNELSTART里去了
spin            b               spin

还有个问题,我发现我的WINCE4.2没有PRIVATE这个目录,也找不到KERNELSTART这个函数,不知道为什么
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
找到了,原来是安装的时候没选,现在感觉应该是卡在OMEINIT前面了,奇怪的是为什么原来的能起来,就把NK往后移一段就起不来了,都已经跳到STARTUP了。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

8
 
wince就是有很多不慕名的东东
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

9
 
顶一下
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 xyj0663 的回复:
wince就是有很多不慕名的东东

那可能是因为我们大家对WINCE掌控的还不够吧
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

11
 
确实,现在感到很莫名,都已经到KERNELSTART里的,缺运行不下去,这段都是微软的代码吧,不需要修改的。

今天又发现烧在600C0000后面就跳不到STARTUP里的,前面的就可以了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
是不是后面的地址有别的用到
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 3 楼 fan0311 的回复:
引用 2 楼 shuiyan 的回复:
用的是NOR?怎么没拷贝到ram里面运行?看起来是有RAM的虚拟地址的。

正确的镜像->写入flash成功->写入正确的地址->跳转到正确的地址->执行就肯定正确。

要判断这个,最简单的是在eboot时将0x60081006开始的N个block都读出来并打印出来,跟正确的nb0文件进行对比,就知道是否写入成功,以及写入的地址是否正确。



用得是NOR 在FLASH本地运行的
如果要把这些地址读出来的话该怎么操作,能不能直接打印这些地址的数据,还是要写个类似FLASH驱动的东西.还有我的是.BIN的文件

BIN文件能够在flash中xip吗?不是nb0才可以吗?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 11 楼 xyj0663 的回复:
是不是后面的地址有别的用到


没有啊,我的FLASH就是一个EBOOT和一个NK,没其他东西
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

15
 
确实是用XIP方式运行的,起来可以看到RAM的全部空间用做内存了

还有一种COPY到RAM中运行的方式我也试过,也行.

早上去又去试了下,发现不是0X60C0000后不能运行,而是随即的!同样一个NK,有时下去可以到STARTUP,有时就到不了,我无语了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

16
 
up
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 
建议 LZ 将   DCB            "CRUS", 0
改为         DCB            "CRUS", 0, 0, 0, 0

ARM instruction 必须是 32-bits alignment, 不然系统应该是会有问题

这个东西在 LZ 另一个帖子有说过了, 但不知 LZ 试的如何

Paul, Chao @ Techware
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 paul_chao 的回复:
建议 LZ 将? DCB? ? ? ? ? ? "CRUS", 0
改为? ? ? ? DCB? ? ? ? ? ? "CRUS", 0, 0, 0, 0

ARM instruction 必须是 32-bits alignment, 不然系统应该是会有问题

这个东西在 LZ 另一个帖子有说过了, 但不知 LZ 试的如何

Paul, Chao @ Techware


我试了下,JUMP地址到0x60081008了,但是还是一样系统起不来,现象和原来一样
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

19
 
UP
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

20
 
有时候你把一个值做了更改, 你找到了你所能找的所以地方,但其实,有些地方没有改到!
---------
LZ的问题我没遇到过,   只是一种感觉!
-------
config.bib 的设置,在flash的驱动、 bootloader,..等地方都要改吧

主你好运!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表