新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Mpc823e的bootloader分析和实现

基于Mpc823e的bootloader分析和实现

作者: 时间:2012-06-01 来源:网络 收藏

步骤4:初始化cache

MPC823e采用Harvard结构的cache,它的指令cahce和数据cache是独立的;采用最近最少使用法(LRU Least Recently Used)替代算法。在具体编写时,要注意只有在对MMU编程后cache才能工作,应此要采用以下的步骤进行初始化(如图2所示):

步骤5:初始化内存管理单元 init_MMU

MPC823e的MMU的特点主要有:支持多种页面大小、全相联映像规则TLB(Translation Look-aside Buffer)、指令和数据TLB可独立控制等。在编写时,因为启动程序中,不需要虚拟内存到物理内存的地址变换,所以只需对内存属性做一些设置,如回写策略、内存读写保护等

步骤6:设置中断向量表 b vector_reloc

中断向量表用于嵌入式Linux启动代码,在启动过程中,最主要的就是设置复位中断。可以在LILO(Linux)中填写0x100复位中断向量。当发生复位时,MPC823e自动读取复位配置字,通过相应的配置,MPC823e会读取复位中断向量0x100处的指令,进行正确引导过程。

步骤7:init_stack初始化堆栈 -> 初始化编译相关寄存器

此外,在运行C语言编译的程序前必须先定义这些与编译相关的寄存器,如堆栈指针寄存器、代码段、数据段指针寄存器等。针对不同的编译器使用不一样寄存器的规则,如diab编译器和gcc编译器,在编写时,需要仔细查阅编译器手册。

2.2 ppcboot中主板部分的开发

ppcboot支持数十种主板,可以在其中寻找与自己设计的主板相近的主板,并以其的ppcboot的主板代码部分为模板,进行必要的修改来移植。本系统采用的主板HD823e与其中的RPXlite板十分相近,在其基础上进行调整。接下来,将讨论如何进行修改。

(1)在Makefile文件中,添加硬件基本配置信息,如cpu型号,主板类型,cpu体系

如本系统添加:

HD823e_config: unconfig

echo "ARCH = ppc" > config.mk ;

echo "BOARD = HD823e" >>config.mk ;

echo "CPU = mpc8xx" >>config.mk ;

echo "#include config_$(@:_config=).h>" >config.h

(2) 修改开发板的配置文件.包括 CPU,调试串口,内存映射,Flash与SDRAM等多部分配置参数进行修改。以下给出部分重要的参数。

CPU部分配置:

#define CONFIG_MPC823 1 /* CPU类型 */

#define CFG_RTCSC (RTCSC_SEC | RTCSC_RTE) /*配置cpu内部时钟*/

#define CFG_PLPRCR ( (0x00900000) | PLPRCR_TEXPS )

#define CONFIG_8xx_GCLK_FREQ 50000000 /*设置CPU运行频率*/

调试串口的部分配置:

#define CONFIG_BAUDRATE 9600 /* 串口波特率 = 9600bps */

#define CONFIG_8xx_CONS_SMC1 1 /* 串口使用 SMC1口 */

内存映射的部分配置:

#define CFG_IMMR 0xFF000000 /* Internel Memory Mapped Register */

#define CFG_LOAD_ADDR 0x100000 /* ppcboot缺省的引导地址 */

由于篇幅的关系,其他部分参数不介绍了,可以根据CPU的使用手册和ppcboot手册进行配置,注意的是,这些参数都需要严格的确定,不能出错,否则,无法正确引导系统。

(3) 修改 include /commproc.h

该文件包含与通信接口相关的一些参数,由于本系统需要网络来下载内核,需要对网络接口引脚进行相关的定义。

#ifdef CONFIG_HD823e

#define PROFF_ENET PROFF_SCC2 #define CPM_CR_ENET CPM_CR_CH_SCC2

#define SCC_ENET 1 #define PA_ENET_RXD 0x0004

#define PA_ENET_TXD 0x0008 #define PA_ENET_TCLK 0x0800

#define PA_ENET_RCLK 0x0200 #define PB_ENET_TENA 0x2000

#define PC_ENET_CLSN 0x0040 #define PC_ENET_RENA 0x0080

#define SICR_ENET_MASK 0xff00 #define SICR_ENET_CLKRT 0x2f00

#endif

2.3编译ppcboot

修改完成后,可以使用下列命令进行编译,一般说来,都可以编译成功,得到适合自己系统的ppcboot。本系统,在原有RPXLite的模板基础上,通过上修改,编译成功,顺利的引导了系统。

make clean

make HD823e_config

make all

3结束语

本文根据所选用的嵌入式系统的特点,概述了ppcboot的启动流程,对下的ppcboot体系进行了介绍,并针对自己的开发板,详细的说明了如何开发适应自己系统的ppcboot。代码已通过了系统的调试,成功的引导了linux内核,达到设计的目的。

本文作者的创新点是:在分析嵌入式系统在Linux下的工作流程和ppcboot源代码基础上,开发了特定的、适合本文系统硬件的。参考ppcboot中支持RPLite主板的相关代码,给出了将ppcboot移植到本文所使用的HD823e主板的修改方案。

参考文献

[1]周长春,王志言.PowerPC概念、体系结构与设计[M].北京:电子工业出版社,1995.1-158.

[2]毛德操,胡希明. Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001.663-737.

[3]王学龙. 嵌入式Linux系统设计与应用[M].北京:清华大学出版社,2001.35-69.

[4]万永波,张根宝.基于ARM的嵌入式系统Bootloader启动流程分析 微计算机信息 2005.11-2

[5]motorola Inc.MPC823e User’S Manual[EB/OL].


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