我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 614|回复: 0

基于uboot的2410调试平台的实现 - 单片机/处理器 - 电子工程

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:37:21 | 显示全部楼层 |阅读模式
--免烧写nand flash & 不用仿真机

哈哈,平台!

名字起的有点大,列位看官莫笑。这年头,就那么回事。

如果内容对您有什么用或者帮助,鄙人甚感欣慰;如果没什么大用,首先,您水平肯定在鄙人之上,其次,就当是看闲书了,虽然笔者笔风不是那么诙谐。

其实这个东西对于熟悉ARM的人来说,真不是什么难事,太小case了。确实,笔者自己也感觉不过是雕虫小技而已。但是为什么要写出来了?!因为笔者也是从51转到ARM上来的,开始的时候对这个问题困惑了很久,而且就是找不到答案。同时总结出一个问题,不要迷信网络!网上并非要什么有什么!!!RMB,很明显无法从网上找到。如果从网上实在找不到答案,那么潜心研究研究,可能比网上“盲目”乱找收获更大。这里之所以给“盲目”二字打上个小引号是因为,这里的盲目并非指您不知道要找什么而去找,而是指您不知道网上到底存不存在您要找的东东,就比如笔者最近总是时不时在网上找关于X11R7.5下ATI显卡驱动的解决方案,其实AMD官方都没给出答案,民间又怎么折腾了?如果没有,您还要浪费时间跟那死找,..........不过经过笔者本次撰述,您就可以在网上找到答案了,KAKA~~~~~~~

其实要笔者写点东西也确实难,笔者自己也知道废话多,但是木有办法,真正内容就那么点,不扯点废话,湊不齐篇章。

废话到此为止,下面言归正传。

关于这个东东,开始的时候,笔者是因为木有钱买仿真机,而且被一遍一遍的烧写nand flash折腾的很烦躁,因为nand flash的烧写速度并不像下载到SRAM或者SDRAM里边那么快。而且相当nand的寿命有限,烧写有风险,每次都是heart hard-beating下完成的,生怕nand挂了或者CPU挂了,sigh......生亦何哀,死亦何苦。有痛如斯,夫复何求?!无奈当时对于ARM的MMU还不是很熟悉,而且当时是一边上班一边业余折腾,遇到问题了就有点躁。痛定思痛,长痛不如短痛!咬着牙花了一晚上把MMU看了两遍,结果发现有好几种配置方式,让人抓狂哇!哈哈,想想当时真的很傻很天真,就因为有多种配置方式,段式,页式,页式还分个粗细,就不知道到底该用哪个更合适,后来想到linux下用哪个方式咱就用哪个方式,然后抱着这个想法去看linux内核代码,结果不了了之--没看明白,HOHO~~~~~~~~不过后来是在一个关于ARM MMU的例程中找到了定心丸,就用段式映射,这个最简单!当时还不知道看SAMSUNG的代码,很多代码都是网上杂七杂八搜罗过来的。原理弄明白,方案定下来之后,事情就好办多了,一步一步实施就是了,无非是代码出问题了再调试。

废话是不是有点多?不过笔者应该是把事情的背景都交代的一清二楚了。接下来就是具体的方案了,请各位看官务必擦亮眼睛,精彩不容错过!

原理其实是这样的,首先移植一个可以用的uboot,至少要包含tftp和go命令,然后将其烧到nand flash里边,每次系统上电的时候能顺利运行uboot;然后我们将编译链接好的目标代码通过uboot下载到SDRAM里边,再从uboot里边go到我们自己的程序去运行。
实施过程中遇到的几个问题如下:

1、代码的存储位置和运行位置的问题
2、中断向量表的位置问题
3、中断入口配置

第一个问题中关于两个位置的问题,这应该是连接器要处理的,这个问题不是这里的阐述重点,有兴趣的可以参考《arm学习报告》系列文档,里边基本讲的非常详细,而且不像GNU Ld那么长篇大论。虽然这个问题不是咱的重点,但是多少对咱是有影响的,不然.............讲讲到底怎么影响咱的是正事,废话就不扯了,嘿嘿,因为,废话已经扯了很多了,GAGA~~~~~~~~~。因为从原理上来看,我们自己编写的程序用这种方式来调试的话,就不可能再放到0地址开始,让系统自动加载了,因此存储地址和运行地址都不能直接用默认的0了,这个地址需要我们在链接脚本里边亲自指定一下。为了节省大家时间,笔者在尼度给俩例子吧,一个是源代码里边的链接脚本文件,一个是链接脚本的书写规则。

