这次我们将从官网下载的最新uboot-2012-10移植到s5pv210开发板上,让其进入控制台,效果如下:

首先,我暂时没采用内核的SPL,这个将在后面给补上,这里的BL1是我自己参考资料写的,我用的是TQ210开发板,内存1G,对于不同的开发板,需要重新配置memory和修改uboot在内存里的地址,也就是CONFIG_SYS_TEXT_BASE。我的BL1代码在这里下载

一、添加smdkv210单板

1.cp -a board/samsung/smdkc100 board/samsung/smdkv210

2.cp include/configs/smdkc100.h include/configs/smdkv210.h

3.vim boards.cfg,在270行添加

  1. 270 smdkv210                     arm         armv7       smdkv210            samsung        s5pc1xx

4.make smdkv210_config可以生成u-boot.bin了

二、让u-boot.bin在内存里启动起来

1.分析我的BL1代码可以得知,只拷贝了u-boot.bin,并没有清除bss,在ls arch/arm/cpu/armv7/start.S +126中添加

  1. reset:
  2. //by ZheGao clear bss
  3. ldr r0, =__bss_start
  4. ldr r1, =__bss_end__
  5. mov r2, #0x0
  6. 1:
  7. str r2, [r0], #4
  8. cmp r0, r1
  9. bne 1b
  10. //end of clear bss
  11. bl  save_boot_params

