linux内核移植实验

2024-04-30

linux内核移植实验(精选9篇)

篇1:linux内核移植实验

爱好Linux内核的朋友:

您好!

我最近在阅读Linux的内核,一个人读有时候觉得很无助,

一起来学习Linux内核!Linux

所以我想找些有相同想法的朋友一起来读。我的想法是代价把自己阅读时碰到的问题写出来,然后我们一起分析。

谢谢!

原文转自:www.ltesting.net

篇2:linux内核移植实验

Linux内核具有内核稳定等特点,并且十分方便定制,这个内核具有完善健全的网络通信和进行文件管理的模式和机制,使其成为计算机领域的一种新型的软件。在一些职能手机中都有相当大量的运用。然而,在嵌入式发展的领域,各种硬件系统的结构都不尽相同,大多都是具有种类繁多的特点。本文中我们主要研究如何使linux快速的移植到新的硬件平台上,成为了当前必须要解决的一个问题。

1 linux 操作系统

操作系统是计算机系统中的一个系统软件,这个系统管理与控制计算机中的硬件设施和那软件设施。还对整台计算机的工作流程进行的组织与合理的把握,组织这些流程方便我们对计算机资源进行更有效的整合利用,从而方便信息的集中,为浙西额计算机用户们提供起来一个功能更加强大的。更加方便快捷高效的工作环境。Linux是逐渐在互联网被大众所熟知的,摒弃而这个内核系统也在一天天的不断完善,具有很多优势,高效稳定广泛适用于各种各样的信息平台。操作系统是存活在在计算机中的一个最为基本的系统,这个系统负责计算机中的所有测资源,包括硬件与软件组织,操作系统也是唯一一个能够直接的与计算机的硬件系统打交道的软件,同时还为计算机用户提供了良好的界面,因此操作系统是协调计算机的各组成分之间关系的重要的软件系统。在我们国家随着操作系统的出现和问世以来,我们对操作系统的使用,也促进了操作系统的发展,这些是自从计算机问世以来,就在这个领域内取得了一个重大的进展。操作系统具体指的就是一种系统软件,操作系统的功能有:管理系统资源、控制一定的程序的执行、提供各种类型的个性服务,从而为用户高效能有效充分的使用来提供一个最优化最合理的运行环境。

Linux内核采用的个体的内核结构,并且还与一些具体的与之有关的硬件平台保持的有密切的关系。如果我们要把linux内核往新的硬件平台上移植,就需要克服种种不易于解决的难关。我们只有仔仔细细的对linux内核移植的理论进行深刻的研究,充分的分析linux内部的体系和结构构造,还要尽量的保证系统内核中的硬件结构的体系的结构与之无关的部分要区分开来,我们才能从根本上保证好Linux内核的真正高效准确的移植。Linux从90年代才问世,发展到21世纪的今天,已经成为一项功能强大并且设计勾结都很完善的操作系统之一,在各种商业操作系统中站稳了脚跟。在一些新兴的嵌入式的领域之中也取得了长远的发展,又因为硬件产品的更新换代快,种类繁复多样。为了使linux能够快速适应这些新的硬件产品,广泛的拓展这个linux的使用的范围,我们就需要对Linux的内核代码进行必要的移植和调试。Linux在自己的pc上,自行设计了操作系统并且开发了真正属于他自己的一个程序。

2 linux 操作系统的内核移植

Linux内核移植的难点:这种linux内核具有效率高、结构单一等特点。但是这种内核的移植比微内核的移植要相对的差一些。Linux设计是以实用为最主要的目的,实用也是其设计理念。所以对linux系统来说,它的设计和开发最注重的是整个系统的效率,甚至在设计中不惜牺牲部分来促进整个移植系统的效率。Linux采用单体形成内核的结构,降低了内核的可移植性。微内核作为一种新型的操作系统,也是十分先进的,微内核的出现标志着我国计算机的长远发展,也是一种潮流和趋势。但是目前微内核的发展状况并不是很好,这个系统的通信效率不高。通信效率的降低直接影响到了整个操作系统的性能,导致性能的降低。但是linux没有使用微内核结构,而是采用了最为简单快捷的单内核来进行运行。采用的是单体内核的结构模式,这个单体内核的各个部分的关系都十分的紧密,虽然我们要进行的移植工作大部分都集中在计算机的硬件部分。但是由于这个操作系统的各个部分都是密切的相连的,即使是对其中的一个部分做了修改,就会立即牵连到奇他的部分,其他部分的性能立即会受到影响。这些都增加了移植工作的难度。又由于linux的设计是以实用并且高效率为最主要的目标,所以我们一定要根据这些硬件的特性来对系统内核进行一定的优化。但是在这个内核中的很多的硬件特性都是在固定的硬件中才会存在的。如果说把其他一些的硬件平台去,若是对这个内核部分进行大幅度的修改,就会普遍增加内核进行移植的难度。

