U_Boot和Linux在Coldfire处理器MCF54452上的移植

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《工业控制计算机》2010年第23卷第3期本文介绍了如何开发基于Coldfire 的嵌入平台,并在其上移植U-Boot 和Linux 。

1目标系统设计
目标系统采用MCF54452作为主处理器,以ADI 的
Blackfin DSP 作为协处理器,并在MCF54452上移植实现了Linux ,如图1所示。

系统采用MCF54452片上的FEC0和FEC1和外接的PHY 得到两个10/100Mbps 自适应的以太网接口,USB 接口则使用片上收发器,设计支持USB2.0的全速设备。

片上的I 2C 接口外接低功耗的RTC ,通过SPI 接口接入自定义的SPI 接口的小键盘。

利用片上的UART0和UART1分别实现控制台和打印接口,通过FGPA 扩展了两个RS485接口和一个IRIG-B 解码器以并实现LCD 控制接口。

图1
目标系统结构框图
2开发环境准备
开发需要交互使用Linux 和Windows 下的开发工具,通过
在Windows 下安装虚拟机VMware6.5,然后在虚拟机下安装
Redhat Enterprise Linux 5.1来解决。

在Windows 和虚拟机
Linux 下建立一个共享文件夹,用来在两个系统之间交互数据。

同时需要安装Codewarrior for Coldfire Architectures ,配上BDM 仿真头可以烧写u-boot.bin 到Flash 。

移植在M54455开发包的基础上进行,开发包可以从网站下载BSP 包m54455-20071214-ltib-final.iso.通过安装BSP 可以获得Linux2.6.23内核及BSP 、u -boot -1.2.0开发包、m68k-linux-gnu-gcc 交叉编译工具链(安装在/opt 目录)和脚本litb ,执行脚本./ltib-c 完成对u-boot 和内核的配置及首
次编译。

3移植U-Boot
移植在M54455EVB 的U-Boot 基础上修改完成,移植时
需要同时熟悉目标系统的特点和源码结构,以下分析所指的根目录均指U-Boot 的安装目录。

3.1U-Boot 的启动流程
在文件/cpu /mcf5445x /start.s 中定义了mcf5445x 的异常向量表和启动代码,上电后CPU 找到程序入口_start 后开始运行并调用cpu_init_f 初始化flexbus ,随后调用board_init_f (位于/lib_m68k /board.c 中)进行目标系统第一阶段的初始化
代码。

在第一阶段通过检查一个函数数组init_sequence 来执行目标板初始化,主要包括系统时钟设置、SDRAM 控制器初始化、控制台接口初始化和Flash 检测等工作。

在第一阶段初始化后期,调用relocate_code (/cpu /mcf5445x /start.S )重定位到代码高端内存,设置第二阶段初始化环境,并开始调用
board_init_r 进行第二阶段初始化和随后的工作。

3.2修改目标系统时钟
目标系统使用35MHz 有源晶体,而USB 接口时钟必须为60MHz ,在系统引导后需要重新配置PLL 。

在/include /configs /M54455EVB.h 中添加如下代码:
U-Boot 和Linux 在Coldfire 处理器MCF54452上的移植
庞吉耀(南京磐能电力科技股份有限公司,江苏南京210036)
U-Boot&Linux Transplant in Coldfire Processor MCF54452


设计了一款以MCF5442为主处理器的通用平台,在M5445EVB 开发包的基础上调整了系统时钟、存储器系统、FEC 、
USB 和外设部分的配置参数并修正了部分代码,成功地把U-Boot 移植到目标板,在此基础上进一步移植Linux 。

系统在Linux 下开发,并通过m68k-linux-gnu-gcc 编译连接,利用Codewarrior 完成U-Boot 的代码烧写和早期调试。

通过tftp 下载等方法验证了U-Boot ,随后通过Web 浏览、文件系统操作、USB 鼠标等方法证实了Linux 系统能够在目标系统稳定运行。