SECTIONS {
.text
0x30004000
:
{
head.o
clock.o
init.o
led.o
serial.o
timer0.o
mmu.o
interrupt.o
main.o
}
}

这个是链接脚本,其中的 0x30004000地址前面的text是指如下内容全是文本段。关于文本段如果您不想看别的资料,就简单的理解成是代码段吧。实际也是代码的运行地址,更确切的说是运行地址的开始,就是我们目标代码的入口地址。链接以后,程序在执行时的一些相对跳转中,这个地址就是个基地址了。如果在把程序从别的介质加载到运行内存(SDRAM)时,地址发生了错误,有些程序就无法正常执行,这就是位置相关和位置无关代码的区别。

下面是我注释的一个lds文件的书写规则,估计大多数看官都能很快看明白,当然,能把lds的书写规则系统的研究研究,绝对是大有裨益。


<ignore_js_op>





2010-4-1 17:31:15 上传
<strong>下载附件</strong> (94.19 KB)




</ignore_js_op>


可能以上内容讲的不够详细,但是木有办法,如果这些东西对于您理解这些东西来说还不够的话,那么强烈建议您认真阅读下《arm学习报告》系列文档,共有3篇,《arm学习报告001》、《arm学习报告002》、《arm学习报告003》,因为那个里边对这个分析的是比较到位的,而且篇幅并不大,绝对值得品味的,笔者也就不再好意思再搁这废话了。

之所以讲以上关于链接的问题,就是因为我们的程序最后不可能放到0地址,然系统一上电就自动去运行,而是要放到SDRAM里边去,然后从uboot里边go过去。

如果是一个非常简单的程序,不涉及中断的,那么只讲讲上面的内容,加上笔者推荐的几篇文档,差不多足够了。但是这样玩起来就太没意思了,只够点个流水灯而已!如果加上中断,那差不多就把ARM的体系全弄明白了吧。接下来就切入ARM的中断。
ARM的中断体系实际上也不复杂,向量中断一共就那么8个,reset一个,几乎是个CPU都会有这玩意,就像男人的撒尿工具。然后就是什么未定义的一个,软中断,预取终止,数据终止,中间还有个未使用的,后面就生外部中断和快中断了。这8个里边我们用到最多的也就是reset、外部中断这两个,连快中断都比较少用。

reset就是一个入口,CPU在上电的时候先找她!如果您有什么工作希望CPU在上电之后就做的话,您也找她!

外部中断的入口用处是非常强大的,因为一切外部中断源都要经过他。2410上的外部中断实际上是这样安排的,首先在系统的向量中断中安排了外部中断这一级,然后在外部中断中又安排了下一级的中断表,这一级就不再是向量式的了,但是这一级的中断入口都是隔4个字节放置一个,即每个入口的地址用4个字节来描述。这就是2410的二级中断表。第二级的中断表其实每个地址也是固定对应一个中断源的。算了,还是废话少说,上代码。

_start:
@ 0x00: 中断向量表并非从0地址开始放置,因为我们使用的直接SDRAM调试时,中断入口是需要通过MMU来映射的
@Reset:
b
Reset
@直接在SDRAM中调试的话,实际是不使用Reset的,因此一Reset,硬件系统将从nand flash中读取uboot来执行,所以此处实际是个空语句处理
@ 0x04: Undefined instruction exception
HandleUndef:
b
HandleUndef
@ 0x08: Software interrupt exception
HandleSWI:
b
HandleSWI
@ 0x0c: Prefetch Abort (Instruction Fetch Memory Abort)
HandlePrefetchAbort:
b
HandlePrefetchAbort
@ 0x10: Data Access Memory Abort
HandleDataAbort:
b
HandleDataAbort
@ 0x14: Not used
HandleNotUsed:
b
HandleNotUsed
@ 0x18: IRQ(Interrupt Request) exception
ldr
pc,HandleIRQAddr
@
ldr
pc,=HandleIRQ
@ 0x1c: FIQ(Fast Interrupt Request) exception
HandleFIQ:
b
HandleFIQ

这几行是最基本的,不用讲也该明白。


<ignore_js_op>
<dl class="tattl">
<dt>

</dt>
<dd>


lelee-debug.tar



2010-4-1 17:31:15 上传
下载次数: 31
下载积分: 积分 -1




29.51 KB, 下载次数: 31, 下载积分: 积分 -1




</dd>
</dl>
</ignore_js_op>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表