嵌入式第六Linux开发环境及其在ARM上的移植_第1页
嵌入式第六Linux开发环境及其在ARM上的移植_第2页
嵌入式第六Linux开发环境及其在ARM上的移植_第3页
嵌入式第六Linux开发环境及其在ARM上的移植_第4页
嵌入式第六Linux开发环境及其在ARM上的移植_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统设计第六章第六章 嵌入式嵌入式Linux开发环境开发环境及其在及其在ARM上的移植上的移植 主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现

2、Linux系统移植的一般步骤 嵌入式系统的开发和应用层软件的开发不嵌入式系统的开发和应用层软件的开发不同,有其自身的特点,尤其在开发流程上同,有其自身的特点,尤其在开发流程上有很大的不同。从大体上讲,有很大的不同。从大体上讲,Linux系统移系统移植一般分为下面几步:植一般分为下面几步:(1)开发环境的搭建开发环境的搭建(2)系统引导)系统引导(3)内核引导)内核引导(4)设备驱动程序)设备驱动程序(5)文件系统)文件系统6.1 嵌入式Linux开发环境 通常的嵌入式系统的软件开发采用一种交通常的嵌入式系统的软件开发采用一种交叉开发的方式叉开发的方式:交叉开发模型交叉开发模型 6.1 嵌入式L

3、inux开发环境 TARGET就是就是目标板目标板,HOST是是开发主机开发主机(宿主机)。在开发主机上,可以安装开(宿主机)。在开发主机上,可以安装开发工具,编辑、编译目标板的发工具,编辑、编译目标板的Linux引导程引导程序、内核和文件系统,然后在目标板上运序、内核和文件系统,然后在目标板上运行。通常这种在主机环境下开发,在目标行。通常这种在主机环境下开发,在目标板上运行的开发模式叫作板上运行的开发模式叫作交叉开发交叉开发。 主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入

4、式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现6.1.1 交叉编译工具介绍 1Binutils工具包工具包GNU Binutils是一套用来构造和使用二进是一套用来构造和使用二进制所需的工具集。建立嵌入式交叉编译制所需的工具集。建立嵌入式交叉编译环境,环境,Binutils工具包是必不可少的,而工具包是必不可少的

5、,而且且Binutils与与GNU的的C编译器编译器gcc是紧密集是紧密集成的,没有成的,没有Binutils,gcc也不能正常工作。也不能正常工作。GNU Binutils是一组开发工具,包括连接是一组开发工具,包括连接器、汇编器和其他用于目标文件和档案器、汇编器和其他用于目标文件和档案的工具。的工具。Binutils工具包Binutils工具集里主要包含以下一系列的程工具集里主要包含以下一系列的程序:序:addr2line、ar、as、c+filt、gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、strings和和strip,它包含的库文件有

6、:它包含的库文件有:libiberty.a、libbfd.a、libbfd.so、libopcodes.a和和libopcodes.so。Binutils工具包 (1)GNU汇编器汇编器asas工具主要用来将汇编语言编写的源程序工具主要用来将汇编语言编写的源程序转换成二进制形式的目标代码。转换成二进制形式的目标代码。 (2)GNU链接器链接器ldld可以将多个目标文件链接成为可执行程可以将多个目标文件链接成为可执行程序,同时指定了程序在运行时是如何执序,同时指定了程序在运行时是如何执行的。行的。 (3)GNU库管理器库管理器arar将多个可重定位的目标模块归档为一个将多个可重定位的目标模块归档

7、为一个函数库文件。函数库文件。 6.1.1 交叉编译工具介绍 2gcc编译器编译器GUN cc(GUN C Compiler,简称,简称gcc)是)是GUN项目的项目的C编译器套件编译器套件,能够编译用,能够编译用C、C+、Objective C编写的程序。编写的程序。gcc编译编译器是基于命令行的。器是基于命令行的。gcc的主要目的是为的主要目的是为32位位GNU系统提供一个系统提供一个好的编译器,其最终输出的是汇编语言好的编译器,其最终输出的是汇编语言源程序。想要进一步编译成所需要的机源程序。想要进一步编译成所需要的机器代码,需要引入一些新的工具,比如器代码,需要引入一些新的工具,比如汇编

