嵌入式linux系统开发手册(3)
#define CFG_IMMR 0xff000000
随便找个你没有用到的地址空间分配给它吧,它是内部寄存器的基地址,我给他分配我0xff000000, 不过要保证这个基地址要有64K大小的访问空间,这个地址范围可不能和其它外设的地址范围有重叠
下面还有一些寄存器的初始值设置,我没有做什么修改,但和MEMORYCONTROLLER有关的积存器还是有修改的,根据自己的主板特性,修改吧!涉及以下积存器:
OR0—OR7 BR0-BR7 MAMR/MBMR等。
其中,OR BR积存器的设置是对应你目标系统的地址划分的,你可以灵活的编程来确定每一个片选CS0—CS7所对应的地址空间。
目标板配置文件修改的差不多了,下面要进行代码修改了!
3.3.5 串口初始化
CPU的入口函数/cpu/mpc8xx/start.S不用做修改(反正我的主板没有做修改),在进 行完CPU的上电初始化之后就跳入/cpu/mpc8xx/cpu_init.c进行一些寄存器的初始化,讲起来太费时间了,找个860UM看看吧。这里我基本没有修改。CPU初始化完成后就调用/lib_ppc/board.c中的board_init_r(),首先就进行串口初始化,因为串口正常工作之后我们就可以从超级终端上看到调试信息了,那就方便了。
串口初始化代码位于/cpu/mpc8xx/serial.c,FADS板上有一个CPLD的逻辑,我们的目标板上没有,所以对应于BCSR的设置改为自己相应管脚配置。其它不用做什么修改。 这里顺便提一下,串口初始化完成之后要调用check_cpu(), check_board(), 在check_board()中FADS板会有一些访问BCSR地址的代码,我把他们屏蔽掉了!
3.3.6 SDRAM初始化
上面的工作全部是在FLASH中进行的,程序的限制很多,U-BOOT仅仅是在MPC860T内部的一小片RAM中开了一个小小的堆栈用于程序使用,你不能定义大的变量,郁闷!好,马上进行我们32MB SDRAM的初始化,完成后就可以为所欲为了。
SDRAM的初始化代码位于/board/fads/fads.c中,对应不同的SDRAM,它的UPM表是不一样的。什么是UPM表?UPM表说白了就是一些总线时序抽象为十六进制数字的产物,用数字来表示SDRAM的读写,刷新等时序。我是问我们硬件工程师要的,密密麻麻一堆数字。还有一个SDRAM上电的初始化时序,叫SDRAM POWERUP UPM表。修改时要注意,这里就不列出修改后的代码了。
SDRAM的初始化是/lib_ppc/board.c中的board_init_f()调用的,入口为intidram()。 3.3.7 FLASH驱动
在进行完SDRAM的初始化之后,U-BOOT会将代码拷贝到SDRAM中,在SDRAM中再次对CPU和CONSOLE进行一次初始化(参阅函数/lib_ppc/board.c中的board_init_r()),这些代码都基本不用做修改,其中对FLASH的初始化是我们要修改的一个部分。
FLASH的驱动位于/board/fads/flash.c,代码中涉及FLASH型号的探测,擦除,编程,扇区保护和取消保护等操作。其中有一个公共结构体flash_info_t flash_info[CFG_MAX_FLASH_BANKS]用于保存FLASH的参数。这部分要根据目标系统所用的FLASH的型号进行修改,要注意的是FLASH的数据总线宽度,是8bit,16bit还是32bit,其它按照FLASH的编程手册修改驱动即可以了。
3.3.8 FEC快速以太网口初始化
FEC快速以太网口的初始化也是在/lib_ppc/board.c中的board_init_r()函数中完成的,调用eth_initialize(),该函数位于/net/eth.c中,其中调用fec_initialize()注册了快速以太网设备FEC。
FEC的驱动程序位于/cpu/mpc8xx/fec.c文件中,我们目标系统用的PHY为LX970A,不用做大的修改,只要将FADS中涉及到BCSR控制管脚的地方改为目标系统想对应的管脚即可以了。详细的代码请参阅/cpu/mpc8xx/fec.c。
3.3.9 其它 至此,代码修改基本完成了。其它的比如打开调试信息在/include/common.h中定义 “#define DEBUG”, 此外你也可以在你比较关注的地方自己添加调试信息。
3.4 编译调试
3.4.1 编译
代码修改完毕,进行编译吧!编译之前要根据你目标系统程序入口修改你的程序代码地址(位于/board/fads/config.mk中),我们的目标系统和FADS一样为0x2800000,没有进行修改。然后运行前面提到的命令(当然要在U-BOOT的目录下): #make SUMMER860T_config #make
当然,如果你比较粗心,会出来一堆错误,不过没关系,一个一个的消灭,可以把编译信息输出到一个文件中,这样比较方便查找问题所在,用下面指令替代“#make”:
#make &>out 然后可以用:
#more out | less查看你在哪里犯了错误,把他们搞定之后,编译产生了目标执行代码u-boot.srec, u-boot.bin, u-boot, 编译完成了! 3.4.2 目标代码烧写
对于生成的三个目标文件,u-boot.srec是MOTOROLA S-Recoder格式的,u-boot.bin是二进制的,u-boot是ELF(Executable and Link Format)二进制格式的。
DENX的网站上说他们烧写FLASH用的是硬件BDM仿真器BDI2000,对这个东西不是很 了解,我们用的是WindRiver 的vision probe BDM仿真器,当然你用其它的也可以,只要能将代码烧写到FLASH中就行。我用的是ELF二进制文件,用BDM调试仿真环境vision click7.8将u-boot进行转换获得u-boot.bin,然后烧写到FLASH中,记得在FLASH的偏移地址要为0x100(针对ppc系列),烧写OK! 3.4.3 调试
好了,所有的工作基本都完成了,现在激动人心的时刻来临了,关闭目标系统电源,拔掉BDM仿真器,主机系统打开超级终端,目标系统加电,启动…, 超级终端没有任何信息出来,失败了!难道不成功?再插上BDM仿真器,单步跟踪,将PC指针设为0x2800100,执行,没有问题,程序再执行,说明生成的目标代码是有效的,可能是程序代码有问题! 调试吧,在我们移植的过程中,用BDM仿真器无法进行C语言的跟踪仿真(在调试vxworks时是可以的,可能是某个地方没有做好),另想它法吧!焊几个发光二极管到目标板上,在程序中分段点亮这几个二极管,这样可以看到程序在哪个段落出问题然后再分段查找!还有一个方法就是在程序中你认为可能出问题的地方添加对某个通用寄存器赋值的代码,然后用vision click跟踪汇编代码,到出错时查看该通用寄存器,同样可以知道程序大约运行到哪个地方!
好,先焊两个发光二极管(记着用那些没有使用的通用I/O口来控制),然后在程序中添加几个赋值语句,为OR1(我们的开发板没有用到CS1,如果你的用到了,可不能随便乱改,选一个没有用到的寄存器)赋值,不是没有信息出来吗,首先考虑是不是串口初始化失败,所以在串口初始化中添加赋值语句,重新编译U-BOOT,烧写,重新启动,二极管是亮
的,程序确实在运行,然后就是用vision click来跟踪吧,反正我最后找到的问题是在全局变量 gd(global data)结构中有个gd->flags, 在FLASH中运行代码和在RAM中运行代码时CONSOLE是不一样的,但我的console.c中在FLASH中运行puts时确调用的在RAM中运行的fputs,当然会有问题!问题就出在gd->flags,于是我把它先初始化为0(在U-BOOT中没有对gd进行初始化,这样是不是会有一些未知的问题出现?至少我觉得flags就是一个,或者是我在做CPU初始化的时候在别的地方对其进行初始化,因为此时gd是在860的内部RAM中的),改掉之后重新编译,烧写,重新启动,令人振奋!!!信息出现了: U-Boot 0.2.0 (Jun 20 2003 – 15:18:50)
CPU: XPC860xxZPnnD4 at 50 MHz: 4 kB I-Cache 4 kB D-Cache FEC present Board: SNOIC MPC860T 100M ethernet network board(Ver 1.0). DRAM: (32 MB SD …… 此处隐藏:2574字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




