移植uboot到powerpc(1)--配置头文件,u-boot,ppc ,mpc85 mpc83
2012-08-21 13:58
211 查看
【转帖请注明出处:blog.csdn.net/lanmanck】
这里以mpc83x为例。uboot1.3.2,ddr2-128m,位于0x00000000;启动flash512k-8bit,位于0xfff00000处。
其实每个powerpc出厂前飞思卡尔都做好开发板了。就是说uboot和kernel都是现成的。
这里说的移植,应该比ic厂商的软件工程师轻松点,毕竟是在他们的基础上做的,呵呵。
首先打开配置头文件,include/configs/mpc8323erdb.h,把不需要的去掉,比如我这里是pci不要。
1》配置immr基址:#define CFG_IMMR 0xE0000000
这个基本上是死的,至于为何要重新配置,大家就要看看powerpc的架构和启动方式了。
2》配置ddr相关数据:#define CFG_DDR_BASE 0x00000000
把ddr寄存器配置为你实际接的大小,这个跟ddr大小、布线都有关系。可以先用仿真器试出来你的ddr是否好用。比如这几个:
#define CFG_DDR_SIZE 128 /* 我们的是128MB ,原来64MB*/
#define CFG_DDR_CS0_CONFIG 0x80010102
#define CFG_DDR_TIMING_0 0x00220802
#define CFG_DDR_TIMING_1 0x26276222
#define CFG_DDR_TIMING_2 0x0f9828cf
3》关于CFG_MONITOR_BASE
这个宏定义很不好理解,实际上就是uboot自己在flash的起始地址,因为我们有时候要调试uboot,所以老外就称之为monitor。文化不同,真是费解啊。
一般是这样定义的:
#define CFG_MONITOR_BASE TEXT_BASE /* =0xFFF00000 */
#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
#define CFG_RAMBOOT
#else
#undef CFG_RAMBOOT /*说明没有定义这个,不从内存启动*/
#endif
其中,text_base就是代码段地址,也就是你烧入uboot的地址,他在board/freescale/mpc8323erdb/config.mk定义。
CFG_FLASH_BASE也是flash地址,与text_base一样。
那cfg_ramboot什么意思,我跟了下代码,加上定义名字的理解,应该是在内存直接运行的意思。这个应该是从仿真器直接下载uboot到内存有关系吧。不过以前调试arm的时候也没这么麻烦,直接就跑了。这个应该跟架构有关系。
但是注意,flash地址也是变的,下面会讲到 。这个搞得这么复杂只好问飞思卡尔那帮家伙了。大家都那么难理解,估计他是不想卖啊。
4》关于CFG_MONITOR_LEN
#define CFG_MONITOR_LEN (256 * 1024)
这个就是uboot的大小,个人认为是多此一举。把它设大点就行了。
5》配置flash参数
我用的是SST39VF040=512kx8 bit,不是CFI接口,而是JEDEC接口的。所以还要多加2个定义:
#define CONFIG_FLASH_CFI_LEGACY
#define CFG_FLASH_LEGACY_512Kx8
当然,他还需要调用CFI接口函数,所以CFI的不能省略。
添加CONFIG_FLASH_CFI_LEGACY后要手动添加一个函数:
ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t * info)。实现代码网上有,很短。
#ifdef CFG_SYS_FLASH_CFI
ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
{
info->portwidth = FLASH_CFI_16BIT;
info->chipwidth = FLASH_CFI_BY16;
info->interface = FLASH_CFI_X16;
return 1;
}
#endif
把它放到board/freescale/mpc8323erdb/mpc8323erdb.c即可。
另外,配置#define CFG_FLASH_SIZE 1,这个宏以MB为单位,我的是512k,只能配为1M,这个没有关系。后面会看到,他最少会认为是1MB(老外比较有钱,不考虑成本)
6》接下来就是接启动flash的cs0的配置了:
#define CFG_LBLAWAR0_PRELIM 0x80000013 /* 1MB window size 这个不知道可不可以配多点*/
#define CFG_BR0_PRELIM (CFG_FLASH_BASE | /* Flash Base address */ /
(1 << BR_PS_SHIFT) | /* 1=8 bit port size,2=16bit 改成自己的即可*/ /
BR_V)
#define CFG_OR0_PRELIM 0xfff06ff7 /* 这个也要根据flash大小配置*/
先到此为止,以后接着讲启动过程。
这里以mpc83x为例。uboot1.3.2,ddr2-128m,位于0x00000000;启动flash512k-8bit,位于0xfff00000处。
其实每个powerpc出厂前飞思卡尔都做好开发板了。就是说uboot和kernel都是现成的。
这里说的移植,应该比ic厂商的软件工程师轻松点,毕竟是在他们的基础上做的,呵呵。
首先打开配置头文件,include/configs/mpc8323erdb.h,把不需要的去掉,比如我这里是pci不要。
1》配置immr基址:#define CFG_IMMR 0xE0000000
这个基本上是死的,至于为何要重新配置,大家就要看看powerpc的架构和启动方式了。
2》配置ddr相关数据:#define CFG_DDR_BASE 0x00000000
把ddr寄存器配置为你实际接的大小,这个跟ddr大小、布线都有关系。可以先用仿真器试出来你的ddr是否好用。比如这几个:
#define CFG_DDR_SIZE 128 /* 我们的是128MB ,原来64MB*/
#define CFG_DDR_CS0_CONFIG 0x80010102
#define CFG_DDR_TIMING_0 0x00220802
#define CFG_DDR_TIMING_1 0x26276222
#define CFG_DDR_TIMING_2 0x0f9828cf
3》关于CFG_MONITOR_BASE
这个宏定义很不好理解,实际上就是uboot自己在flash的起始地址,因为我们有时候要调试uboot,所以老外就称之为monitor。文化不同,真是费解啊。
一般是这样定义的:
#define CFG_MONITOR_BASE TEXT_BASE /* =0xFFF00000 */
#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
#define CFG_RAMBOOT
#else
#undef CFG_RAMBOOT /*说明没有定义这个,不从内存启动*/
#endif
其中,text_base就是代码段地址,也就是你烧入uboot的地址,他在board/freescale/mpc8323erdb/config.mk定义。
CFG_FLASH_BASE也是flash地址,与text_base一样。
那cfg_ramboot什么意思,我跟了下代码,加上定义名字的理解,应该是在内存直接运行的意思。这个应该是从仿真器直接下载uboot到内存有关系吧。不过以前调试arm的时候也没这么麻烦,直接就跑了。这个应该跟架构有关系。
但是注意,flash地址也是变的,下面会讲到 。这个搞得这么复杂只好问飞思卡尔那帮家伙了。大家都那么难理解,估计他是不想卖啊。
4》关于CFG_MONITOR_LEN
#define CFG_MONITOR_LEN (256 * 1024)
这个就是uboot的大小,个人认为是多此一举。把它设大点就行了。
5》配置flash参数
我用的是SST39VF040=512kx8 bit,不是CFI接口,而是JEDEC接口的。所以还要多加2个定义:
#define CONFIG_FLASH_CFI_LEGACY
#define CFG_FLASH_LEGACY_512Kx8
当然,他还需要调用CFI接口函数,所以CFI的不能省略。
添加CONFIG_FLASH_CFI_LEGACY后要手动添加一个函数:
ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t * info)。实现代码网上有,很短。
#ifdef CFG_SYS_FLASH_CFI
ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
{
info->portwidth = FLASH_CFI_16BIT;
info->chipwidth = FLASH_CFI_BY16;
info->interface = FLASH_CFI_X16;
return 1;
}
#endif
把它放到board/freescale/mpc8323erdb/mpc8323erdb.c即可。
另外,配置#define CFG_FLASH_SIZE 1,这个宏以MB为单位,我的是512k,只能配为1M,这个没有关系。后面会看到,他最少会认为是1MB(老外比较有钱,不考虑成本)
6》接下来就是接启动flash的cs0的配置了:
#define CFG_LBLAWAR0_PRELIM 0x80000013 /* 1MB window size 这个不知道可不可以配多点*/
#define CFG_BR0_PRELIM (CFG_FLASH_BASE | /* Flash Base address */ /
(1 << BR_PS_SHIFT) | /* 1=8 bit port size,2=16bit 改成自己的即可*/ /
BR_V)
#define CFG_OR0_PRELIM 0xfff06ff7 /* 这个也要根据flash大小配置*/
先到此为止,以后接着讲启动过程。
相关文章推荐
- 移植uboot到powerpc(1)--配置头文件,u-boot,ppc ,mpc85 mpc83
- 移植uboot到powerpc(2)--start.s跟踪,u-boot,ppc ,mpc85 mpc83 【转】
- 移植uboot到powerpc(2)--start.s跟踪,u-boot,ppc ,mpc85 mpc83
- 【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】Guidelines for Porting PPCBOOT on PowerPC
- <2012 12 05> FL2440开发板的U-boot-2010.09版本移植(五)支持DM9000网卡和板级相关LED等配置
- u-boot2010.03 移植篇(三)-----修正配置文件.解决内存大小显示问题,真的没什么可看的
- u-boot-2011.06在基于s3c2440开发板的移植之编译配置
- UBOOT-2012-10在OK6410平台的移植(三)uboot 2012.10编译配置
- 第四章、TIny4412 U-BOOT移植四 配置时钟频率源码分析【转】
- u-boot2010.03 移植篇(三)-----修正配置文件.解决内存大小显示问题
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(一)
- 移植、烧录 PPCBOOT中的一些问题
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(三)
- S3C6410移植u-boot-2010.3(3)正常化配置
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(二)
- u-boot移植之mmc,网卡配置
- TQ2440 学习笔记—— 28、移植U-Boot【U-Boot 的配置过程】
- 第四章、TIny4412 U-BOOT移植四 配置时钟频率源码分析
- u-boot-2016.07移植至S5PV210-单板配置
- 【原】移植uboot到MPC8313E-RDB---【一】MPC8313ERDB.h文件的配置