tftpserver调试ADS地址设置

       在2410上板子上做个简单的tftp server已经好多天了眼看就要成功了,可是运行时老是不对头,程序里是一点问题也没有的,问题是我一旦在程序里的某个地方加一条语句(无关紧要)编译make都能通过,但就是利用板子BIOS的USBdownload功能下载到RAM里再按提示敲入"y" 开始运行时结果就什么也没有了,好像程序就不运行了,彻底死了一样,郁闷抓狂了N久,一直研究程序也没研究出什么毛病,百思不得其解,最后忽然想起一个问题,我的DNW里设置的USB下载文件存储的首地址是0x31000000,会不会与这个地址有关呢,然后就去看开发板的使用手册,上面明确写到“SDRAM地址空间是0x30000000到0x34000000共64M,所以指定的USB下载地址要在此范围内。另外BIOS自身占用了0x30200000以下的空间,因此在用BIOS的USB下载功能时应指定地址大于或等于0x30200000”,看了之后感觉没错啊,0x31000000是大于0x30200000的呀,仔细一想,“BIOS自身占用了0x30200000以下的空间”!再去看看ADS里ARM Linker下我设置的RO Base和RW Base分别是0x3010000,0x30400000~~~晕,二话不说,顺势改成0x30200000和0x30500000,结果终于把问题解决非了 !TNND这下mini tftpserver运行的很好!在电脑上命令控制台试了一下tftp,ping,arp的几个命令都very good,比以前状态好多了,传输文件数据量验证也对了!果然是这个地址问题。

        可是回过头来又想不通了,我明明是把make后的bin文件通过BIOS下载到RAM里0x31000000里的,怎么会和RO Base和 RW Base这两个东东有关呢,又不要是烧写flash。。。应该是在我敲了“y”以后直接到0x31000000去执行啊,然后经过一番百度之后才明白是我把复杂问题简单化了,简直是对底层的映像机理一点都不懂嘛~~~~又看了看《ARM映像文件及执行机理》这篇好文,才明白了一点,原来下载之后程序的空间是“加载域”,而运行时的空间是经过重新分配了的“运行域”,ADS里指定的RO BASE和RW BASE一个代码空间和一个数据空间是运行域里的!加载域状态的映像文件中的RO,RW,ZI所在的地址者是临时的,他们所在的真正位置,即ARM Linker里设置的地址值,都必须在初始化时由相应程序将他们移动到相应的地方,这个数据移动过程由boatloader完成。虽然这是针对ARM7解释的,但在我不知道ARM9也是不是这样的情况下对我理解这个问题还是有帮助的:程序刚下载到0x31000000时这里是“加载域”,当我“y”后开始运行时,0x30200000以下的BIOS程序就开始搬了把他们按照ARM Linker里设定好的地址(可以通过点选ARM Linker-->listings里的Image map和symbols再make后查看详细情况)重新分配好地方,这个地方就是“运行域”了,刚开始把运行域RO段地址设置成0x30100000当然不行了,与BIOS运行时所占用的空间冲突了!

         反正不知道对不对,暂时就这么理解了,这会儿也没时间去仔细研究启动代码还有MMU那些可能与这个问题有关的东东了,仔细想起来这个BIOS配合DNW下载还是挺不错滴,算是完全模仿了烧flash再运行程序吧,因为前面提到的那篇好文里所说的“加载域”是在flash里的,“运行域”是在RAM里的哦。再打开我的tftp工程和板子自带的BIOS ADS工程,原来都有start.s这个文件,也就是底层的代码是一样的啊,而在make后的信息里这个start程序段的name就叫“SelfBoot”,怪不得可以“模仿”。然后再看看BIOS工程里的RO BASE。。。是0x30100000!也就是说现在板子上用的用来下载和做别的演示功能的BIOS运行域确实是在0x30100000到大概0x30200000这个地方~~~~这样也就是说如果我不“模仿”而直接把tftp工程make后的bin文件烧到flash,也就是一个新的可以通过网口利用TFTP下载的BIOS了,那样才可以设置RO,RW段地址为0x30100000和0x30400000,然后这个新的BIOS就在这个“运行域”里运行了,到那时为了不与这个运行域冲突TFTP的download_addr就该是在0x30400000+length of RW之后啦~~~

       啰嗦了半天终于想通了~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值