Linux内核对尽情移植提供了有效的支持,虽然linux内核采用的并不是一种相对灵活便捷的单体内核机制,但这些并没有真正的影响到linux内核平台的无关性。我们是想一下,linux之所以能够成为目前来说,最广泛的支持硬件平台的一种操作系统。除了拥有一大批优秀高质量的开发团队以外,最主要的是在计算机领域拥有自己的先进的思想,在这些思想的引领下,从而提出来更多先进的结构。Linux用来提高内核可移植性的三种最主要的方法。

经过这么多年的发展,嵌入式的系统已经逐渐的渗透到人们的工作生活与学习中。嵌入式

系统现如今得到了广泛的应用。我们平常生活中用到的mp3等数码工具,这些产品中用到的都是嵌入式系统,这种系统在某种程度上改变了我们的生活方式。让我们的生活变得更加的智能与电子化。到目前为止,我国嵌入式正处在蓬勃发展中。在嵌入式开发系统的软件开发的环境设计中,主要涉及的内容有Linux移植,尽管嵌入式系统有很宽广的市场和大量的需求,但是嵌入式系统的发展仍然是一个无比痛苦和缓慢的过程。除了这些系统引导的程序以外,一个完全嵌入式的linux系统还需要一个包括linux内核以及必须要有的设备驱动程序、以及必不可缺少的文件系统,这些都是嵌入式linux系统移植的工作的主体部分。掌握了这些基本的内核结构之后,接下来就要在目标板上进行实际中的移植工作。相关的内核文件可以从网站上直接下载,进行移植工作我们首先要做的工作就是实现这些内核对不同的设备的设置。在进行移植的过程中我们要注意我们需要掌握linux内核的移植的技术,充分的利用linux开放源代码的各种优势,使linux真正的为我们的科研工作和商业服务。

我们需要介绍linux内核的主要工作由:系统介绍操作系统的一般理论,研究linux内核进行移植的基本原理。并且还要详细介绍linux内核移植的困难之处,并且还要对linux系统中增加系统的可移植性进行比较与分析,进一步介绍linux移植工作的主要内容和方法。Linux在国内的推广比在国外晚了好多年,近些年来有更多的软件爱好者来学习linux的应用与开发。与此同时,很多专业的高校都把这些作为实验课的内容,推广了linux技术的同时也为其发展奠定了基础。随着linux核心技术的不断成熟与发展,它的各种性能都在逐步趋向稳定,安装起来也具有方便快捷等特点,支持多种语言的发行版本。并且linux也得到了广大厂商的大力支持,这一切都使linux这个年轻有活力的系统充满了新的希望和活力。Linux可以说是完全是一个互联网时代的产物,因为它诞生于互联网,发展于互联网,并且在互联网中不断的壮大起来。

3 结语

篇3:linux内核移植实验

关 键 词:SkyEye 虚拟;仿真 Linux

1 引言

目前,以消费类电子产品和移动终端应用为代表的嵌入式系统应用开发正在快速发展,市场需求的不断变化与多种异构硬件体系结构的并存,给嵌入式系统开发与教学带了一系列挑战,面对嵌入式系统开发与教学过程中存在的研发成本过高、硬件环境不稳定等问题,引入一种快速、高效和低成本的开发环境,对于提高嵌入式系统的开发效率和开发质量具有重要意义。

2 SkyEye概述

SkyEye是一个由清华大学陈渝博士开发并建立的开源软件项目,中文名称为“天目”。SkyEye的目标是在常规的Linux和Windows平台上仿真多种主流的嵌入式开发板和外部设备,实现一个可扩展的硬件模拟框架。SkyEye属于一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件,其硬件模拟逻辑结构图下图1所示。目前SkyEye只提供Linux 和Windows两种平台下的安装程序。

3 基于SkyEye嵌入式开发环境的建立

SkyEye共包含两个软件包,一个为SkyEye的发布版本包,另外一个为SkyEye的测试套件包,其中测试套件包用来对相应版本的SkyEye软件包进行测试。

3.1 安装SkyEye

(1)从source网站上下载SkyEye的最新版本1.3.3的源代码,以root权限登录Linux后解压