8、程序等。汇编程序等。 gcc编译器 (1)gcc的基本用法的基本用法在使用在使用gcc编译器的时候,通常后面跟一些编译器的时候,通常后面跟一些选项和文件名。选项和文件名。gcc命令的基本用法如下:命令的基本用法如下: gcc options filenames Gcc选项选选 项项说说 明明-ansi支持支持ANSI/ISO C的标准语法,取消的标准语法,取消GUN的语法扩展中与该标准有的语法扩展中与该标准有冲突部分(但这一选项并不能保证生成冲突部分(但这一选项并不能保证生成ANSI兼容的代码)兼容的代码)-c只编译不链接只编译不链接-D FOO=BAR在命令行定义预处理宏在命令行定义预处理宏

9、FOO,其值为,其值为BAR-g在可执行程序中包含标准调试信息在可执行程序中包含标准调试信息-ggdb在可执行程序中包含只有在可执行程序中包含只有GUN debugger才能识别的大量调试信息才能识别的大量调试信息-pg编译完成之后,额外产生一个性能分析所需的信息编译完成之后,额外产生一个性能分析所需的信息-I DIRNAME将将DIRNAME加入到头文件的搜索目录列表中加入到头文件的搜索目录列表中-l FOO链接名为链接名为libFOO的函数库的函数库-L DIRNAME将将DIRNAME加入到库文件的搜索目录列表中。在缺省情况下加入到库文件的搜索目录列表中。在缺省情况下gcc只链接共享库只

10、链接共享库-O优化编译过的代码优化编译过的代码gcc编译器 (3)函数库和包含文件)函数库和包含文件如果需要链接不在标准目录下的函数库或如果需要链接不在标准目录下的函数库或包含(包含(include)文件,可使用)文件,可使用-L DIRNAME和和-I DIRNAME选项指定选项指定文件所在的目录,以确保该目录的搜索文件所在的目录,以确保该目录的搜索顺序在标准目录之前。顺序在标准目录之前。gcc编译器 (4)gcc的执行过程的执行过程使用使用gcc由由C语言源代码文件生成可执行文语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要件的过程不仅仅是编译的过程,而是要经历经历4个相互关联

