加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

配置config.bib的注意事项以及错误分析(含OEMAddressTable介绍)

发布时间:2020-12-15 06:17:53 所属栏目:百科 来源:网络整理
导读:? 一、编译出NK,但是但是下载NK后不会启动。 原因:就是DNW设置地址不对,并不是每个NK下载到0x32000000都能运行的。欲知详情,请看下面。 先看这个能在0x32000000运行的NK的内存映射表 OEMAddressTable ????;;;------------------------------------------
?

一、编译出NK,但是但是下载NK后不会启动。

原因:就是DNW设置地址不对,并不是每个NK下载到0x32000000都能运行的。欲知详情,请看下面。

先看这个能在0x32000000运行的NK的内存映射表

  1. OEMAddressTable
  2. ????;;;-------------------------------------------------------------
  3. ????;;;?Virt?Addr???Phys?Addr???MB
  4. ????;;;-------------------------------------------------------------
  5. ????DCD?0x80000000,?0x02000000,?30??;?30?MB?SRAM(SRAM/ROM)?BANK?0
  6. ????DCD?0x82000000,?0x08000000,?32??;?32?MB?SROM(SRAM/ROM)?BANK?1
  7. ????DCD?0x84000000,?0x10000000,?32??;?32?MB?SROM(SRAM/ROM)?BANK?2
  8. ????DCD?0x86000000,?0x18000000,?32??;?32?MB?SROM(SRAM/ROM)?BANK?3
  9. ????DCD?0x88000000,?0x20000000,?32??;?32?MB?SROM(SRAM/ROM)?BANK?4
  10. ????DCD?0x8A000000,?0x28000000,?32??;?32?MB?SROM(SRAM/ROM)?BANK?5
  11. ????DCD?0x8C000000,?0x30000000,?64??;?64?MB?DRAM?BANK?0,?1
  12. ????DCD?0x90800000,?0x48000000,??1??;?Memory?control?register
  13. ????DCD?0x90900000,?0x49000000,??1??;?USB?Host?register
  14. ????DCD?0x90A00000,?0x4A000000,??1??;?Interrupt?Control?register
  15. ????DCD?0x90B00000,?0x4B000000,??1??;?DMA?control?register
  16. ????DCD?0x90C00000,?0x4C000000,??1??;?Clock?&?Power?register
  17. ????DCD?0x90D00000,?0x4D000000,??1??;?LCD?control?register
  18. ????DCD?0x90E00000,?0x4E000000,??1??;?NAND?flash?control?register
  19. ????DCD?0x90F00000,?0x4F000000,??1??;?Camera?control?register?
  20. ????DCD?0x91000000,?0x50000000,??1??;?UART?control?register
  21. ????DCD?0x91100000,?0x51000000,??1??;?PWM?timer?register
  22. ????DCD?0x91200000,?0x52000000,??1??;?USB?device?register
  23. ????DCD?0x91300000,?0x53000000,??1??;?Watchdog?Timer?register
  24. ????DCD?0x91400000,?0x54000000,??1??;?IIC?control?register
  25. ????DCD?0x91500000,?0x55000000,??1??;?IIS?control?register
  26. ????DCD?0x91600000,?0x56000000,??1??;?I/O?Port?register
  27. ????DCD?0x91700000,?0x57000000,??1??;?RTC?control?register
  28. ????DCD?0x91800000,?0x58000000,??1??;?A/D?convert?register
  29. ????DCD?0x91900000,?0x59000000,??1??;?SPI?register
  30. ????DCD?0x91A00000,?0x5A000000,??1??;?SD?Interface?register
  31. ????DCD?0x91B00000,?0x5B000000,??1??;?AC97?Interface?register
  32. ????DCD?0x91C00000,?0x5C000000,??1??;?ATAPI?register?cs0?add?by?fly?
  33. ????DCD?0x91D00000,?0x5D000000,??1??;?ATAPI?register?cs1?add?by?fly?
  34. ????DCD?0x00000000,?0x00000000,??0??;?End?of?Table?(MB?MUST?BE?ZERO!)
  35. ????END

现在再来看这个NK对应的config.bib文件的内存分配

MEMORY

;NK 29MB
?NK???8C200000? 01D00000? RAMIMAGE----注意这个8C200000刚好对应的是物理地址0x30200000!
;RAM 96MB
?RAM???????? 8E000000? 02000000? RAM


; Common RAM areas
?AUD_DMA???? ?8c002000? 00002000? RESERVED
?DRV_GLB???8c010000? 00010000? RESERVED
?DBGSER_DMA??8c022000? 00002000? RESERVED
?SER_DMA???8c024000? 00002000? RESERVED
?IR_DMA???8c026000? 00002000? RESERVED
?SD_DMA???8c028000? 00008000? RESERVED
?EDBG???8c030000? 00020000? RESERVED
?CAMERA???8c050000? 00110000? RESERVED
?DISPLAY???8c160000? 000A0000? RESERVED