关键词:Linux ,U-Boot ,ColdFire ,MCF54452,移植
Abstract
One general platform based on MCF54452was designed in this paper.M54455EVB,By adjust the system clock setting 、memory system configuration 、FEC 、USB controller and peripherals parameters and modify part of code base on M54455EVB development packages,u -boot was ported to object board and then Linux.The system was developed under Linux and pass compile use m68k-linux-gcc,the binary file is programmed to flash by Codewarrior and then debug early code with this tool chain.Through download object code use tftp to test u -boot,and use web server,file system operation and USB mouse etc.to verify Linux now are running successfully on the object system.
Keywords
:Linux,U-Boot,ColdFire,MCF54452,transplant
33
U-Boot和Linux在Coldfire处理器MCF54452上的移植
#undef CFG_INPUT_CLKSRC//取消定义
#define CFG_INPUT_CLKSRC(35000000)//重定义输入参考时钟为35Mhz
在文件\cpu\mcf5445x\speed.c中添加函数static void set_pll(void)在此函数中重新设置PLL。

在函数get_clock中添加set_pll()引用,并调整关于时钟部分的代码,如gd→inp_clk、gd→cpu_clk、gd→bus_clk、gd→flb_clk。

设置好系统时钟后串行口就可以工作了,随后的调试信息就可以从串口中打印出来。

3.3更改FlexBus和DDR设置
在/include/configs/M54455EVB.h中根据目标系统的资源组织方式进行修改。

同时需要修改flah.c中write_buff函数使之与Flash的结构和读写算法相适应。

由于本设计带有Flash仲裁器和Flash 编程控制,所以需要修改低层访问控制代码,保证访问之前得到Flash控制权,在编程之前要通过GPIO允许Flash编程控制。

3.4调整网络接口
网络部分更改需要根据PHY和MAC之间的连接方式确定,FEC可以用RMII方式连接PHY,也可以用MII方式连接PHY。

FEC0和FEC1都有一个MDIO接口,目标系统设计时选择其中一个即可,移植时根据目标板的情况更改/board/freescale/m54455evb/mii.c中函数int fecpin_setclear(struct eth_device觹dev,int setclear),重新配置复用的管脚和MDIO 与PHY连接方式和速率。

如果U-Boot使用其他关于mii相关的命令,则需要更改函数uint mii_send(uint mii_cmd),更改内容和方式是一致的,主要由MAC和PHY之间的实际连接方式确定。

3.5调整目标文件
MCF5445x的复位向量表和U-Boot重定位之前的代码是和绝对地址相关的。

makefile中的TEXT_BASE用来控制目标文件的起始地址,在\u-boot\makefile中搜索M54455EVB_i66_config,可以找到如下内容,并根据需要更改:
M54455EVB_i66_config:unconfig.....
if[″$$邀FLASH妖″==″INTEL″];then\
echo″TEXT_BASE=0x00000000″>$(obj)board/freescale/m54455evb/config.tmp;\
......
fi;\
3.6调试U-Boot
典型的修改和调试工作分为以下几步:
1)在Linux下使用gedit或者其他文本编辑工具完成源代码修改;
2)使用ltib工具进行编译和连接;
3)Codewarrior Flash programmer编程u-boot.bin到目标板;
4)在Codewarrior下创建ELF项目,并指定调试文件,连接硬件仿真器进行U-Boot的第一阶段的调试;
5)使用Printf或者Codewarrior的PIC代码调试方法完成U-Boot第二阶段的调试
一般来说调试第一阶段的代码需要硬件仿真器,特别是目标码下载,完成第一阶段后控制台接口已经工作,Printf可以帮助完成大部分的调试。

4移植Linux
虽然Linux内核是硬件无关,但是BSP却硬件平台相关,移植通常在一个和目标系统相类似BSP基础上修改完成,以下所指的根目录均指Linux的安装目录。

4.1定制存储系统
4.1.1定制FlexBus及DDR SDRAM
目标系统采用两片Intel Flash和两片x16的DDR SDRAM,U-Boot引导内核之前已经初始化Flexbus控制器和SDRAM控制器,如果使用U-Boot引导需要屏蔽函数cf_ear-ly_init(位于/arch/m68k/coldfire/config.c)中关于Flexbus和SDRAM控制器的部分初始化代码。