# tar xvjf SkyEye-1.3.3_rel.tar.gz

(2)编译程序

# ./configure

#make lib

#make

这里需要说明的是,其中make lib用来编译第三方的库,make来编译SkyEye的源代码

(3)安装SkyEye到opt目录下

# make install_lib

# make install

3.2 SkyEye的目录与文件分析

安装成功后会在opt目录下生成以下目录

Bin:存放SkyEye的工具。其中mknandflashdump用来制作nandflash镜像文件,SkyEye为命令行应用程序,prof_convert用来把代码覆盖率的结果文件进行格式转换,uart_instance可以通过一个xterm终端来显示串口的输出。

Include: SkyEye开发插件时所用到的头文件,这些头文件定义了SkyEye提供的API函数的原型

Info:info格式的文档

Lib:存放SkyEye的核心库libcommon.,so和其他一些以动态库存在的插件

Testsuite:存放测试用例

4 在SkyEye中模拟基于S3C2440内核的移植

4.1 构建基于ARM S3C2440仿真环境,建立配置文件skyeye.config,内容如下

cpu: arm920t

mach: s3c2440x

# physical memory

mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000

mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00800000, file=./initrd.img

mem_bank: map=M, type=RW, addr=0xc1000000, size=0x01000000

# all peripherals I/O mapping area

mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000

mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020

net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1

lcd: type=s3c2440x, mod=gtk

#dbct:state=on

4.2 裁减编译Linux内核

# make xconfig

# make

4.3 将编译生成的内核镜像文件和配置文件复制到/opt/bin/下,执行SkyEye

#./skyeye-e vmlinux skyeye.config

5 结束语

目前,笔者移植的内核版本为2.6.30.4的Linux已经能稳定地运行在SkyEye虚拟平台上,为嵌入式软件设计和嵌入式系统教学节约了大量的硬件平台的搭建时间,并有效的结约了成本。当然由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上也不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。相信随着该开源项目的不断发展,SkyEye的易用性和通用性会得到提高,并成为嵌入式领域开发的有效工具。

参考文献

[1] 李明,陈渝.一个开放源码的嵌入式仿真环境——SkyEye.单片同与嵌入式系统应用.2003

[2] 宋靖,吴庆波.嵌入式系统仿真环境运行环境SkyEye应用研究.微处理机.2007

[3] 周兆丰,候向峰. 基于SkyEye的嵌入式系统仿真环境的构建. 单片同与嵌入式系统应用.2010

[4] skyeyev3_usermanual-v6.http://sourceforge.net/

[5] Li Ming.Analysis and Comparison of Two Simulation Environment of Embedded Software.IC&Components.2003

篇4:linux内核移植实验

随着计算机技术及集成电路技术的深入发展,嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。伴随着巨大的产业需求,我国嵌入式系统产业的人才需求量也一路高涨,嵌入式开发将成为未来几年最热门最受欢迎的职业之一。随着“物联网”、“三网融合”等不断提速,3G网络全面铺开,将带来更大的人才需求。在未来相当长的时间内,嵌入式软件人才都将是企业争夺的目标。在嵌入式开发学习过程中,实验条件往往是嵌入式专业发展的瓶颈问题。文献[4]中给出了一种利用软件技术来搭建一个虚拟的嵌入式开发环境的方法,在此基础上,本文通过对Linux内核进行移植和裁剪,使其可以在文献[4]中的嵌入式开发环境中运行,实现特定的功能和用途。

1 Linux内核移植与裁剪

众所周知,Linux是一个开放源代码的操作系统,它遵循GPL规则,我们可以自由地使用、修改和扩展它。正是由于这一特色,Linux受到越来越多人士的青睐。在使用Linux系统过程中,我们可以随时对Linux内核进行重新编译或者升级,使得该内核更适合自己的系统或者发挥更大的作用。那么在嵌入式开发中,我们也可以对Linux内核进行裁剪,并将裁剪后的内核移植到嵌入式系统中,进行嵌入式开发。

嵌入式中的移植,简单地说就是程序写好后,使用一种特殊的编译器编译源码并链接成可执行二进制文件,这个程序就能拿到相应的嵌入式微处理器上运行。当然,这时这个程序是不能在普通PC上运行的。这种特殊的编译器在普通PC机上运行,但编译的程序运行于其它CPU,我们一般称为交叉编译器。在嵌入式移植中,一般包含内核移植和系统移植两部分,这里主要介绍的就是内核移植。内核移植其实就是把可以在普通电脑上运行的Linux系统内核进行裁剪,使之可以运行在各种各样的嵌入式系统中。

