Chinaunix首页 | 论坛 | 博客
  • 博客访问: 212822
  • 博文数量: 37
  • 博客积分: 3082
  • 博客等级: 中校
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 13:59
文章分类
文章存档

2013年(1)

2012年(1)

2011年(2)

2010年(7)

2009年(1)

2008年(13)

2007年(12)

我的朋友

分类:

2007-03-04 08:41:28

LinuxS3C2410开发平台上的移植

Linux porting for S3C2410 develop platform

  要:本文论述了在基于S3C2410目标平台上移植Linux的详细过程和方法。首先从Samsung公司基于ARM920T内核芯片S3C2410的开发平台硬件介绍着手,从交叉编译环境的建立,编译Boot LoaderLinux内核,到最后Linux内核的移植以及文件系统的更新进行了详细的论述。

关键词:S3C2410 嵌入式系统  Linux 移植 Kernel

0        引言

近年来随着嵌入式设备与Internet的广泛结合,手机、PDA、路由器、调制解调器等复杂的高端应用对嵌入式处理器的性能提出了更高的要求。ARM嵌入式芯片就是一种高性能低功耗的RISC芯片,而Samsung公司的S3C2410是基于ARM9的微处理器,由于其完成嵌入式系统时的复杂功能,所以需要操作系统来完成各任务之间的调度。

Linux是目前最为流行的一款开放源代码的操作系统,自1991年问世到现在,不仅在PC平台,由于其内核精简、高性能、源码开放、内核可裁剪以及适用于不同的CPU体系结构的众多优点,还在嵌入式应用中大放光彩,逐渐形成了与其它商业EOS抗衡的局面。目前正在开发的嵌入式系统中,70%以上的项目选择Linux作为嵌入式操作系统。

1         系统硬件平台简介

本文采用的QT2410E是上海勤研电子设计生产的一款开发板,它基于Samsung公司的ARM920T内核的微处理器S3C2410,有内存管理单元,支持WINCELinux操作系统,可用于PDAVoIPInternet设备、可视电话等领域

该目标板的系统资源如下:

(1)       CPUS3C2410微处理器,工作频率可达200MHZ

(2)       NOR FLASH256KB

(3)       NAND FLASH64MB

(4)       SDRAM64MB

(5)       UARTRS232串行接口

(6)       USBUSB HostUSB Device

(7)       以太网:10Mbps以太网接口

(8)       其它:20针标准ARM JTAG

2         交叉编译环境的建立

交叉编译环境就是在一个平台上生成可以在另一个平台上执行的代码。采用交叉编译的主要原因在于,多数嵌入式目标机不能提供资源供编译过程使用,因而只好将编译工作转移到高性能的宿主机中进行。目标机(QT2410E)和宿主机(PC)之间通过串口,并口或以太网口建立连接关系统,本系统硬件环境如下图:

PC机上装上Redhat linux 9.0,执行完全安装。然后在PC端以root身份登陆linux系统,下载交叉编译器toolchain安装包cross-2.95.3.tar.tgz置于根目录下,在/usr/local目录下建立名arm为的目录,进入该目录,执行解包:

[root@localhost root]# cd /usr/local/arm

[root@localhost arm]#tar xjvf /cross-2.95.3.tar.tgz

设置系统环境变量:

 [root@localhost arm]#export PATH=$PATH:/usr/local/arm/2.95.3/bin

这样,内核或其他应用程序均可以用arm-linux-来指定使用该交叉编译器。

   Boot loader、内核和root文件系统的准备

要想在目标板上运行linux操作系统,一定要有系统引导程序Boot loaderLinux内核以及rootfs文件系统,所以我们首先要下载及编译这些文件。Boot loader、内核映像和文件系统映像在系统中典型空间分配结构图如下:

Boot Loader

Boot参数

内核

根文件系统

3.1准备好内核源码包:

首先以root登陆linux操作系统,下载内核压缩包kernel-xx.tgz到根目录下,在根目录下建立QT2410目录,进入该目录,执行解压压缩包:

[root@localhost QT2410E]#tar xzvf /kernel-xx.tgz

此时在QT2410E下产生一个kernel目录就是linux的内核源码包,然后进入kernel目录下配置:

[root@localhost kernel]#make menuconfig

选中Load an Alternate Configuration File进行相关参数配置保存后即可执行以下命令编译内核:

[root@localhost kernel]#make clean

[root@localhost kernel]#make dep

[root@localhost kernel]#export PATH=$PATH:/usr/local/arm/2.95.3/bin

[root@localhost kernel]#make zImage

编译结束后在kernel/arch/arm/boot目录下得到linux内核压缩映像文件zImage

3.2 准备好root文件系统:

yaffs是一种专门为嵌入式系统中常用的flash设备设计的一种可读写的文件系统,具有较快的启动速度,对flash使用寿命有更好的保护机制,我们在此就用yaffs文件系统。

首先以root登陆linux操作系统,下载rootfs-xx..tgz压缩包,将该压缩文件解压后得到root_nfs目录,将该目录更名为root后拷贝到/QT2410E下,这样就准备好了共享目录,在这个目录下有一个压缩包root_nfs.tgz这就是要固化到Nand flash中去的yaffs文件系统。

3.3 准备好Boot loader

其中Boot loader我们采用VIVIVIVI是韩国Mizi公司的开发的一种Boot loader,适用于ARM9处理器,支持S3C2410VIVI有两种工作模式:一种是启动加载模式,也即Boot loader从目标机上的某个固态存储设备上将操作系统加到RAM中运行的过程;另一种是下载模式,在这种模式下,目标机上的Boot loader将通过串口连接或网络连接等通讯手段从主机上下载文件,比如下载内核映像和根文件系统映像等。

