嵌入式Linux系统的移植技巧

时间:2022-10-20 05:04:46

嵌入式Linux系统的移植技巧

摘 要:Linux被广泛的应用在嵌入式领域,根据实际需要构建一个自己的嵌入式Linux变得尤为重要。根据实际需要介绍嵌入式Linux系统的构建,框架及其移植技巧,并以三星公司的S3C2410处理器芯片为例,将开源Linux操作系统移植到此ARM处理器上,详细阐述开发环境的搭建,Bootloader的架构及功能,内核及文件系统的编译及移植技巧。实验证明,移植后的系统运行稳定且高效,对构建其他嵌入式操作系统具有参考意义。

关键词:S3C2410;嵌入式系统;Bootloader;内核;文件系统

中图分类号:TP316文献标识码:B

文章编号:1004-373X(2008)24-040-03

Method of Porting on the Embedded Linux System

LI Jing,ZHAO Xiaoqiang,FAN Jiulun

(Xi′an Institute of Posts and Telecommunication,Xi′an,710061,China)

Abstract:Linux is used widely in the embedded field,it is important to build our embedded Linux system,according to the project,this paper introduces the method of building the embedded Linux system.Taking the Linux transplanted onto the target board based on the process or of S3C2410 as an example.Method of embedded Linux is transplanted,then,how to build up an environment is described,focusing on the framework and functionality of Bootloader and transplant of Linux kernel.This method proves high effective,the transplanted Linux in the embedded system runs well and a good reference to the others embedded operator system is given.

Keywords:S3C2410;embedded system;Bootloader;kernel;file system

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式Linux是按照嵌入式操作系统的要求设计的一种小型操作系统,非常适合于移植到嵌入式系统中。嵌入式Linux应用最广泛的地方就是基于ARM地应用,ARM芯片是一种高性能、低功耗地RISC芯片,被广泛地应用于各个领域[1,2]。

目前,基于ARM核的处理器成为市场的主流,建立面向ARM架构的操作系统成为人们研究的热点,而Linux由于它的开源性,被广泛地应用于嵌入式系统中,任何人都可以根据自己的需要来对其进行裁减,以适应自己的系统。根据实际需要将Linux移植到基于ARM920T核的s3c2410处理器芯片上,在总结现有方法存在的问题的基础上,详细介绍了移植的原理与方法技巧,对于构建其他的嵌入式Linux有一定的参考意义。

1 开发环境构建

1.1 嵌入式硬件平台

系统硬件平台核心部件为三星S3C2410 ARM920T芯片,其工作频率最高达200 MHz。包括64 MB的NAND FLASH 和64 MB的RAM,键盘接口、串口、CPLD译码单元、网络单元、语音单元、LCD及触摸屏等。

1.2 嵌入式软件平台

软件平台一般包括Bootloader、内核、文件系统以及用户程序4大部分,它们的可执行映像存放在系统的存储设备上。在FLASH空间上存储的顺序如下:0~128 kB用于存储启动代码(VIVI);128~192 kB用于存储启动参数;192 kB~3 MB用于存储内核映像,3 MB以上用于存储文件系统,其余为用户程序。FLASH存储结构如图1所示。

1.3 交叉开发环境搭建

基于Linux 操作系统的应用开发环境一般是由目标系统的硬件系统和宿主PC机构成。目标硬件系统用于运行操作系统和系统应用软件,而目标硬件系统所用到的操作系统的内核编译、应用程序的开发需要通过宿主PC机来编译完成。双方之间可以通过建立以太网接口、USB等来调试编译好的驱动或应用程序。当编译、调试通过后,再添加到内核中去。首先要正确安装Linux操作系统,下面介绍用Crosstool制作交叉工具链。

首先下载所需要的资源文件[3]:

Crosstol-0.4.2.tar.gz,binutils-2.15.tar.bz2,gcc-3.3.6.tar.gz,glibc-2.3.2.tar.gz,linux-lib-header-2.6.12.0.tar.bz2,glibc-linxuthreads-2.3.2.tar.gz。准备好这些资源之后需要在crosstool-0.42目录下创建配置文件arm.sh,指出工具链源码所在位置和安装的目录,再修改配置文件arm.dat和gcc-3.3.6-glibc-2.3.2.dat文件,最后执行arm.sh脚本就可以在指定目录生成所需要的交叉编译工具。

