嵌入式Linux操作系统第3章-3

上传人:自*** 文档编号:48591222 上传时间:2018-07-17 格式:PPT 页数:90 大小:2.36MB
返回 下载 相关 举报
嵌入式Linux操作系统第3章-3_第1页
第1页 / 共90页
嵌入式Linux操作系统第3章-3_第2页
第2页 / 共90页
嵌入式Linux操作系统第3章-3_第3页
第3页 / 共90页
嵌入式Linux操作系统第3章-3_第4页
第4页 / 共90页
嵌入式Linux操作系统第3章-3_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《嵌入式Linux操作系统第3章-3》由会员分享,可在线阅读,更多相关《嵌入式Linux操作系统第3章-3(90页珍藏版)》请在金锄头文库上搜索。

1、嵌入式Linux操作系统第3章 基于Linux的嵌入式软件开发 嵌入式软件结构1嵌入式软件开发流程2嵌入式linux开发环境3嵌入式系统引导代码4第3章 基于Linux的嵌入式软件开发linux内核结构及移植5嵌入式文件系统及移植6linux设备驱动概述7设备驱动程序接口8linux设备驱动开发流程9嵌入式文件系统及移植v Linux支持多种文件系统,包括EXT2、EXT3、vFat、 NTFS、ISO9660、JFFS、RomFS和NFS等v 为了对各类文件系统进行统一管理,Linux引入了虚拟文 件系统VFS(Virtual File System),为各类文件系统提供一 个统一的操作界面

2、和应用编程接口。嵌入式文件系统及移植v 基于FLASH的文件系统 1. JFFS2 2. YAFFS 3. Cramfs 4. Romfs 嵌入式文件系统及移植v JFFS2v JFFS文件系统最早是由瑞典Axis Communications公司基 于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2 是RedHat公司基于JFFS开发的闪存文件系统,最初是针 对RedHat公司嵌入式产品eCos开发的嵌入式文件系统, 所以JFFS2也可以用在Linux, uCLinux中v JFFS2主要用于NOR FLASH,不适合NAND FLASH嵌入式文件系统及移植v YAFFS/YAF

3、FS2v YAFFS/YAFFS2是专为嵌入式系统使用NAND型闪存而设 计的一种日志型文件系统。与JFFS2相比,它减少了一些 功能(例如不支持数据压缩),所以速度更快,挂载时间很 短,对内存的占用较小。v 另外, YAFFS/YAFFS2是跨平台的文件系统,除了Linux 和eCos,还支持WinCE, pSOS和ThreadX等。嵌入式文件系统及移植v Cramfs v Cramfs是Linux的创始人 Linus Torvalds参与开发的一种 只读的压缩文件系统。它也基于MTD驱动程序。v 在Cramfs文件系统中,每一页(4KB)被单独压缩,可以随 机页访问,其压缩比高达2:1,为

4、嵌入式系统节省大量的 Flash存储空间,使系统可通过更低容量的FLASH存储相 同的文件,从而降低系统成本。嵌入式文件系统及移植v Romfsv 传统型的Romfs文件系统是一种简单的、紧凑的、只读的 文件系统,不支持动态擦写保存,按顺序存放数据,因而 支持应用程序以XIP(eXecute In Place,芯片内执行,指应 用程序可以直接在FLAH闪存内运行,不必再把代码读到 系统RAM中 )方式运行,在系统运行时节省RAM空间。v uClinux系统通常采用Romfs文件系统嵌入式文件系统及移植v 基于RAM的文件系统v 1. Ramdisk v 2. Ramfs/Tmpfs嵌入式文件系

5、统及移植v Ramdiskv Ramdisk是将一部分固定大小的内存当作分区来使用。它 并非一个实际的文件系统,而是一种将实际的文件系统装 入内存的机制,并且可以作为根文件系统。v 将一些经常被访问而又不会更改的文件(如只读的根文件 系统)通过Ramdisk放在内存中,可以明显提高系统性能。v 在Linux的启动阶段,initrd提供了一套机制,可以将内核 映像和根文件系统一起载入内存。 嵌入式文件系统及移植v Ramfs/Tmpfs v Ramfs/Tmpfs文件系统把所有的文件都放在RAM中,所以 读/写操作发生在RAM中,可以用Ramfs/Tmpfs来存储一 些临时性或经常要修改的数据,

