《嵌入式Linux系统开发与应用》康维新第3章-开发环境的建立_第1页
《嵌入式Linux系统开发与应用》康维新第3章-开发环境的建立_第2页
《嵌入式Linux系统开发与应用》康维新第3章-开发环境的建立_第3页
《嵌入式Linux系统开发与应用》康维新第3章-开发环境的建立_第4页
《嵌入式Linux系统开发与应用》康维新第3章-开发环境的建立_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

第3章开发环境的建立第3章开发环境的建立3.1基于ARM9的博创2410s开发实验平台3.2ARM与宿主机的通信3.3交叉编译环境的建立3.4BootLoader技术3.5ARM-Linux内核的编译与移植3.6根文件系统的建立与烧写3.7建立嵌入式Linux应用程序3.1基于ARM9的博创2410s开发实验平台配置名称型号说明CPUARM920T结构芯片三星S3C2410X工作频率203MHzFlashSAMSUNGK9F120864MNANDSDRAMHY57V561620AT-H32M×2=64MEtherNet网卡AX8879610/100Mbps自适应LCDLQ080V3DG018寸16bitTFT触摸屏SX-080-W4R-FBFM7843驱动USB接口4个HOST/1个DEVICE由AT43301构成USBHUBUART/IrDA两个RS232,1个RS485,1个IrDA从处理器的UART2引出AD由S3C2410芯片引出3个电位器控制输入AUDIOIIS总线,UDA1341芯片44.1KHz音频扩展卡插槽168PinEXPORT总线直接扩展GPS_GPRS扩展板SIMCOM的SIM300-E模块支持双道语音通信IDE/CF卡插座笔记本硬盘,CF卡PCMCIA和SD卡插座PS/2PC键盘和鼠标由ATMEGA8单片机控制IC卡座AT24CXX系列由ATMEGA8单片机控制DC/STEP电机DC由PWM控制,STEP由74HC573控制CANBUS由MCP2510和TJA1050构成DAMAX5041个10位DAC端口调试接口JTAG14针、20针表3-1UP-NETARM2410s开发平台硬件配置3.1基于ARM9的博创2410s开发实验平台3.2ARM与宿主机的通信由于主机与目标板是两个独立的个体,要想在它们之间传输数据,就必须首先建立某种数据连接,才能实现通信、文件传输等功能。通常,在目标板和主机之间可以使用串口、以太网接口、USB接口和JTAG接口等连接方式。3.2.1串口通信Linux环境串口通信的工具主要有minicom、picocom等。3.2.2以太网接口3.2.3USB接口3.2.4JTAG接口3.3交叉编译环境的建立交叉开发环境的模型如下图内核映像内核映像根文件系统下载内核映像挂接NFS文件系统HOSTTARGET各种连接方式TARGET就是目标板,HOST是开发主机。在开发主机上,可以安装开发工具,编辑、编译目标板的Linux引导程序(Bootloader)、内核(Kernel)和文件系统,然后在目标板上运行。通常这种在主机环境下开发,在目标板上运行的开发模式叫作交叉开发。本节主要讲解在Linux中编译环境的建立。3.3.1宿主机环境搭建1.基于PC机Windows操作系统的Cygwin;Cygwin是一个在Windows平台上运行的UNIX模拟环境,是Cygnussolutions公司开发的自由软件。它的主要目的是将GNU工具集移植到Win32系统上来。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。对普通用户而言,Cygwin提供了一组UNIX工具,运行时可以将Windows系统变成一部UNIX主机。Cygwin几乎包含了所有的Linux系统下可用的软件包,包括各种开发工具。这些程序和源代码均可免费获得。要安装最新版的Cygwin,可以到://cygwin/,单击“InstallCygwinNow!”。这样会先下载一个叫做Setup.exe的GUI安装程序,可以下载一个完整的Cygwin(我们的光盘里有提供Cygwin软件)。单击Cygwin目录下的“SETUP.EXE文件,将弹出如下图的窗口。3.3.1宿主机环境搭建2.在windows下安装虚拟机〔VMware虚拟机环境〕后,再在虚拟机上安装Linux操作系统。VMwareworkstation是VMware公司设计的专业虚拟机,可以在Windows平台上为几乎任何的其他操作系统提供虚拟运行环境。顾名思义,只要物理主机的内存、CPU等配置足够,就可以在Windows平台上,再“虚拟”出一台或多台“PC机”,而且使用简单,容易上手,是目前用得非常广泛的工具软件。3.3.1宿主机环境搭建3.直接安装Linux操作系统。一般会用到两个桌面操作系统,即linux和windows操作系统,其中Linux主要有Redhat/Fedora、Suse、Mandrake等发行版本。〔1〕Windows与Linux的双重启动;〔2〕为Linux操作系统准备硬盘空间。在一台PC机上安装Linux,建议使用RedHatLinux9.0版本。选择Custom定制方式,进行完全安装,在选择软件Package时选择最后一项everything,即完全安装。再配置好网络、TFTP效劳和NFS〔EnableRunning〕。网络配置主要是安装好以太网,对于一般常见的如RTL8139网卡,RedHatLinux9.0可以自动识别并安装,完全不需要用户参与,因此建议使用该网卡。然后配置宿主机IP地址〔假设IP地址为〕,在Linux命令行〔即终端方式下〕,键入以下命令:配置完成后,简单测试一下NFS是否配置好,可以在宿主机根目录/命令行下执行以下命令:#mount00://mnt注意:对于RedHatLinux9.0,它默认安装是翻开了防火墙,因此对于外来的IP访问它全部拒绝,这样其他网络设备根本无法访问它,即无法用NFSmount它,无法通过TFTP进行下载,无法telnet、ftp等等。因此网络安装完毕后,应立即关闭防火墙。然后转到/mnt/目录下看是否可以列出/目录下的所有文件和目录,如果可以那么说明mount成功,NFS配置成功;否那么应首先配置好NFS。交叉编译环境的建立交叉编译环境是由一个编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括针对目标系统的编译器GCC、目标系统的二进制工具binutils、目标系统的标准C库Glibc和目标系统的Linux内核头文件。在建立交叉编译环境之前,首先要下载包括GCC、binutils、Glibc〔如〕及Linux(如)内核在内的源代码,尽量选用较新版本,Glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致,并设定shell变量PREFIX指定可执行程序的安装路径。交叉编译环境的建立基于ARM平台的交叉工具链,这里将其目标平台名为arm-linux-gnu,比方arm-linux-gcc、arm-linux-gdb等。分步构建交交叉开发工具链的整个过程:1.下载源代码到相关的网站下载包括binutils、gcc、glibc〔如〕及linux(如)内核的源代码。注意:glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致。交叉编译环境的建立