2 嵌入式Linux的移植

2.1 BootLoader的移植

在嵌入式系统中,BootLoader的作用与PC 机上的BIOS 类似,通过BootlLoader可以完成对系统板上的主要部件如CPU,SDRAM,FLASH,串行口等进行初始化,也可以下载文件到系统板上,对FLASH进行擦除与编程。当运行操作系统时,Bootloader会在操作系统内核运行之前运行,通过它可以分配内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统准备好正确的环境[4]。

2.2 BootLoader的架构功能

系统使用的BootLoader是VIVI,VIVI是CPU加电后运行的第一段程序,其基本功能是初始化硬件设备,建立内存空间的映射图,从而为调用嵌入式 Linux内核做好准备。VIVI由2部分组成:一部分是依赖于CPU体系结构的代码,用汇编语言实现对硬件环境的初始化,并为第二部分代码的执行做好准备;另一部分是用C语言实现内存空间的映射,并将内存映像和根文件系统映像从FLASH中读取到RAM中,设置好启动参数后启动内核。

VIVI的stage1是BootLoader一开始就执行的操作,其目的是为了stage2的执行以及随后的内核的执行设置好一些基本的硬件环境。其步骤如下所示:

(1) 硬件初始化:当上电或复位后,VIVI启动,位于NAND中的前4 kB程序便从NANDFLASH中由S3C2410自动拷贝到SteppingStone的前4kB的内部RAM中该RAM之后被映射到地址0x00处。此时VIVI的前4 kB代码开始运行,关闭Watchdog,关闭中断,初始化PLL和时钟主频设定,初始化存储器设定;

(2) 配置串口:初始化串口控制器;

(3) 复制自身到SDRAM中:当初始化串口结束后,VIVI开始把自身从NANDFLASH中复制到SDRAM中;

(4) 跳转到 stage2的入口点。VIVI的stage2阶段,包括以下步骤:

① 继续初始化系统硬件;

② 内存影射初始化,内存管理单元初始化;

③ 初始化堆栈;

④ 初始化mtd 设备;

⑤ 初始化私有数据;

⑥ 初始化内置命令;

⑦ 启动VIVI。

2.3 BootLoader的移植

(1) 修改Malkefile,指定交叉编译:

ARCH = arm

CROSS_COMPILE=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-

(2) 修改/arch/s3c2410/smdk..c文件,按照上面所指定大小指定NAND分区;

(3) 编译生成VIVI。

2.4 Linux内核的移植

本实验系统运行的Linux版本是针对2.6.14.1进行移植,下载内核代码在/linux下,移植按照以下步骤:

(1) 设置目标平台和指定交叉编译器:

在最上层的根目录/Makefile文件中,首先要指定所移植的硬件平台,以及所使用的交叉编译器。改为如下:

ARCH = arm CROSS_COMPILE =/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-

(2) 设置NAND FLASH分区:

在arch/arm/mach-s3c2410/devs.c中添加头文件:

#include

#include

#include

(3) 将static struct mtd_partition partition_info[]中的分区和VIVI中的分区分成一样大小。

(4) 加入 NAND FLASH分区:

struct s3c2410_nand_set nandset = {nr_partitions:5,partitions:partition_info,};

(5) 建立芯片支持

struct s3c2410_platform_nand superlpplatform =

{tacls:0,twrph0:30,twrph1:0,sets:&nandset,nr_set s:1,};

(6) 在NAND FLASH驱动里加入NAND FLASH 芯片支持:

在s3c_device_ nand中增加dev = {.platform_data =&super-lpplatform}。

(7) 在 arch/arm/machs3c2410/ machsmdk2410.c 中的__initdata 部分增加 &s3c_device_ nand,使内核启动时初始化 NAND FLASH信息。