首先以root登陆linux操作系统,进入QT2410目录下建立vivi目录,然后到Mizi公司网站上下载vivi.tgz压缩包后解压到vivi

[root@localhost /]#tar xzvf /QT2410E/vivi/vivi.tgz

[root@localhost /]#cd /QT2410E/vivi/vivi_QT2410E

[root@localhost vivi_QT2410E]#make menuconfig

选中Load an Alternate Configuration File进入相关参数设置,保存为arch/def-configs/QT2410E后退出,然后

[root@localhost vivi_QT2410E]#export PATH=$PATH:/usr/local/arm/2.95.3/bin

[root@localhost vivi_QT2410E]#make

即可,编译成功后在vivi目录下将产生一个名为vivi的二进制文件,也即我们要烧入目标板的boot loader

4     移植linuxS3C2410目标平台QT2410E

与为PC机安装操作系统相比,为QT2410E开发板安装linux是一个不同的过程,总体步骤可分为:安装vivi Boot loader、安装linux内核和安装根文件系统。下面分别详细介绍:

4.1 JTAG安装vivi Boot loader

装载程序vivi就像电脑里的BIOS一样,起到一个引导作用,安装系统时我们还可以用它来烧写NANDflash,因此需要先将vivi烧到NANDflash启动区域。首先在Windows操作系统下安装并口JTAG驱动后,我们将使用一个JTAG烧写工具sjf2410.exe(可由三星网站上下载)来烧写,运行后如下图:

Flash型号、烧写操作以及烧写块地址全部选“0后即进入烧写操作,烧写完成后选“2退出,我们就将VIVI烧入到目标板上。

4.2通过串口下载Linux内核

VIVI移植完成后我们就可以进行内核移植了,首先以root身份进入PCLinux操作系统,启动配置minicom,在PC机键盘上按住空格键,然后复位QT2410开发板,我们就进入了vivi模式,在vivi>输入

vivi>load flash kernel x

同时按住Ctrl+A后按S选中我们前面编译好的kernel映像zImage,以Xmodem方式传送,直至烧制完成。

4.3 通过NFS安装系统

一个完整的Linux系统包括一个Kernel和一个root文件系统。如果只有一个Linux内核,系统最后是无法正确引导的。首先我们在PC机的Linux操作系统下修改/etc/exports文件的内容添加一行:

/QT2410E/root *(rw,sync,no_root_squash)

这里/QT2410E/root就是我们前面准备的root文件系统的共享目录,*代表所有的客户机都可以挂接此文件系统,rw代表客户机可以读写许可来挂接它们的根文件系统,no_root_squash允许客户机以主机上的root身份挂接根文件系统。然后关闭主机上的防火墙后启动NFS服务:

/etc/rc.d/init.d/nfs start

当启动目标板时,在主机的串口终端下按下空格键,进入VIVI命令模式,输入nfs启动的参数:

Param set linux_cmd_line”console=ttys0

root=/dev/nfs nfsroot=192.168.1.2:/QT2410E/root

ip=192.168.1.18:192.168.1.2:192.168.1.2:255.255.255.0::eth0:off”

在此主机的IP192.168.1.2,如果主机或开发板的IP与此不同,可以用ifconfig重新设定或修改命令行的内容,回车后使用“param save”命令按回车保存。连接好交叉网线,然后使用boot命令,进入nfs启动方式。我们在minicom中可以看到成功mount上了主机的root文件系统。

目标板上的Linux启动后,我们通过运行root/bin/下的Writerootfs脚本文件,可以一次性完成我们前面准备的文件系统rootfs的下载。在minicom中回车输入:

[root@armzone /]#cd /

[root@armzone /]#Writerootfs

就会看到以YAFFS作为文件系统格式化分区的过程,完成后目标板上的文件系统就是更新后的文件系统了。按住PC的空格键,复位开发板,进入VIVI命令行输入状态重新设置系统从flash启动的参数:

vivi>param set linux_cmd_line”noinitrd root=/dev/mtdblock/2 init=linuxrc console=ttys0”

最后保存设置参数后启动开发板:

vivi>param save

vivi>boot

随即我们就看到开发板上的Linux运行起来了,由于我们采用了可读写的YAFFS文件系统,我们所何存的文件和设置在掉电后都不会丢失。

至此我们完成了QT2410开发板上Linux操作系统的全部移植过程。

5         结束语

本文详细论述了把Linux操作系统移植入S3C2410目标系统的关键技术及全过程,

你可以通过这个链接引用该篇文章:

阅读(4766) | 评论(3) | 转发(0) |
0

上一篇:linux常用到的库

下一篇:嵌入式硬件基础

给主人留下些什么吧!~~

chinaunix网友2009-03-30 12:47:44

请问WINDOWS下如何移植呢?

chinaunix网友2009-02-19 15:07:35

我在编译make后出现如下错误: make[2]:***[boot_kernel.o]Error1 make[2]:Leaving directory '/tmp/ARM9/vivi/lib' make[1]:***[first_rule]Error2 make[1]:Leaving directory '/tmp/ARM9/vivi/lib' make:***[_dir_lib]Error2 请帮忙解决一下,我的邮箱:minthen@sohu.com

wowocpp2008-12-04 21:01:24

大哥,把root_nfs那个压缩包发给我吧,我的邮箱是wowocpp@163.com谢谢了。