Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9138442
  • 博文数量: 1725
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19840
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1725)

文章存档

2024年(1)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2013-09-16 16:59:50

1. S3C24XX CPU 内部有4KB的 internal RAM空间供引导,jlink只要把引导程序放入0x00000000位置, 则ARM CPU在引导时则执行在0x00000000位置上的引导代码。
2. 引导代码执行完 CPU/DRAM/CLOCK/UART初始化后,就可以把跑在RAM空间的UBOOT代码下载对应位置进行引导,则会有对应得到控制台console shell, 用户则可以通过console shell 输入命令后即可操作 串口/tftp/ 和 nandflash 了。

一般从 UBOOT/arch/arm/xxx/start.S 超出对应的部分即可。


点击(此处)折叠或打开

  1. .text
  2. .globl _start
  3. /*
  4.  * the actual start code
  5.  */

  6. _start:
  7.     /*
  8.      * set the cpu to SVC32 mode
  9.      */
  10.     mrs r0, cpsr
  11.     bic r0, r0, #0x1f
  12.     orr r0, r0, #0xd3
  13.     msr cpsr, r0

  14.     /*
  15.     * disable WatchDog
  16.     */
  17.     mov r0, #0x53000000     @ ldr r0, =pWTCON
  18.     mov r1, #0
  19.     str r1, [r0]             @ disable WTCON
  20.     
  21.     /*
  22.      * mask all IRQs by setting all bits in the INTMR - default
  23.      */
  24.     mov r1, #0xffffffff
  25.     ldr r0, =0x4a000008 @ldr r0, =INTMSK
  26.     str r1, [r0]
  27.     
  28. System_Clock_Init:
  29.     /* Clock asynchronous mode */
  30.     mrc p15, 0, r1, c1, c0, 0
  31.     orr r1, r1, #0xc0000000
  32.     mcr p15, 0, r1, c1, c0, 0

  33.     ldr r0, =0x4c000000
  34.     /* LOCKTIME configure */
  35.     ldr r1, =0xffffff
  36.     str r1, [r0, #0x0] @LOCKTIME

  37.     /* CAMDIVN configure */
  38.     ldr r1, =0x0
  39.     str r1, [r0, #0x18] @CAMDIVN
  40.     /*
  41.      * default FCLK is 120 MHz !
  42.      * FCLK:HCLK:PCLK = 1:4:8
  43.      */
  44.     ldr r1, =0x05
  45.     str r1, [r0, #0x14] @CLKDIVN 1:4:8
  46.  
  47.     /* UPLL setup */ @ USB clock to 48MHz
  48.     ldr r1, =((56 << 12) | (2 << 4) | (2))
  49.     str r1, [r0, #0x08]
  50.     nop
  51.     nop
  52.     nop
  53.     nop
  54.     nop
  55.     nop
  56.     nop
  57.     nop
  58.     
  59.     /* MPLL setup */ @ Main clock to 405MHz
  60.     ldr r1, =((127 << 12) | (2 << 4) | (1))
  61.     str r1, [r0, #0x04]
  62.           
  63. cpu_init_crit:
  64.     /*
  65.      * flush v4 I/D caches
  66.      */
  67.     mov r0, #0
  68.     mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
  69.     mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
  70.     
  71.     /*
  72.      * disable MMU stuff and caches
  73.      */
  74.     mrc p15, 0, r0, c1, c0, 0
  75.     bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
  76.     bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
  77.     orr r0, r0, #0x00000002 @ set bit 2 (A) Align
  78.     orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
  79.     mcr p15, 0, r0, c1, c0, 0

  80. Memory_Initial:
  81.     adrl r0, mem_cfg_val
  82.     mov r1, #0x48000000
  83.     add r3, r1, #52
  84.     
  85. 1: ldr r4, [r0], #4
  86.     str r4, [r1], #4
  87.     cmp r1, r3
  88.     bne 1b

  89.     mov r2, #0x8000000
  90. loop:
  91.     subs r2, r2, #1
  92.     bne loop @ dead loop

  93. .align 4
  94. mem_cfg_val:
  95.   .long 0x01001000 @BWSCON
  96.   .long 0x00 @BANKCON0
  97.   .long 0x00 @BANKCON1
  98.   .long 0x00 @BANKCON2
  99.   .long 0x1FC0 @BANKCON3
  100.   .long 0x00 @BANKCON4
  101.   .long 0x00 @BANKCON5
  102.   .long 0x00018005 @BANKCON6
  103.   .long 0x00 @BANKCON7
  104.   .long 0x009c04f5 @ HCLK=100MHz
  105.   .long 0x000000b0
  106.   .long 0x00000030 @Bank Size
  107.   .long 0x00000000 @MRSR



其中主要的部分为 把部分 lowlevel_init.S 中对 MPLL/CLKDIVN 和 DRAM的配置部分提前拿到这里。

即初始化的部分为 保证 CPU/RAM能用, clock能跑起来就OK了。



点击(此处)折叠或打开

  1. objs := init.o

  2. all: $(objs)
  3.         arm-elf-ld -Ttext 0x0000000 -o init_elf $^
  4.         arm-elf-objcopy -O binary -S init_elf init.bin
  5.         arm-elf-objdump -D -m arm init_elf > init.dis
  6.         
  7. %.o:%.c
  8.         arm-elf-gcc -Wall -g -c -o $@ $<

  9. %.o:%.S
  10.         arm-elf-gcc -Wall -g -c -o $@ $<

  11. clean:
  12.         rm -f init.bin init_elf init.dis *.o


jlink的使用:

jlink.bat => 

点击(此处)折叠或打开

  1. "D:\SEGGER\V408l\JLink.exe" jlink_script.txt

  2. @echo "OK"
jlink_script.txt => 

点击(此处)折叠或打开

  1. speed 1200
  2. h
  3. loadbin init.bin 0
  4. setpc 0
  5. g
  6. sleep 100
  7. h
  8. loadbin u-boot.ram.bin 0x31F80000
  9. setpc 0x31F80000
  10. g
  11. q




阅读(3197) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~