http://opencores.org/or1k/U-Boot
至于移植比较详细的解释,我google下《ARM79出品-u-boot移植手册.pdf》这个手册,虽说里面讲的是关于ARM架构的移植,不要紧,我们只是借鉴一下,但重点关注的是openrisc结构的移植。
去网址:http://git.openrisc.net/cgit.cgi/stefan/u-boot/commit/
将u-boot-master.tar.gz下载下来,或者http://www.denx.de/wiki/U-Boot UBOOT官网将u-boot源码下载下来。
打开opencores关于u-boot移植的步骤。
并且u-boot源码目录下的RENAME文件中也有关于编译u-boot的步骤,主要是根据自己的板子添加必要源码文件和开启所需要的u-boot命令的宏定义。
解压u-boot源码,目录arch/openrisc、include、common先导入sourceinsight中,然后打开根目录的boards.cfg文件,可以看到该u-boot下有几个关于现成的板子的移植工程。
在board目录下可以找到,都导入到sourceinsight中,这样可以作为自己的板子的移植参考。
好,准备妥当之后就开始根据u-boot的RENAME文件中介绍的流程走。
1.在源码目录中的boards.cfg文件中加入自己开发板的名字,比如我自己增加的是EP2C20F484C8。
2.在/board目录下增加刚才在boards.cfg新建板子名称对应的文件夹,比如我在/board目录下增加EP2C20F484C8。
参考在/board目录下的openrisc文件夹,我们把原有通用的openrisc架构的复制到自己刚才新建的文件夹,我复制到的是EP2C20F484C8。
修改成自己所选择的开发板的名称
然后,打开u-boot.lds,这是u-boot的连接脚本文件,对比一下/board/openrisc中的u-boot.lds,修改如下:
与前一篇中的连接文件link.lds很相似,至于u-boot.lds中的vectors和ram段的起始地址和长度都在第3步中的******.h头文件中定义,这个头文件稍后再分析。
打开ep2c20f484c8.c,因为我板子上的网卡是dm9000,所以对这个文件中修改如下:
用u-boot自带的dm9000驱动增加对网卡的支持
3.在include/configs/添加板子名称的******.h头文件,比如我自己添加的是EP2C20F484C8.h
然后,在\include\configs打开所有关于openrisc架构开发板的******.h头文件,在第1步中的board.cfg文件中关于openrisc结构对应的相同名称的******.h头文件都可以在\include\configs找到,参考现有的工程配置来得到我自己开发板的ep2c20f484c8.h的配置内容。
一步步看
看定义名称就知道了,定义工作频率CLK_FREQ是40M,板子速度问题,上不去了,然后是复位地址RESET_ADDR是0x100,SDRAM在wishbone中定义的地址,具体参考《or1200硬件环境搭建》一章,大小就是自己RAM的大小了。
然后就是关于UART的描述,地址0x9000000,频率40M,波特率38400,有牛B的板子可以自行设置高的波特率115200什么的,小弟的小板38400在linux用z-modem模式才无错传输,伤不起。
接下来板子名字,随意啦。
接着看就是关于FLASH的宏定义选项
我板子的芯片是型号JS28F640J3D75,1片64sections的nor flash,所以宏定义,有啦,下面53、54行是用u-boot自带的CFI驱动来驱动flash,然后,位宽根据板子设置,我的nor flash是16bits的,再往下就是读、写、擦除flash操作的时序,差不多就可以了,根据自己板子的速度,可以自行设大或小点。
往下看
在刚开始调试u-boot的时候先把65行注释掉,因为刚开始跳我们直接把u-boot下载到RAM中去跑,待在硬件上调试成功后在把此选项打开,因为我们烧写flash的地址是0x90000000,而CPU复位地址是0x100,所以在板子上电的时候要把固化的0x90000000中的搬移到地址是0x0的SDRAM中,上图的选项是选择把异常向量表复制到SDRAM的0x0~0x2000。
再接下去就是关于UART的描述
照抄通用openrisc文件夹中的头文件定义的,很简单,不解释了~
接下去就是关于Ethernet的定义了
88~92行,关于使用DM9000驱动的定义,在使用s3c2440芯片的板子上直接copy过来的,网卡不带e2prom,地址0x92000000,CMD端口0x92000000,数据端口,0x92000004,关于DM9000网卡的使用参考一下别人的博客或者DM900x的芯片资料,这里不细说了。
94~101行,这里是关于网卡IP,掩码,网关······的定义
http://opencores.org/or1k/U-Boot
打开opencores社区关于or1200的u-boot移植教程,略读略读一下,就可以搞明白这些怎么定义了。
再往下
Timer的定义,照抄openrisc通用架构的
往下,关于u-boot环境变量的存放位置。
刚开始下载到板子硬件调试的时候先把162行注释掉
刚开始调试不需要flash,所以关于u-boot的环境变量不需要放在flash中,直接在SDRAM先调试完成再打开此选项
这些是关于u-boot使用的堆栈、全局数据、主程序的代码存放地址和范围的定义,都是从openrisc通用架构copy过来的
上面为调试u-boot时所选取的存放规则
继续往下就是关于u-boot打开对应u-boot命令相关的宏定义
当调试完写入flash时的存放规则
继续往下
这些都是打开u-boot相关命令以及启动参数宏定义,全部都是关于openrisc架构开发板对应的头文件修修改改过来的,选择适合自己的开发板即可,这都宏定义的具体使用方法在u-boot源码的RENAME文件里面都有详细说明。
到此需要的文件就修改到这里
老规矩我们的VirtualBox里的镜像中用or1ksim先试试opencores社区做好的u-boot代码先跑跑先~
至于opencores针对or1ksim软件仿真器配置的u-boot选项可以自行浏览一下,现在只是体验一下u-boot启动过程罢了,针对自己板子的u-boot配置还是要慢慢的去调试的。
老规矩啦,先吧share folder mount上来。
再回顾RANAME文件中关于编译u-boot的步骤
好,然后cd进u-boot的源码目录,然后make openrisc-generic_config
再然后,make,就编译成功了,信息太多,不贴图了~
再再然后
回车吧~
OK,体验到此,现在结合自己的开发板将修改的后的源码编译
至于我自己的开发板的修改后的源码在blog的资源下载下来后解压得到如下:
复制到u-boot源码里面就是我的开发板ep2c20f484c8的u-boot工程了~
U-boot的编译步骤和上面的一样,然后参考前面一片blog介绍《or1200第一个程序》的下载方法一样,类似uart程序一样下载到板子上面,然后从0x100启动后可以看到u-boot下载到板子后的启动信息。
这里我的网卡是dm9000,如果说是用opencores提供的ethmac_latest.tar.gz按照通用架构的/include/configs中的openrisc-generic.h配置ETHOC即可
移植过程可以参考《ARM79出品-u-boot移植手册.pdf》,主要是看看u-boot启动代码的分析和一般命令的应用。
关于/include/configs下自己开发板的头文件,主要是配置网卡和Flash的参数,如果调试自己板子过程有疑问可以大家交流交流解决或者自己斟酌一下。
OK,下次的话就基于这个移植好的u-boot上面按照opencores的教程移植linux系统吧~