4.1.2系统时钟和SDRAM配置
为了能够定制SDRAM的大小,更改需要/arch/m68k/Kconfig文件的SDRAM_SIZE配置选项,更改为:
config SDRAM_SIZE
hex″SDRAM_SIZE″//配置为hex类型,显示名称为SDRAM_SIZE
depends on M54455//该配置依赖M54455配置项
default0x0fffffff//该配置项缺省值为0xffffffff
目标系统DDR配置128MB,采用35MHz晶体,内核工作在210MHz,进入内核平台相关部分更改配置选项如下:Plat-form dependent setup-->
(210000000)M54455EVB System Clock
(0x07FFFFFF)SDRAM_SIZE
4.1.3修改MMU的初始配置
内核从/arch/m68k/coldfire/head.S中的入口_Start开始启动,并配置cache和MMU,移植时需要根据系统实际DDR 的大小,改变MMU的TLB配置。

目标系统采用128MB的DDR,所以需要屏蔽原来BSP中128M以上的关于MMU的DTLB和ITLB配置部分。

MCU通过ACR0和ACR1实现对数据空间的访问控制,根据目标板的实现把位于FPGA上的外设映射到MCU的IO 空间0xF0000000,所以修改head.S中ACR0_FPGA,使得当系统调用访问FPGA空间时使用该设置。

4.2定制Flash系统
本文采用两片16M Flash按8位总线宽度串行连接构成32Mx8的MTD设备块,进入内核MTD配置选项Mapping drivers for chip access-->,设置如下:
<觹>CFI Flash device in physical memory map
(0x00000000)Physical start address of flash mapping//Flash设备在系统中的物理地址
(0x20000000)Physical length of flash mapping//整个MTD 设备以字节为单位的大小
(1)Bank width in octets//构成MTD 设备的Flash数据总线位宽
函数physmap_flash_probe(位于/driver/mtd/maps/physmap.c)检测物理设备时,根据MTD的配置申请虚拟空间并完成虚拟空间到物理空间的映射。

BSP在文件(/include/linux/asm-m68k/cfmmu.h)将MCF54452的MMU基址定义为:#define MMU_BASE0xE1000000,当Flash容量到达32M 时ioremap返回的虚拟地址将会和MMU的地址空间重叠导致第二片Flash无法访问和内核崩溃,需要将MMU的基址映射到外设空间,修改为:
#define MMU_BASE0xF8000000
4.3网络接口移植
目标系统使用MCU片上的两个FEC控制器,并通过FEC0的MDIO接口连接两片PHY,MAC到PHY的连接方式采用MII方式,需要对BSP中文件/drivers/net/fec.c进行修
34
《工业控制计算机》2010年第23卷第3期(上接第32页)
辑设计的正确性。

通过连续仿真或周期仿真观察运行的结果表明测量值(INP )逐渐与设定植(SP )相接近,最终达到稳定状态。

图5
仿真平台运行界面
PAS 上位机软件使组态工程师能够在软件平台上很方便的
对系统行为进行仿真和模拟,并判断基于功能块的控制回路设计的正确性和可靠性。

3结束语
PAS 控制系统上层软件作为川仪PAS 控制系统配套软件是基于IEC6ll31-3标准开发,可以方便地进行功能扩充或升
级。

例如增加一种新的功能块,仅需要在数据库的功能块图(FBD )单元表中追加该功能块的类型名称、位号、绘图参数及引脚类型等信息。

使用该软件进行逻辑功能组态,简单方便且高效,可实现复杂的控制功能。

同时利用仿真平台提供的连续仿真、周期仿真,中断仿真以及回放显示等功能,能够对控制系统的行为进行仿真和模拟。