11、的阶段。个相互关联的阶段。预处理(预编译,预处理(预编译,Preprocessing)编译(编译(Compilation)汇编(汇编(Assembly)链接(链接(Linking) 6.1.1 交叉编译工具介绍 3Make命令与命令与Makefile文件文件利用利用make程序的这种自动编译可大大简化程序的这种自动编译可大大简化开发工作,避免不必要的重新编译。开发工作,避免不必要的重新编译。make工具通过工具通过makefile的文件来完成并自的文件来完成并自动维护编译工作。动维护编译工作。在默认情况下,在默认情况下,GNU make工具在当前工工具在当前工作目录中按如下顺序搜索作目录中按如

12、下顺序搜索makefile:GNUmakefileMakefileMakefile Make命令与Makefile文件 (1)Makefile基本结构基本结构Makefile中一般包含如下内容:中一般包含如下内容:需要由需要由make工具创建的项目,通常是工具创建的项目,通常是目标文件和可执行文件;目标文件和可执行文件;要创建的项目所依赖的文件;要创建的项目所依赖的文件;创建每个项目时需要运行的命令。创建每个项目时需要运行的命令。 Make命令与Makefile文件 (2)Makefile变量变量GNU的的make工具除了提供建立目标的基本功能工具除了提供建立目标的基本功能之外,还有许多便于表

13、达依赖性关系以及建立之外,还有许多便于表达依赖性关系以及建立目标命令的特色,其中之一就是变量或宏的定目标命令的特色,其中之一就是变量或宏的定义能力。义能力。如果用户要以相同的编译选项同时编译多个如果用户要以相同的编译选项同时编译多个C源源文件,且为每个目标的编译指定冗长的编译选文件,且为每个目标的编译指定冗长的编译选项的话,利用简单的变量定义,可简化项的话,利用简单的变量定义,可简化makefile文件,避免这种乏味的工作。文件,避免这种乏味的工作。 Make命令与Makefile文件 (3)GNU make的主要预定义变量的主要预定义变量GNU make有许多预定义变量,这些变量有许多预定义

14、变量,这些变量具有特殊的含义,可在规则中使用。具有特殊的含义,可在规则中使用。在一般情况下,在一般情况下,make所预定义的内部规则所预定义的内部规则可以满足大多数应用要求,如果程序员可以满足大多数应用要求,如果程序员认为哪个内部规则还不能满足他的特殊认为哪个内部规则还不能满足他的特殊要求,那么可以通过修改或自定义新的要求,那么可以通过修改或自定义新的内部规则使用的变量或者相关的命令来内部规则使用的变量或者相关的命令来改变,称为改变,称为隐含规则隐含规则。Make命令与Makefile文件 (4)隐含规则)隐含规则隐含规则隐含规则是指由是指由make自定义的规则,这些自定义的规则,这些规则定义

15、了如何从不同的依赖文件建立规则定义了如何从不同的依赖文件建立特定类型的目标。特定类型的目标。 GNU make支持以下支持以下2种类型的隐含规则:种类型的隐含规则: 后缀规则(后缀规则(Suffix Rule) 模式规则(模式规则(Pattern Rules) Make命令与Makefile文件 (5)Make选项选项选选 项项说说 明明-C DIR在读取在读取makefile之前改变到指定的目录之前改变到指定的目录DIR-f FILE以指定的以指定的FILE文件作为文件作为makefile-h显示所有的显示所有的make选项(选项(-help)-i忽略所有的命令执行错误忽略所有的命令执行错误

16、-I DIR当包含其他当包含其他makefile文件时,可利用该选项指定搜索目录文件时,可利用该选项指定搜索目录-n只打印要执行的命令,但不执行这些命令只打印要执行的命令,但不执行这些命令-p显示显示make变量数据库和隐含规则变量数据库和隐含规则-s在执行命令时不显示命令在执行命令时不显示命令-w在处理在处理makefile之前和之后,显示工作目录之前和之后,显示工作目录-W FILE假定文件假定文件FILE已经被修改已经被修改6.1.1 交叉编译工具介绍 4glibc库库glibc 是提供系统调用和基本函数的是提供系统调用和基本函数的C库,库,所有动态连接的程序都要用到它,是编所有动态连接

17、的程序都要用到它,是编译译Linux系统程序很重要的组成部分。系统程序很重要的组成部分。 5. gdb调试工具调试工具gdb是一个用来调试是一个用来调试C和和C+程序的调试器。程序的调试器。gdb的功能主要是监视程序中变量的值,的功能主要是监视程序中变量的值,设置断点以使程序在指定的代码行上停设置断点以使程序在指定的代码行上停止执行,以及支持单步执行等。止执行,以及支持单步执行等。主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移

18、植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现6.1.2 交叉编译环境的建立 在建立交叉编译环境之前,当然首先要在在建立交叉编译环境之前,当然首先要在一台一台PC机(宿主机)上安装机(宿主机)上安装Linux操作系操作系统。一般情况下用定制方式进行完全安装,统。一般情况下用定制方式进行完全安装,即在选择软件包(即在选择软件包(Package)时选择最后)时选择最

19、后一项完全安装(一项完全安装(everything)。然后再配)。然后再配置好网络、置好网络、TFTP服务(为下载烧写所用)服务(为下载烧写所用)和和NFS服务(为交叉开发时服务(为交叉开发时mount所用)。所用)。6.1.2 交叉编译环境的建立 匹配匹配Binutils、gcc和和glibc的版本的版本工具链版本工具链版本Linux 2.4.xLinux 2.6.xbinutils2.142.14gcc.2glibc.5glibc-threads.5gdb5.36.0ARMV4T平台工具链常用版本平台工具链常用版本 6.1.2 交叉编译环境

20、的建立 构建交叉编译环境通常有构建交叉编译环境通常有3种方法:种方法:方法方法1:分步编译和安装交叉编译环境所需:分步编译和安装交叉编译环境所需要的库和源代码,最终生成交叉编译环要的库和源代码,最终生成交叉编译环境。境。方法方法2:通过:通过Crosstool脚本工具来实现一次脚本工具来实现一次编译生成交叉编译环境。编译生成交叉编译环境。方法方法3:使用开发平台供应商提供的开发环:使用开发平台供应商提供的开发环境安装套件建立交叉编译环境,这是最境安装套件建立交叉编译环境,这是最常用的方法。常用的方法。 1. 分步建立交叉编译环境1. 分步建立交叉编译环境 建立交叉编译环境可以分为建立交叉编译环

21、境可以分为5个步骤:个步骤:做好准备工作:下载工具源码包和补丁,做好准备工作:下载工具源码包和补丁,准备内核头文件,创建工作目录等准备内核头文件,创建工作目录等;编译、安装编译、安装Binutils;编译辅助编译器(编译辅助编译器(bootstrap gcc););建立建立glibc库,这里要使用交叉编译工具库,这里要使用交叉编译工具链,例如链,例如arm-linux-gcc等;等;编译生成完整的编译器(编译生成完整的编译器(full gcc),重),重新配置新配置gcc功能,使其支持功能,使其支持C、C+等语等语言。言。 2. 制作交叉调试器 (1)编译交叉调试器)编译交叉调试器对于交叉调试

22、器,并不是工具链必需的工对于交叉调试器,并不是工具链必需的工具,但是它是与工具链配套使用的。具,但是它是与工具链配套使用的。GDB的调试能力和的调试能力和BUG的修正也因为版的修正也因为版本的不同而不同。本的不同而不同。 (2)编译)编译gdbserver目标板还需要目标板还需要gdbserver工具为目标板交叉工具为目标板交叉编译编译gdbserver。 主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linu

23、x内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现6.2.1 Linux内核源代码的基本组织情况 嵌入式嵌入式Linux内核按照功能可分为进程管理、内核按照功能可分为进程管理、内存管理、文件系统、设备控制和网络。内存管理、文件系统、设备控制和网络。 进程管理进程管理 内存管理内存管理 文件系统文件系统 设备控制设备控制 网络网络嵌入式Linux内核功能结构图Linux内核源代码树的组织 L

24、inux内核源代码包括多个目录。内核源代码包括多个目录。主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现6.2.2 嵌入式Linux内核裁剪方法 对对

25、Linux操作系统的移植工作主要分为操作系统的移植工作主要分为2个个方面:方面:一方面是针对硬件特点对源代码的修改,一方面是针对硬件特点对源代码的修改,比如内核的启动部分、存储设备的大小、比如内核的启动部分、存储设备的大小、具体的驱动问题等;具体的驱动问题等;另一方面是功能模块的裁剪,主要是对内另一方面是功能模块的裁剪,主要是对内核功能的配置,包括支持的文件类型、核功能的配置,包括支持的文件类型、外设模块等。外设模块等。 针对硬件的修改 总体上讲,针对硬件的修改有总体上讲,针对硬件的修改有2种方法:种方法: 对一种全新的硬件平台开展移植工作时,对一种全新的硬件平台开展移植工作时,需采用需采用“

26、自底向上自底向上”的设计方法从头设的设计方法从头设计,即从硬件的需求考虑逐步地采用分计,即从硬件的需求考虑逐步地采用分析、设计、编码和测试。析、设计、编码和测试。 大多数情况下,是在前人工作的基础上大多数情况下,是在前人工作的基础上修改已有的代码。修改已有的代码。Linux已经可以在多种已经可以在多种体系结构中运行,可以参考相近的体系体系结构中运行,可以参考相近的体系结构的代码修改与目标硬件平台不同的结构的代码修改与目标硬件平台不同的部分即可。部分即可。 针对硬件的修改 Linux内核支持很多的硬件体系结构,如内核支持很多的硬件体系结构,如X86、ARM、PowerPC、M68Y等,但由等,但

27、由于新的硬件平台不断出现,根据新的硬件于新的硬件平台不断出现,根据新的硬件平台移植内核是嵌入式系统构建的必须工平台移植内核是嵌入式系统构建的必须工作。幸运的是,对于大多常用的作。幸运的是,对于大多常用的ARM处理处理器,这一方面的大部分工作已经由相应的器,这一方面的大部分工作已经由相应的ARM处理器补丁来完成了。处理器补丁来完成了。针对硬件的修改 (1)内核的启动部分)内核的启动部分 (2)arch目录下相关文件目录下相关文件 (3)arch/arm/boot目录目录 (4)entry-armv.S文件文件针对硬件的修改 在在Linux内核移植的初始阶段应尽可能暂时内核移植的初始阶段应尽可能暂

28、时屏蔽不相关的设备驱动以及内核功能配置屏蔽不相关的设备驱动以及内核功能配置选项,使内核支持的选项尽可能少,先构选项,使内核支持的选项尽可能少,先构造最小内核。对内核的修改也要尽可能得造最小内核。对内核的修改也要尽可能得小,因为对内核不正确的修改会引起系统小,因为对内核不正确的修改会引起系统崩溃。在确保已经进行的内核移植操作正崩溃。在确保已经进行的内核移植操作正确的情况下,再逐步添加相应的硬件支持确的情况下,再逐步添加相应的硬件支持和功能支持。和功能支持。功能模块的裁剪 嵌入式嵌入式Linux内核功能模块的裁剪主要有内核功能模块的裁剪主要有3种方法:种方法:使用使用Linux自身的配置工具,编译

29、定制内自身的配置工具,编译定制内核。核。修改内核源代码,进行内核裁剪。修改内核源代码,进行内核裁剪。基于系统调用关系,进行内核裁剪。基于系统调用关系,进行内核裁剪。 功能模块的裁剪 Linux操作系统将它的组件分为直接的核心操作系统将它的组件分为直接的核心组件和运行时可装载组件。组件和运行时可装载组件。 Linux操作系统的基本组件包括根文件操作系统的基本组件包括根文件系统、系统、IDE/MEM驱动程序、内存管理、驱动程序、内存管理、进程和调度管理以及一些必要的进程和调度管理以及一些必要的I/O子子系统。系统。 可裁剪的组件主要包括文件系统、网可裁剪的组件主要包括文件系统、网络协议、设备驱动程

30、序、各种网络设络协议、设备驱动程序、各种网络设备部件等。备部件等。主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现功能模块的裁剪 使用使用Linux自

31、身的配置工具编自身的配置工具编译定制内核,嵌入式译定制内核,嵌入式Linux操操作系统内核的定制过程基本作系统内核的定制过程基本可分为可分为4个步骤:个步骤: 增加新的内核组件增加新的内核组件 配置内核配置内核 生成内核生成内核 装载内核装载内核 主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法

32、6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现6.2.4 内核编译及装载 编译内核分以下编译内核分以下3步进行:步进行:(1)正确设置编译内核所需的附属文件,)正确设置编译内核所需的附属文件,进行依赖性编译:进行依赖性编译: # make dep(2)清除以前构造内核时产生的所有目标)清除以前构造内核时产生的所有目标文件、模块文件和一些临时文件:文件、模块文件和一些临时文件: # make clean(3)生成新的可执行内核映像文件:)生成新的可执行内核映像文件: # make zImage 6

33、.2.4 内核编译及装载完成上述命令之后,就会在完成上述命令之后,就会在/arch/arm/boot/下生成一个自己定制的内下生成一个自己定制的内核映像文件了,系统文件名可以任意取,核映像文件了,系统文件名可以任意取,如如zImage.rom。在在Bootloader的引导下,通过以太网口或的引导下,通过以太网口或串口等,将所生成的内核文件烧写到嵌串口等,将所生成的内核文件烧写到嵌入式系统的入式系统的Flash存储器中,当系统复位存储器中,当系统复位或上电后,内核会被引导并执行。或上电后,内核会被引导并执行。 主要内容 6.1 嵌入式嵌入式Linux开发环境开发环境 6.1.1 交叉编译工具介

34、绍交叉编译工具介绍 6.1.2 交叉编译环境的建立交叉编译环境的建立 6.2 嵌入式嵌入式Linux在在ARM平台上的移植平台上的移植 6.2.1 Linux内核源代码的基本组织情况内核源代码的基本组织情况 6.2.2 嵌入式嵌入式Linux内核裁剪方法内核裁剪方法 6.2.3 嵌入式嵌入式Linux内核定制过程内核定制过程 6.2.4 内核编译及装载内核编译及装载 6.2.5 文件系统及其实现文件系统及其实现6.2.5 文件系统及其实现 1. 文件系统文件系统文件系统文件系统是指在一个物理设备上的任何文是指在一个物理设备上的任何文件组织和目录,它构成了件组织和目录,它构成了Linux系统上所

35、系统上所有数据的基础,有数据的基础,Linux程序、库、系统文程序、库、系统文件和用户文件都驻留其中,因此,它是件和用户文件都驻留其中,因此,它是系统中庞大复杂且又是最为基本和重要系统中庞大复杂且又是最为基本和重要的资源。的资源。Linux支持的文件系统有很多种,比如支持的文件系统有很多种,比如ext2、minix文件系统、文件系统、msdos、ntfs、nfs、hpft、ncpfs、affs Amiga等。等。 6.2.5 文件系统及其实现 Ext2文件系统是文件系统是Linux事实上的标准文件系事实上的标准文件系统,它已经取代了它的前任统,它已经取代了它的前任扩展文件扩展文件系统(系统(E

36、xt)。)。Ext支持的文件最大为支持的文件最大为2GB,支持的最长文件名为支持的最长文件名为255个字符,而且它不个字符,而且它不支持索引节点(包括数据修改时间标记)。支持索引节点(包括数据修改时间标记)。 因为因为Ext2文件系统的稳定性、可靠性和健文件系统的稳定性、可靠性和健壮性,所以几乎在所有基于壮性,所以几乎在所有基于Linux的系统的系统(包括台式机、服务器、工作站甚至一些(包括台式机、服务器、工作站甚至一些嵌入式设备)上都使用嵌入式设备)上都使用Ext2文件系统。文件系统。 Linux下常用文件系统结构6.2.5 文件系统及其实现 2. 常用的嵌入式文件系统常用的嵌入式文件系统

37、常用的文件系统基于不同的存储设备可分常用的文件系统基于不同的存储设备可分为为3类:类:基于基于Flash的文件系统:的文件系统:JFFS2,yaffs,cramfs,romfs等;等;基于基于RAM的文件系统:的文件系统:Ramdisk,ramfs/tmpfs等;等;网络文件系统网络文件系统NFS。6.2.5 文件系统及其实现 (1)JFFS2JFFS2文件系统是日志结构化的,这意味文件系统是日志结构化的,这意味着它基本上是一长列结点。每个结点包着它基本上是一长列结点。每个结点包含有关文件的部分信息,可能是文件的含有关文件的部分信息,可能是文件的名称或一些数据。名称或一些数据。 JFFS2在扇

38、区级别上执行在扇区级别上执行Flash擦除、写、擦除、写、读操作要比读操作要比ext2文件系统好。文件系统好。 JFFS2提供了比提供了比ext2更好的崩溃、掉电安全更好的崩溃、掉电安全保护。保护。 JFFS2是专门为是专门为Flash芯片及其类似嵌入式芯片及其类似嵌入式设备创建的设备创建的 6.2.5 文件系统及其实现 (2)yaffsyaffs/yaffs2是专为嵌入式系统使用是专为嵌入式系统使用NAND Flash而设计的一种日志型文件系统。与而设计的一种日志型文件系统。与JFFS2相比,它减少了一些功能,例如不相比,它减少了一些功能,例如不支持数据压缩,所以速度更快,挂载时支持数据压缩

39、,所以速度更快,挂载时间很短,对内存的占用较小。间很短,对内存的占用较小。 yaffs/yaffs2自带自带NAND芯片的驱动,并且芯片的驱动,并且为嵌入式系统提供了直接访问文件系统为嵌入式系统提供了直接访问文件系统的的API,用户可以不使用,用户可以不使用Linux中的中的MTD与与VFS直接对文件系统操作。直接对文件系统操作。 6.2.5 文件系统及其实现 (3)cramfscramfs是一个只读的压缩文件系统,它并是一个只读的压缩文件系统,它并不需要一次性地将文件系统中的所有内不需要一次性地将文件系统中的所有内容都解压缩到内存中,而只是在系统需容都解压缩到内存中,而只是在系统需要访问某个

40、位置数据的时候,马上计算要访问某个位置数据的时候,马上计算出该数据在出该数据在cramfs中的位置,将其实时中的位置,将其实时解压缩到内存中,然后通过对内存的访解压缩到内存中,然后通过对内存的访问来获取文件系统中需要读取的数据。问来获取文件系统中需要读取的数据。 6.2.5 文件系统及其实现 (4)romfs传统型的传统型的romfs是一个简单、紧凑、只读的是一个简单、紧凑、只读的文件系统,占用系统资源也比较小。起文件系统,占用系统资源也比较小。起初设计它的目的是,在启动盘(包括光初设计它的目的是,在启动盘(包括光盘和软盘)等场合下,提供一个比普通盘和软盘)等场合下,提供一个比普通文件系统(如

41、功能强大的文件系统(如功能强大的ext2)更加节省)更加节省空间的文件系统。空间的文件系统。uClinux系统通常采用系统通常采用romfs文件系统。文件系统。 6.2.5 文件系统及其实现 (5)RamdiskRamdisk是将一部分固定大小的内存当作是将一部分固定大小的内存当作分区来使用。将一些经常被访问而又不分区来使用。将一些经常被访问而又不会更改的文件(如只读的根文件系统)会更改的文件(如只读的根文件系统)通过通过Ramdisk放在内存中,可以明显地提放在内存中,可以明显地提高系统的性能。高系统的性能。在在Linux的启动阶段,的启动阶段,initrd提供了一套机提供了一套机制可以将内

42、核映像和根文件系统一起载制可以将内核映像和根文件系统一起载入内存。入内存。 6.2.5 文件系统及其实现 (6)ramfs/tmpfsramfs是是Linus Torvalds开发的一种基于内开发的一种基于内存的文件系统,工作于存的文件系统,工作于VFS层,不能格式层,不能格式化,可以创建多个,在创建时可以指定化,可以创建多个,在创建时可以指定其最大能使用的内存大小。其最大能使用的内存大小。ramfs/tmpfs文件系统把所有的文件都放在文件系统把所有的文件都放在RAM中,所以读中,所以读/写操作发生在写操作发生在RAM中。中。可以用可以用ramfs/tmpfs来存储一些临时性或来存储一些临时性或经常要修改的数据,这样既避免了对经常要修改的数据,这样既避免了对Flash存储器的读写损耗,也提高了数据存储器的读写损耗,也提高了数据读写速度。读写速度。 6.2.5 文件系统及其实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论