本文描述了将Linux移植到基于S3C2410处理器目标板上的方法与过程。介绍了目标平台和Linux,并说明了如何搭建移植环境,着重介绍了Bootloader的架构和功能以及Linux内核的移植。结果证明该方法是可行的。移植后Linux在嵌入式系统中运行良好。
关键词 :嵌入式系统 ;移植 ;Linux内核 ;S3C2410处理器
引言
嵌人式系统就是以应用为中心、以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。ARM嵌人式芯片是一种高性能、低功耗的RISC芯片。它由英国ARM公司设计,世界上几乎所有的主要半导体生产商都生产基于ARM体系机构的通用芯片,或在其专用芯片中应用相关ARM技术。在2001年基于ARM内核的处理器占市场份额的75%,成为业界的龙头。
Linux是免费发行的、快速高效的操作系统 ,Linux的出现在计算机世界引发了一场革命。Linux操作系统以代码开放、功能强大又易于移植成为嵌入式操作新兴力量。嵌人式Linux是按照嵌人式操作系统的要求设计的一种小型操作系统,由一个内核以及一些根据需要进行定制的系统模块组成。其内核很小 ,一般只有几百kb,即使加上其他必要的模块和应用程序,所需的存储空间也很小。它非常适合于移植到嵌入式系统中去 ,同时它具有多任务多进程的系统特征 ,有些还具有实时特征。
1目标平台介绍
文中使用的目标平台S3C2410是SAMSUNG公司使用920T处理器内核开发的一款嵌入式处理器。S3C2410是Samsung公司专门为PDA、Intenet设备和手持设备等专门开发的微处理器。该芯片还包含有16kB一体化的Cache/MMU,这一特性使开发人员能够将Linux和VXwork移植到基于该处理器的目标系统中。该目标板的系统资源如下 :
(1)CPU:S3C2410微处理器,工作频率为200MHz。
(2)Flash:16MB。
(3)SDRAM:64MB SDRAM。
(4)UART:RS-232串行接口。
(5)其他 :14针ARM JTAG接口等。
2 交叉编译环境的建立
基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成(所以称为交叉编译)。双方之间一般通过串口、并口或以太网接口建立连接关系。单独拿出一台PC机,在该PC上安装桌面的Linux操作系统(如RedHatLinux9.0),可以采用默认的安装选项(注意要包含FTP服务),这台PC作为Linux服务器,除管理员以外,一般不直接让其他人去操作。
将该Linux服务器接入局域网,并新建一些合法用户,以便其他的PC机(在此将其称为工作站)的合法用户能访问到Linux服务器。而其他的PC机(工作站)仍然使用Windows操作系统。
需要的软件工具包括 :
(1)ftp客户端程序。
(2)Telnet工具。
(3)移植到某一特定ARM平台的Linux操作系统内核源码。
(4)GNU编译工具,可由相关网站下载。
在某工作站PC上安装ftp客户端程序和Telnet工具 ,安装完毕后应该可以在该工站PC和Linux服务器之间进行文件的传输,并在工作站PC可以通过Telnet登陆到Linux服务器(可能需要将Linux服务器 的防火墙服务关闭才能完成)。
Linux服务器的安装:将工作站PC上的Linux操作系统内核源码压缩包和GNU编译工具通过ftp传送到Linux服务器的某个目录(如合法的用户目录),然后在该目录下解压,并将GNU编译工具安装到默认的工作目录即可,以上工作通过在工作站PC使用Telnet工具完成,而不需要在Linux服务器上进行。Linux操作系统内核的编译一般有一个比较固定的步骤,会根据MakeFile文件的不同而略有差异,可参考相关文档,编译的工作在工作站PC使用Telnet工具完成。按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过ftp将该可执行的二进制文件传回工作站PC,然后通过ADS或SDT下的烧写工具写入开发板的Flash即可。
3 Bootloader的架构和功能
Bootloader引导程序是嵌入式开发很重要的组成部分。它是嵌入式系统上电后执行的第一个程序,并由它最终将操作系统启动起来并将控制权交给操作系统。Bootloader引导程序最基本的功能是对硬件系统的初始化和内核启动参数设置并启动内核。Bootloader的主要功能有:
(1)初始化CPU 的主频、SDRAM、中断、串口等硬件;
(2)启动Linux内核并提供一个RAMDISK;
(3)通过串口下载内核或RAMDISK到目标板上;
(4)将修改过的内核或RAMDISK写入到Flash内;
(5)为用户提供一个命令接口。
在嵌入式系统开发过程中,Bootloader还与主机通信,不断检测从主机传来的控制信息和数据信息,完成相应的操作。
Linux运行在保护模式下,但是当机器启动复位的时候却处于实模式下。所以写Bootloader的工作也是在实模式之下的。
Botloader的实现除了依赖于CPU的体系结构,还依赖于目标板的设置,本系统的Bootloader引导程序分为stagel和stage2两个阶段。依赖于CPU的体系机构的代码 ,比如设备初始化等,放在stagel中,采用ARM汇编语言来实现,这样可以达到短小精悍的目的。stage2用C语言来实现,可以实现复杂的功能,同时代码具有更好的可读性和可移植性。
●Bootloader的stage1
stage1是Bootloader一开始就执行的操作,其目的是为了stage2的执行以及随后的内核的执行,设置好一些基本的硬件环境。
包括以下步骤 :
①屏蔽所有的中断 。为中断提供服务的通常是操作系统,因此在执行Bootloader的过程中可以不响应任何中断。中断屏蔽通过写CPU的中断屏蔽寄存器来完成。
②设置CPU的时钟频率和速度。
③初始化RAM设置系统的内存控制器的功能寄存器和各内存库控制寄存器等。
④为加载stage2准备RAM空间。
⑤拷贝stage2到RAM中。
⑥跳转到stage2的入口点。
●Bootloader的stage2
stage2的主要的功能是通过串口下载Linux内核到目标板上。
包括以下几个步骤:
①初始化本阶段要使用到的硬件设备。这通常包括:初始化至少一个串口,以便和终端用户进行I/O输出信息;初始化计时器等。
②检测系统的内存映射。所谓内存映射就是指在整个4GB物理地址空间中有哪些地址范围被分配用来寻址系统的RAM单元。
③加载内核映像和根文件系统从Flash读入到Rom中。这里包括两个方面:a.内核映像所占用的内存范围;b.根文件系统所占用的内存范围。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。
④设置内核的启动参数。
⑤调用内核。Bootloader调用Linux内核的方法是直接跳转到内核的第一条指令处。
4 Linux内核的构建和移植
1)设置软件开发环境。
为了和目标板进行通讯,必须要在主机上终端运行仿真程序DNW。建议在宿主机上安装REDHATLinux9.0版本。以下以在SHELL模式下安装编译器和源代码为例介绍安装过程 :
首先以ROOT身份进入系统。把REDHATLinux90的安装光盘放入光驱中,执行装载光驱命令:
moumt/dev/cdrom /nmt/cdrom
如果系统不能识别/mnt/cdrom,可以使用如下命令(假设cdrom为/dev/had),则用mount -t iso9660 /dev/hdb/mnt。
如果在安装REDHATLinux9.0的时候已经默认安装了CDROM,以上命令不需执行,直接进入CDROM所在目录。
mkdir /usr/local/arm
mount /dev/cdrom /mnt/cdrom
cd/
cp /mnt/cdrom/bin/cross-2.95.3.tar.bz2 /usr/local/arm/
cp /mnt/cdrom/bin/Linux_for_s3c2410.gz
tar zxvf Linux_for_s3c2410.gz
cd /usr/local/arm/
tar -jxvf cross-2.95.3.tar.bz2
程序执行完后,Linux源代码和编译环境都已建立起来了。
2)Linux内核编译。
首先以ROOT身份进入系统。然后完成下列步骤,就可以在/Linux/arch/arm/boot/得到内核的映像文件zImage。
在shell命令下输入命令进行内核配置:
make menuconfig
该命令执行之后生成文件.config。它保存这个配置信息,下一次再执行make menuconfig的时候将生成新的.config文件。
输入命令 :make dep
输入命令 :make clean
输入命令 :make zImage
通过各个目录的Makefile进行,将会在各个目录下生成一系列目标文件,上述步骤完成后,就完成了对Linux的编译工作。
Linux内核的编译、修改、移植实际上与上层的应用程序,如命令解释器shell、登陆程序login相关。这些程序应根据需要重新定制。
利用终端仿真程序DNW和Bootloader引导程序通过串口就可以把Linux内核移植到目标系统板。移植完成后,Linux就可以在目标系统板上运行了。
5 结束语
讨论了Linux向目标系统S3C2410移植的过程中的关键技术及其实现。移植后的Linux保留了原有的工作稳定的特点。并可以根据需要,在该系统中编写应用程序和运行应用程序。