6、例如/tmp和/var目录,这 样既避免了对Flash存储器的读写损耗,也提高了数据读 写速度。v Ramfs/Tmpfs相对传统的Ramdisk的不同之处主要在于: 不能格式化,文件系统大小可随所含文件内容大小变化。v Tmpfs的一个缺点是当系统重新引导时会丢失所有数据嵌入式文件系统及移植v 网络文件系统NFSv NFS是由Sun开发并发展起来的一项在不同机器、不同操 作系统之间通过网络共享文件的技术。v 在嵌入式Linux系统的开发调试阶段,可以利用该技术在 主机上建立基于NFS的根文件系统,挂载到嵌入式设备, 可以很方便地修改根文件系统的内容嵌入式文件系统及移植v 文件系统格式选择的基

7、本策略v 通常,当设计根文件系统时,可以按如下几点配置方案来 解决文件系统的选择:v 把任何在运行时不需要进行更新的文件放在cramFs文件系 统中。因为CramFs的压缩比高达2:1,节约存储空间的效果 是明显的。如果应用程序要求采用XIP方式运行,则可以 选 择采用RomFs文件系统。v 那些需要经常读/写的目录,例如/VAR、/tmp,应该放在 tmpfs文件系统中,以减少对Flash的擦写次数,延长flash 的使用寿命。tmptfs文件系统中的变化在下次启动后是不 会保存的。嵌入式文件系统及移植v 对于那些需要进行读、写,并且在下次启动之后也能将更 新信息保存的文件,则应该放入日志型

8、文件系统里。如果 采用的是NOR型闪存,则应选择JFFs2文件系统;如果是 NAND 闪存,则应选择YAFFS文件系统。嵌入式文件系统及移植v 混合型文件系统格式的设计方法v 综合考虑存储空间和系统可用性因素,适用于嵌入式系统 的文件系统格式各有千秋,因此可以在嵌入式系统中采用 混杂模式的文件系统格式嵌入式文件系统及移植v 嵌入式根文件系统的制作v 结合UP-NetARM2410-S试验箱介绍 Linux根文件系统的构 建过程 1.文件系统方案 2.文件系统构建流程 3.根文件系统的实现嵌入式文件系统及移植v 文件系统方案v 根文件系统: 根文件系统是系统启动时挂载的第一个文件系统,其 他的文

9、件系统需要在跟文件系统目录中建立节点后再 挂载。 UP-NetARM2410-S 有一个 64M 的 NANDFLASH,根 文件系统和用户文件系统都建立在该flash 的后大半部 分。该 flash 的前小半部分用来存放 bootloader 和 kernel 映像。 根文件系统选用了 Cramfs 文件系统格式。嵌入式文件系统及移植v 用户文件系统: 由于 Cramfs 为只读文件系统,为了得到可读写的文件 系统,用户文件系统采用 YAFFS文件系统格式。用户 文件系统挂载于根文件系统下的/mnt/yaffs 目录。v 临时文件系统: 采用了 Ramfs 文件系统。根目录下的/var,/t

10、mp 目录 为 Ramfs 临时文件系统的挂载点嵌入式文件系统及移植v 文件系统构建流程v 在嵌人式 Linux 系统中混合使用 Cramfs、YAFFS 和 Ramfs 三种文件系统的实现思路如下:v 1. 配置内核:将内核对 MTD,Cramfs,YAFFS 以及 Ramfs 文件系统的支持功能编译进内核。v 2. 划分 Flash 分区:对 Flash 物理空间进行分区,以便在不 同的分区上存放不同的数据,采用不同的文件系统格式; 必要时编写 MAPS 文件。今修改系统脚本,在系统启动后 利用脚本挂载文件系统。创建文件系统镜像文件,利用工具 生成文件系统镜像文件,并通过 Flash 烧写