2.在BL0已经关了看门狗,在BL1里已经初始化了memory和串口,修改board/samsung/smdkv210/lowlevel_init.S +39中给屏蔽

  1. .globl lowlevel_init
  2. lowlevel_init:
  3. mov r9, lr
  4. #if 0
  5. /* r5 has always zero */
  6. mov r5, #0
  7. ldr r8, =S5PC100_GPIO_BASE
  8. /* Disable Watchdog */
  9. ldr r0, =S5PC100_WATCHDOG_BASE      @0xEA200000
  10. orr r0, r0, #0x0
  11. str r5, [r0]
  12. /* setting SRAM */
  13. ldr r0, =S5PC100_SROMC_BASE
  14. ldr r1, =0x9
  15. str r1, [r0]
  16. /* S5PC100 has 3 groups of interrupt sources */
  17. ldr r0, =S5PC100_VIC0_BASE          @0xE4000000
  18. ldr r1, =S5PC100_VIC1_BASE          @0xE4000000
  19. ldr r2, =S5PC100_VIC2_BASE          @0xE4000000
  20. /* Disable all interrupts (VIC0, VIC1 and VIC2) */
  21. mvn r3, #0x0
  22. str r3, [r0, #0x14]             @INTENCLEAR
  23. str r3, [r1, #0x14]             @INTENCLEAR
  24. str r3, [r2, #0x14]             @INTENCLEAR
  25. /* Set all interrupts as IRQ */
  26. str r5, [r0, #0xc]              @INTSELECT
  27. str r5, [r1, #0xc]              @INTSELECT
  28. str r5, [r2, #0xc]              @INTSELECT
  29. /* Pending Interrupt Clear */
  30. str r5, [r0, #0xf00]            @INTADDRESS
  31. str r5, [r1, #0xf00]            @INTADDRESS
  32. str r5, [r2, #0xf00]            @INTADDRESS
  33. /* for UART */
  34. bl uart_asm_init
  35. /* for TZPC */
  36. bl tzpc_asm_init
  37. 1:
  38. #endif
  39. mov lr, r9
  40. mov pc, lr

3.修改第一步的sp指针,在include/configs/smdkv210.h +228修改

  1. //#define CONFIG_SYS_INIT_SP_ADDR   (CONFIG_SYS_LOAD_ADDR - 0x1000000)
  2. #define CONFIG_SYS_INIT_SP_ADDR (0x30000000)

4.修改board/samsung/smdkv210/smdkc100.c +80

  1. int checkboard(void)
  2. {
  3. printf("Board:\tSMDKv210\n");
  4. return 0;
  5. }

5.修改include/configs/smdkv210.h +51

  1. //#define CONFIG_SYS_SDRAM_BASE     0x30000000
  2. #define CONFIG_SYS_SDRAM_BASE       0x20000000

6.修改include/configs/smdkv210.h +189

  1. //#define PHYS_SDRAM_1_SIZE (128 << 20)   /* 0x8000000, 128 MB Bank #1 */
  2. #define PHYS_SDRAM_1_SIZE   (0x40000000)    /* 0x8000000, 128 MB Bank #1 */

7.修改board/samsung/smdkv210/config.mk +16

  1. CONFIG_SYS_TEXT_BASE = 0x5ff00000

8.修改 arch/arm/config.mk +88

  1. #LDFLAGS_u-boot += -pie

9.修改include/configs/smdkv210.h +216

  1. //#define CONFIG_ENV_IS_IN_ONENAND  1
  2. #define CONFIG_ENV_IS_NOWHERE

10.修改arch/arm/lib/board.c +384

  1. //addr -= gd->mon_len;
  2. addr = 0x5ff00000;

11.因为bl1已经复制程序到指定的地址就不需要重新定位代码了,但还是需要重新设置栈,所以修改了上面的第8步,修改arch/arm/cpu/armv7/start.S +192

  1. ENTRY(relocate_code)
  2. mov r4, r0  /* save addr_sp */
  3. mov r5, r1  /* save addr of gd */
  4. mov r6, r2  /* save addr of destination */
  5. #if 0
  6. //debug
  7. ldr r0, =0xE0200C00
  8. ldr r1, =0x1111
  9. str r1, [r0]
  10. ldr r0, =0xE0200C04
  11. ldr r1, =(7)
  12. str r1, [r0]
  13. #endif
  14. mov sp, r4
  15. mov r0, r5
  16. mov r1, r6
  17. bl board_init_r
  18. #if 0
  19. /* Set up the stack                         */
  20. stack_setup:
  21. mov sp, r4
  22. adr r0, _start
  23. cmp r0, r6
  24. moveq   r9, #0      /* no relocation. relocation offset(r9) = 0 */
  25. beq clear_bss       /* skip relocation */
  26. mov r1, r6          /* r1 <- scratch for copy_loop */
  27. ldr r3, _image_copy_end_ofs
  28. add r2, r0, r3      /* r2 <- source end address      */
  29. copy_loop:
  30. ldmia   r0!, {r9-r10}       /* copy from source address [r0]    */
  31. stmia   r1!, {r9-r10}       /* copy to   target address [r1]    */
  32. cmp r0, r2          /* until source end address [r2]    */
  33. blo copy_loop
  34. /*
  35. * fix .rel.dyn relocations
  36. */
  37. ldr r0, _TEXT_BASE      /* r0 <- Text base */
  38. sub r9, r6, r0      /* r9 <- relocation offset */
  39. ldr r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
  40. add r10, r10, r0        /* r10 <- sym table in FLASH */
  41. ldr r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
  42. add r2, r2, r0      /* r2 <- rel dyn start in FLASH */
  43. ldr r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
  44. add r3, r3, r0      /* r3 <- rel dyn end in FLASH */
  45. fixloop:
  46. ldr r0, [r2]        /* r0 <- location to fix up, IN FLASH! */
  47. add r0, r0, r9      /* r0 <- location to fix up in RAM */
  48. ldr r1, [r2, #4]
  49. and r7, r1, #0xff
  50. cmp r7, #23         /* relative fixup? */
  51. beq fixrel
  52. cmp r7, #2          /* absolute fixup? */
  53. beq fixabs
  54. /* ignore unknown type of fixup */
  55. b   fixnext
  56. fixabs:
  57. /* absolute fix: set location to (offset) symbol value */
  58. mov r1, r1, LSR #4      /* r1 <- symbol index in .dynsym */
  59. add r1, r10, r1     /* r1 <- address of symbol in table */
  60. ldr r1, [r1, #4]        /* r1 <- symbol value */
  61. add r1, r1, r9      /* r1 <- relocated sym addr */
  62. b   fixnext
  63. fixrel:
  64. /* relative fix: increase location by offset */
  65. ldr r1, [r0]
  66. add r1, r1, r9
  67. fixnext:
  68. str r1, [r0]
  69. add r2, r2, #8      /* each rel.dyn entry is 8 bytes */
  70. cmp r2, r3
  71. blo fixloop
  72. b   clear_bss
  73. _rel_dyn_start_ofs:
  74. .word __rel_dyn_start - _start
  75. _rel_dyn_end_ofs:
  76. .word __rel_dyn_end - _start
  77. _dynsym_start_ofs:
  78. .word __dynsym_start - _start
  79. clear_bss:
  80. ldr r0, _bss_start_ofs
  81. ldr r1, _bss_end_ofs
  82. mov r4, r6          /* reloc addr */
  83. add r0, r0, r4
  84. add r1, r1, r4
  85. mov r2, #0x00000000     /* clear                */
  86. clbss_l:cmp r0, r1          /* clear loop... */
  87. bhs clbss_e         /* if reached end of bss, exit */
  88. str r2, [r0]
  89. add r0, r0, #4
  90. b   clbss_l
  91. clbss_e:
  92. /*
  93. * We are done. Do not return, instead branch to second part of board
  94. * initialization, now running from RAM.
  95. */
  96. jump_2_ram:
  97. /*
  98. * If I-cache is enabled invalidate it
  99. */
  100. #ifndef CONFIG_SYS_ICACHE_OFF
  101. mcr p15, 0, r0, c7, c5, 0   @ invalidate icache
  102. mcr     p15, 0, r0, c7, c10, 4  @ DSB
  103. mcr     p15, 0, r0, c7, c5, 4   @ ISB
  104. #endif
  105. /*
  106. * Move vector table
  107. */
  108. #if !defined(CONFIG_TEGRA20)
  109. /* Set vector address in CP15 VBAR register */
  110. ldr     r0, =_start
  111. add     r0, r0, r9
  112. mcr     p15, 0, r0, c12, c0, 0  @Set VBAR
  113. #endif /* !Tegra20 */
  114. ldr r0, _board_init_r_ofs
  115. adr r1, _start
  116. add lr, r0, r1
  117. add lr, lr, r9
  118. /* setup parameters for board_init_r */
  119. mov r0, r5      /* gd_t */
  120. mov r1, r6      /* dest_addr */
  121. /* jump to it ... */
  122. mov pc, lr
  123. _board_init_r_ofs:
  124. .word board_init_r - _start
  125. #endif
  126. ENDPROC(relocate_code)
  127. #endif

重新make一下,使用下面命令烧写到sd卡里,插入开发板启动即可,看看上面的启动信息,还有很多很多地方要完善~

    1. dd iflag=dsync oflag=dsync if=blSD.bin of=/dev/sdb seek=1
    2. dd iflag=dsync oflag=dsync if=u-boot.b

s5pv210 uboot-2012-10移植(二) 之能够启动进入控制台的更多相关文章

  1. u-boot-2012.10移植到AT91RM9200(包括NAND FLASH)

    基于中嵌SRM9204 目  录 1 配置 1.1修改顶层Makefile(可选) 1.2配置 1.3下载.运行.测试 2 修改内存配置参数(根据芯片手册修改) 2.1 修改配置参数 2.2 编译 2 ...

  2. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  3. [学习资料] Tiny210(S5PV210) u-boot移植

    Tiny210(S5PV210) u-boot移植http://www.microoh.com/bbs/forum.php?mod=viewthread&tid=254&fromuid ...

  4. ok6410 u-boot-2012.04.01移植二修改源码支持单板

    继ok6410 u-boot-2012.04.01移植一后修改代码,对ok6410单板初始化,主要包括时钟.串口.NAND.DDR等初始化.这些工作在以前的裸板程序都写了,直接拿来用.我觉得先写裸板程 ...

  5. Linux之uboot分析与移植20160601

    说一下uboot分析与移植: 1.下载.建立source insight工程.编译.烧写.如果无运行分析原因 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2 ...

  6. SQLServer 2012异常问题(二)--由安装介质引发性能问题

    原文:SQLServer 2012异常问题(二)--由安装介质引发性能问题 问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后 ...

  7. 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    //在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10 ...

  8. table-cell http://www.cnblogs.com/StormSpirit/archive/2012/10/24/2736453.html

    http://www.cnblogs.com/StormSpirit/archive/2012/10/24/2736453.html

  9. u-boot分析1:Nandflash、Norflash启动

    了解u-boot之前首先了解下Bootloader,简单说Bootloader就是一段小程序,它在系统上电时开始运行,初始化硬件设备,准备好软件环境,最后调用操作系统内核. u-boot全称:Univ ...

随机推荐

  1. 简述JVM、JRE、JDK的关系及作用

    1.JVM:java虚拟机 . 作用:保证java语言跨平台. 2.JRE:java运行环境 jre=java虚拟机+核心类库. 作用:java程序的运行环境. 3.JDK :java开发工具集.JD ...

  2. CSS3 创建简单的网页动画 – 实现弹跳球动

    基础准备对于这个实现,我们需要一个简单的 div ,并且样式类名为 ball : HTML 代码: <div class="ball"></div> 我们将 ...

  3. win7下UDL文件不同

    win7 执行UDL文件看不全all驱动.所以没有办法配置数据库的连接.查度娘,方法如下: 在C:\建一个test.udl 文件,运行命令 C:\Windows\syswow64\rundll32.e ...

  4. BeanPostProcessor bean 的后置处理器

    一. 自定 bean 的后置处理器 MyBeanPostProcessor 类.当你在初始化容器中的 bean 之前和之后,都会调用该处理器中的方法 @Component //将该后后置处理器加入到容 ...

  5. HDU 3507

    斜率DP入门题.推荐看看这篇http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 看过之后,自己思考,发现有些不妥之处就是,其 ...

  6. Photon + Unity3D 线上游戏开发 学习笔记(一)

    大家好. 我也是学习Photon + unity3D 的新手 有什么说错的地方大家见谅哈. 我的开发环境是 unity3D 4.1.3  ,   Visual Studio 是2010 版本号的  p ...

  7. getColor()方法过时的替代方法

    Android SDK 升級到 23 之後,getResource.getColor(R.color.color_name) 過時 使用新加入的方法 ContextCompat.getColor(co ...

  8. QTP自带订票实现循环执行,參数化和将异常提示信息输出

    做这个样例主要是为了积累一些较基础的知识,以便日后可參考学习 这个样例是一个订票的C/Sclient程序 一.业务需求: 1.实现异常和正常数据登录窗体,系统对数据进行校验 2.登录成功后.进行订票业 ...

  9. android帧动画,移动位置,缩放,改变透明度等动画解说

    1.苦逼的需求又来了,须要实现一些动画效果,第一个想到的是播放gif图片,可是这样会占包的资源,而且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...

  10. Java-2-学习历程2:基础知识1,2,3文档、完整版视频资源、电子书籍下载

     Java学习历程:基础知识1,2,3文档.完整版视频资源.电子书籍 1.基础知识1,2.3可到下面地址下载: http://download.csdn.net/detail/iot_li/886 ...