2.建立环境变量声明以下环境变量的目的是在之后编译工具库的时候用到,很方便输入,尤其是可以降低输错路径的风险。

3.配置、安装binutilsinutils是GNU工具之一,它包括连接器、汇编器和其他用于目标文件和档案的工具,它是二进制代码的维护工具。安装Binutils工具包含的程序有addr2line、ar、as、c++filt、gprof、ld、mm、objcopy、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。交叉编译环境的建立4.配置linux内核头文件编译器需要通过系统内核的头文件来获得目标平台所支持的系统函数调用所需要的信息。对于LINUX内核,最好的方法是下载一个适宜的内核,然后复制获得头文件。首先执行makemrproper进行清理工作。接下来执行makeconfigARCH=arm〔或makemenuconfig/xconfigARCH=arm〕进行配置。交叉编译环境的建立5.第一次编译gcc完成此过程需要执行三个步骤,分别如下:〔1〕修改t-linux下的内容;〔2〕配置gcc;〔3〕编译、安装gcc。交叉编译环境的建立

6.交叉编译glibc

这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录.或者也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。3.4BootLoader技术3.4.1初识Bootloader工作原理Bootloader,启动引导程序,又叫引导加载程序,功能强大的Bootloader也就直接叫做板级支持包〔BSP,BoardSupportPacket〕或者固件(Firmware)。近年来,为了方便嵌入式产品的推广,也有些直接将Bootloader叫做BIOS。BIOS是PC机的“根本输入输出系统”,烧录在电脑主板上一块专门的芯片中。一般BIOS由主板厂商或者专门的BIOS生产商提供,不是开源的,用户不能修改其中的代码进行定制。而嵌入式系统的开发那么离不开Bootloader的开发,它也是整个系统开发中的难点之一。

