5518|18

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EBOOT跳转到虚拟地址后就不能执行 [复制链接]

  1. BringUpWinCE
  2.    
  3. [color=#FF0000]        ldr     r0, = GPFDAT
  4.         mov     r1, #0xa0
  5.         str     r1, [r0][/color]

  6. ;------------------------------------------------------------------------------
  7. ;   Copy boot loader to memory

  8.         ands    r9, pc, #0xFF000000     ; see if we are in flash or in ram
  9.         bne     %f20                    ; go ahead if we are already in ram

  10.         ; This is the loop that perform copying.
  11.         ldr     r0, = 0x38000           ; offset into the RAM
  12.         add     r0, r0, #PHYBASE        ; add physical base
  13.         mov     r1, r0                  ; (r1) copy destination
  14.         ldr     r2, =0x0                ; (r2) flash started at physical address 0
  15.         ldr     r3, =0x10000            ; counter (0x40000/4)
  16. 10      ldr     r4, [r2], #4
  17.         str     r4, [r1], #4
  18.         subs    r3, r3, #1
  19.         bne     %b10

  20.         ; Restart from the RAM position after copying.
  21.         mov pc, r0
  22.         nop
  23.         nop
  24.         nop

  25.         ; Shouldn't get here.
  26.         b       .

  27.         INCLUDE oemaddrtab_cfg.inc


  28.         ; Compute physical address of the OEMAddressTable.
  29. 20      add     r11, pc, #g_oalAddressTable - (. + 8)
  30.         ldr     r10, =PTs                ; (r10) = 1st level page table


  31.         ; Setup 1st level page table (using section descriptor)     
  32.         ; Fill in first level page table entries to create "un-mapped" regions
  33.         ; from the contents of the MemoryMap array.
  34.         ;
  35.         ;   (r10) = 1st level page table
  36.         ;   (r11) = ptr to MemoryMap array

  37.         add     r10, r10, #0x2000       ; (r10) = ptr to 1st PTE for "unmapped space"
  38.         mov     r0, #0x0E               ; (r0) = PTE for 0: 1MB cachable bufferable
  39.         orr     r0, r0, #0x400          ; set kernel r/w permission
  40. 25      mov     r1, r11                 ; (r1) = ptr to MemoryMap array

  41.         
  42. 30      ldr     r2, [r1], #4            ; (r2) = virtual address to map Bank at
  43.         ldr     r3, [r1], #4            ; (r3) = physical address to map from
  44.         ldr     r4, [r1], #4            ; (r4) = num MB to map

  45.         cmp     r4, #0                  ; End of table?
  46.         beq     %f40

  47.         ldr     r5, =0x1FF00000
  48.         and     r2, r2, r5              ; VA needs 512MB, 1MB aligned.               

  49.         ldr     r5, =0xFFF00000
  50.         and     r3, r3, r5              ; PA needs 4GB, 1MB aligned.

  51.         add     r2, r10, r2, LSR #18
  52.         add     r0, r0, r3              ; (r0) = PTE for next physical page

  53. 35      str     r0, [r2], #4
  54.         add     r0, r0, #0x00100000     ; (r0) = PTE for next physical page
  55.         sub     r4, r4, #1              ; Decrement number of MB left
  56.         cmp     r4, #0
  57.         bne     %b35                    ; Map next MB

  58.         bic     r0, r0, #0xF0000000     ; Clear Section Base Address Field
  59.         bic     r0, r0, #0x0FF00000     ; Clear Section Base Address Field
  60.         b       %b30                    ; Get next element
  61.         
  62. 40      tst     r0, #8
  63.         bic     r0, r0, #0x0C           ; clear cachable & bufferable bits in PTE
  64.         add     r10, r10, #0x0800       ; (r10) = ptr to 1st PTE for "unmapped uncached space"
  65.         bne     %b25                    ; go setup PTEs for uncached space
  66.         sub     r10, r10, #0x3000       ; (r10) = restore address of 1st level page table

  67.         ; Setup mmu to map (VA == 0) to (PA == 0x30000000).
  68.         ldr     r0, =PTs                ; PTE entry for VA = 0
  69.         ldr     r1, =0x3000040E         ; uncache/unbuffer/rw, PA base == 0x30000000
  70.         str     r1, [r0]

  71.         ; uncached area.
  72.         add     r0, r0, #0x0800         ; PTE entry for VA = 0x0200.0000 , uncached     
  73.         ldr     r1, =0x30000402         ; uncache/unbuffer/rw, base == 0x30000000
  74.         str     r1, [r0]
  75.         
  76.         ; Comment:
  77.         ; The following loop is to direct map RAM VA == PA. i.e.
  78.         ;   VA == 0x30XXXXXX => PA == 0x30XXXXXX for S3C2400
  79.         ; Fill in 8 entries to have a direct mapping for DRAM
  80.         ;
  81.         ldr     r10, =PTs               ; restore address of 1st level page table
  82.         ldr     r0,  =PHYBASE

  83.         add     r10, r10, #(0x3000 / 4) ; (r10) = ptr to 1st PTE for 0x30000000

  84.         add     r0, r0, #0x1E           ; 1MB cachable bufferable
  85.         orr     r0, r0, #0x400          ; set kernel r/w permission
  86.         mov     r1, #0
  87.         mov     r3, #64
  88. 45      mov     r2, r1                  ; (r2) = virtual address to map Bank at
  89.         cmp     r2, #0x20000000:SHR:BANK_SHIFT
  90.         add     r2, r10, r2, LSL #BANK_SHIFT-18
  91.         strlo   r0, [r2]
  92.         add     r0, r0, #0x00100000     ; (r0) = PTE for next physical page
  93.         subs    r3, r3, #1
  94.         add     r1, r1, #1
  95.         bgt     %b45

  96.         ldr     r10, =PTs               ; (r10) = restore address of 1st level page table

  97.         ; The page tables and exception vectors are setup.
  98.         ; Initialize the MMU and turn it on.
  99.         mov     r1, #1
  100.         mcr     p15, 0, r1, c3, c0, 0   ; setup access to domain 0
  101.         mcr     p15, 0, r10, c2, c0, 0

  102.         mcr     p15, 0, r0, c8, c7, 0   ; flush I+D TLBs
  103.         mov     r1, #0x0071             ; Enable: MMU
  104.         orr     r1, r1, #0x0004         ; Enable the cache

  105.         ldr     r0, =VirtualStart

  106.         cmp     r0, #0                  ; make sure no stall on "mov pc,r0" below
  107.         mcr     p15, 0, r1, c1, c0, 0
  108.         mov     pc, r0                  ;  & jump to new virtual address
  109.         nop

  110.         ; MMU & caches now enabled.
  111.         ;   (r10) = physcial address of 1st level page table
  112.         ;
  113.         
  114.         


  115. VirtualStart

  116.         mov     sp, #0x8C000000
  117.         add     sp, sp, #0x30000        ; arbitrary initial super-page stack pointer
  118.         b       main

  119.         ENTRY_END
复制代码


我自己写了nboot,把eboot全部搬移到sdram;
红色代码处的点灯可以实现 ,但是不能跑到main函数中执行
void main(void)
{

    // Clear LEDs.
    //   
    OEMWriteDebugLED(0, 0xF);           
   
    // Common boot loader (blcommon) main routine.
    //   
    BootloaderMain();

    // Should never get here.
    //
    SpinForever();
}
main函数的第一个子函数没有执行;
在axd仿真nboot跟到eboot中,最后出错的地址为虚拟地址0x8c064020,undefined instrunction   

最新回复

我觉得要重新开发bootloader,就必须把MMU、cache的原理搞懂以及控制他们的协处理器指令。 我在年前一定要搞懂这些。否则整天抄袭,没有意思。  详情 回复 发表于 2008-12-25 09:41
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
怎么没人回答啊,高手帮忙啊
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你把PB下的nboot和eboot移植到ADS下面?
在ADS下不用开MMU的。
eboot中为了共享FMD代码以及一些微软提供的代码才开了MMU。
PB下的bootloader架构移植起来不方便,建议你看看优龙的bootloader(ADS 环境的)
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
我刚才已经完成了公司交给的任务,正好有空看看这个MMU以及cache的原理以及 OAL的初始化代码。
——哈哈
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 gooogleman 的回复:
你把PB下的nboot和eboot移植到ADS下面?
在ADS下不用开MMU的。
eboot中为了共享FMD代码以及一些微软提供的代码才开了MMU。
PB下的bootloader架构移植起来不方便,建议你看看优龙的bootloader(ADS 环境的)



只有nboot是ads下的,方便调试。eboot还是在pb下的,所以还是要用到mmu。我现在好恨啊,一个跑的起来的eboot的都没有,板子有没有norflash。
只要自己做nboot把eboot拷贝到sdram中了,然后再改其他的操作。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
觉得现在离跑wince还很远啊。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 mengll002 的回复:
觉得现在离跑wince还很远啊。

不远,是2440吗?
给个2440 5.0BSP你(PB环境的stepstone/nboot+eboot)
http://download.eeworld.net/source/759134
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 gooogleman 的回复:
引用 5 楼 mengll002 的回复:
觉得现在离跑wince还很远啊。

不远,是2440吗?
给个2440 5.0BSP你(PB环境的stepstone/nboot+eboot)
http://download.eeworld.net/source/759134

2410的。你验证过可以跑?这个我记得eboot是写在norflash上的吧,2440和2410是不是只有主频上有区别啊
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
2410的也有。http://download.eeworld.net/source/843027
我发的东西,保证可以跑,除非你使用方法不对。

至于nboot的写法你可以参照上面的stepstone的写法,作用一样,只是变了名称。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 gooogleman 的回复:
2410的也有。http://download.eeworld.net/source/843027
我发的东西,保证可以跑,除非你使用方法不对。

至于nboot的写法你可以参照上面的stepstone的写法,作用一样,只是变了名称。

恩,那我下载了去试试。是不是把stepldr写到block2.eboot写到block2就可以了
因为我的硬件也比较的通用的,虽然自己做的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
mark
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
nboot全移植过来了?

最后的main()是eboot中的?红色代码点LED是你自己加的吧?

nboot是wince4.2下的叫法,stepldr是wince5下的叫法,用法其实一样的。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 shuiyan 的回复:
nboot全移植过来了?

最后的main()是eboot中的?红色代码点LED是你自己加的吧?

nboot是wince4.2下的叫法,stepldr是wince5下的叫法,用法其实一样的。


shuiyan 前辈也不休息.............是这么做的
不过我还是坚持优龙的ADS 环境的Bootloader,好开发,调试。烧写速度也快,烧写直接通过ADS,那速度,相当的快
最近想花点时间让他支持binfs 和FAT分区。如果成功了就更爽了。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 11 楼 shuiyan 的回复:
nboot全移植过来了?

最后的main()是eboot中的?红色代码点LED是你自己加的吧?

nboot是wince4.2下的叫法,stepldr是wince5下的叫法,用法其实一样的。

恩,是的,为了看mmu开启后又没有运行到bootloadmain().
现在nboot已经完全把eboot拷贝到ram的30038000处,应该应经和从哪启动无关了,但是在一个8c0641f8的虚拟地址发生了undfined instrantion
很奇怪,昨天Googleman给我的boot应该是没有问题的,唉,不过好像都是在amd的flash启动的。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 12 楼 gooogleman 的回复:
引用 11 楼 shuiyan 的回复:
nboot全移植过来了?

最后的main()是eboot中的?红色代码点LED是你自己加的吧?

nboot是wince4.2下的叫法,stepldr是wince5下的叫法,用法其实一样的。


shuiyan 前辈也不休息.............是这么做的
不过我还是坚持优龙的ADS 环境的Bootloader,好开发,调试。烧写速度也快,烧写直接通过ADS,那速度,相当的快
最近想花点时间让他支持binfs 和FAT分区。如果成功了就更爽了。

偶木有游龙的资料啊。只有几个pb下的bsp
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

16
 
楼主,建议你暂停开发先,先看看ARM的一些官方文档。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 
为啥,虽然我就是这么做的现在。唉,也做不下去了=,=,基础不够啊
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

18
 
把行
    OEMWriteDebugLED(0, 0xF);
换成
    g_oalLogMask = 0;
    OEMWriteDebugLED(0, 0xF);

试试
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 16 楼 mengll002 的回复:
为啥,虽然我就是这么做的现在。唉,也做不下去了=,=,基础不够啊


我觉得要重新开发bootloader,就必须把MMU、cache的原理搞懂以及控制他们的协处理器指令。
我在年前一定要搞懂这些。否则整天抄袭,没有意思。
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表