您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术将Linux内核移植到嵌入式系统的技术的研究 正文
将Linux内核移植到嵌入式系统的技术的研究

将Linux内核移植到嵌入式系统的技术的研究

点击数:7116 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   嵌入式系统-技术

     内容摘要:以研究将Linux内核移植到嵌入式系统的技术为目的,描述了Linux-2.4.18.-rm7-pxal移植到S3C2410处理器目标板上的方法。详细介绍了Linux内核移植方法与步骤,并说明了如何搭建移植环境。结果表明,该方法简单实用,达到了预定目标。

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

    嵌入式系统就是以应用为中心,以计算机技术为基础的软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。Linux操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小,可裁减,运行速度高等优点,因此可以作为研究嵌入式操作系统和非实时操作系统的典范。EL-ARM-830+型教学实验系统是一种综合的教学实验系统,该系统采用了ARM92 0T核,32位微处理器,实现了多模块的应用实验。在实验板上有丰富的外围扩展资源,可以完成ARM的基础实验、算法实验和数据通信实验、以太网实验。

    1 Linux的实验环境搭建

    1.1 Redhat9.0操作系统的安装

    安装Redhat9.0前,先把串口配置好,这是建立Linux系统和试验箱之间的串口通信。配置完以后在启动Linux系统时点击全屏,这样做的目的是让Linux系统占取网络资源。点击VM→setting在弹出的窗口点击左下角的Add按钮,此时选择serial Port,依次点击“下一步”,直到配置完串口。

    1.2 配置NFS网络文件系统

    首先在Linux主机的终端上执行setup,弹出菜单界面后,选中Firewall configuration,回车,进入系统服务选项菜单,选择no firew all关闭防火墙(如果安装了防火墙),按空格键就会选中,然后退出。但是,setup里面会照样显示防火墙设置是high的,这个可以不必理会。之后选中System servICes,回车,进入系统服务选项菜单,在其中选中[*]nfs,然后按F12键退出,再选择方向键,退出setup界面,返回到命令提示符下。利用编辑器打开/etc/exports文件(输入命令vi/etc/exports),按A进入文本输入模式,将这个默认的空文件修改为只有如下一行内容:

    /(rw)

    /home/nfs

    然后,保存退出(按ESC键进入命令模式,输入:进入到最后行模式,输入wq!保存退出),之后改变目录到/etc/rc.d/init.d/下(输入命令cd/etc/rc.d/init.d/),执行如下命令:

    ./nfs start

    终端内输出:

    Starting NFS services:[确定]

    Starting NFS quotas:[确定]

    Starting NFS daemon:[确定]

    Starting NFS mountd:[确定]

    (1)安装交叉编译器。打开Linux系统下的终端,在里面输入命令cd/linuette/RPMS/改变目录到/linuette/RPMS下,输入如下命令:

    #rpm-UVh*.rpm

    等待系统安装,如果所有的RPMS内的文件全部正确安装,将会在根目录下的/opt文件夹内生成一个host文件夹,交叉编译库就在该目录下,到此交叉编译环境就搭建好了。

    (2)用交叉网线连接主机和实验系统。在Linux的开始菜单里启动终端,在终端[root@LOCalhost root]#minicom-s回车,按S键选择Seri al Port setup回车,弹出串行口设置界面,按A键编辑Serial Device:/dev/ttys0回车;按E键,再按I键,回车,选择为Bps/Par/Bit s:115200 8N1回车;按F键,选择Hardware Flow Control:No。设置完后回车,然后用上下选择键,选中Modem and dialing,将Initstri ng,Reset string,Hang-up string设置为空,再选中Save setup as df1这一项,回车,保存为默认的配置,下次进入minicom时就不用再设置了。用上下选择键选中Exit回车退出设置,进入minicom。

    (3)Linux系统下网络设置。点击左下角的小红帽,选择系统设置一网络,然后双击设备eth0的蓝色区域,进入以太网设置界面,在静态设置IP地址栏下面输入与宿主机一个网段的IP地址、网关及子网掩码,确定后激活网络设备。

    (4)PINg通主机和实验系统。在minicom下,给系统上电,系统正常起来后,利用ifconfig eth0 xxx.xxx.xxx.xxx来改变实验系统的IP地址,让该地址的前三段和主机的前三段一致,最后的一段,可以选择与主机不重复的小于255的任意值。利用mount命令,挂载主机的nfs系统下的共享目录。

    利用命令chmod 777/home/nfs改变/home/nfs文件夹的属性,让其变为可读可写,输入mount-onolock 192.168.0.1:/home/n fs/mnt/yaffs回车,即可完成把主机上的/home/nfs下的文件挂载到实验系统的/mnt/yaffs目录下。

    2 BootLoder引导程序的移植

    在嵌入式系统中,BootLoader的作用与PC机上的BIOS类似,通过.BootlLoader可以完成对系统板上的主要部件如CPU,SDRAM,FLASH、串行口等进行初始化,也可以下载文件到系统板上,对FLASH进行擦除与编程。当运行操作系统时,它会在操作系统内核运行之前运行,通过它,可以分配内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统准备好正确的环境。因此,正确建立Linux移植的前提条件是具备一个与Linux配套、易于使用的Boot Loader,它能够正确完成硬件系统的初始化和Linux的引导。

    系统使用的BootLoader是VIVI。VIVI是CPU加电后运行的第一段程序,其基本功能是初始化硬件设备,建立内存空问的映射图,从而为调用嵌入式Linux内核做好准备。为能够实现正确引导Linux系统的运行,以及当编译完内核后,快速下载内核和文件系统,VIVI首先通过串口下载内核和文件系统,当系统正常运行起来后,网络驱动正常运行后,VIVI就通过网口下载内核和文件系统。同时,它也具有功能较为完善的命令集,对系统的软硬件资源进行合理的配置与管理。



