分类:
2007-03-04 08:41:28
Linux在S
Linux porting for S
摘 要:本文论述了在基于S
关键词:S
0 引言
近年来随着嵌入式设备与Internet的广泛结合,手机、PDA、路由器、调制解调器等复杂的高端应用对嵌入式处理器的性能提出了更高的要求。ARM嵌入式芯片就是一种高性能低功耗的RISC芯片,而Samsung公司的S
Linux是目前最为流行的一款开放源代码的操作系统,自1991年问世到现在,不仅在PC平台,由于其内核精简、高性能、源码开放、内核可裁剪以及适用于不同的CPU体系结构的众多优点,还在嵌入式应用中大放光彩,逐渐形成了与其它商业EOS抗衡的局面。目前正在开发的嵌入式系统中,70%以上的项目选择Linux作为嵌入式操作系统。
1 系统硬件平台简介
本文采用的QT2410E是上海勤研电子设计生产的一款开发板,它基于Samsung公司的ARM920T内核的微处理器S
该目标板的系统资源如下:
(1) CPU:S
(2) NOR FLASH:256KB
(3) NAND FLASH:64MB
(4) SDRAM:64MB
(5) UART:RS232串行接口
(6) USB:USB Host和USB 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-来指定使用该交叉编译器。
3 Boot loader、内核和root文件系统的准备
要想在目标板上运行linux操作系统,一定要有系统引导程序Boot loader、Linux内核以及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我们采用VIVI,VIVI是韩国Mizi公司的开发的一种Boot loader,适用于ARM9处理器,支持S
首先以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 移植linux进S
与为PC机安装操作系统相比,为QT2410E开发板安装linux是一个不同的过程,总体步骤可分为:安装vivi Boot loader、安装linux内核和安装根文件系统。下面分别详细介绍:
4.1 用JTAG安装vivi Boot loader
装载程序vivi就像电脑里的BIOS一样,起到一个引导作用,安装系统时我们还可以用它来烧写NANDflash,因此需要先将vivi烧到NANDflash启动区域。首先在Windows操作系统下安装并口JTAG驱动后,我们将使用一个JTAG烧写工具sjf2410.exe(可由三星网站上下载)来烧写,运行后如下图:
Flash型号、烧写操作以及烧写块地址全部选“
4.2通过串口下载Linux内核
在VIVI移植完成后我们就可以进行内核移植了,首先以root身份进入PC端Linux操作系统,启动配置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”
在此主机的IP为192.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=ttys
最后保存设置参数后启动开发板:
vivi>param save
vivi>boot
随即我们就看到开发板上的Linux运行起来了,由于我们采用了可读写的YAFFS文件系统,我们所何存的文件和设置在掉电后都不会丢失。
至此我们完成了QT2410开发板上Linux操作系统的全部移植过程。
5 结束语
本文详细论述了把Linux操作系统移植入S
你可以通过这个链接引用该篇文章:
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