注意红色那行,由此可知,DNW不是随便乱填就可以下载的,我想这个应该是唯一的,必须看内存映射表以及config.bib的设置。在这里不想多举例子,最后我想提醒大家看看这个config.bib的配置,各个部分是不能重叠的。

还有:在WINCE5.0下无法生成NK.nbo,后来在网上看到相关文章,才知道需要修改config.bib这个文件,需要添加如下参数:
ROMSTART
ROMWIDTH
ROMSIZE

?

三、(1)boot.bib中和config.bib定义的内存段有重复的地方,比如说EBOOT? ? 8c038000? 00020000? RAMIMAGE? 和 EDBG? ? 8c030000? 00020000? RESERVED? 这样是否有影响,我看到有文章说,EBOOT镜像在的地方不可以被重写和覆盖,但是,这里却重复了???

(2)按理说,congfig.bib中的定义和头文件中定义的地址一致才对,以下是我从loarder.h中截出来的,请看

// Nk Memory reigions defined in config.bib...
//
#define ROM_RAMIMAGE_START? ? ? ? ? 0x8C100000
#define ROM_RAMIMAGE_SIZE? ? ? ? ? 0x01000000

// Start addresses must match config.bib's RAMIMAGE
#define RAM_START? ? ? ? ? ? ? ? ? 0x8d100000
#define RAM_SIZE? ? ? ? ? ? ? ? ? ? 0x00F00000

按照config.bib的定义,以上应该是以下才对

// Nk Memory reigions defined in config.bib...
//
#define ROM_RAMIMAGE_START? ? ? ? ? 8C200000
#define ROM_RAMIMAGE_SIZE? ? ? ? ? 02400000

// Start addresses must match config.bib's RAMIMAGE
#define RAM_START? ? ? ? ? ? ? ? ? 8E600000?
#define RAM_SIZE? ? ? ? ? ? ? ? ? ? 01900000?

这个是我的理解错误,还是什么的,请各位大侠指教,我的是wince5.0

????????? 牛人回答


1. eboot所在的位置不能被覆盖,是指flash中。ram中,当eboot启动,加载了OS后,系统控制权就交给OS了,eboot就不会再被用到,所以其在RAM中的空间可以被再次利用。这次覆盖是在OS启动之后加载驱动时才会产生。

2. OS的IMG你可以用UEdit打开看一下,前面有一部分是空白区域。这里定义的起始地址,是对应了有效的可执行OS镜像的开始。所以跟上面看到的有偏移。

?

-------------从这个牛人这里可以看出,如果改动了config.bib,那么loader.h也要跟着改动了,估计是这样,不然启动不了的。先试试

?

以上转自:http://www.voidcn.com/article/p-mczzjmtd-rz.html

?

再对OEMAddressTable加以说明:

一般在ARM架构的CPU上,物理地址都是统一编址的,寻址空间为4GB(32Bit CPU)。也就是说,针对一个ARM的处理器,它可以访问的物理空间是4GB。在WinCE中,ARM中的4GB物理地址空间将被映射为512MB的虚拟内存空间。?OEMAddressTable就是一个4GB物理地址空间到WinCE Kernel中的512MB虚拟地址空间的映射表。

在BSP中,会定义OEMAddressTable来描述系统中可访问的物理空间及对应的虚拟地址空间,还有大小。这个表会在WinCE系统开始启动的时候传给MMU,具体到BSP中应该是在OAL中的startup.s中,OEMAddressTable的起始地址会被放到r0寄存器中,然后就跳转到KernelStart里面,KernelStart会用OEMAddressTable完成MMU得初始化。当WinCE启动以后,就只能访问虚拟地址空间了。

举个例子,比如我们要开发一个Flash的驱动程序,那么首先我们知道这个flash所接的片选对应的物理起始地址是多少(假如是0x60000000),大小是多少(假如是0x2000000)。如果我们要在WinCE中访问它,就必须为它定义一个虚拟地址(假如是0x80000000),并添加到OEMAddressTable中,这样,我们才能在我们的驱动里面通过这个虚拟地址访问到flash。

虚拟地址不是随便定义的,WinCE中有规定,必须在0x80000000---0x9FFFFFFF。实际上WinCE创建了两套虚拟地址空间,一个是0x80000000---0x9FFFFFFF,是Cache Enabled。另一个是0xA0000000---0xBFFFFFFF,是Cache Disabled。有啥区别呢:

如果我们访问的这个空间只是一段内存空间(比如SDRAM),那么就可以用Cache Enabled的空间来访问,这样存取数据的速度会比较快,因为数据被保存在Cache中。

如果我们访问的这个空间是一个外设的地址,那么我们就要使用Cached Disabled的空间来访问,这样才能使CPU与外设同步。

可能说得有点绕,我的经验就是:只要是SDRAM,可以用Cache Enabled空间访问。如果是寄存器,就用Cache Disabled空间访问。

以上转自:http://www.voidcn.com/article/p-ticxbsre-br.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读