SMDK2440bsp for WINDOW MOBILE移植问题?

yuyi_pj 2009-04-09 04:24:17
我是wince菜鸟经过几个月的潜水修炼中自觉可以出来提些问题。最近公司将上马window mobile所以我先找公司借了块扬创的开发板来移植练手。
我所用的开发板配置:
(1)S3C2440A:32bit ARM920T 内核,标称工作频率:400MHz
(2)系统时钟:内部PLL 产生400MHz CPU 内核工作频率,外部总线频率:100~133MHz
(3)LCD 控制器:CPU 内置STN/CSTN/TFT LCD 控制器,支持1024*768 分辨率以下的各种液晶
(4)触摸屏控制器:CPU 内置4 线制电阻式触摸屏控制器
(5)100MHz 以太网控制器
(6)1 通道5 线制串口,2 通道3 线制串口
(7)1 通道USB1.1 主机接口,可接usb hub,扩充多个usb 主口
(8)1 通道USB1.1 设备接口
(9)SD/MMC 卡接口
(10)音频输入输出接口
(12)LCD 接口,可接3.5 寸/7 寸/4.3 寸/2.8 寸/10 寸等等尺寸TFT 真彩液晶屏
(13)专用复位电路
(16)触摸屏控制器
(17)RTC 实时时钟及大容量后备锂电池
(18)标准20pin JTAG 调试接口
(20)4 只自定义功能LED 指示灯
(21)电源指示灯
(22)6 只自定义按键,用户可以组合为“上”“下”“左”“右”“确认”“取消”6 个常见功能键
(23)电源开关
(24)复位按键
(29)SPI 接口
(31)标准配置64MBytes Nand-Flash
(32)标准配置64MBtyes SDRAM
基于SMDK2440三星原厂提供的forWINDOW MOBILE bsp包做的移植。
我的移植步骤是
(1)stepldr,这部分移植涉及一些芯片时序修改,还有就是nandflash的块页数的调整,以及串口gpio口配置的修改,
此部分已经完成,
在我的超级终端里可以打印出以下信息
Step ldr
NandFlash checking is passed ,then read !!
pCopyfir:0x30138000
*pCopyfir:0xea0003fe
Jump to the image...

在stepldr 里我把eboot的代码copy到了0x30138000这个物理内存地址起始的内存空间里
(2)eboot,这部分无法进行下去了。原因是当程序跳转到0x30138000地址没有任何反应了。
我打开eboot.nb0用hex方式查看这个bin文件看到其实处内容FE 03 00 EA 之后是一大段的00,在相隔了4k地址的地方才出现连续的非00区域;与stepldr.nb1这个文件头完全不一样,在stepldr的里我可以看到0A 00 00 EA 起始的ARM执行文件的文件头,可是在eboot.nb0里是没有的,我很怀疑这个eboot.nb0的单独执行能力?不知有哪位仁兄能给我解释一下这个eboot的文件头结构?同时也有可能是我的思路有问题,希望有经验的同仁能给我指引!
同时我在stepldr的startup.s没有看到MMU的使能代码可以肯定stepldr用的是实地址模式,我很怀疑这个跳转地址不是一个真正的eboot主程序的入口地址因此eboot无法执行,可是eboot的主程序入口地址在哪里呢?
...全文
149 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuankang 2010-07-01
  • 打赏
  • 举报
回复
最终搞定没
chinatzar1 2009-07-20
  • 打赏
  • 举报
回复
斑竹加我Q吧
chinatzar1 2009-07-20
  • 打赏
  • 举报
回复
斑竹加我Q吧
chinatzar1 2009-07-20
  • 打赏
  • 举报
回复
斑竹加我Q吧
yuyi_pj 2009-04-10
  • 打赏
  • 举报
回复
看来我的问题已经很明朗了,之前我怀疑eboot.nb0无法在nandflash里单独执行是错误的,eboot.nb0完全是可以执行的,至于在哪里挂掉了还的debug一下
yuyi_pj 2009-04-09
  • 打赏
  • 举报
回复
谢谢Paul, Chao的提醒,我在axd里反汇编了这段代码[0xea0003fe] b 0x30039000
0xea0003fe这是条跳转指令,直接跳到了0x30039000地址看来很有意思,这也能解释eboot里为什么中间留了一大堆00啦
paul_chao 2009-04-09
  • 打赏
  • 举报
