3891|13

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

eboot问题,上次我没把问题说清楚 [复制链接]

上次的贴已经结了,分页给了几位提出我代码问题的,但是主要问题不知在这,所以重开一贴;
我的汇编代码:

  1.           TEXTAREA

  2.         IMPORT  main
  3.   .
  4.   .
  5.   .
  6.   .
  7.   .
  8.   .
  9.   
  10.    


  11. ;------------------------------------------------------------------------------
  12. ;   Add for Power Management ?

  13. BringUpWinCE                                            ;点亮LED
  14.    
  15.         ldr     r0, = GPFDAT
  16.         mov     r1, #0x60
  17.         str     r1, [r0]

  18. ;------------------------------------------------------------------------------
  19. ;   Copy boot loader to memory

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

  22.         ; This is the loop that perform copying.
  23.         ldr     r0, = 0x38000           ; offset into the RAM
  24.         add     r0, r0, #PHYBASE        ; add physical base
  25.         mov     r1, r0                  ; (r1) copy destination
  26.         ldr     r2, =0x0                ; (r2) flash started at physical address 0
  27.         ldr     r3, =0x10000            ; counter (0x40000/4)
  28. 10      ldr     r4, [r2], #4
  29.         str     r4, [r1], #4
  30.         subs    r3, r3, #1
  31.         bne     %b10

  32.         ; Restart from the RAM position after copying.
  33.         mov pc, r0
  34.         nop
  35.         nop
  36.         nop

  37.         ; Shouldn't get here.
  38.         b       .

  39.         INCLUDE oemaddrtab_cfg.inc


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


  43.         ; Setup 1st level page table (using section descriptor)     
  44.         ; Fill in first level page table entries to create "un-mapped" regions
  45.         ; from the contents of the MemoryMap array.
  46.         ;
  47.         ;   (r10) = 1st level page table
  48.         ;   (r11) = ptr to MemoryMap array

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

  53.         
  54. 30      ldr     r2, [r1], #4            ; (r2) = virtual address to map Bank at
  55.         ldr     r3, [r1], #4            ; (r3) = physical address to map from
  56.         ldr     r4, [r1], #4            ; (r4) = num MB to map

  57.         cmp     r4, #0                  ; End of table?
  58.         beq     %f40

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

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

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

  65. 35      str     r0, [r2], #4
  66.         add     r0, r0, #0x00100000     ; (r0) = PTE for next physical page
  67.         sub     r4, r4, #1              ; Decrement number of MB left
  68.         cmp     r4, #0
  69.         bne     %b35                    ; Map next MB

  70.         bic     r0, r0, #0xF0000000     ; Clear Section Base Address Field
  71.         bic     r0, r0, #0x0FF00000     ; Clear Section Base Address Field
  72.         b       %b30                    ; Get next element
  73.         
  74. 40      tst     r0, #8
  75.         bic     r0, r0, #0x0C           ; clear cachable & bufferable bits in PTE
  76.         add     r10, r10, #0x0800       ; (r10) = ptr to 1st PTE for "unmapped uncached space"
  77.         bne     %b25                    ; go setup PTEs for uncached space
  78.         sub     r10, r10, #0x3000       ; (r10) = restore address of 1st level page table

  79.         ; Setup mmu to map (VA == 0) to (PA == 0x30000000).
  80.         ldr     r0, =PTs                ; PTE entry for VA = 0
  81.         ldr     r1, =0x3000040E         ; uncache/unbuffer/rw, PA base == 0x30000000
  82.         str     r1, [r0]

  83.         ; uncached area.
  84.         add     r0, r0, #0x0800         ; PTE entry for VA = 0x0200.0000 , uncached     
  85.         ldr     r1, =0x30000402         ; uncache/unbuffer/rw, base == 0x30000000
  86.         str     r1, [r0]
  87.         
  88.         ; Comment:
  89.         ; The following loop is to direct map RAM VA == PA. i.e.
  90.         ;   VA == 0x30XXXXXX => PA == 0x30XXXXXX for S3C2400
  91.         ; Fill in 8 entries to have a direct mapping for DRAM
  92.         ;
  93.         ldr     r10, =PTs               ; restore address of 1st level page table
  94.         ldr     r0,  =PHYBASE

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

  96.         add     r0, r0, #0x1E           ; 1MB cachable bufferable
  97.         orr     r0, r0, #0x400          ; set kernel r/w permission
  98.         mov     r1, #0
  99.         mov     r3, #64
  100. 45      mov     r2, r1                  ; (r2) = virtual address to map Bank at
  101.         cmp     r2, #0x20000000:SHR:BANK_SHIFT
  102.         add     r2, r10, r2, LSL #BANK_SHIFT-18
  103.         strlo   r0, [r2]
  104.         add     r0, r0, #0x00100000     ; (r0) = PTE for next physical page
  105.         subs    r3, r3, #1
  106.         add     r1, r1, #1
  107.         bgt     %b45

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

  109.         ; The page tables and exception vectors are setup.
  110.         ; Initialize the MMU and turn it on.
  111.         mov     r1, #1
  112.         mcr     p15, 0, r1, c3, c0, 0   ; setup access to domain 0
  113.         mcr     p15, 0, r10, c2, c0, 0

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

  117.         ldr     r0, =VirtualStart



  118.         cmp     r0, #0                  ; make sure no stall on "mov pc,r0" below
  119.         mcr     p15, 0, r1, c1, c0, 0
  120. [color=#FF0000]        mov     pc, r0   [/color]               ;  & jump to new virtual addre[ss
  121.         nop

  122.         ; MMU & caches now enabled.
  123.         ;   (r10) = physcial address of 1st level page table
  124.         ;

  125. VirtualStart


  126.         
  127.         mov     sp, #0x8C000000
  128.         add     sp, sp, #0x30000        ; arbitrary initial super-page stack pointer
  129.         b       main

  130.         ENTRY_END

  131.         LTORG
复制代码


c代码

  1. void main(void)
  2. {

  3.     OEMWriteDebugLED(0, 0xF);


  4. }
  5. void OEMWriteDebugLED(UINT16 Index, DWORD Pattern)
  6. {
  7.     volatile S3C2410X_IOPORT_REG *s2410IOP = (S3C2410X_IOPORT_REG *)OALPAtoVA(S3C2410X_BASE_REG_PA_IOPORT, FALSE);


  8.     s2410IOP->GPFDAT=(s2410IOP->GPFDAT & 0xf) | ((Pattern & 0xf)<<4);
  9. }
复制代码

我的硬件没有norflash 所以采用的是nboot +eboot
nboot执行之后,也的确把 eboot拷贝到了0x30038000处(读ram和源文件比较)

我的nboot用ads编译的,所以可以仿真,跳转到eboot后执行到mov     pc, r0,地址也变成了虚拟地址(仿真器上看到的)
执行b main 后 都是dci 操作,也就是代码存储相关,但是无法执行main函数中的led函数(因为灯没有熄灭,不知道是不是可以这样理解)

最后会报undefine instruction错误,反汇编后发现是报错的语句是一条协处理器操作,找资料说协处理器操作不能是会报上名的错误

这个问题困扰我很久了,我的eboot采用的编译方法是 按帮助上说明的来的

最新回复

是啊,不停的写。很麻烦,但是驱动开发最后还是要回到pb下的把  详情 回复 发表于 2009-1-15 11:23
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ADS是可以单步调试的啊。你单步到哪里了?
把PB下的代码放到ADS的确比较爽。
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 gooogleman 的回复:
ADS是可以单步调试的啊。你单步到哪里了?
把PB下的代码放到ADS的确比较爽。
我没把pb下的代码放到ads,是在nboot调试中可以单步到eboot的b main,后面的代码都是 dci 语句,看不懂了
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
帮顶。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
现在没有时间看这个东西,只能建议你看看2440 的5.0BSP已经有完整的代码,你如果想玩玩可以移植到ADS下来实现。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 gooogleman 的回复:
现在没有时间看这个东西,只能建议你看看2440 的5.0BSP已经有完整的代码,你如果想玩玩可以移植到ADS下来实现。

呵呵,我现在问题也比较的大,看了不少的资料,就是没办法解决这个问题。
不知道是不是采用了nboot的缘故,但是硬件上也没有norflash,但是我认为,无论存储在哪,boot为了提高运行速度
一般都会拷贝到ram中执行的,所以应该和nboot不会有很大的关系。

手头也没别人跑成功的案例,做的真辛苦
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
IO高点亮led还是低点亮?
s2410IOP->GPFDAT=(s2410IOP->GPFDAT & 0xf) | ((Pattern & 0xf)<<4);

GPF没配置输入输出吗?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 shuiyan 的回复:
IO高点亮led还是低点亮?
s2410IOP->GPFDAT=(s2410IOP->GPFDAT & 0xf) | ((Pattern & 0xf) < <4);

GPF没配置输入输出吗?

GPF在汇编文件中已经配置过了,在C中还需要再配置?
这函数将汇编文件中打开的灯熄灭
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
顺便问大家的bootloader都是如何编译的,怀疑我的编译方式有问题
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

11
 
顶到有人回答
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

12
 
OEMAdressTable的地址映射贴出来看看
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 9 楼 mengll002 的回复:
顺便问大家的bootloader都是如何编译的,怀疑我的编译方式有问题


就是普通的ADS,和PB啊,和普通驱动没有什么区别的。
在PB下比较难调试,尤其是整天要用JTAG烧写的那种更是郁闷。所以我推荐全程使用ADS开发,把微软的代码移植到ADS下不错的方法。
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 gooogleman 的回复:
引用 9 楼 mengll002 的回复:
顺便问大家的bootloader都是如何编译的,怀疑我的编译方式有问题


就是普通的ADS,和PB啊,和普通驱动没有什么区别的。
在PB下比较难调试,尤其是整天要用JTAG烧写的那种更是郁闷。所以我推荐全程使用ADS开发,把微软的代码移植到ADS下不错的方法。
是啊,不停的写。很麻烦,但是驱动开发最后还是要回到pb下的把
 
 
 

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

随便看看
查找数据手册?

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