参考文献
[1]葛益军,王文海.基于IEC61131-3的编程系统的设计与实现[J ].制
造业自动化,2006(7)
[2]黄延延,林跃,于海斌.软PLC 技术研究及实现[J ].计算机工程,
2004(1)
[3]邢建春,王双庆,关光炳.IEC61131-3———工业自动化系统的控制逻
辑上位机软件标准[J ].世界仪表与自动化,2003
[4]魏江,章凌,黄文君,等.基于DCS 的多语言编程软件的设计与实现
[J ].化工自动化及仪表,2005,32(2):39-42
[5]高金源,夏洁.计算机控制系统[M ].北京:清华大学出版社,2007
[收稿日期:2009.8.21

改,添加如下配置选项定义:
#define CONFIG_FEC2
1//FEC0缺省启用,此处启用第二个FEC
#define
CONFIG_FEC_SHARED_PHY
1
//允许使用FEC0的
MDIO 接口控制两个PHY 对函数fec_request_intrs(struct net_device 觹dev)中关于
MCU 引脚配置部分进行修改。

当然要启用网络协议栈功能,还
需要对内核网络部分进行配置。

4.4USB 接口移植
系统使用片上USB 收发器并使用PLL 提供时钟,需要修改/arch /m68k /coldfire /usb /xcvr.c 中函数xcvr_init 关于USB 时钟部分。

配置内核与USB 相关的选项如下:.Device driver
<觹>HID Devices
<觹>USB Human Interface Device(full HID)support <觹>SCSI device support
<觹>SCSI devices support
<觹>legacy /proc /scsi support <觹>SCSI disk support
<觹>probe all LUNs on each SCSI device <觹>USB support
<觹>Support for Host-side USB [觹]USB device filesystem
<觹>EHCI HCD(USB2.0)support [觹]Full speed ISO transacions <觹>USB Mass Storage support
---select transceiver (on-chip (FL /LS only))-->
4.5添加系统调用
FPGA 实现的IP Core 通过系统调用提供给用户,这比封装设备处理效率更高,主要包括扩展的两个UART 控制器、IRIG-B 解码器、和LCD 控制器等。

以newsyscall 为例给出添
加系统调用的方法:
1)在\kernel\sys.c 中添加newsyscall(int number)源码实现
asmlinkage int sys_newsyscall(int number)
邀...妖
2)在\arch\m68k\coldfire\entry.s 的系统调用入口表中添加:.long sys_newsyscall
3)在\inclue\asm-m68k\unistd.h 中增加
#define __NR_newsyscall N //N 为添加的系统调用号
更改__NR_syscalls
#define __NR_syscalls N+1
//增加数目
4)重新编译内核5
结束语
U-Boot 和BSP 都是硬件相关的,在移植时需要对目系统硬件和U-Boot 以及源码结构有一个完整的了解。

系统移植时主要从参考时钟、存储器组织架构、网络接口及USB 物理层连
接方式等方面着手,添加自定义外设时要兼顾效率和通用性原则,专用的外设以系统调用的方式提供,通用的扩展外设以设备驱动的方式提供。

根据特定要求对内核进行裁剪,可以减少代码尺寸,以降低成本或提高运行效率。

完成U-Boot 在目标系统上移植后通过tftp 下载、Flash 烧写、内核引导和参数设置等命令测试证明U-Boot 全部功能已经得到实现。

移植Linux 后通过对MTD 设备文件读写、Web 服务器、U 盘、串行控制台等测试验证了系统的网络、存储系统、
USB 接口和串行接口等功能能够在目标系统EC3000变电站
综合自动化平台上顺利运行。

参考文献
[1]周斌,林喜荣,黄析伟.嵌入式Linux 系统下NOR Flash 的配置和使
用[J ].单片机与嵌入式应用,2004(2)
[2]孙纪坤,张小全.嵌入式Linux 系统开发技术详解———基于ARM [M ].
北京:人民邮电出版社,2006
[3]杨树青,王欢.Linux 环境下C 编程指南[M ].北京:清华大学出版社,
2007[4]Freescale
MCF54455Reference Manual [K ],2008
[收稿日期:2009.9.13]
35。

相关文档
最新文档