历史上的今天
返回首页

历史上的今天

今天是:2024年12月21日(星期六)

2020年12月21日 | TQ210学习笔记——uboot代码搬移

2020-12-21 来源:eefocus

学习资料:TQ210开发板+国嵌教学视频

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

代码搬移:指的是启动过程中,将剩下的启动代码搬移到内存里面(对于210来说,bootloader代码大于96KB时,肯定要将BL2搬移到内存,因为210启动过程规定,BL2不能大于80KB)


本文讲的是从SRAM搬移到内存中,不是nandflash搬移到内存。原因如下:

(1)若要从nandflash搬移到内存,必须先对nandflash初始化,这部分还没学到,故暂时无法从nandflash搬移到内存

(2)只有当bootloader大于一定值时,BL1才会将BL2从nandflash搬移到内存,我们现在写的uboot远小于4kb,故暂时不需要从nandflash搬移到内存,可以直接在SRAM中运行。之所以将从SRAM搬移到内存,只是是为了学习搬移方法。更规范的应该是从nandflash搬移到内存。

如何进行代码搬移?

搞清楚起点、终点、搬移方式


一、210搬移起点:

210的SRAM就是IRAM,起始地址是0xd0020000。如下图


就是IRAM地址了,为什么是它?因为210启动时候,IROM内固化的程序(BL0)会将BL1自动拷贝到BL1内,也就是拷贝到96KB空间的IRAM中,IRAM就相当于2440和6410中的steppingstone了,只不过210没有这一说法罢了。看下图。




二、搬移终点:

1、连接器脚本文件中的链接地址的作用,下面介绍两个作用

(1)在C语言编程中,若中途调用了摸个函数,如调用reset()函数,则PC指针就会被赋予reset的链接地址。属于绝对跳转

(2)在汇编时,若用到伪指令ldr跳转到reset函数处ldr pc, =reset,则PC也会被赋予reset的链接地址。属于绝对跳转

2、关于相对跳转和绝对跳转。

(1)相对跳转  b跳转是相对跳转

跳转后,PC=当前PC值+欲跳转标号跟当前PC在相对地址表中的差值(也就是链接地址的差值,这部分描述可能有问题,反正是这个意思)如下图(uboot代码)



Start是程序入口,连接器脚本中设置的地址是0x20000000。第一条语句是b reset,跳转到reset执行。整个程序编译链接后生成elf格式文件,用arm-linux-objdump反汇编,查看反汇编得到的文件,可以看到第一条语句地址(也就是bl reset这句)是0x20000000


 

而reset标号所在地址(也就是跳转的目的地)是0x2000005c,如下图



如果执行的是相对跳转的话(b指令正是相对跳转),执行这条指令后,PC=当前PC+(0x2000005c-0x20000000)。芯片上电后,PC值必为0,故当前PC就是0。所以,执行完该语句后,PC=0+(0x2000005c-0x20000000)。

(2)绝对跳转

上面1中的两个例子都是绝对跳转,执行完绝对跳转后,PC指针值就会变成链接地址了。即若果通过绝对跳转去执行reset,则执行完跳转指令后,PC=0x2000005c(跳到内存里去了)

链接起始地址,决定着程序第一行代码在内存中的位置即程序在内存的起始地址。搬移的时候,要参考链接起始地址,将代码搬移到内存中相应的位置。

链接起始地址就是代码搬移的终点。视频教程是这么讲的,但是不是特别理解,这部分后续琢磨,知道的朋友麻烦介绍下,或者给个链接我自己看。下面贴上代码搬移程序。


@专题9 代码搬移

copy_to_ram:

ldr r0, =0xd0020000 @搬移起点

ldr r1, =0x20000000 @搬移终点

add r3, r0, #(1024*4) @r3=起点+复制的数据量(4KB)

copy_loop:

ldr r2, [r0], #4 @开始读数据,因为一次32位,所以读完后地址要后移4个字节

str r2, [r1], #4 @将读出的数据拷贝到内存中,同样一次拷贝32位,拷贝完后内存地址后移4字节

cmp r0, r3 @判断有没搬移完4KB数据

bne copy_loop

mov pc, lr @回到调用点


推荐阅读

史海拾趣

Continental公司的发展小趣事

随着汽车工业的发展,大陆集团开始将业务扩展到汽车轮胎领域。1901年,马牌轮胎首次与德国戴姆勒·奔驰汽车公司合作参加汽车竞赛,这标志着大陆集团正式进入汽车轮胎市场。仅仅三年后,大陆集团就生产出了全世界第一条带花纹的汽车轮胎,这一创新大大提高了轮胎的抓地力和安全性。1908年,大陆集团又生产出了全世界第一个可拆装的车轮,使车轮和车轴分开,由此大大节省了换轮胎的时间。这些技术创新使得大陆集团在汽车轮胎市场上占据了重要地位。

Alpha Wire公司的发展小趣事

