嵌入式Linux在SH4架构下的移植技术研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式Linux在SH4架构下的移植技术研究
作者:王若关胜晓刁智华
来源:《现代电子技术》2008年第24期
摘要:SuperH系列微处理器是Renesas公司(原Hitachi)开发的采用了RISC系统指令集的32位系列微处理器。详细介绍SH4系列交叉编译平台在新版本编译器下的配置过程,提出一种适用于SuperH系列微处理器的通用的内核移植的方法并研究Linux 2.6内核在SH4系列微处理器SH7751上的移植方案。实验证明该方法可行,移植过程也对其他平台有借鉴作用。
关键词:SuperH;Linux2.6;嵌入式系统;内核移植
中图分类号:TN21;TP311文献标识码:A
文章编号:1004-373X(2008)24-058-03
Research of Porting Embedded Linux Based on SH4
WANG Ruo,GUAN Shengxiao,DIAO Zhihua
(USTC-Renesas Joint Library,University of Science and Technology of
China,Hefei,230026,China)
Abstract: SuperH is a series of 32bit RISC MPU production of Renesas Company.The paper provides a method of porting embedded Linux kernel 2.6 to SH7751 and introduces the way of establishing crosstool in SH4 series MPU.The result proves it viable and helpful to other architecture of MPUs.And the migration process is also helpful to the other platform.The paper presents a common core transplant method applicable to series of SuperH microprocessor.
Keywords:SuperH;Linux2.6;embedded system;core transplant
1 引言
Renesas公司的SuperH系列微处理器是由原Hitachi公司设计开发,由SuperH公司提供CPU技术支持。SH7751属于微处理器SH4系列,有着较高的工作频率和处理性能(430 MIPS/ 240 MHz)。Linux 2.6内核相对于先前版本的内核在可配置性方面有了较大的改进,内核的可抢占和响应时间的改进使其在应用软件性能上更加优异。由于支持高档的电源管理APM,就为各种手持设备和对电源管理比较严格的嵌入式系统提供了良好的平台支持,越来
越多的嵌入式系统陆续将Linux2.6作为开发的基础平台。因此将新内核移植并建立开发环境成
为进行嵌入式系统开发首先要进行的工作。一般对内核移植的具体工作可以分为3个步骤:建立交叉编译工具链(Toolchain);内核的配置和剪裁;建立根文件系统并配置bootloader。
SH系列微处理器进行嵌入式Linux移植也是按照上述3个步骤进行,但在新版本编译器环境下移植Linux2.6过程与先前版本的配置有较大差。
2 交叉编译环境的建立
2.1 交叉编译源文件和工具的选取
交叉编译是指在宿主机器(Host)上生成针对特定平台代码(Target)的过程。实验中使用的是x86平台下的debian4.0的宿主机对SH4系列平台代码进行交叉编译,从而生成在SH4系列MPU上可运行的代码。进行交叉编译的一系列工具即称为交叉编译工具链。
交叉编译工具主要由binutils,gcc 和 glibc组成。由于SH4系列微处理器应用较少,一些著名的交叉编译工具如CLFS,crosstool均未提供对SH4系列环境的支持。有较多的SH系列微处理器开发板厂商提供了对Linux的开发工具包,但提供的大都是2.4版本的内核,并且无法及时得到社区的技术支持。实验中使用Renesas公司的EDOSK7751R开发平台,移植中选取负责SH架构Linux内核团队2007年5月发布的内核稳定版本linux-sh-2.6.20。
在选取C库过程中由于稳定性考虑选取标准库glibc,glibc-sh中INSTALL文件指明了binutils和gcc的最低版本和推荐版本,实验中选取的binutils版本为2.17。
与内核的选取不同,gcc的选取并不建议选用最新的版本,这是因为可能在选用的其他工具软件进行具体调试中很多陈旧代码可能在新编译器下编译链接错误较难解决。在实验中选择的是gcc4.1.1及gcc的Sh4补丁。实验中使用的源文件和补丁如下:
binutils-2.17.50.tar.gz
binutils-2.17.50-sh4-linux.tar.gz
gcc4.1.1.tar.gz
gcc4.1.1-sh4-linux.tar.gz
glibc-2.5.3.tar.gz
glibc-2.5.3-sh4-linux.tar.gz
glibc-linuxthreads-2.5.3.tar.gz
glibc-headers-2.5.3.tar.gz
glibc-headers-2.5-3.sh4.tar.gz
linux-sh-2.6.20.10.tar.gz
2.2 内核头文件的生成。
首先建立工作目录和一些环境外部变量:
$export PREFIX=/home/ruo
$export PATH=${PREFIX}/usr/bin:${PATH}
内核头文件是交叉编译的基础文件,在较早版本的Linux(如2.4)中交叉编译中一般通过对内核的配置生成。在Linux2.6环境下配置完内核后,版本头文件version.h要单独建立,否则后期glibc无法安装。解压linux-sh-2.6.20.10.tar.gz并运行指令:
$tar –xzf linux-sh-2.6.20.10.tar.gz
$cd linux-2.6.20
$make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig
$make include/linux/version.h
$install -dv ${PREFIX}/usr/include/{asm,asm-generic,linux,rdma,mtd,sound,video}
配置“Processor selection”选择“support SH7751 processor”,另外根据SH7751系列不同型号CPU的用户手册配置其他内核选项。配置完成保存退出后,建立版本头文件。运行后可查看/include/linux/文件夹中是否生成autoconf.h和version.h是否生成而判定内核头文件是否创建成功。
将生成的头文件中asm,asm-generic,linux,rdma,mtd, sound,video七个目录拷贝到工作目录${PREFIX}/usr/include中。
2.3 建立引导编译器(bootstrap gcc)
binutils是一组二进制工具集合,将binutils-2.17和补丁解压后,打完全部补丁,然后即可安装生成交叉编译的二进制工具集合。将libiberty.h文件拷入内核头文件库中,编译后期gcc 使用。命令参数如下:
$cd binutils-2.17-sh4-linux
$patch -p1 < ../binutils-2.17-sh4-linux.patch