在进行内核移植过程中,首先需要一个新版本的交叉编译工具链gcc。Linux内核一般会依赖许多gcc特有的特性,所以选择gcc尤为重要,gcc选择不对,可能会导致移植过程繁琐,错误频出。其次,编译链接库也是必需的,而且必须是目标平台的编译链接库。gcc和编译链接库都准备好的话,并且是和内核相匹配的版本,就可以进行内核移植。

2 虚拟开发环境中的内核移植与裁剪

在进行Linux内核移植过程中,我们采用的Linux内核版本是2.6.20.20,虚拟开发环境采用的是REDHAT ENTERPRISE LINUX 5.4+skyeye1.3.2,下面介绍具体操作步骤。

2.1 安装交叉编译工具链arm-linux-gcc-4.4.3

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。由于Linux内核2.6.20.20版本较高,我们要选择一个和该内核版本相匹配的交叉编译工具链,这样编译过程中出错比较少,这里我们选择arm-linux-gcc 4.4.3版本。假设arm-linux-gcc-4.4.3已经被下载到根目录下,安装过程如下:

2.2 Linux原始内核2.6.20.20裁剪和移植

Linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。通常情况下Linux内核仅仅支持普通的计算机体系结构,而且体积较大。为了让其支持嵌入式系统,那么就必须对内核进行移植和裁剪,减少其体积和不需要的代码。在进行移植之前,我们必须对原始的Linux内核进行简化和部分修改,过程如下:

首先下载到linux-2.6.20.20.tar.bz2文件,然后进行解压缩。

jxvflinux-2.6.20.20.tar.bz2

解压后会在目录里面生成一个linux-2.6.20目录,进入到该目录,进行内核裁剪和修改。

(1)gedit Makefile&

将ARCH=$(SUBARCH)改成ARCH=arm

将CROSS_COMPILE=改成CROSS_COM-PILE=arm-linux-

(2)make s3c2410_defconfig

(3)gedit scripts/mod/sumversion.c&

添加#include"limits.h"

(4)gedit include/asm-arm/arch-s3c2410/memory.

h&

将#define PHYS_OFFSET UL(0×30000000)改成#define PHYS_OFFSET UL(0x C0000000)

(5)gedit include/asm-arm/arch-s3c2410/map.h&

将#define S3C2410_CS6(0×30000000)改成#define S3C2410_CS6(0x C0000000)

(6)gedit arch/arm/mach-s3c2410/time.c&