11、工具将镜像文 件烧写到 Flash 物理空间。 嵌入式文件系统及移植v 根文件系统的实现v 制作 Cramfs 格式的根文件系统:一个使用 linux 内核的 嵌入式系统中的 root 文件系统必须包括支持完整 linux 系 统的全部东西,因此,它至少应包括:v 基本文件系统结构,至少含有目录/dev、/proc、/bin、/etc 、/lib、/usrv 最基本的应用程序,如 sh、ls、cp、mv 等v 最低限度的配置文件,如 inittab、fstab 等v 必要的设备支持:/dev/null、/dev/console、/dev/ tty*、 /dev/ttyS*、对应 flash 分

12、区的设备节点等v 基本程序运行所需的函数库:Glibclinux设备驱动概述v linux设备驱动作用v 驱动程序Device Driver,全称为“设备驱动程序”, 是一种可以使计算 机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只有 通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未 能正确安装,便不能正常工作。v Linux 系统内核通过设备驱动程序与外围设备进行交互,设备驱动程 序是Linux内核的一部分,它是一组数据结构和函数,这些数据结构 和函数通过定义的接口控制一个或多个设备。对应用程序而言,设备 驱动程序隐藏了设备的具体细节,对各种不同设备提供一致的接口。

13、不同于windows驱动程序,Linux设备驱动程序在与硬件设备之间建立 了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样, 通过open,close,read,write等系统调用对设备进行操作,如此一来 也大大简化了linux驱动程序的开发。 linux设备驱动概述v 设备驱动程序的主要功能 对设备进行初始化。 启动或停止设备的运行。 把数据从内核传送到硬件和从硬件读取数据。 读取应用程序传送给设备文件的数据和回送应用程序 请求的数据。 检测和处理设备出现的错误等。linux设备驱动概述v 设备驱动程序有如下特点: 驱动程序是与设备相关的。 驱动程序的代码由内核统一管理。 驱动程

14、序在具有特权级别的内核态下运行。 设备驱动程序是输入输出系统的一部分。 驱动程序是为某个进程服务的,其执行过程仍处在进 程运行的过程中,即处于进程的上下文中。 若驱动程序需要等待设备的某种状态,它将阻塞当前 进程,把进程加入到该设备的等待队列中。linux设备驱动概述v linux设备驱动程序的基本结构linux设备驱动概述v 应用程序、库、内核、驱动程序的关系:v 应用程序调用应用程序函数库完成功能、应用程序以文件 形式访问各种资源、应用程序函数库、部分函数直接完成 功能、部分函数通过系统调用。由内核完成内核处理系统 调用。调用设备驱动程序,设备驱动直接与硬件通信。linux设备驱动概述v

15、linux设备驱动的分类v Linux 的方式看待设备可区分为三种基本设备: 字符设备 块设备 网络设备 linux设备驱动概述v 字符设备 :v 一个字符( char ) 设备是一种可以当作一个字节流来存取的设备( 如同 一个文件 ); 一个字符驱动负责实现这种行为。 这样的驱动常常至少 实现 open, close, read, 和 write 系统调用。 v 文本控制台( /dev/console )和串口( /dev/ttyS0 )是字符设备的例子, 因为 它们很好地展现了流的抽象。v 字符设备通过文件系统结点来存取, 例如 /dev/tty1 和 /dev/lp0。 v 在一个字符设

16、备和一个普通文件之间唯一有关的不同就是, 你经常可 以在普通文件中移来移去, 但是大部分字符设备仅仅是数据通道, 你只 能顺序存取。当然,也存在看起来象数据区的字符设备, 你可以在里面 移来移去。 例如, frame grabber 经常这样, 应用程序可以使用 mmap 或者 lseek 存取整个要求的图像。linux设备驱动概述v 块设备 v 如同字符设备, 块设备通过位于 /dev 目录的文件系统结点来存取。 一 个块设备(例如一个磁盘)应该是可以驻有一个文件系统的。v 在大部分的 Unix 系统中, 一个块设备只能处理这样的 I/O 操作, 传送 一个或多个长度经常是 512 字节( 或一个更大的 2 的幂的数 )的整块。 v Linux中则相反, 允许应用程序读写一个块设备象一个字符设备一样, 它允许一次传送任意数目的字节。 结果就是, 块和字符设备的区别仅 仅在内核在内部管理数据的方式上, 并且因此在内核/驱动的软件接口 上不同。 如同一个字符设备, 每个块设备都通过一个文件系统结点

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号