3.4.1初识Bootloader工作原理

1.Bootloader的作用

Bootloader是在嵌入式操作系统内核运行之前运行的一段小程序,也是系统开机后执行的第一段程序。通过这段小程序,可以初始化硬件设备、建立内存空间,从而将系统的软硬件环境设置成一个适宜的状态,以便为最终调用操作系统内核准备好正确的环境。Bootloader是依赖于底层硬件而实现的,因此建立一个通用的嵌入式系统Bootloader几乎是不可能的。在PC机中,主板的BIOS和位于硬盘0磁道上的主引导记录(MasterBootRecord,MBR)中的引导程序〔如LILO或GRUB等〕,两者一起的作用就相当于Bootloader在嵌入式系统中的作用,即实现整个系统的启动引导,并最终能引导操作系统的运行。1.Bootloader的作用在嵌入式系统中,Bootloader对嵌入式设备中的主要部件如CPU、SDRAM、FLASH、串口等进行了初始化,这样可以使用Bootloader通过串口下载各种文件到设备的SDRAM中或者烧录Flash,然后将操作系统内核读入到内存中来或者直接跳转到内核的入口点,从而实现操作系统的引导。现在有些Bootloader也把对以太网的支持等功能也加进去了,这样一个功能比较强大的Bootloader实际上就已经相当于一个微型的操作系统了。Bootloader从第一条指令跳转后,就开始初始化各种最重要的硬件,比方CPU的工作频率、定时器、中断、看门狗、检测RAM大小和Flash等。一般,硬件初始化的这段程序是用汇编语言编写的,其后就用C语言编写。1.Bootloader的作用总体上Bootloader主要完成以下工作:〔1〕初始化CPU速度;〔2〕初始化内存,包括启用内存库,初始化内存配置存放器等;〔3〕初始化中断控制器,在系统启动时,关闭中断,关闭看门狗;〔4〕初始化串行端口〔如果在目标上有的话〕;〔5〕启用指令/数据高速缓存;〔6〕设置堆栈指针;〔7〕设置参数区域并构造参数结构和标记,即引导参数;〔8〕执行POST〔上电自检〕来标识存在的设备并报告有何问题;〔9〕为电源管理提供挂起/恢复支持;〔10〕传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放在Flash中,这样就不需要Bootloader和主机传输操作系统内核镜像文件,这通常是在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操作系统内核镜像文件固化在Flash中,这就需要主机和目标机进行文件传输;〔11〕跳转到内核的开始,在此又分为ROM启动和RAM启动。所谓ROM启动就是用XIP技术直接在Flash中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从Flash复制到RAM中,然后再将PC指针跳转到RAM中的操作系统启动地址。1Bootloader的作用在嵌入式Linux软件系统的开发中,一般将软件分为启动引导程序(Bootloader)、操作系统内核(OSKernel)、根文件系统(FileSystem)、图形窗口系统(GUI)和应用程序(AP)等几个局部,其中前三局部是一个可运行的嵌入式系统必不可少的,它们在开发的过程中,被分别独立地编译链接或打包为一个二进制目标文件,然后下载〔烧录〕到嵌入式系统的ROM〔一般是Flash〕中。后两局部如果有的话,通常也是和根文件系统一起打包后烧录到Flash中。因此,在Bootloader阶段,也提供了对Flash设备的分区格式化的支持,其空间分配通常如下图。FileSystemOSKernelBootparameterBootloader2.Bootloader的工作模式对于嵌入式系统的开发人员而言,Bootloader通常包含“启动加载”和“下载”这两种不同的工作模式。当然,这两种工作模式的区别一般仅仅对于开发人员才有意义,而对最终用户来说,Bootloader的作用就是用来加载操作系统,从而启动整个嵌入式系统。2.Bootloader的工作模式〔1〕启动加载〔Bootloading〕模式--正常启动模式〔2〕下载〔Downloading〕模式--提供给开发人员或者技术支持人员使用3.Bootloader的启动流程分为stage1和stage2两个阶段:一般依赖于CPU体系结构的代码,比方设备初始化代码等,都放在stage1中,而且通常都用汇编语言来实现,以到达短小精悍且启动快的目的;而stage2那么通常用C语言来实现,这样可以实现各种复杂的功能〔如串口、以太网接口的支持等〕。Bootloader的第一阶段:〔1〕硬件设备初始化;〔2〕为加载Bootloader的stage2准备RAM空间;〔3〕拷贝Bootloader的stage2到RAM空间中;〔4〕设置好堆栈;〔5〕跳转到stage2的C入口点main()函数处。3.Bootloader的启动流程

