Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35270
  • 博文数量: 19
  • 博客积分: 840
  • 博客等级: 准尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-25 18:10
文章分类
文章存档

2011年(1)

2009年(18)

我的朋友

分类: WINDOWS

2009-08-03 13:35:04

文件: bootloader 源码.rar
大小: 1KB
下载: 下载
文件: bootloader 源码.rar
大小: 1KB
下载: 下载
4020_bootloader引导不带操作系统的工程代码,具体过程分为以下两种情况:
1、工程代码生成.bin文件的大小大于64KB,即超过了ESRAM的大小,则工程必须下载到SDRAM运行,具体修改措施如下:
   1)、对工程代码的修改:
       
        首先,对工程代码的scat_crremap.scf进行修改如下:
       
        SDram 0x30000400            //bootloader内pc跳转执行的地址
        {
               SDram 0x30000400
                {
                boot_gfd.o (BOOT, +First)     
                   * (+RO,+RW,+ZI)
                }
               
                PC 0x00000000       //将SDRAM映射到0地址,也可以写成0x30000000
                 {
                 int_gfd.o (INT, +First)
                 }
      
         }
       
        最后,对ARM Linker进行设置:
    
         Output -> Linktype -> Scattered;
         
         Output -> RO Base ->0x8000;
         Options ->Image entry point ->0x30000400;
        到此,对工程代码的修改已经结束。
  
   2)、对bootloader的修改:
        首先,搬运代码:
         
        ;拷贝kernel代码到SDram
 ldr  r3, =0x00000000
 ldr  r1, =0x30000400  ;;;搬运代码到SDRAM指定位置,与下面pc跳转保持一致
 ldr  r2, =0x20001000    ;the address of NorFlash 
        修改工程文件的大小:
       
        LOOP 
 ldr  r4, [r2], #4
 str  r4, [r1], #4
  
 add   r3, r3, #1
 cmp   r3, #0x80000   ;;;根据工程文件的大小进行相应修改
 bne  LOOP
 
        其次,地址映射:
        
        ;remap操作 
 ldr  pc, =0x200000a0  ;;;如果不添加任何指令,这个值不变;要添加指令,这个值要与下面一致(2-3指令)
 
 mov  r0, r0
 mov  r0, r0
 mov  r0, r0
 mov  r0, r0
 mov  r0, r0
        最后,PC跳转:
        ;重新设定PC,开始操作系统启动
 ldr  pc, =0x30000400    ;;;PC跳转指向要执行的地址,针对不同情况进行修改
 
 nop
 nop
 nop
注意:还要将工程代码中boot_gfd文件下,对EMI的配置屏蔽掉,因为在SDRAM内不能配置SDRAM
2、工程代码生成.bin文件的大小小于64KB,即没有超过了ESRAM的大小,则工程可以下载到ESRAM中运行,也可以下载到SDRAM运行,具体修改措施如下(实验过程以UART为例):
   1)、下载到ESRAM中运行:
     
        a、对scat_crremap.scf进行修改如下:
            esram 0x4000000       //ESRAM地址
            {
                   esram 0x4000000
                    {
                      boot_gfd.o (BOOT, +First)
                         * (+RO,+RW,+ZI)
                    }
                   SDram 0x00000000     //SDRAM的起始地址,也可以写成0x30000000
                    {
                      int_gfd.o (INT, +First)
                     }
             }           
       
        b、对ARM Linker进行设置:
        
         Output -> Linktype -> Scattered;
         
         Output -> RO Base ->0x8000;
         Options ->Image entry point ->0x4000000;
       c、 对bootloader进行修改:
        首先,搬运代码:
         
        ;拷贝kernel代码到SDram
 ldr  r3, =0x00000000
 ldr  r1, =0x4000000  ;;;搬运代码到SDRAM指定位置,与下面pc跳转保持一致
 ldr  r2, =0x20001000    ;the address of NorFlash 
        修改工程文件的大小:
       
        LOOP 
 ldr  r4, [r2], #4
 str  r4, [r1], #4
  
 add   r3, r3, #1
 cmp   r3, #0x80000   ;;;根据工程文件的大小进行相应修改
 bne  LOOP
 
        其次,地址映射:
        
        ;remap操作 
 ldr  pc, =0x200000a0  ;;;如果不添加任何指令,这个值不变;要添加指令,这个值要与下面一致(2-3指令)
 
 mov  r0, r0
 mov  r0, r0
 mov  r0, r0
 mov  r0, r0
 mov  r0, r0
        最后,PC跳转:
        ;重新设定PC,开始操作系统启动
 ldr  pc, =0x4000000    ;;;PC跳转指向要执行的地址,针对不同情况进行修改
 
 nop
 nop
 nop
    2)、下载到SDRAM运行和第一种情况原理是一样的。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
阅读(618) | 评论(0) | 转发(0) |
0

上一篇:uboot引导4020 sampe code

下一篇:RO,RW,ZI(转)

给主人留下些什么吧!~~