版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统(xìtǒng)设计主讲(zhǔjiǎng)教师:张错玲计算机工程学院安徽三联学院ANHUISANLIANUNIVERSITY共八十页第6章嵌入式Linux开发(kāifā)环境及其在ARM上的移植主讲(zhǔjiǎng)教师:张老师嵌入式系统安徽三联学院计算机工程学院共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织(zǔzhī)6.2.2嵌入式Linux内核裁剪方法6.2.3嵌入式Linux内核定制过程6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页教学(jiāoxué)目标了解交叉编译(biānyì)工具;掌握gcc编译器和gdb调试工具;理解和使用make命令和makefile文件;掌握交叉编译环境的建立;了解嵌入式linux系统的移植过程,linux内核裁剪方法、定制过程、内核编译及装载;掌握常用的嵌入式文件系统种类;了解文件系统的构建方法。共八十页Linux系统(xìtǒng)移植1.开发环境的搭建2.系统引导-bootloader引导(1)bootloader概念:
bootloader就是在操作系统内核运行前运行的一段小程序。通过这段小程序,完成了对硬件的基本初始化,并将内核映像文件和文件系统复制到RAM中,然后为内核启动设置基本的运行环境,之后就跳转到内核映像的首地址处,将CPU运行权交给内核,起到引导和加载内核镜像的作用。(2)位置:BootLoader是系统复位(fùwèi)或上电后首先运行的代码,一般应写在起始物理地址0x0开始。共八十页Linux系统(xìtǒng)移植Bootloader的类型:(1)Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。(2)ARMboot是一个ARM平台的开源固件项目,基于(jīyú)PPCBoot,鉴于对PPCBoot的严重依赖性,已经与PPCBoot项目合并,新的项目为U-Boot。(3)U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot。共八十页Linux系统(xìtǒng)移植Bootloader的类型:(4)Blob(BootLoaderObject)是由Jan-DerkBakkerandErikMouw发布的,是专门为StrongARM构架下的LART设计(shèjì)的BootLoader。(5)Bios-lt是专门支持三星(Samsung)公司ARM构架处理器S3C4510B的Loader,可以设置CPU/ROM/SDRAM/EXTIO,管理并烧写FLASH,装载引导uClinux内核。共八十页Linux系统(xìtǒng)移植Bootloader的类型:(6)Bootldr是康柏(Compaq)公司(ɡōnɡsī)发布的,类似于compaqiPAQPocketPC,支持SA1100芯片。它被推荐用来引导Llinux,支持串口Y-modem协议以及jffs文件系统。(7)vivi是韩国mizi公司开发的bootloader,适用于ARM9处理器。共八十页Linux系统(xìtǒng)移植3.内核引导内核启动进一步对硬件进行初始化,对设备驱动程序进行加载,文件系统的挂载及应用程序的执行(zhíxíng)。在执行(zhíxíng)前,处理器CPU应满足以下状态:
R0=0R1=机器类型R2=参数标记列表在RAM中的起始地址MMU-off
I-cache-onoroff
D-cache–off
共八十页Linux系统(xìtǒng)移植
CPU寄存器的设置:
R0=0;R1=机器类型;R2=启动参数标记列表(lièbiǎo)在RAM中的起始地址;这三个寄存器的设置是在最后启动内核时通过启动参数来传递完成的。CPU模式:关闭中断;属于SVC模式;Bootloader中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操作,例如一些特定寄存器访问操作。共八十页Linux系统(xìtǒng)移植
Cache和MMU的设置:
MMU必须关闭;数据cache必须关闭;指令cache可以关闭也可以开启;Bootloader中所有对地址的操作都是使用物理地址,是实在(shízài)的实地址,不存在虚拟地址,因此MMU必须关闭。Bootloader主要是装载内核镜像,镜像数据必须真实写回SDRAM中,所以数据cache必须关闭;而对于指令cache,不存在强制性的规定,但是一般情况下,推荐关闭指令cache。共八十页Linux系统(xìtǒng)移植4.设备驱动程序的移植——如LCD、网卡、触摸屏等设备驱动程序的移植,主要是相近源码的移植修改。5.文件系统的挂载——在内核(nèihé)启动的最后阶段,进行文件系统的加载。共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发(kāifā)环境
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织6.2.2嵌入式Linux内核裁剪方法6.2.3嵌入式Linux内核定制过程6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页6.1嵌入式Linux开发(kāifā)环境
采用交叉编译开发方式的目的:由于嵌入式系统(xìtǒng)的硬件平台没有足够的资源在本机上运行开发工具和调试工具,所以采用交叉编译的方式进行软件开发。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。宿主机交叉编译共八十页6.1嵌入式Linux开发(kāifā)环境宿主机通过(tōngguò)串口与开发板连接共八十页6.1嵌入式Linux开发(kāifā)环境开发板与主机(zhǔjī)网线连接共八十页6.1嵌入式Linux开发(kāifā)环境6.1.1交叉编译(biānyì)工具介绍非洲牛羚技术、法律以及财政支持共八十页6.1嵌入式Linux开发(kāifā)环境6.1.1交叉编译工具(gōngjù)介绍1.GNUbinutils是一组二进制工具集。包括:addr2line、ar、gprof、nm、objcopy、objdump、ranlib、size、strings、strip等程序。(1)GNU汇编器as——用来将汇编语言编写的源程序转换成二进制形式的目标代码,形式.o文件。(2)GNU链接器ld——(3)GNU库管理器ar共八十页6.1嵌入式Linux开发(kāifā)环境6.1.1交叉编译工具介绍(jièshào)2.gcc编译器(1)gcc编译器是基于命令行的。(2)gcc基本用法gcc[options][filenames](3)gcc选项共八十页6.1嵌入式Linux开发(kāifā)环境gcc编译器常用的命令行参数(cānshù)一览序号gcc命令参数作用1gcc-Esource_file.c-E,只执行到预编译。直接输出预编译结果。2gcc-Ssource_file.c-S,只执行到源代码到汇编代码的转换,输出汇编代码。3gcc-csource_file.c-c,只执行到编译,输出目标文件。4gcc-gsource_file.c
生成供调试用的可执行文件,可以在gdb中运行。5
gcc-Osource_file.c-O(大写的字母O),编译器对代码进行自动优化编译,输出效率更高的可执行文件。6
gcc-Wallsource_file.c-W,在编译中开启一些额外的警告(warning)信息。-Wall,将所有的警告信息全开。共八十页6.1嵌入式Linux开发(kāifā)环境(4)函数库和包含文件如果需要链接不在标准目录下的函数库或包含文件,可以使用(shǐyòng)-L{dirname}和-I{dirname}选项指定文件所在的目录,来确保该目录的搜索顺序在标准目录之前。(5)gcc执行过程用GCC编译程序生成可执行文件有时候看起来似乎仅通过编译一步就完成了,但事实上要经过下面的几个过程:共八十页6.1嵌入式Linux开发(kāifā)环境预处理(Pre-Processing)——GCC首先调用cpp命令进行预处理,主要实现对源代码编译前的预处理,比如将源代码中指定(zhǐdìng)的头文件包含进来。编译(Compiling)——接着调用cc1命令进行编译,作为整个编译过程的一个中间步骤,该过程会将源代码翻译生成汇编代码。汇编(Assembling)——汇编过程是针对汇编语言的步骤,调用as命令进行工作,生成扩展名为.o的目标文件。链接(Linking)——最后调用链接器ld来完成链接。共八十页6.1嵌入式Linux开发(kāifā)环境案例(ànlì)分析(P147)程序清单6.1hello.c#include<stdio.h>intmain(){printf(“helloworld!\n”);}#gcc–ohellohello.c#./hello输出:helloworld!共八十页6.1嵌入式Linux开发(kāifā)环境3.make命令和Makefile文件(1)make存在的原因:都是源文件太多惹得祸。(2)解决问题:可以将大型的开发项目分解成为多个更易于管理的模块,对于(duìyú)一个包括几百个源文件的应用程序,使用make工具和makefile文件就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。共八十页6.1嵌入式Linux开发(kāifā)环境(3)make参数–k:
如果使用该选项,即使make程序遇到(yùdào)错误也会继续向下运行;如果没有该选项,在遇到(yùdào)第一个错误时make程序马上就会停止,那么后面的错误情况就不得而知了。我们可以利用这个选项来查出所有有编译问题的源文件。–f
:
指定作为makefile的文件的名称。共八十页6.1嵌入式Linux开发(kāifā)环境(3)Makefile文件语法规则:文件中需要说明如何编译各个源文件并连接(liánjiē)生成可执行文件,并要求定义源文件之间的依赖关系。命名规则:Makefile或者makefile或者make–ffilename基本结构:target:dependenciescommandtarget是目标文件,可以是ObjectFile,也可以是执行文件。dependencies:规定了最终得到的应用程序跟生成它的各个源文件之间的关系。command也就是make需要执行的命令。说明:command必须以Tab键开头。共八十页6.1嵌入式Linux开发(kāifā)环境案例(ànlì)分析6-2:main:main.of1.of2.o
main.o:main.cdef1.h
f1.o:f1.cdef1.hdef2.h
f2.o:f2.cdef2.hdef3.h上面的各个源文件跟各模块之间的关系具有一个明显的层次结构,如果def2.h发生了变化,那么就需要更新f1.o和f2.o,而f1.o和f2.o发生了变化的话,那么main也需要随之重新构建。共八十页6.1嵌入式Linux开发(kāifā)环境main:main.of1.of2.o
gcc-omainmain.of1.of2.o
main.o:main.cdef1.h
gcc-cmain.c
f1.o:f1.cdef1.hdef2.h
gcc-cf1.c
f2.o:f2.cdef2.hdef3.h
gcc-cf2.cclean: -rm–fmain.of1.of2.o#include<STDLIDEF2.H>
#include“def1.h”
externvoidfunction2();
externvoidfunction3();
intmain()
{
function2();
function3();
exit(EXIT_SUCCESS);
}
/*f1.c*/
#include“def1.h”
#include“def2.h”
voidfunction2(){
}
/*f2.c*/
#include“def2.h”
#include“def3.h”
voidfunction3()共八十页6.1嵌入式Linux开发(kāifā)环境默认时,make程序只更新makefile中的第一个目标,如果希望更新多个目标文件的话,可以使用一个特殊的目标all,假如我们(wǒmen)想在一个makefile中更新main和hello这两个程序文件的话,可以加入下列语句达到这个目的:all:mainhello共八十页6.1嵌入式Linux开发(kāifā)环境(4)makefile中变量Makefile中允许(yǔnxǔ)使用简单的宏指代源文件及其相关编译信息,在Linux中也称为宏变量。在引用宏时只需在变量前加$符号,在引用时就必须加圆括号()。$?
依赖的文件的修改日期比目标文件的创建日期晚。$@
目标的完整名称。$<第一个依赖文件的名称。$*
不包含扩展名的目标文件名称。共八十页6.1嵌入式Linux开发(kāifā)环境4.glibc库提供系统调用和基本函数的C库,可以通过rpm-qa|grepglibc查看系统目前安装了哪些和glibc有关的包。5.gdb调试工具(1)功能:调试C或C++程序的调试器,监视程序中变量的值,设置(shèzhì)断点以使程序在指定的代码行上停止执行,支持单步执行等。(2)应用gcc–g-ofilefile.c输入gdbFile-装载想要调试的可执行文件共八十页6.1嵌入式Linux开发(kāifā)环境6.1.2嵌入式linux开发环境(huánjìng)建议的流程:1.建立主机开发环境2.配置minicom3.配置NFS服务4.编译嵌入式linux系统内核5.文件系统的制作6.嵌入式系统开发板的烧写安装开发环境配置交叉编译环境修改profile文件共八十页6.1嵌入式Linux开发(kāifā)环境6.1.2嵌入式linux开发(kāifā)环境建议的流程:1.建立主机开发环境2.配置minicom3.配置NFS服务4.编译嵌入式linux系统内核5.文件系统的制作6.嵌入式系统开发板的烧写Com口连线配置minicom参数共八十页6.1嵌入式Linux开发(kāifā)环境6.1.2嵌入式linux开发环境建议的流程:1.建立主机开发环境2.配置minicom3.配置NFS服务4.编译嵌入式linux系统内核(nèihé)5.文件系统的制作6.嵌入式系统开发板的烧写设置NFS服务指定NFS服务的用户挂载文件共八十页6.1嵌入式Linux开发(kāifā)环境6.1.2嵌入式linux开发(kāifā)环境建议的流程:1.建立主机开发环境2.配置minicom3.配置NFS服务4.编译嵌入式linux系统内核5.文件系统的制作6.嵌入式系统开发板的烧写内核配置建立依存关系建立内核共八十页6.1嵌入式Linux开发(kāifā)环境6.1.2嵌入式linux开发环境建议的流程:1.建立主机开发环境2.配置minicom3.配置NFS服务4.编译嵌入式linux系统内核(nèihé)5.文件系统的制作6.嵌入式系统开发板的烧写cramfs文件系统只读文件系统,
用到mkcramfs制作工具:#./mkcramfsrootcamare_rootfs.cramfsjffs2是一种可读/写的文件系统,制作工具叫做mkfs.jffs2:#./mkfs.jffs2-rrootfs-oxscale_fs.jffs2-e0x40000-p=0x01000000共八十页6.1嵌入式Linux开发(kāifā)环境6.1.2嵌入式linux开发环境建议的流程(liúchéng):1.建立主机开发环境2.配置minicom3.配置NFS服务4.编译嵌入式linux系统内核5.文件系统的制作6.嵌入式系统开发板的烧写烧写bootloader烧写内核zImage到FlashFlash分区烧写文件系统root共八十页6.1.2交叉编译(biānyì)环境的建立在建立交叉编译环境之前,当然首先要在一台PC机(宿主机)上安装Linux操作系统。一般情况下用定制方式(fāngshì)进行完全安装,即在选择软件包(Package)时选择最后一项完全安装(everything)。然后再配置好网络、TFTP服务(为下载烧写所用)和NFS服务(为交叉开发时mount所用)。共八十页6.1.2交叉编译(biānyì)环境的建立匹配(pǐpèi)Binutils、gcc和glibc的版本工具链版本Linux2.4.xLinux2.6.xbinutils2.142.14gcc2.95.33.3.2glibc2.2.52.2.5glibc-threads2.2.52.2.5gdb5.36.0ARMV4T平台工具链常用版本共八十页6.1.2交叉编译(biānyì)环境的建立构建交叉编译环境通常有3种方法:方法1:分步编译和安装交叉编译环境所需要的库和源代码,最终生成交叉编译环境。方法2:通过Crosstool脚本工具来实现一次编译生成交叉编译环境。方法3:使用开发(kāifā)平台供应商提供的开发(kāifā)环境安装套件建立交叉编译环境,这是最常用的方法。共八十页6.1.2交叉编译环境(huánjìng)的建立1.分步建立交叉编译(biānyì)环境编译工具链流程图共八十页6.1.2交叉编译(biānyì)环境的建立建立交叉编译环境(huánjìng)可以分为5个步骤:做好准备工作:下载工具源码包和补丁,准备内核头文件,创建工作目录等;编译、安装Binutils;编译辅助编译器(bootstrapgcc);建立glibc库,这里要使用交叉编译工具链,例如arm-linux-gcc等;编译生成完整的编译器(fullgcc),重新配置gcc功能,使其支持C、C++等语言。共八十页6.1.2交叉编译环境(huánjìng)的建立2.制作交叉调试器(1)编译交叉调试器对于交叉调试器,并不是工具链必需的工具,但是它是与工具链配套使用的。GDB的调试能力和BUG的修正也因为(yīnwèi)版本的不同而不同。(2)编译gdbserver目标板还需要gdbserver工具为目标板交叉编译gdbserver。共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境
6.1.1交叉编译工具(gōngjù)介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织6.2.2嵌入式Linux内核裁剪方法6.2.3嵌入式Linux内核定制过程6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核(nèihé)源代码的组织6.2.2嵌入式Linux内核裁剪方法6.2.3嵌入式Linux内核定制过程6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.1linux内核源代码的组织嵌入式linux内核按照功能可分为(fēnwéi)进程管理、内存管理、文件系统、设备管理和网络。进程管理内存管理文件系统设备管理网络嵌入式linux内核功能结构图层次结构共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植进程管理:内核的进程管理活动实现了在一个cpu上多个进程的抽象概念。内存管理:内核为每个进程在有限可利用的资源上建立了虚拟地址空间,通过函数调用实现内核不同部件(bùjiàn)与内存管理子系统的交互。文件系统:不仅包含着文件中的数据而且还有文件系统的结构。设备管理:内核必须为每个外部设备嵌入设备驱动程序。网络:数据包的发送和接收。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植IntelCPU及与之相兼容(jiānrónɡ)体系结构的子目录Linux内核源代码树的组织针对ARM的linux有一个子目录-arm共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植Linux内核源代码树的组织说明/arch:目录包括(bāokuò)了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构(硬件平台,如ARM平台相关代码在arch/arm下),例如i386就是IntelCPU及与之相兼容体系结构的子目录。/fs:目录存放Linux支持的文件系统代码和各种类型的文件操作代码。每一个子目录支持一个文件系统,如ext3文件系统对应的就是ext3子目录。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植/init:目录包含核心的初始化代码(不是系统(xìtǒng)的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。ipc:目录包含了核心进程间的通信代码,如信号量、消息队列和管道等。Kernel:内核管理的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同时与处理器结构相关代码都放在/archlib/目录下。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植/include:目录包括编译核心所需要的大部分头文件,例如与平台相关的头文件在/include/linux子目录下,与
intelcpu相关的头文件在/include/asm-i386子目录下,而/include/scsi目录则是有关scsi设备的头文件目录。/lib:包含内核要用到的一些常用函数,如字符串操作函数,格式化输出函数,内存复制函数等。/mm:目录包含了所有独立于cpu体系结构的内存管理代码(dàimǎ),如页式存储管理内存的分配和释放等。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植net:目录里是核心的网络部分代码,实现(shíxiàn)了各种常见的网络协议,其每个子目录对应于网络的一个方面。/drivers:目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于/drivers/sound;block下为块设备驱动程序,比如ide(ide.c)共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植Linux内核(nèihé)源代码目录结构共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植Linux系统目录共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织
6.2.2嵌入式Linux内核裁剪方法6.2.3嵌入式Linux内核定制过程6.2.4内核编译及装载(zhuāngzài)6.2.5文件系统及其实现
共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.2嵌入式linux内核裁剪方法对Linux操作系统的移植工作主要分为2个方面:一方面是针对硬件(yìnɡjiàn)特点对源代码的修改,比如内核的启动部分、存储设备的大小、具体的驱动问题等;另一方面是功能模块的裁剪,主要是对内核功能的配置,包括支持的文件类型、外设模块等。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植1.针对硬件的修改(1)对一种全新的硬件平台开展移植(yízhí)工作时,需采用“自底向上”的设计方法从头设计,即从硬件的需求考虑逐步地采用分析、设计、编码和测试。(2)大多数情况下,是在前人工作的基础上修改已有的代码。内核的启动部分arch目录下相关文件arch/arm/boot目录entry-armv.S文件共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植2.功能模块的裁剪使用Linux自身的配置工具(gōngjù),编译定制内核。修改内核源代码,进行内核裁剪。基于系统调用关系,进行内核裁剪。共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境(huánjìng)
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织6.2.2嵌入式Linux内核裁剪方法6.2.3嵌入式Linux内核定制过程6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.3嵌入式linux内核定制过程使用Linux自身(zìshēn)的配置工具编译定制内核,嵌入式Linux操作系统内核的定制过程基本可分为4个步骤:增删新的内核组件配置内核生成内核装载内核共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.3嵌入式linux内核定制过程增删新的内核组件启动内核配置(pèizhì)程序#Makemenuconfig(在linux源代码目录下)选择loadanAlternateconfigrationfile配置内核共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境(huánjìng)
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织6.2.2嵌入式Linux内核裁剪方法
6.2.3嵌入式Linux内核定制过程
6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.4内核编译及装载编译内核分以下3步进行:(1)正确设置编译内核所需的附属文件,进行依赖性编译:
#makedep说明:此命令会搜索内核编译中的依赖关系并修正内核编译配置(pèizhì)。(2)清除以前构造内核时产生的所有目标文件、模块文件和一些临时文件:
#makeclean共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植(3)生成新的可执行内核映像文件:
#makezImage说明:编译(biānyì)内核并生成内核映像文件zImage。(4)装载内核硬件:通过串口或以太网,将生成的内核文件烧写到嵌入式系统的flash中,启动运行即可。代码:tftpa0500000ramdisk.gztftpa0008000zImagegoa0008000共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植说明:ramdisk是一个最小的linuxrootfs(根文件系统rootfs=RootFilsSystem)系统,它包含(bāohán)了除内核以外的所有linux系统在引导和管理时需要的工具。共八十页本章(běnzhānɡ)目录6.1嵌入式Linux开发环境
6.1.1交叉编译工具介绍6.1.2交叉编译环境的建立6.2嵌入式Linux在ARM平台上的移植
6.2.1Linux内核源代码的组织6.2.2嵌入式Linux内核裁剪方法
6.2.3嵌入式Linux内核定制过程(guòchéng)6.2.4内核编译及装载6.2.5文件系统及其实现
共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.5文件系统及其实现1.文件系统
是指在一个物理设备上的任何文件组织和目录,它构成了Linux系统上所有数据的基础,Linux程序、库、系统文件和用户文件都驻留其中,因此,它是系统中庞大复杂且又是最为基本(jīběn)和重要的资源。Linux支持的文件系统有很多种,比如ext2、minix文件系统、msdos、ntfs、nfs、hpft、ncpfs、affsAmiga等。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植Ext2文件系统是Linux事实上的标准文件系统,它已经取代了它的前任——扩展文件系统(Ext)。Ext支持(zhīchí)的文件最大为2GB,支持的最长文件名为255个字符,而且它不支持索引节点(包括数据修改时间标记)。Ext2文件系统的稳定性、可靠性和健壮性,所以几乎在所有基于Linux的系统(包括台式机、服务器、工作站甚至一些嵌入式设备)上都使用Ext2文件系统。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植Linux下常用(chánɡyònɡ)文件系统结构共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植6.2.5文件系统及其实现2.常用的嵌入式文件系统常用的文件系统基于不同(bùtónɡ)的存储设备可分为3类:基于Flash的文件系统:JFFS2,yaffs,cramfs,romfs等;基于RAM的文件系统:Ramdisk,ramfs/tmpfs等;网络文件系统NFS。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植(1)JFFS2JFFS2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版)JFFS2文件系统是日志结构化的①JFFS2在扇区级别上执行Flash擦除、写、读操作要比ext2文件系统好。②JFFS2提供了比ext2更好的崩溃(bēngkuì)、掉电安全保护。③JFFS2是专门为Flash芯片及其类似嵌入式设备创建的。共八十页6.2嵌入式Linux在ARM平台(píngtái)上的移植(2)yaffsyaffs/yaffs2(YetAnotherFlashSystem)是专为嵌入式系统使用NANDFlash而设计的一种日志型文件系统。与JFFS2相比,它减少(jiǎnshǎo)了一些功能,例如不支持数据压缩,所以速度更快,挂载时间很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士等待接班制度规范
- 规范列车长汇报制度
- 返校学生规范管理制度
- 楼顶门禁卡制度规范
- 规范科室工作制度
- 工地规范用电制度
- 锚杆三级质检制度规范
- 停车场运行规范制度
- 岗位工作制度规范
- 抓捕安全规范制度
- 医院检查、检验结果互认制度
- 2025年医院物价科工作总结及2026年工作计划
- 2026年高考化学模拟试卷重点知识题型汇编-原电池与电解池的综合
- 2025青海省生态环保产业有限公司招聘11人笔试历年参考题库附带答案详解
- 2025浙江杭州钱塘新区建设投资集团有限公司招聘5人笔试参考题库及答案解析
- 2025年天津市普通高中学业水平等级性考试思想政治试卷(含答案)
- 2025年昆明市呈贡区城市投资集团有限公司及下属子公司第二批招聘(11人)备考核心题库及答案解析
- 2025年中国磁悬浮柔性输送线行业市场集中度、竞争格局及投融资动态分析报告(智研咨询)
- 脑膜瘤患者出院指导与随访
- 学堂在线 雨课堂 学堂云 科研伦理与学术规范 期末考试答案
- 2026年武汉大学专职管理人员和学生辅导员招聘38人备考题库必考题
评论
0/150
提交评论