Bootloader的第二阶段:〔1〕初始化本阶段要使用到的硬件设备;〔2〕检测系统内存映射〔memorymap〕;〔3〕将kernel映像和根文件系统映像从flash上读到RAM空间中〔4〕为内核设置启动参数;〔5〕调用内核。3.Bootloader的启动流程

4.BootLoader代码分析

下面对引导程序2410INIT.S进行分析,以加深对BootLoader的理解。在第一阶段完成依赖于体系结构硬件初始化的代码,包括禁止看门狗、禁止中断、初始化各控制存放器拷贝自身到RAM等。IMPORTMainAREAInit,CODE,READONLYENTRY…bResetHandlerResetHandlerldrr0,=WTCON;看门狗初始化ldrr1,=0x0strr1,[r0]ldrr0,=INTMSK;禁止中断ldrr1,=0xffffffffstrr1,[r0]ldrr0,=INTSUBMSKldrr1,=0x7ffstrr1,[r0]…ldrr0,=LOCKTIME;设置PLL相关的LOCKTIME存放器ldrr1,=0xffffffstrr1,[r0]…ldrr0,=SMRDATA;设置存储器控制存放器ldrr1,=BWSCON;BWSCON地址addr2,r0,#52;SMRDATA结束地址详见课本与一般的C语言程序一样,第2阶段程序从Main()函数开始。因为所采用的S3C2410X处理器内含存储器管理单元MMU,所以首先需要进行存储器管理单元的初始化。紧接着设置系统工作主时钟,假设使用USB设备那么USB时钟也需要做相应初始化。其次对端口工作状态进行设定。然后设定处理器工作模式,以及中断控制。最后初始化串口,与宿主机建立联系,以利于显示调试信息。启动成功后,可以执行主程序。3.4.2ViVi的代码分析与移植1.vivi简介vivi是由韩国mizi公司为ARM处理器系列设计的一个bootloader。它同样支持启动加载模式和下载工作模式。在下载模式下,vivi为用户提供一个命令行人机接口,通过这个人机接口可以使用vivi提供的一些命令。如果嵌入式系统没有键盘和显示,那么可以利用vivi中的串口,将其和宿主机连接起来,利用宿主机中的串口软件〔如windows中的超级终端或者Linux中的minicom〕来控制。vivi常用的命令:Load,Part,bon,Param,Boot,Flash。2.vivi文件结构代码包括arch,init,lib,drivers和include等几个目录,共200多条文件。3.vivi的配置和编译①#makedistclean。去除一些早先生成的无用的目标文件。②#makemenuconfig。然后可以根据菜单中的信息进行配置。③“make”命令开始编译。3.4.2ViVi的代码分析与移植3.4.2ViVi的代码分析与移植4.vivi第一阶段的分析vivi的第一阶段主要完成了依赖于CPU的体系结构硬件初始化,包括禁止中断、初始化串口、复制第二阶段到RAM中等。由于这些代码是和硬件紧密相关的,因此要求读者在阅读时对照S3C2410处理器的数据手册,查阅相关的存放器的描述,以便更好地理解。这些汇编代码全部就集中在vivi\arch\s3c2410目录下的head.S这一个汇编文件中,当然还有相关的头文件。3.4.2ViVi的代码分析与移植5.vivi第二阶段的分析vivi的第二阶段的入口就是init/main.c,按照源代码的组织流程,根据模块化划分的原那么,共分为8个功能模块即八个步骤,在源代码的注释中以step非常清晰的给出了区分。3.4.2ViVi的代码分析与移植第一步:vivi从main()函数开始执行,函数开始通过putstr(vivi_bannner)打印出vivi的版本。第二步:主要是初始化GPIO,本的思路和方法就是在把握好整个系统硬件资源的前提下,根据芯片的数据手册把所有的初始值设定,在这里利用set_gpios这个函数就可以完成初始化了。第三步:进行内存映射初始化和内存管理单元〔MMU〕的初始化工作。3.4.2ViVi的代码分析与移植第四步:初始化堆,然后内存会发生变化。在这里,实际上就是实现动态内存分配策略。第五步:初始化mtd设备第六步:配置参数,主要是init_priv_data函数。第七步:提供vivi人机接口的各种命令。第八步:进入Bootloader的两种模式之一。3.4.3U-boot的分析与移植U-Boot,全称UniversalBootloader,是遵循GPL条款的开放源码工程。它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS等嵌入式操作系统。其目前主要支持的目标操作系统有OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS等,因此功能比较强大,这也是U-Boot中Universal的一层含义。U-boot代码结构分析