(8)去掉NADD FLASH的ECC,修改drivers/mtd/nand/s3c2410.c,在s3c2410_nand_init_chip函数里修改NAND_ECC_SOFT为NAND_ECC_NON。

(9) 配置编译项,通过在终端下输入命令make menuconfig来对Linux进行配置,配置完成后通过输入命令:make 即可在/arch/arm/boot下生成所需要的内核文件zImage。

2.5 制作文件系统

Cramfs被设计为简单的较小的可压缩的文件系统,它主要用于较小ROM的嵌入式系统,它是一个压缩的文件系统,本系统采用Cramfs文件系统。

可以利用工具软件Busboy和MKCRAMFS制作CRAMFS文件系统。首先在本地建立根文件系统myroot,然后在其目录下建立所需要的子目录,如bin,dev,etc,lib,mnt,proc,sbin,usr等。建立好目录之后要给各相应的目录复制相应的文件或库,可以通过BusyBox来实现。BusyBox是一个可配置的工具。通过make menuconfig 配置完成BusyBox后,修改BusyBox的Makefile内容,使用交叉编译环境。然后通过make 命令进行编译,make install进行安装,再将生成的目录下的相应文件复制到所构建的文件系统的相应目录下,然后编写相应的linuxrc等文件。完成这些步骤后,利用MKCRAMFS工具来制作所需要的文件系统,只需要在终端通过命令mkcramfs myroot myroot.crarmfs就可以把myroot制作成只读的压缩的cramfs文件系统。

2.6 内核及文件系统的下载

利用VIVI通过超级终端重新下载VIVI,内核和root,在Windows下启动超级终端,或者Linux下启动Minicom设置其为(115200,8位数据,1位停止位,无奇偶校验),用串口线连接实验系统和 PC 机的串口。系统上电后,在VIVI命令行下操作:

下载VIVI:输入vivi> load FLASH vivi x,之后,通过 xmodem 协议发送vivi 文件;

下载内核:输入vivi> load FLASH kernel x,通过 xmodem 协议发送内核文件;

下载文件系统:输入vivi> load FLASH root x,通过 xmodem 协议发送root文件系统。

3 结 语

针对嵌入式Linux的构建,以S3C2410处理器为例,详细阐述整个Linux系统构建的原理框架和移植的方法,对移植中的关键技术和重要步骤给出了详细的说明。移植后的Linux 系统在开发板上运行稳定,性能良好。操作过程对嵌入式Linux系统在其他处理器上的移植也具有参考意义。

参考文献

[1]刘振纲,刘成安,卢剑翔.移植标准Linux到S3C2410[J].微计算机信息,2006(11):152-153.

[2]陶列骏,潘金贵.Linux的可移植性[J].小型微型计算机系统,2002(1):50-53.

[3]李亚锋,欧文盛.ARM嵌入式Linux系统开发[M].北京:清华大学出版社,2007.

[4]张杰,吴敏,曹卫华.基于S3C2410的Linux移植[J].微型电脑应用,2005(3):57-59.

[5]章晓明,杜春燕,陆建德.HHPPC8245上的嵌入式Linux移植及VPN开发[J].计算机工程,2007(1):274-276.

[6]陈峰,李滨滔,戈志华.基于S3C2410的嵌入式 Linux系统构建[J].现代电子技术,2007,30(24):55-57.

[7]刘明博,邓中亮.基于ARM的嵌入式操作系统移植的研究[J].计算机系统应用,2006(11):87-88.

[8]许荣.基于AT91RM9200的嵌入式Linux系统移植[J].电子技术,2006(3):64-68.

[9]Daniel P.Bovel Understanding the Linux Kernel[M].2ndEdition.OReilly,2002.

[10]CPU:Samsung Electronics Co.Ltd.User′ManuaL S3C2410X 32-Bit RISC Micro-processor Revision1.2.2004

作者简介 李 晶 男,1983年出生,硕士研究生。主要研究方向为嵌入式系统。

上一篇:基于Backstepping的移动机器人轨迹跟踪控制 下一篇:基于DSP的通信信号瞬时频率时域提取