将函数s3c2410_timer_setup中的if(tcnt>0xffff){改成if(tcnt>0xffffffff)

2.3 linux内核2.6.20.20编译

编译前的配置:

make menuconfig

将Boot options->Default kernel command string改成mem=32M console=tty SAC0 root=/dev/ram initrd=0x C0800000,0x00800000 ramdisk_size=2048 rw

配置完成后,就可以进行编译了,编译命令:

#make

整个编译过程比较长,编译成功后会在linux-26.20目录里面生成一个vmlinux文件,这就是编译后的arm linux内核镜像。

2.4 在Sky Eye中运行linux内核2.6.20.20

在linux-2.6.20目录中建立一个skyeye.conf配置文件,并修改部分配置文件代码,修改方法在文献[4]中已经有介绍,这里不在罗列,可以参照skyeye帮助文件。

然后启动skyeye运行linux内核:

#skyeye-e vmlinux-n

运行后,会出现ARM LINUX的标志,则表示该内核已经成功运行了。

当出现/>提示符后,就可以在该提示符后输入常用的Linux命令和运行简单的嵌入式程序。

3 结束语

本文主要以虚拟嵌入式开发环境为载体,对Linux内核2.6.20.20进行了移植和裁剪,使得在嵌入式系统中成功运行了linux内核,使得虚拟开发环境的功能和实用性得到更大的提高。在后续的研究中,我们还将在此基础上进行LCD、触摸屏、网络功能、远程调试等方面进行扩展和移植。

参考文献

[1]陈渝,杨晔,李明,等.嵌入式系统仿真环境—SkyEye[J].电子设计应用,2004,(2).

[2]陈渝,李明,杨晔.源码开放的嵌入式系统软件分析与实践-基于SkyEye和ARM开发平台[M].北京:北京航空航天大学出版社,2004.

[3]尹文超,陈渝,等.SkyEye模拟器的LCD及TouchScreen模拟模块的设计、实现与验证[J].计算机科学,2005,32(6):189-192.

[4]李小航.基于虚拟技术的嵌入式软件开发环境的构建与实践[J].电脑知识与技术,2010,(32).

[5]SkyEye网站[EB/OL].http://www.skyeye.net/.

篇5:Linux内核将出新版本

Linux内核2.6版很快将会正式发布,按照相关负责人的说法,它将比以前的版本更加稳定。直接管理2.6版内核的Andrew Morton表示,Linux内核现在最新的版本是2.6.0-test10,“如果不出严重的意外”,它将会是2.6.0内核正式推出之前的最后一个测试版本。

Linux内核2.6版和2.4版相比有了很大的不同,2.6版的一个重要改进是可以充分发挥多处理器的性能,而这个市场中Unix一直占主导地位,微软也在不断扩展自己的份额。Morton说:“2.4版对于4个或者8个CPU来说会显得有些力不从心,而2.6版将会给我们带来惊喜,因为它可以支持多达32个CPU。”同时,Morton还认为2.6.0内核的测试性能将会远远好于2.4.0,“我认为2.6.0-test10在成熟程度上和2.4.17相类似,我们在2.4的基础上又进了一大步。”但是,并非所有人都赞成这种观点,SuSE的首席技术官Juergen Geck在2003年10月份表示,他认为2.6版在架构上做出的重大调整可能会导致很多问题的出现。

2.6版内核包括了多项改进:

在安装多个处理器的大型系统上,2.6版内核可以更好地工作,特别是对于那些使用了非一致内存访问(NUMA)设计的系统,这种系统在处理器读写内存数据时的时间延误可能参差不齐。

2.6版内核可以更好地支持“嵌入式”设备,比如蜂窝电话、网络路由器或者录像设备。

2.6版内核对用户的操作(比如移动鼠标或者敲击键盘)将会有更快的反应。

2.6版内核中“块设备”驱动程序进行了较大的修整,这些软件模块用来和硬盘、光驱这样的设备进行数据交换。

避免版本林立

一个新内核从出现到成为正式产品通常有一个时间间隔,最大的Linux销售商Red Hat直到2.4.2推出的时候才推出使用新内核的产品。Morton承认,保持产品版本和开发版本同步是“一件我们在2.4版内核上处理得不太好的问题”。Red Hat在其Fedora Core中测试了2.6版,Fedora Core 2的主要目的就是在将2.6版内核引入企业级Linux发行版之前对其进行测试,其企业级Linux发行版通常升级比较慢,可能2005年之前都不会使用2.6版。

Red Hat和SuSE从2.6版内核中借用了很多功能加入到2.4版内核中。另外,商业版本的Linux内核打了一些补丁,从而导致其和Torvalds在Kernel.org上发布的标准版本有所不同。由于2.6版内核借用了很多Linux发行商对内核的修改,因此这个版本的发布将意味着来自Kernel.org的Linux内核标准版和发行商的版本之间的区别将会减小。显而易见,Linux开发者正在试图避免Linux陷入版本林立、互不兼容的局面,就如同Unix目前所遭遇的那样。

Morton认为,如果真的出现Linux内核版本林立的局面,则只会加重维护众多补丁需要进行的开发和测试工作。如果SuSE内核和Red Hat内核互不兼容,他们就失败了。

OSDL(Open Source Development Labs)的首席执行官Stuart Cohen表示,“包括Oracle、PeopleSoft、DB2在内的众多用户都希望有一个统一的操作系统,他们不希望Linux出现分裂。在业界,保持系统稳定单一的压力很大”。

Morton补充说,减少分歧也是2.6版以及即将到来的2.7版内核在开发时所考虑的问题之一。有时候这样做意味着要在2.6版开发中使用2.7版的内容,但这同时也意味着,我们必须保证2.7版内核能够继承2.6版的改进,以免一个问题我们要解决两次。

虽然开源软件的开发过程和Unix以及Windows完全不同,但是有一点是相同的:延误是难免的。Linus Torvalds在2002年时本指望2.6版可以于2003年6月份问世。2.4版内核(这个版本于2001年1月发布)的开发时间上也曾发生类似的延误。

篇6:linux内核移植实验

嵌入式系统就是以应用为中心,以计算机技术为基础的软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。Linux操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小,可裁减,运行速度高等优点,因此可以作为研究嵌入式操作系统和非实时操作系统的典范。EL-ARM-830+型教学实验系统是一种综合的教学实验系统,该系统采用了ARM920T核,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 firewall关闭防火墙(如果安装了防火墙),按空格键就会选中,然后退出。但是,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

终端内输出:

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

#rpm-Uvh*.rpm

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

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

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

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

利用命令chmod 777/home/nfs改变/home/nfs文件夹的属性,让其变为可读可写,输入mount–o nolock 192.168.0.1:/home/nfs/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就通过网口下载内核和文件系统。同时,它也具有功能较为完善的命令集,对系统的软硬件资源进行合理的配置与管理。

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

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

3 Linux内核的移植

3.1 内核移植

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

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

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

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

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

这里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镜像文件。该文件中用到的SYSTEM,ZTEXTAD-DR,ZBSSADDR和ZRELADDR是从arch/arm/boot/Makefile文件中得到的。添加如下代码:

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

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

(8)arch/arm/kernel目录下Makefile修改。该文件主要用来确定文件类型的依赖关系。

(9)arch/arm/kernel目录下的文件debug-armv.s修改。在该文件中添加如下代码,目的是关闭外围设备的时钟,以保证系统正常运行。

(10)arch/arm/kernel目录下的文件entryarmv.s修改,CPU初始化时处理中断的汇编代码。

(11)arch/arm/mm目录下的相关文件。那里面则是移植好的有关arm的内存管理代码。

(12)arch/arm/mach-s3c2410目录下的相关文件。那里面则是针对s3c2410这款处理器编写的所需代码。

3.2 制作cramfs文件系统

利用工具软件MKCRAMFS制作cramfs文件系统,MKCRAMFS工具在/实验软件/tools/目录下,该文件系统是一个只读压缩的文件系统,文件系统类型可以是ext2,ext3等。这里提供的一个系统目录是root_tech,它里面包含将来要用到的所有文件,它在/实验软件/source_code/的目录内,为root.tar.bz2。把制作工具和root_tech放在同一个文件夹下并对root.tar.bz2进行解压,在终端下切换到那个文件夹目录下使用命令MKCRAMFS root_tech rootfs.cramfs,就可把root_tech制作成文件名为rootfs.cramfs的只读的压缩的cramfs文件系统了。系统启动后,内核将把它加载到内存中,解压。

4 结语

本文针对一个特定的目标平台,提供了构建一个基本嵌入式Linux系统的过程与方法。对Linux 2.4内核版本进行裁减、移植,编译生成的内核在S3C2410处理器的目标板上成功运行,且保留了L inux原有的工作稳定的特点。将Linux操作系统移植于嵌入式系统中作为嵌入式系统的底层研发平台是一个复杂的问题,移植后系统的实时性、稳定性、安全性和精简程度等方面问题还需要在以后的设计中进一步研究。

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

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

参考文献

[1]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.

[2]唐朝云,孙丹,盛焕烨.基于Linux的嵌入式数字监控系统的设计与实现[J].计算机工程,2003,29(10):152-154.

[3]Samsung Electronic.S3C2410A32-bit RISC microprocessoruser's mannual[S].Revision 1.0.Republic of Korea:Sam-sung Electronic,2004.

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

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

[6]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2009.

[7]李侃,廖启征.基于S3C2410平台与嵌入式Linux的图像采集应用[J].微计算机信息,2006(2):125-127.

[8]陈长华,冀小平,王哲,等.基于嵌入式Linux系统的MiniGUI的移植与应用[J].科技情报开发与经济,2009(3):9-12.

[9]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.

篇7:linux内核移植实验

Linux的创始人Linus Torvalds表示,这个漏洞只能被某些已经拥有Linux服务器上用户账号的人利用,并不会影响所有Linux系统的用户,“这只是一个本地漏洞。由于利用这个漏洞可以提升用户的权限,因此对大多数人而言,只有当自己的某些账号被破解后,事情才会变得严重起来”。这个漏洞并非只对Debian用户起作用,Torvalds承认,所有内核版本低于2.4.23的Linux用户都应当同发行商联系以确认是否打上了补丁。

一位Linux的发行商Dave Wreski则称,这个漏洞在2003年9月时已经被Linux内核的开发者Andrew Morton发现并在2.4.23版内核中打好了补丁,而当时Linux发行商们正在试图发布一个同步的补丁版本。他认为,“整件事情只能说明,Debian漏掉了这个已经出现了一两个月的补丁程序,是自食其果。”

篇8:linux内核移植实验

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,适应于对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式设备在生活中随处可见,例如电子表、手机、MP3播放器、遥控器等,涵盖了生产、工业控制、通信、网络、消费电子、汽车电子、军工等领域。ARM是嵌入式处理多种构架中的一种,是32位嵌入式RISC微处理器技术的领导者。基于ARM的处理器以其高速度、低功耗、价格低等优点得到了非常广泛的应用。

随着技术的发展及人们需求的增加,各种消费类电子产品的功能越来越强大,随身携带的电子设备变得“等同于PC”。在工业控制领域,系统芯片(SoC)以其更低廉的价格提供更丰富的功能,使得一个嵌入式系统可以同时完成更多的控制功能。当系统越来越大、应用越来越多,能够统一管理系统资源、为用户提供访问硬件的接口、调度多个应用程序、管理文件系统等的操作系统变得尤为重要,而嵌入式Linux以其开放源代码、易于移植、资源丰富、免费等优点脱颖而出。

1 嵌人式Linux开发平台

1.1 硬件平台

本文使用的是mini2440,它采用Samsung S3C2440为微处理器,主频400MHz,最高533Mhz,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时的稳定性。SDRAM内存采用32bit数据总线,时钟频率高达100MHz。mini2440的PCB采用沉金工艺的四层板设计,专业等长布线,保证关键信号线的信号完整性。

mini2440开发板由CPU处理器、SDRAM内存、FLASH存储器(包含一片64M的Nand Flash和一片2M的Nor Flash)、LCD显示器组成。

1.2 软件开发平台

本文介绍的开发平台mini2440选用资源丰富、性能优越的发行版本Redhat 9.0作为开发平台操作系统,并在其上建立arm-linux交叉编译环境。本文是在已经移植了U-Boot1.1.6的基础上,移植Linux,其内核版本是2.6.22.6。

2 Linux内核分析

2.1 内核源码结构

从网络上下载Linux-2.6.22.6.tar.bz2解压得到内核源码。Linux内核文件数目将近2万,除去其他架构CPU的相关文件,支持S3C2440这款芯片的完整内核文件有1万多个。这些文件分别位于顶层目录下的17个子目录,各个目录功能独立。

对于ARM架构的S3C2440,其体系相关的代码在arch/arm/目录下,在Linux移植时,首要的工作就是修改这个目录下的文件。如图一所示为内核代码目录名称及其层次结构(不包含最后两个目录Documentation及scripts,它们不包含内核代码)。

2.2 内核的Makefile分析

Makefile的具体作用是:

(1)配置文件.confing中定义了一系列的变量,Makefile将结合它们来决定哪些文件被编进内核、哪些文件被编成模块、涉及哪些子目录。

(2)顶层Makefile和arch/$(ARCH)/Makefile决定将根目录下哪些子目录、arch/$(ARCH)目录下哪些文件和目录编译进内核。

(3)最后,各级子目录下的Makefile决定所在目录下哪些文件被编进内核,哪些文件被编成模块,进入哪些子目录继续调用它们的Makefile。

(4)顶层Makefile和arch/$(ARCH)/Makefile设置了可以影响所有文件的编译、连接选项:DFLAGS、AFLAGS、LD-FLAGS、ARFLAGS。

(5)各级子目录下的Makefile中可以设置能够影响当前目录下所有文件的编译、连接选项,如EXTRA_CFLAGS等,还可以设置能影响某个文件的编译选项如CFLAGS$@等。

(6)顶层Makefile按照一定的顺序组织文件,根据连接脚本arch/$(ARCH)/kernel/vmlinux.lds生成内核映像文件vmlinux。

通过Makefile的管理,决定编译内核中的哪些文件、怎样编译这些文件、怎样连接这些文件以及它们连接时的顺序如何。

2.3 内核的Kconfig分析

在内核目录下执行“make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-”时,就会看到如图二所示的菜单,这就是内核的配置界面。通过配置界面,可以选择芯片类型、选择需要支持的文件系统,去除不需要的选项等,这就成为“配置内核”。

所有配置工具都是通过读取arch/$(ARCH)/Kconfig文件来生成配置界面的,这个文件是所有配置文件的总入口。

Kconfig文件包含config条目(entry)、meun条目、choice条目、comment条目、source条目。其中config是基本条目,常被其他条目包含,用来生成菜单、进行多项选择等。.config文件中可能出现下面3种配置结果中一个。

CONFIG_LEDS_S3C2440=y#对应的文件被编进内核

CONFIG_LEDS_S3C2440=m#对应的文件被编成模块

#CONFIG_LEDS_S3C2440#对应的文件没被使用

meun条目用于生成菜单,格式如下:

Choice条目将多个类似的配置选项组合在一起,供用户单选或多选,格式如下:

comment条目用于定义一些帮助信息,它在配置过程中出现在界面的第一行,其格式如下:

source条目用于读入另一个文件Kconfig,格式如下:

3 Linux内核移植

3.1 修改内核以支持S3C2440

首先配置、编译内核以确保内核可以正确编译。先修改Makefile顶层,修改步骤如下:

改为:

然后执行如下命令,使用arch/arm/configs/S3C2440_defconfig文件来配置内核,生成.config配置文件,就可以直接使用“make menuconfig”修改配置了。

由于Linux2.6.22.6目前还不支持S3C2440开发板,需在arch/arn/mach-s3c2440/mach-smdk2440.c中做如下修改:

s3c24xx_init_clocks(16934400);

改为:

s3c24xx_init_clocks(12000000);

然后执行“make u Image”生成u Image。把u Image放到tftp服务器目录下或放到Linux中/work/nfs_root目录下,然后在U-Boot控制界面中使用如下命令下载u Image并启动。

可以看到内核启动信息,最后出现panic信息。

3.2 修改MTD分区

MTD(Memory Technology Device),是Linux中对ROM、NOR Flash、NAND Flash等存储设备抽象出来的一个设备层,它向上提供统一的访问接口,读、写、擦除等,屏蔽底层硬件的操作、各类存储设备的差别。通过MTD设备作用,重新划分NAND Flash的分区。

将NAND Flash分为3个分区,前2MB用于存放内核,接下来的8MB用于存放JFFS2文件系统,剩下的用来存放YAFFS文件系统。

smdk_default_nand_part结构如下修改:

执行“make u Image”重新生成内核,在U-Boot控制界面中使用如下命令下载并启动u Image。

3.3 移植YAFFS文件系统

取得源代码文件,解压后得到Development目录,目录下有两个子目录:yaffs和yaffs2。使用yaffs2目录下的代码,它向前兼容YAFFS1。

移植yaffs分为两个步骤:

(1)将yaffs2代码加入内核。

下载解压后得到yaffs2源码目录为/work/Development/yaffs2,内核源码目录为/work/linux-2.6.22.6,执行以下命令打补丁:

(2)配置、编译内核

Linux 2.6.22.6内核使用的是新的oob layout,因此在内核配置界面选中“YAFFS2 file system support”即可,其他配置项使用默认值。

最后执行“make u Iage”编译内核。

3.4 编译、烧写、起动内核

3.4.1 编译内核

直接使用内核根目录下的配置文件config_ok,执行以下命令编译内核。

3.4.2 烧写内核

将上一步生成的u Image放入tftp服务器,然后在U-Boot中执行以下命令、下载烧写。

3.4.3 启动内核

使用以下命令启动NAND Flash上的内核。

4 结束语

作为开放源代码的操作系统,Linux操作系统以其广泛的使用,发展越来越好。目前,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额。将一个Linux操作系统移植到具体的处理器硬件板s3c2440上相对复杂,涉及到更多的问题需要进一步的考虑。

摘要:本文介绍了三星公司的基于ARM9内核的S3C2440芯片嵌入式Linux系统移植过程,构建出最基本的ARM9的Linux开发环境。在已经移植U-Boot的基础上,裁剪并移植Linux内核。

关键词:Linux2.6.22.6,ARM,S3C2440

参考文献

[1]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

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

篇9:linux内核移植实验

据国外媒体报道,托沃兹在Linux内核邮件列表发帖表示,由于部分小补丁的原因,新版本内核发布稍稍推迟,但“并不是什么大的原因”。Linux2.6.23包括许多技术改进的成份,比如对Sun微系统公司的64位Sparc芯片及Analog Devices内嵌的Blackfin处理器提供支持,这些改进也是开发者一直期盼的内容。托沃兹表示:“除了上述大的改进之外,新版内核还有大量微小的调整,包括驱动及网络支持等。”

托沃兹的评论仅限于技术层面,对于最近由开源软件Linux引发的一系列政治及法律纠纷,他没有发表任何意见。

此前,微软首席执行官鲍尔默在英国表示,他要求Linux用户向微软提供补偿,而上述用户指那些从没有和微软达成专利合作协议的Linux软件发行商获得软件的用户。微软声称,Linux及其它一系列开源软件侵犯了微软的知识产权。

上一篇:新改瓦斯防治岗位职责下一篇:从任建宇案透视我国劳动教养制度