2.U-boot文件结构U-boot代码采用了一种高度模块化的编程方式,与移植树有关的有以下几个目录:〔1〕board:这个目录存放了所有U-boot支持的目标板的子目录,如board/smdk2410/*就是我们说关心的。要将U-boot移植到自己的s3c2410x目标板上,必须参考这个目录下的内容,比方比照Flash以及Flash宽度和大小的定制邓就要修改其中的flash.c;〔2〕common:独立于处理器体系结构的通用代码,如内存大小探测与故障检测;〔3〕cpu:与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;图3-13源代码树U-boot代码结构分析

〔4〕driver:通用设备驱动,如CFIFLASH驱动〔目前对INTELFLASH支持较好〕;〔5〕fs:这个目录中存放了U-boot支持的文件系统;〔6〕examples:可在U-Boot下运行的例如程序;如hello_world.c,timer.c;〔7〕include:U-Boot头文件;这个目录存放头文件的公共目录,其中include/configs/smdk2410.h定义了所有和S3C2410X相关的资源的配置参数,我们往往只需修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等;U-boot代码结构分析

〔8〕lib_xxx:处理器体系相关的文件,如lib_ppc;〔9〕lib_arm:目录分别包含与PowerPC、ARM体系结构相关的文件;〔10〕net:与网络功能相关的文件目录,如bootp,nfs,tftp;〔11〕post:上电自检文件目录。尚有待于进一步完善;〔12〕rtcrtc:驱动程序;〔13〕tools:用于创立U-BootS-RECORD和BIN镜像文件的工具。U-boot的移植1.获得U-Boot源码2.建立板级支持包3.添加代码,支持从NandFlash启动4.开发板的配置5.修改网卡驱动6.编译U-Boot7.烧写U-Boot注意:实验课详细操作。3.5ARM-Linux内核的编译与移植3.5.1Linux内核版本与特点当提到Linux时,一般是指Kernel,即内核,它是所有Linux操作系统的“心脏”。但仅有Linux并不能成为一个可用的操作系统,还需要许多软件包、编译器、程序库文件、XWindow系统等。因为组合方式不同,面向用户对象不同,所以有许多不同的Linux发行版本。所有的发行版本具有一样的Linux内核,内核包含着所有核心的操作系统功能以及网络协议栈。另外,它们都提供标准的工具、一系列的应用程序、一些打印的文档以及有限的技术支持。嵌入式Linux的版本控制类似于普通的Linux,即版本号的格式为“x.yy.zz”。其中x介于0~9之间,表示的是主要版本,它的变化意味着内核在设计或实现上有重大改变。yy介于0~99之间,表示的是次版本号。yy一方面表示版本的变迁,一方面标志着版本的种类,即“发行版”或“开发版”。如果yy为偶数那么表示一个相对稳定的、已经发行的版本;如果为奇数那么表示还在开发中,目前不太稳定,或在运行中可能出现比较大问题的版本。zz那么表示在内核增加的内容不是很多、改动不是很大时的变迁,只能算同一个版本。3.5.1Linux内核版本与特点一些国内外常见的Linux发行版本。1.红旗Linux2.openSUSELinux3.UbuntuLinux4.RedHatLinux5.MandrakeLinux6.TurboLinux3.5.2Linux内核移植1.内核编译准备〔1〕修改内核目录树根下的Makefile,指明交叉编译器。#viMakefile〔2〕找到ARCH和CROSS_COMPILE并进行修改。ARCH?=armCROSS_COMPILE?=arm-linux-〔3〕设置PATH环境变量,使其可以找到交叉编译工具链。#echo$PATH/usr/local/arm/3.4.4/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin/:/bin:/usr/X11R6/bin:/home/wd/bin〔4〕如果把参加搜索路径,参加下面语句在~/.bashrc中。#vi~/.bashrcexportPATH=/usr/local/arm/3.4.4/bin:$PATH〔5〕再重新登录即可3.5.2Linux内核移植2.设置flash分区〔1〕指明分区信息〔2〕指定启动时初始化〔3〕禁止FlashEcc校验3.配置内核〔1〕支持启动时挂载devfs〔2〕配置内核4.下载内核3.6根文件系统的建立与烧写根文件系统是存放Linux系统所必需的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以包括各种软件包。根文件系统一般包括如下内容。根本的文件系统结构,包含一些必需的目录,例如/dev、/proc、/bin、/etc、/usr、/tmp等;根本程序运行所需的库函数,例如:glibc、uClibc;根本的系统配置文件,例如:rc、inittab等脚本文件;必要的设备支持文件,例如:/dev/hd*、/dev/tty、/dev/fd0;根本的应用程序,例如:sh、1s、cp、mv等。根文件系统的制作就是生成包含上述各种文件的文件系统的过程,可以通过直接复制宿主机上交叉编译器处的文件来制作根文件系统,但是这种方法制作的根文件系统一般过于庞大。也可以通过一些工具如BusyBox来制作根文件系统,用BusyBox制作的根文件系统可以做到短小精悍并且运行效率较高3.6.1嵌入式Linux常用的文件系统文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的、总的目录层次结构。Linux下的文件系统结构图RamfsMTD字符设备MTD块设备目录树虚拟文件系统(VFS)YAFFSJFFS2MTD设备驱动NorFlashNANDFlashRAM用户层内核层底层驱动硬件层常见通用Linux文件系统1.EXT2文件系统EXT2是由RemyCard创造的,它是Linux的一个可扩展的、功能强大的文件系统。至少在Linux社区中,EXT2是最成功的文件系统,是所有当前的Linux发布版的根底。象大多数文件系统一样,EXT2文件系统建立在这样的前提下:文件的数据存放在数据块中,这些数据块的长度都相同。2.EXT3文件系统Ext3文件系统是直接从Ext2文件系统开展而来,它很大程度上是基于Ext2的,因此,它在磁盘上的数据结构从本质上与Ext2文件系统的数据结构是相同的。事实上,如果Ext3文件系统已经被彻底卸载,那么,就可以把它作为Ext2文件系统来重新安装;反之,创立Ext2文件系统的日志,并把它作为Ext3文件系统来重新安装也是一种简单、快速的操作。3.6.1常见通用Linux文件系统在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。1.基于Flash的文件系统Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1〔擦除Flash就是把对应存储块的内容恢复为1〕,因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。3.6.1常见嵌入式Linux文件系统2.基于RAM的文件系统〔1〕ramdiskramdisk是将一局部固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件〔如只读的根文件系统〕通过ramdisk放在内存中,可以明显地提高系统的性能。3.6.1常见嵌入式Linux文件系统〔2〕ramfs/tmpfsramfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统〔VFS〕层,不能格式化,可以创立多个,在创立时可以指定其最大能使用的内存大小。〔实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲〕。3.6.1常见嵌入式Linux文件系统3.网络文件系统〔NFS,NetworkFileSystem〕网络文件系统是FreeBSD支持的文件系统中的一种,它允许一个系统在网络上共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。NFS是由SUN公司于1984年推出。它的通讯协议设计与主机及嵌入式终端系统无关,用户只要在主机中用“mount”就可将某个文件夹挂到终端系统上。常见嵌入式Linux文件系统3.6.2根文件系统的目录结构Linux运行后,它的目录结构和源文件目录结构有所不同。运行系统目录树的主要局部有/root、/usr、/var、/home等。〔1〕/root目录中包括:引导系统的必备文件,文件系统的挂装信息以及系统修复工具和备份工具等。〔2〕/usr目录中包含通常操作中不需要进行修改的命令程序文件、程序库、手册和其它文档等,它并不和特定的CPU相关,也不会在通常的使用中修改。因此,将/usr目录挂装为只读性质的。〔3〕/var目录中包含经常变化的文件,例如打印机、邮件、新闻等的假脱机目录、日志文件、格式化后的手册页以及临时文件等。〔4〕/home中包含用户的主目录,用户的数据保存在其主目录中,如果有必要,也可将/home划分为不同的文件系统,例如/home/students和/home/teachers等。〔5〕/proc目录下的内容并不是ROM中的,而是系统启动后在内存中创立的,它包含内核虚拟文件系统和进程信息,例如CPU、DMA通道以及中断的使用信息等。〔6〕/etc包含了系统相关的配置文件,比方开机启动选项等。〔7〕/bin包含了引导过程必需的命令,也可由普通用户使用。3.6.2根文件系统的目录结构〔8〕/sbin和/bin类似,尽管其中的命令可由普通用户使用,但由于这些命令属于系统级命令,因此无特殊需求不使用其中的命令。〔9〕/dev包含各类设备文件。〔10〕/tmp包含临时文件。引导后运行的程序应当在/var/tmp中保存文件,因为其中的可用空间大一些。〔11〕/boot包含引导装载程序要使用的文件,内核映象通常保存在这个目录中。〔12〕/mnt是临时文件系统的挂装目录。比方U盘、光盘、软盘等都可以在这个目录下建立挂载点。3.6.2根文件系统的目录结构定制系统文件

建立JFFS2文件系统Linux内核早已提供了对JFFS1/2文件系统的支持,因而JFFS1/2文件系统制作和使用是十分简单的。制作JFFS2文件系统的方法是,将JFFS2文件系统所需的必要文件复制到某一个目录如/rootfs中,利用工具将/rootfs中的文件内容创立成映像文件jffs2.img,使用的命令如下:$mkfs.jffs–d./rootfs–ojffs2.img这样便制作好了一个JFFS2的文件系统映像文件。可以测试它是否正确,如:$mount–tjffs2jffs2.img/mnt–oloop$ls/mnt如果正确显示了之前准备的根文件系统目录和文件,那么说明已经制作成功了。建立Ramfs文件系统如果Linux内核已经支持了Ramfs,那么就可以随时使用Ramfs了。创立一个目录,加载RamFS到该目录即可。如下所示:$mkdir/mnt/Ramfs$mount–tramfsnone/mnt/Ramfs注意Ramfs没有对应的dev目录下的设备文件。默认情况下,Ramfs被限制最多可使用内存大小的一半。可以通过maxsize(以KB为单位)选项来改变。如:$mount–tramfsnone/mnt/Ramfs–omaxsize=2000这个命令创立了一个限定最大使用内存为2M的Ramdisk。在/etc/rc.d文件中,常常能看到这样的内容:#mount–ttmpfstmpfs/var–osize=512k#mkdir–p/var/tmp#mdkir–p/var/log#ln–s/var/tmp/tmp这段命令将在/var上创立Ramfs并将Ramfs的最大大小限制为512K。同时,tmp/和/log目录成为RamFS的一局部以便在RAM上存储日志消息。可见Ramfs还是相当实用的一种Ramdisk。如果想将Ramfs的一个项添加到/etc/fstab,那么它可能看起来象这样:tmpfs/vartmpfssize=32m00这将在/var上挂装一个新的Ramfs文件系统。3.6.4NFS文件系统的建立与使用1.NFS建立的工作步骤:⑴实现NFS效劳功能的系统必须安装portmap、nfs-utils两个软件包,一般系统默认安装,并启动该效劳。⑵主机对所提供的共享文件下放权限。⑶客户机针对主机下放的权限把远程文件挂接到本地目录上。2.NFS的主机效劳器配置及启动〔1〕NFS效劳器的配置文件〔2〕exports文件配置格式〔3〕NFS效劳的启动〔4〕显示共享目录状态3.6.4NFS文件系统的建立与使用3.客户端挂接NFS文件系统〔1〕查看NFS效劳输出的共享目录状态〔2〕挂接NFS效劳器中的共享目录〔3〕查看及卸载已挂接的目录3.6.5Samba效劳的建立与使用Samba是一组软件包,是一套让UNIX系统能够应用Microsoft网络通讯协议的软件。它使执行UNIX系统的机器能与执行Windows系统的电脑分享驱动器与打印机。Samba属于GNUPublicLicense〔简称GPL〕的软件。SMB通信协议是微软〔Microsoft〕和英特尔〔Intel〕在1987年制定的协议,主要是作为Microsoft网络的通讯协议,而Samba那么是将SMB协议搬到UNIX上来应用;Samba的核心是SMB协议。Samba的核心是由两个守护进程smbd和nmbd程序组成,它们使用的全部配置信息都保存在smb.conf文件中,smb.conf向这两个守护进程说明输出内容、共享资源等信息。Smbd进程的作用是samba的SMB效劳器,它使用SMB协议与客户连接,完成事实上的用户认证、权限管理和文件共享认为,该软件包的资源与Linux进行协商;nmbd提供NetBIOS名字效劳的守护进程,可以帮助客户定位效劳器和域,如同WindowsNT上的WINS效劳器。另外Samba软件包还包括命令行工具。3.6.5Samba效劳的建立与使用Samba的主要功能如下:(1)提供Windows操作系统风格的文件和打印机共享,Windows操作系统通过它使用共享UNIX等其他操作系统的资源,外表看起来和共享的Windows操作系统资源没有区别。(2)提供SMB客户功能利用Samba提供的smbclint程序可以从UNIX下以类似于FTP的方式访问Windows的资源。(3)备份PC上的资源,利用一个叫smbtar的shell脚本,可以使用tar格式备份和恢复一台远程Windows上的共享文件。(4)提供一个命令行工具,在其上可以有限制地支持Windows操作系统的某些管理功能。3.6.5Samba效劳的建立与使用1.安装Samba效劳器RedHatLinux9中提供了Samba效劳器的RPM包,有以下几个:samba:Samba效劳器软件。redhat-config-samba:Samba效劳的GUI配置工具。samba-common:Samba效劳器及客户端均需要的文件。samba-client:Samba客户端软件。首先检查Samba效劳的安装情况,可以用如下命令:#rpm-qa|grepsamba如果系统没有安装,可以在网上下载samba的tar包或rpm包,也可以把RedHatLinux9.0安装光盘的第一张光盘放入光驱,找到samba的rpm包然后执行如下命令:3.6.5Samba效劳的建立与使用2.启动Samba效劳可以用以下命令进行samba效劳器的效劳名为smb,它的效劳查看状态、启动、停止与重新启动命令为:#servicesmbstatus#servicesmbstart#servicesmbstop#servicesmbrestart也可以用ntsysv命令,设置系统启动时自动加载samba效劳器的启动,或者用如下命令设置启动模式自动加载:#chkconfig--level35smbon3.6.5Samba效劳的建立与使用3.Samba效劳的配置〔1〕配置信息〔2〕设置samba访问密码4.在Windows的网上邻居中访问Samba共享5.Linux系统中Samba效劳器的客户端软件⑴查看共享资源#smbclient-L//hostname或IP地址-Uusername⑵访问指定主机所提供的共享信息#smbclient//hostname或IP地址/sharename-Uusername使用BusyBox构建根文件系统1.BusyBox简介

BusyBox被形象地称为“嵌入式Linux的瑞士军刀”,它是一Unix工具集。它可提供一百多种GNU常用工具、Shell脚本工具等。虽然BusyBox中的这些工具相对于GNU提供的完全工具有所简化,但是它们都很实用。

BusyBox的特色是所有命令都编译成一个文件:BusyBox,其他命令工具(如sh、cp、ls等)都是指向BusyBox文件的链接。在使用BusyBox生成的工具时,会根据工具的文件名链接到特定的处理程序。这样,所有这些程序只需被加载一次,而所有的BusyBox工具组件都可以共享相同的代码段,这在很大程度上节省了系统的内存资源也提高了应用程序的执行速度。

温馨提示

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

评论

0/150

提交评论