内核与根文件系统实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

七内核与根文件系统实验

1、 实验目的

1、 了解UP-TECH S2410/P270 DVP 的根文件系统结构

2、 了解根文件系统的生成过程

3、 完成一个简单的文件系统生成步骤

4、 了解busybox、mkcramfs 工具

2、Linux 内核背景知识

自1991 年11 月由芬兰的Linus Ttorvalds 推出Linux 0.1.0 版内核至今,Linux 内核已

经升级到Linux2.6.7(写本文档时, 发布的最新版Linux 内核)。其发展

速度是如此的迅猛,是目前市场上唯一可以挑战Windows 的操作系统。在其发展过程中得

到分布于全世界的广大OpenSource 项目追随者的大力支持。尤其是一些曾经参与Unix 开

发的人员,他们把应用于Unix 上的许多应用程序移植到Linux 上来,使得Linux 的功能得

到巨大的扩展。目前比较稳定的版本是Linux2.4.8。在Linux 的版本号中,第一个数为主

版本号。第二个为次版本号。第三个为修订号。次版本号为偶数表明是稳定发行版本,奇

数则是在开发中的版本。随着其功能不断加强,灵活多样的实现加上其可定制的特性以及

开放源码的优势, Linux 在各个领域的应用正变得越来越广泛。目前Linux 的应用正有舍

去中间奔两头的趋势,即在PC 机上Linux 要真正取代Windows,或许还有很长的路要走,

但在服务器市场上它已经牢牢站稳脚跟。而随着嵌入式领域的兴起更是为Linux 的长足发

展提供了无限广阔的空间。目前专门针对嵌入式设备的Linux 改版就有好几种。包括针对

无MMU 的uClinx 和针对有MMU 的标准LINUX 在各个硬件体系结构的移植版本。

uClinux 是一种Linux 的变型版本,其主要针对ARM7TDMI,DragonBall 系列的68EZ328,

68VZ328,ColdFire 系列的5272,5307 等大量不带MMU(内存管理单

元)功能模块的芯片。

这种芯片面向低端市场,价格便宜功能灵活。但是传统的Linux 内核采用虚拟内存管理技

术,这种设计运行在没有MMU 的芯片上时,这部分关于内存管理的代码就变成冗余代码甚

至对系统整体性能产生负面影响。uClinux 正是为了解决这一问题而开发的。其名称中“u”

(发音miu)就是micro,小的意思。而“C”则是Control,控制的意思。即uClinux 是为

微控制领域量身定做的Linux 版本。uClinux 的设计就是通过对标准Linux 内核裁减,去

除虚拟内存管理部分的代码,并对内存分配进行优化,从而达到提高系统运行效率的目的。

它虽然体积小但依然保存了Linux 内核的大多数优点。其主要特点有:1)支持通用Linux API

2)内核体积可以小于512K

3)具有完整的TCP/IP 协议栈

4)支持其它大量的网络协议

5)支持各种文件系统(NFS,ext2,romfs,jffs,FAT16/32 以及MS-DOS)

但是uClinux 的应用程序开发要求用户自己正确的处理内存管理,一旦不慎错误地修改了

其他进程的内存,将可能造成系统死机。基于像ARM2410 这样的ARM9内核的ARM-LINUX

使用了MMU 的内存管理,对进程有保护,提高了嵌入式系统中多进程的保护能力。使用户

应用程序的可靠性得以提高,降低了用户的开发难度。

linux 内核的基本结构如图4.1.1 所示:

三、实验内容

使用busybox 生成文件系统中的命令部分,使用mkcramfs 工具制作文件系统,并完成

将文件系统放置到开发板的烧写工作。

四、Linux 移植准备

所谓Linux 移植就是把Linux 操作系统针对具体的目标平台做必要改写之后,安装到该目

标平台使其正确的运行起来。这个概念目前在嵌入式开发领域讲的比较多。其基本内容是:

获取某一版本的Linux 内核源码,根据我们的具体目标平台对这源码进行必要的改写(主

要是修改体系结构相关部分),然后添加一些外设的驱动,打造一款适合于我们目标平台(可

以是嵌入式便携设备也可以是其它体系结构的PC 机)的新操作系统,对该系统进行针对我

们目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该映象文件烧写(安

装)到我们目标平台中。而通常对Linux 源码的改写工作难度较大,它要求你不仅对Linux

内核结构要非常熟悉,还要求你对目标平台的硬件结构要非常熟悉。同

时还要求你对相关

版本的汇编语言较熟悉因为与体系结构相关的部分源码往往是用汇编写的。所以这部分工

作一般由目标平台提供商来完成。比如说针对目前嵌入式系统中最流行的ARM 平台,它的

这部分工作就是由英国ARM 公司的工程师完成的,我们所要做的就是从其网站上下载相关

版本Linux 内核的补丁(Patch)。把它打到我们的Linux 内核上,再进行交叉编译就行。

其基本过程是这样的(以Linux2.6.0 为例):

到ftp:// 上下载Linux2.6.0 内核及其关于ARM 平台的补丁(如:

Patch-2.6.0-rmk1.gz)。

给Linux2.6.0 打补丁:zcat ../patch-2.6.0-rmk1.gz | patch –

p1(前面../表示补丁

文件放在内核文件上一层目录)

准备交叉编译环境。交叉编译环境工具链一般包括binutils(含AS 汇编器,LD 链接器等),

arm-gcc,glibc 等。交叉编译环境的搭建也是个复杂的过程,后面我将做进一步介绍。

修改内核目录下的makefile 文件,主要是以下几行:

注释掉ARCH:=$(shell uname –m | sed –e s/i.86/i386/-e

s/sun4u/sparc64/ -e s/arm.

\ */arm/ - e s/sa110/arm/)这一行。

ARCH := 改为 ARCH := arm

CROSS_COMPILE := 改为 CROSS_COMPILE = 交叉编译工具中arm-linux 所在目录/arm-linux-例如:CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-

此后就可以进行编译。

五、关于交叉编译环境

交叉编译环境的建立最重要的就是要有一个交叉编译器。所谓的交叉编译就是:利用运行

在某机器上的编译器编译某个源程序生成在另一台机器上运行的目标代码的过程。编译器

的生成依赖于相应的函数库,而这些函数库又得依靠编译器来编译,所以这里有个“蛋和鸡”

的关系,所以最初第一的版本的编译器肯定得用机器码去生成,现在的编译器就不必了。

相关文档
最新文档