回复
1. In Eboot.bib
EBOOT 80038000 00040000 RAMIMAGE
ROMSTART=80038000

所以你 eboot 的起始位置是 VA=0x80038000

2. In OEMAddressTable
DCD 0x80000000, 0x30000000, 64 ; 32 MB DRAM BANK 6

故 VA=0x80000000 => PA=0x30000000

所以 Physical Address 的起始位置 0x80038000 - 0x80000000 + 0x30000000 = 0x30038000

故請修改 stepldr, 將 eboot 的位置改為 0x30038000.

Paul, Chao @ Techware
yuyi_pj 2009-04-09
  • 打赏
  • 举报
回复
;------------------------------------------------------------------------------
;
; TABLE FORMAT
; cached address, physical address, size
;------------------------------------------------------------------------------

g_oalAddressTable

DCD 0x80000000, 0x30000000, 64 ; 32 MB DRAM BANK 6
DCD 0x84000000, 0x10000000, 32 ; nGCS2: PCMCIA/PCCARD
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5
DCD 0x8C000000, 0x08000000, 32 ; 32 MB DRAM BANK 6
DCD 0x90800000, 0x48000000, 1 ; Memory control register
DCD 0x90900000, 0x49000000, 1 ; USB Host register
DCD 0x90A00000, 0x4A000000, 1 ; Interrupt Control register
DCD 0x90B00000, 0x4B000000, 1 ; DMA control register
DCD 0x90C00000, 0x4C000000, 1 ; Clock & Power register
DCD 0x90D00000, 0x4D000000, 1 ; LCD control register
DCD 0x90E00000, 0x4E000000, 1 ; NAND flash control register
DCD 0x90F00000, 0x4F000000, 1 ; Camera control register
DCD 0x91000000, 0x50000000, 1 ; UART control register
DCD 0x91100000, 0x51000000, 1 ; PWM timer register
DCD 0x91200000, 0x52000000, 1 ; USB device register
DCD 0x91300000, 0x53000000, 1 ; Watchdog Timer register
DCD 0x91400000, 0x54000000, 1 ; IIC control register
DCD 0x91500000, 0x55000000, 1 ; IIS control register
DCD 0x91600000, 0x56000000, 1 ; I/O Port register
DCD 0x91700000, 0x57000000, 1 ; RTC control register
DCD 0x91800000, 0x58000000, 1 ; A/D convert register
DCD 0x91900000, 0x59000000, 1 ; SPI register
DCD 0x91A00000, 0x5A000000, 1 ; SD Interface register
DCD 0x92000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
DCD 0x00000000, 0x00000000, 0 ; end of table

;------------------------------------------------------------------------------
MEMORY
; Name Start Size Type
; ------- -------- -------- ----
ARGS 80020000 00000800 RESERVED
RAM 80026000 00006000 RAM
STACK 8002c000 00004000 RESERVED
EBOOT 80038000 00040000 RAMIMAGE
BINFS 80080000 00021000 RESERVED

; Area used to cache nk.bin while programming flash
FLSCACHE 80200000 01400000 RESERVED
DISPLAY 83F00000 00100000 RESERVED

CONFIG
COMPRESSION=OFF
PROFILE=OFF
KERNELFIXUPS=ON
ROMOFFSET=25FC8000
SRE=ON
ROMSTART=80038000
ROMWIDTH=32
ROMSIZE=40000

我把boot.bib 和OEMAddressTable 贴出来了,请问paul_chao具体怎么计算?g_oalAddressTable这个表我没有做过修改,可能与我的开发板有出入,我得先查下原理图看看我的sram是接什么片选
paul_chao 2009-04-09
  • 打赏
  • 举报
回复
"可是eboot的主程序入口地址在哪里呢", 在你 eboot.bib 內有描述, 再搭配你的 OEMAddressTable 即可知.

Paul, Chao @ Techware
yuyi_pj 2009-04-09
  • 打赏
  • 举报
回复
我那个bsp三星针对WM5的我WM6里修改了使之能编译通过,gooogleman兄是这方面的专家希望能多给我指点
91program 2009-04-09
  • 打赏
  • 举报
回复
wince的BSP放到WM的PB不能运行。要专用的BSP的。
gooogleman 2009-04-09
  • 打赏
  • 举报
回复
nb0 文件的确是有前四K是0

最开始是nb0文件的标志吧。在MSDN有粗略的讲法。

wince的BSP放到WM的PB不能运行吧。要专用的BSP的。

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