近年来,大陆集团在特种商用车胎领域也取得了重要突破。2014年,大陆集团在亚洲国际物流技术与运输系统展览会上发布了一款全新的产品——SC8特种商用车胎。这款产品是专门针对亚洲物料搬运业而开发出来的,适用于仓库、饮料业、造纸业等多个行业。SC8轮胎具备超深的轮胎花纹和极佳的性能,为物料搬运业提供了更高效、更安全的解决方案。这一产品的推出进一步巩固了大陆集团在商用车胎领域的市场地位。

Computer Conversions Corp公司的发展小趣事

面对日益严峻的环境问题,Computer Conversions Corp积极响应环保号召,开始研发更加环保的计算机转换技术。公司不仅优化了生产工艺,减少了生产过程中的能源消耗和废弃物排放,还推出了一系列节能型转换设备,帮助客户在提升计算效率的同时,也降低了能源消耗。这一举措不仅赢得了客户的赞赏,也提升了公司的社会形象。

Conxall公司的发展小趣事

Conxall公司的创始人李华,是一位在电子行业摸爬滚打多年的工程师。他深感市场上电子产品同质化严重,缺乏真正的创新。于是,他毅然决定创立Conxall公司,致力于研发具有独特功能和高性能的电子产品。李华带领团队日夜奋战,终于研发出了第一款具有自主知识产权的智能手机芯片,凭借其出色的性能和稳定性,迅速在市场上获得了认可。

诚芯微(CXW)公司的发展小趣事

在2021年,诚芯微获得了数千万元的Pre-B轮融资,由中信建投和投控东海入股、时代伯乐加投。这笔融资为公司的发展注入了新的动力。同时,公司还完成了股改,正式更名为深圳市诚芯微科技股份有限公司。股改完成后,诚芯微的治理结构更加完善,为公司未来的发展奠定了坚实的基础。

以上故事仅为概述性描述,实际发展过程中可能涉及更多细节和复杂因素。如需更详细的信息,建议查阅相关新闻报道或行业分析报告。

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

问答坊 | AI 解惑

NI LabVIEW天下会火热报名中

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 【何谓天下会】 LabVIEW天下会是美国国家仪器公司(NI)与 GSDZone 网站联合举办的全球华人LabVIEW开发者竞赛,旨在提供一个让广大LabVIEW爱好者互相交流开发经验,切磋编程技术的平台。 LabVIEW天 ...…

查看全部问答>

谁熟悉在wince平台上开发应用行业软件,难题啊急!!!

Java 1、有电子地图开发经历、或工作流开发相关经历,没有此项经验者勿投! 2、有三年以上java开发经验,有Webservice开发相关项目经验,有良好的编程习惯,熟悉J2EE体系架构及B/S三层结构系统的开发。 3、有一定的设计能力,至少一个大中型w ...…

查看全部问答>

牛人给个明路!

我很想学嵌入式的知识,但我实在不知道该从哪学起,迷惘了好多天,请大牛们给我指个方向!…

查看全部问答>

关于超宽带UWB无线收发模块

各位,有没有做过超宽带项目的,想咨询一下关于超宽带无线收发模块的产品,现在还有哪些国内能弄到的?谢谢啦!…

查看全部问答>

WINCE写注册表乱码

int MAX_SIZE = 256;         HKEY  hKey1;         wchar_t *key1Value = L\"abc\";//这里写成中文结果也相同         char *key1buf = new char[MAX_SIZE];   &nb ...…

查看全部问答>

请教如何将蓝牙协议栈移植到嵌入式Linux中??

我正在做一个东西,需要将蓝牙协议栈整个移植到arm9的Linux2.4.18中,源码是Bluez,PC上装了Red Hat9,现在毫无头绪,不知哪位大虾做过这方面的工作,请多多指点,先谢谢了! E_MAIL.:duan.gexin@byd.com.cn…

查看全部问答>

基于FSSDC-9B506-EK Easy Kit的作品(1)

  去年暑假期间,富士通公司举办了“2010-2011富士通半导体杯创意未来电子竞赛”,我有两个学生参加这个比赛。做了点东西,应该说还行吧。现在富士通在论坛征集建议,刚好他们使用的开发板就是Cortex-M3 Easy Kit,作为响应吧,我就把他们 ...…

查看全部问答>

收到传感器套件,上图

差点让圆通给搞飞了,送到另外一个地方去了,打了两个电话要回来的,快递信封也是破的,套件盒子也被压扁了,坑爹的快递…

查看全部问答>

话说为什么要学这个单片机?(LM3S)

因为我们省的电子设计比赛里希望我们用TI的单片机,所以我学了一下LM3S,发现这个单片机没什么优点……(也许是我太菜了,说错请喷)AD不能当IO,一组IO最多8个口,还有4个的(为什么不把4个的合成8个?),定时器少而且PWM不能分频(WHY?),100 ...…

查看全部问答>