www.55dianzi.com

    当上电或复位后,VIVI启动,位于NANDFLASH中的前4 KB程序便从NANDFLASH中由S3C2410自动拷贝到一个叫StepPINgStone的4 KB的内部RAM中,该RAM之后被映射到地址0x00处。此时,也就是VIVI前4 KB代码开始运行,进行第一阶段的硬件初始化,主要工作为:关Watchdog Timer,关中断,初始化PLL和时钟主频设定,初始化存储器控制器。VIVI初始化的主要内容:

    VIVI初始化阶段一(在/arch/s3C2410/head.s文件内):

    硬件初始化

    配置串口

    复制自身到SDRAM中(跳转到C代码入口函数)

    VIVI初始化阶段二(在/init/main.c文件内):

    对硬件系统继续初始化

    内存映射初始化、内存管理单元MMU初始化

    初始化堆

    初始化mtd设备

    初始化私有数据

    初始化内置命令

    启动VIVI

    3 Linux内核的移植

    3.1 内核移植

    实验系统运行的Linux版本是针对2.4.18进行移植的Linux-2.4.18.-rm7-pxal版本。本实验是把该移植好的内核,让它如何在自己的硬件系统上正常的运转起来。

    Linux内核主要由5个子系统组成:进程调度子系统、进程间通信子系统、内存管理子系统、虚拟文件系统子系统、网络接口子系统。

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

    ARCH:=arm

    CROSS_COMPILE=/opt/host/armv41/bin/armv41-unknown-Linux-

    也就是说,所移植的硬件平台是ARM,所使用的交叉编译器是存放在目录/opt/host/armv41/bin/下的armv41-unknown-Linux-xxx等工具。

    (2)arch/arm目录下Makefile修改。系统的启动代码是通过这个文件产生的。在Linux-2.4.18内核中要添加如下代码:

    ifeq(MYM(CONFIG_ARCH_S3C2410),y)

    TEXTADDR =0 xC0008000

    MACHINE =s3c2410

    endif

    这里TEXTADDR确定内核开始运行的虚拟地址。

    (3)arch/arm目录下config.in修改。配置文件config.in能够配置运行“make menuconfig”命令时的菜单选项,由于2.4.18内核中没有S3C2410的相关信息,所以要在该文件中进行有效的配置。

    (4)arch/arm/boot目录下Makefile修改。编译出来的内核存放在该目录下,这里指定内核解压到实际硬件系统上的物理地址。要根据实际的硬件系统修改解压后,内核开始运行实际的物理地址。

    (5)arch/arm/boot/compressed目录下Makefile修改。该文件从vmLinux中创建一个压缩的vmlinuz镜像文件。该文件中用到的SYSTE M,ZTEXTADDR,ZBSSADDR和ZRELADDR是从arch/arm/boot/Makefile文件中得到的。添加如下代码:

    ifeq(MYM(CONFIG_ARCH_S3C2410),y)

    OBJS+=head-s3c2410.o

    Endif

    (6)arch/arm/boot/compressed目录下添加head-s3c2410.s。该文件主要用来初始化处理器。

    (7)arch/arm/def-configs目录下添加配置好的S3C2410的配置文件。

[1] [2]  下一页


本文关键字:技术  嵌入式  Linux  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术

《将Linux内核移植到嵌入式系统的技术的研究》相关文章>>>