免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2264 | 回复: 4
打印 上一主题 下一主题

u-boot的relocate&&stack set疑问求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-30 14:53 |只看该作者 |倒序浏览
start.s的片段代码:

  1. relocate:                       /* 把U-Boot重新定位到RAM */

  2.        adr   r0, _start          /* r0是程序头 */

  3.        ldr   r1, _TEXT_BASE      /* U-Boot长度 */

  4.        cmp     r0, r1          /* 比较r0和r1,调试的时候不要执行重定位 */

  5.        beq     stack_setup    /* 如果r0等于r1,跳过重定位代码 */

  6.        /* 准备重新定位代码 */

  7.        ldr   r2, _armboot_start

  8.        ldr   r3, _bss_start

  9.        sub   r2, r3, r2          /* r2 得到armboot的大小   */

  10.        add   r2, r0, r2          /* r2 得到要复制代码的末尾地址 */

  11. copy_loop: /* 重新定位代码 */

  12.        ldmia r0!, {r3-r10}   /*从源地址[r0]复制 */

  13.        stmia r1!, {r3-r10}   /* 复制到目的地址[r1] */

  14.        cmp   r0, r2          /* 复制数据块直到源数据末尾地址[r2] */

  15.        ble   copy_loop



  16.        /* 初始化堆栈等    */

  17. stack_setup:

  18.        ldr   r0, _TEXT_BASE              /* 上面是128 KiB重定位的u-boot */

  19.        sub   r0, r0, #CFG_MALLOC_LEN     /* 向下是内存分配空间 */

  20.        sub   r0, r0, #CFG_GBL_DATA_SIZE /* 然后是bdinfo结构体地址空间  */

  21.        sub   sp, r0, #12     /* 为abort-stack预留3个字 */

  22. clear_bss:

  23.        ldr   r0, _bss_start      /* 找到bss段起始地址 */

  24.        ldr   r1, _bss_end        /*  bss段末尾地址   */

  25.        mov   r2, #0x00000000     /* 清零 */

  26. clbss_l:str r2, [r0]        /* bss段地址空间清零循环...  */

  27.        add   r0, r0, #4

  28.        cmp   r0, r1

  29.        bne   clbss_l
复制代码


在网上找到的,不知道对不对,_TEXT_BASE是什么?bss段指什么?

[ 本帖最后由 xxmv99 于 2008-1-30 18:05 编辑 ]

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2008-01-30 15:01 |只看该作者
完了,我眼睛看坏了,你得给我买一双眼睛啊

论坛徽章:
0
3 [报告]
发表于 2008-01-30 18:04 |只看该作者

复制过来的,,,编辑>

论坛徽章:
0
4 [报告]
发表于 2008-01-30 23:28 |只看该作者
建议先搞懂ARM映像文件与执行机理。
当知道映像的加载域和运行时域,再看这段代码不过如此罢了。

论坛徽章:
0
5 [报告]
发表于 2008-01-31 17:27 |只看该作者
原帖由 sep 于 2008-1-30 23:28 发表
建议先搞懂ARM映像文件与执行机理。
当知道映像的加载域和运行时域,再看这段代码不过如此罢了。



加载域和运行时域???

搜搜看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP