文件系统哈尔滨理工大学电子邮件系统_第1页
文件系统哈尔滨理工大学电子邮件系统_第2页
文件系统哈尔滨理工大学电子邮件系统_第3页
文件系统哈尔滨理工大学电子邮件系统_第4页
文件系统哈尔滨理工大学电子邮件系统_第5页
已阅读5页,还剩79页未读, 继续免费阅读

下载本文档

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

文档简介

第9章文件系统

本章主要内容

本章主要介绍:

◆Linux的文件系统结构。 ◆Linux采用的VFS,支持如romfs、ramfs、ex2、jffs2、ms-dos、nfs等各种文件系统。 ◆Linux源程序和开发板根文件系统romfs的目录结构和功能描述。 ◆在uClinux中文件的打开和读写操作示例。目录9.1文件系统结构9.2文件系统类型

9.2.1romfs文件系统9.2.2ramfs文件系统9.2.3JFFS与JFFS2文件系统9.2.4EXT2文件系统9.3文件系统目录结构9.3.1romfs文件系统目录结构

9.3.2uClinux源程序结构

9.4简单编程事例

Linux透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。9.1文件系统结构

将文件系统的操作和管理纳入统一的框架当中来,使得内核的文件系统接口,如同标准的的文件系统“总线”,让用户通过同一组系统调用来管理和操作不同类型文件系统上的文件。这个统一的、抽象的、虚拟的文件系统接口,被称为VFS(virtual组标准的文件操作接FileSystemSwitch),主要包含一口。

VFS与具体文件系统的关系如图9-1所示。9.1文件系统结构

简介

图9-1VFS与具体文件系统的关系用户程序(进程)VFSminixFAT设备文件Ext2文件系统操作的系统调用界面,包括read(),write(),open(),close()等函数sys_read()sys_write()sys_open()等通过file结构中的f_op指针实现的”文件系统总线”………用户空间系统空间

ntfswindowsNT的文件系统msdosdos的文件系统isofs光盘文件系统

nfs

网络文件系统romfsrom中的文件系统smbfs即samba,可以在网络中与win98、winnt共享proc目录/proc下的特殊文件系统jffsflash中的文件系统目前Linux系统支持的文件系统

用户访问磁盘文件系统时,对于目录树下的访问,最终将转换成对这一部分物理磁盘的访问对于设备文件的访问,最终将转换成对于对于驱动程序的访问。

9.1文件系统结构文件访问对于其他特殊文件的访问,一般是在Linux的内存数据结构中完成的。

注意:这两种系统文件的访问最终都反映在磁盘驱动程序上!!

对于磁盘文件系统中文件的访问,是在文件目录树的结构下,对于有组织的数据进行的;而对磁盘设备文件进行访问,则是对于线性空间内数据的访问,也就是无法看到数据的组织情况。图9-2Linux文件系统层次图9.2文件系统类型

romfs文件系统,虚拟ramdisk,

JFFS文件系统。有网络设备的系统,使用NFS文件系统。

在uClinux的系统中,一般内存的容量比较小外存只配置小容量的FLASH。在uClinux中,常用的文件系统有:

9.2.1romfs文件系统简介

romfs(romfilesystem)是一种只读文件系统,系统的管理代码占用的空间比较小,系统创建romfs文件系统需要使用genromfs工具。

值得注意的是,romfs的文件访问权限和属主这些信息尚未完全实现。由于romfs文件系统是只读的,所以可以做得很小,从而节省空间。如果要进行写操作,只能在编译的时候加上写访问功能,或者在运行时另外生成一个RAMdisk送暂存数据。

romfs文件系统结构

9.2.1romfs文件系统romfs文件系统是为了对块设备进行高效管理而开发的。所有的romfs文件,经过genromfs程序生成之后,合并到一个文件(即romfs的映象文件)中去。只需要采用mount命令将这个文件挂接到任何一个目录下,就可以对romfs中的文件以正常方式进行访问了。

romfs映像文件的文件组织方式如表9-1所示。

……16volumename12-16cheeksum8-12fullsizeFS4-8IROM0-4

内容偏移量…fileheaders表9-1romfs映像文件头部结构romfs映像文件开始的8个字节存放了ASCII码“-ROM1FS-”,后面存放了这个文件系统的字节数。

checksum存放从文件头开始的512个字节的校验码。然后是文件系统的卷标名称,该名称以ASCII值为0的字符结尾,所占用的空间为16字节的整数倍。后面存放各个文件的头部结构如表9-2所示。

9.2.1romfs文件系统表9-2romfs中的文件头结构

………16filename校验12-16cheeksum8-12size4-8

距离下一个文件头的说明量

0-4nextfileheader

内容说明偏移量…filedata该文件大小(单位B)文件数据文件名,大小为16整数倍目录硬连接和设备文件信息

域主要有如下几种情况:0:硬链接,域的内容用于链接的目标文件

1:目录,域的内容为第一个文件的文件头

2:普通文件,域的内容无效,应设置为0

3:符号链接,域的内容无效,应设置为0

9.2.1romfs文件系统

4:块设备,域内容为各16bit的主、从设备号

5:字符设备,域的内容无效,设置为0

6:网络socket套接字域的内容无效,设置为0

7:fifo管道文件,域的内容无效,设置为0

9.2.1romfs文件系统注意:romfs文件系统为了减小module的大小省略了很多完整性检测的代码。如:不要生成硬链接循环,要为当前目录和父目录生成“.”和“..”链接。

9.2.1romfs文件系统

EV44B0II的romfs的制作过程如图9-3所示。在主机的/romfs目录下生成需要的目录结构将romfs.img作为初始化数据连接到linux内核当中系统启动时读取

romfs文件系统中的数据使用工具将/romfs目录转换为/romfs的组织结构/romfs.img在主机的/romfs目录下生成需要的目录结构利用genromfs工具,将/cygdrive/d/aaaa/uClinux-44b0ii/romfs目录生成ROMdisk的romfs映像文件romfs.imggenromfs–v–V"ROMdisk"-f/cygdrive/d/aaaa/images/romfs.img –d/cygdrive/d/aaaa/uClinux-44b0ii/romfs

romfs使用:

9.2.1romfs文件系统将romfs.img作为初始化数据连接到Linux内核当中。使用romfs的文件系统的时,可采用mount命令直接将其挂接到合适的目录下,例如(假设/dev/ram0是romfs文件系统的设备):

mount-tromfs/dev/rom0/var

9.2.1romfs文件系统 这样把/dev/ram0挂接到/var目录上去,此后直接对/var目录进行操作即可。但romfs映射到内存中,仍旧无法支持动态擦写保存。如需要动态保存数据可以采用虚拟ramdisk或JFFS进行处理。9.2.2ramfs文件系统ramdisk是使用RAM虚拟的磁盘(该驱动程序在/linux/drivers/block/rd.c),是一个作为盘分区使用的内存块,或者说将内存模拟为硬盘空间。

使用ramdisk可以提高访问速度,若已知某个文件将被高频率访问,通过将文件存放在内存里就可以提高性能。通过加载EXT2文件系统来管理和操作文件。

Ramdisk简介使用ramdisk:ramdisk的配置项是/config/.config文件中的CONFIG_USER_RAMIMAGE_RAMFS128(128K)。ramdisk的加载过程包含在/vendors/micetek/44b/rc文件中:

bin/expand/etc/ramfs.img/dev/ram0 mount-text2/dev/ram0/var9.2.2ramfs文件系统过程:1.将预先生成的EXT2的磁盘映像压缩格式释放到块设备上

2.使用mount命令将ram块设备中的文件系统安装到根文件系统的/var下。3.可以对ramdisk进行文件操作了。

9.2.3JFFS与JFFS2文件系统ramdisk是运行在内存中的,所以在系统掉电后,所有保存的数据都会丢失。这时,一个比较好的选择是JFFS文件系统(最新的版本是JFFS2),JFFS文件系统一般使用FLASH作为磁盘,所以在掉电后数据不会丢失;而且,JFFS可以对由于在掉电时刻操作导致的不完整数据进行修复。

JFFS存储格式

JFFS是一个日志结构的文件系统。只有一种文件节点,它通过jffs_raw_inode这个结构进行描述。每个这样的节点都关联到某个文件上,其中包含了一个简单的头部、辅助信息以及存储的数据。存储的辅助信息包括通常所记录的文件inode信息(如uid,gid等)及所关联的文件名。

9.2.3JFFS与JFFS2文件系统JFFS

注意:由于在JFFS中,大的文件都分为很多节点存放,所以除了存放数据外,还要额外保存数据在文件中的偏移量。设备文件节点和符号链接等特殊的文件只需要占用很小的空间。

删除文件时,在辅助信息存放的地方设置一个已删除标记,被删除文件的Flash块都会加上这个已删除标记,在该文件的文件句柄释放后,这些节点就成为废弃节点了。更新文件的时,新的文件存放的节点会添加到所有已经使用的存储空间的末尾,旧版本的文件也会被废弃,等待在回收空间的时候重新分配利用。

9.2.3JFFS与JFFS2文件系统

文件系统操作的实施过程9.2.3JFFS与JFFS2文件系统

挂接

挂接JFFS文件系统时,会把整个存储设备扫描一次,每个存储块都读取一次,然后根据所有节点中存储的信息来生成一个文件系统的目录树,同时也自动生成了一个文件在Flash中物理存储位置的对应表,用来进行文件的寻址操作。读取

文件目录结构可以通过mount时生成的信息获得,cd和rmdir等目录操作都可以直接根据这些信息来确定如何操作。读取文件时,利用mount时生成的物理地址将指定的内容读入到缓存区中。9.2.3JFFS与JFFS2文件系统改变属性 例如改变文件的属主(chown命令)和操作权限(chmod命令)等操作,只需要将一个记录新的信息的节点写到Flash已利用的存储空间的末尾,然后将旧节点标记为废弃节点即可。

9.2.3JFFS与JFFS2文件系统

写文件等操作也与此类似,并不是通过直接改写旧节点来完成的。空间回收

9.2.3JFFS与JFFS2文件系统

JFFS的文件系统操作使占用的存储块增多,当所有存储块都被占用后,文件系统开始对废弃的存储块进行回收利用。

注意:如果发现所有回收空间加起来仍不足以满足当前操作的需求,则系统不能继续当前的操;同时,系统也自动从所有存储块中的第一个开始进行分析,不断将废弃的节点回收,将尚在使用的节点进行合并,最终合成出整个的——块废弃的Flash存储块,这样就可以将这一整块存储块的内容一次性擦除,成为新的空闲块。9.2.3JFFS与JFFS2文件系统缺陷

对空间回收,JFFS并没有进行太多优化,效率不高。它是按照顺序,从第一个数据块开始腾出空间,如果第一块写满了有效数据,它也会将这些数据后移,腾出第一块来作为空闲块。

但这种方式保证了Flash的每一块都可以得到相同的擦写次数,有利于提高整个Flash设备的使用寿命。

9.2.3JFFS与JFFS2文件系统JFFS不支持对数据进行压缩之后存储。而在嵌入式系统中,如果数据可以得到最大限度的压缩,可以提高资源的利用率,提高性能、节省成本。不支持硬链接,每一个存储块中都保存了对应的文件名。这样,就算是很常用的改名操作,也需要增加一个新的需要保存全部所需数据的存储块进行存储。9.2.3JFFS与JFFS2文件系统

JFFS2的节点头部中增加了一些新的信息,包括CRC校验码和节点类型等。

由于JFFS空间回收方式的缺陷,在JFFS2中,所有的存储节点都不可以跨越Flash的块界限了。

9.2.3JFFS与JFFS2文件系统

JFFS2的主要改进

这样,就可以在回收空间的时候,按照Flash的各个块为单位,进行选择,将最合适的块腾出来,擦除之后作为新的空闲块,提高效率与利用率。JFFS2有3种节点类型了,分别用于表示擦除块的标记、普通文件、目录。第一种是在Flash擦除了一块之后建立的,用于表明F1ash的块擦除工作完成。文件系统的信息可以很快取得数据并不保存在内存之中,从而可以提高内存的利用率。增加了对数据的压缩。开始支持硬链接。9.2.3JFFS与JFFS2文件系统JFFS文件系统的结构9.2.3JFFS与JFFS2文件系统JFFSJFFS2

MTD

FLASH,RAMMTD是内存技术设备子系统,负责操作和管理FLASH和RAM物理器件,可以自动识别该器件,还支持将一块FLASH器件分为不同的分区管理,这样可以将Linux内核和根文件系统分别存在不同的分区,避免由于FLASH擦写和文件系统组织结构的相互影响。MTD向JFFS提供了字符型和块设备,对于需要无延时的写入使用字符设备,如Linux内核的升级。块设备为JFFS文件系统服务,在加载JFFS文件系统后,可以操作和管理文件。

EV44B0II在使用JFFS文件系统时,要进行特殊处理,因为S3C44B0X的中断向量表在FLASH中,所以在操作FLASH擦写时,要关闭中断和快速中断,以避免FLASH在擦写状态下,返回的状态数据,被误解成跳转地址。9.2.3JFFS与JFFS2文件系统

文件系统组成每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分引导块、超级块、inode区以及数据区等四部分。9.2.4EXT2文件系统

EXT2文件系统是Linux中主流的文件系统。在Linux中,普通文件和目录文件保存在称为块物理设备的磁盘或者磁带上。一套Linux系统支持若干物理盘,每个物理盘可定义一个或者多个文件系统。

引导块:在文件系统的开头,通常为一个扇区,存放引导程序,用于读入并启动操作系统。超级块(superblock):用于记录文件系统的管理信息。特定的文件系统定义了特定超级块。inode区(索引节点):一个文件(或目录)占据一个索引节点。利用根节点(首个索引节点),可以把一个文件系统挂在另一个文件系统的非叶节点上。数据区:用于存放文件数据或者管理数据(如一级间址块、二级间址块等)。9.2.4EXT2文件系统EXT2是Linux中的一个可扩展的文件系统。通过VFS的超级块(structext2_sb_info

ext2_sb)可以访问EXT2的超级块,通过VFS的inode(stuctext2_inode_infoext2_i)可以访问EXT2的inode。9.2.4EXT2文件系统

访问EXT2文件系统EXT2的源代码在:

/usr/src/linux/fs/ext2目录下,数据结构在文件/usr/src/linux/include/linux/ext2_fs.h及同一目录下的文件ext2_fs_i.h和ext2_fs_sb.h中定义。EXT2中文件由逻辑块的序列组成。数据块的长度相同。不同的EXT2系统长度可以不同。文件总是整块存储,不足一块的部分也占用一个数据块。

9.2.4EXT2文件系统文件存储方式EXT2中的每个文件都用一个单独的inode(即stuctext2_inode结构)来描述,而每个inode都有一个唯一的标志号。通过使用inode来定义文件系统的结构以及描述系统中每个文件的管理信息。EXT2文件系统中的每个文件都用一个单独的inode(即stuctext2_inode结构)来描述,而每个inode都有一个唯一的标志号。EXT2通过使用inode来定义文件系统的结构以及描述系统中每个文件的管理信息。9.2.4EXT2文件系统挂接(mount)为ext2文件系统

mount-text2/dev/ram0/tmp 将/dev/ram0上ext2文件系统挂接到/tmp目录9.3文件系统目录结构

嵌入式Linux中,文件系统通常还是按照标准的目录结构来存放所有的文件的。在本节之中,选择了uClinux(Micetek)开发环境中的默认目录、文件层次来对嵌入式Linux中的目录与文件进行介绍。

内容简介9.3.1romfs文件系统目录结构

图9-5uClinux生成的romfs文件系统目录结构

uClinux生成的目录结构//prlc/sbin/home

/dev/bin/lib/etc/var/tem/usr

/bin和/sbin存放了可执行程序;/dev目录存放的是系统设备文件,提供系统中各种设备的说明;

/etc目录存放系统中各种关于用户帐号、网络等的配置文件和启动脚本;/lib下存放了库文件;/proc下面是系统信息(本目录是虚拟目录,并不存放在romfs中,而是在系统运行的时候自动生成);

9.3.1romfs文件系统目录结构/proc下面是系统信息(本目录是虚拟目录,并不存放在romfs中,而是在系统运行的时候自动生成);/usr

目录是Linux系统里面占用磁盘空间最大的目录,是用户共享文件目录;

/home是系统默认的普通用户的主目录的根目录;/var、/tmp是一些系统记录文件和临时文件存放地。

本节主要介绍/etc,/bin,/sbin和/dev目录。9.3.1romfs文件系统目录结构

/etc目录

在/etc目录中,通常保存的是启动脚本和应用程序的配置文件。 在uClinux中,/etc目录下默认文件如表9-3所示。9.3.1romfs文件系统目录结构表9-3/etc目录下主要文件及用途文件名用途inetd.confInetd的配置文件,配置网络服务inittab初始化文件motd(issu)uclinux的版本文件passwd密码文件rc启动脚本resolv.confDNS设置services网络服务端口配置versionMICETEK版本信息

inetd.conf(未用) 文件inetd.conf中的内容如下:

telnetstreamtcpnowaitroot/sbin/telnetd httpstreamtcpnowaitroot/sbin/httpd-i uptimestreamtcpnowaitroot/bin/cat/proc/uptime/etc/motd9.3.1romfs文件系统目录结构

从文件内容看出:

对telnet的登录请求,将会由/sbin/telnetd来处理;对http请求,则会由/sbin/http来处理;对于uptime,则会将/proc/uptime的内容和/etc/issue中的内容显示出来。

inittab由于要在启动的时候通过串行口向调试机发回提示信息、错误信息等,因此文件inittab这里要进行终端的初始化。motd(或issue)文件motd中的内容主要是uClinux的一些欢迎信息,在启动MICETEK开发版的时候,会在登录之前显示这些欢迎信息。

9.3.1romfs文件系统目录结构Passwd文件passwd中的内容:rootab6TRGT20sY26r

rc文件rc中的内容:

hostnameEV44B0II

/bin/expand/etc/ramfs.img/dev/ram0 mount-tprocproc/proc mount-tramfs/dev/ram0/var9.3.1romfs文件系统目录结构

mkdir/var/config mkdir/var/tmp mkdir/var/log mkdir/var/run mkdir/var/lock cat/etc/motd ifconfiglo routeadd-netnetmasklo dhcpcd-p-aeth0& ifconfigeth00 MDB:9999&9.3.1romfs文件系统目录结构本系统的rc文件中主要完成的功能:

◆

设定hostname为EV44B0II。

◆使用ifconfig设定网络(ip地址、网关等)。

◆使用expand将ramfs展开到/dev/ramO。

◆挂接/var(ram盘)和/proc文件系统。 ◆建立一些目录,显示欢迎信息,启动MDB调试服务程序。9.3.1romfs文件系统目录结构resolv.conf(未用)

resolv.conf中设定了DNS服务器的中地址servicesTCP和UDP可以同时被多个进程使用,需要给这些进程分配不同的端口号加以区别。该文件包含分配给各种服务的端口号。如telnet的TCP端口号为23,http为80,ftp为21等。

9.3.1romfs文件系统目录结构

/bin、/sbin目录

这个目录是系统中最主要的可执行文件的存放地,这些可执行文件大都是uClinux系统里最常用的命令。

这些命令可以大致归为下面几类:9.3.1romfs文件系统目录结构 1.文件操作:cat,cmp,cp,ln,ls,mkdir,more,mv,pwd,rm,rmdir,cd,chmod,chown,expand,umask。

2.系统管理:df,free,kill,mount,ps,sh,shutdown,umount,init,exec,mknod,sleep,telnet,date,echo。 3.网络管理:hostname,login,ping,ftp,ifconfig,finger,route。

9.3.1romfs文件系统目录结构

/dev目录

在采用了devfs(设备文件系统)之后,部分地解决了这个问题。在这个目录下,仅包含终端、串口、ROM和必须具有的设备文件(如mem,null等),构造了一个精简的/dev目录。9.3.1romfs文件系统目录结构

此外,如果需要再添加相应的设备文件。例如,假如需要支持framebuffer使用图形界面,就可以添加fbO等设备文件的节点,然后使用genromfs重新生成romfs映像文件,上传到MICETEK开发板上即可。9.3.2uClinux源程序结构 在MICETECK开发板的uClinux源程序目录为:uclinx-44b0ii,其目录结构描述如下:lib/uclibc

lib是用户应用程序库目录,包括libc、libm等函数库。uclibc包括uc-libc、uc-libm等函数库。usr

它包括用户模式下的应用软件,如:ftp,httpd,ifattach,init,mircrowindows,mount,tftp,tftpd,route等各种免费应用软件包。config针对不同厂商开发板的配置情况,裁减配置uClinux内核,形成的配置脚本文件。此目录提供一个交互的Linux配置程序。vendors此目录下包括各种开发平台的特殊结构信息和支持文件。如MICETEK平台的支持文件就在ventors/micetek/44b0目录下。romfs

它是一种romfs文件系统,用于构造开发平台的root根文件系统,包括/bin、/etc、/dec、/home、/lib、/mnt、/proc、/usr、/var等字目录。

9.3.2uClinux源程序结构images包含linux_bootram.bin、linux_bootrom.bin和romfs.img三个文件,linux_bootram.bin是下载到开发平台ram区执行文件,linux_rom.bin是烧制开发平台的flash区的文件,romfs.img是开发平台的root根文件系统romfs映象文件。Linux2.4.x它是Linux2.4.x内核源代码文件目录,

下面详细介绍目录文件的分布情况。9.3.2uClinux源程序结构kernel目录

此目录下最主要的文件当属sched.c。

调度程序schedule及相关操作。等待队列及相关操作。基准时钟及相关操作。定时器相关操作任务队列及相关操作。关于调度策略控制的goodness、nice等。各种用户标识、组标识的set和get。

sched.c文件定义的函数有:9.3.2uClinux源程序结构

time.c,提供用户程序与系统间对于时间的操作界面。resource.c,关于I/0端口资源(port)的管理。dma.c,关于DMA通道的管理。softirq.c,关于bottomhalf队列的操作。itimer.c,关于itimer定时器读写的系统调用。printk.c,展示系统工作参数的操作.

该目录下还包含一些重要的文件:

9.3.2uClinux源程序结构关于进程控制的文件也位于此目录下:fork.c文件创建do_fork()“克隆”子进程的函数exit.c文件定义结束自身进程的do_exit()

end_sig发送信号(signal)操作signal.c中的函数对信号控制。wait操作mm/nommu目录

Linux中独立于CPU体系结构特征的内存管理文件几乎都集中在此目录下。

swap.c文件并不实现任何交换算法,它仅仅处理命令行选项“swap=”和“buff=”。swapfile.c文件才是管理交换文件和交换设备的源程序。它包含swapon、swapoff系统调用的执行程序及从交换空间申请空闲页面的操作get_swap_page。9.3.2uClinux源程序结构page_io.c文件实现与交换空间底层的数据传输。

swap_state.c文件维护swap缓存,vmscan.c文件定义后台交换进程kswapd的代码及内存空间扫描函数,实现Linux的页面换出策略,

memory.c文件存放内存管理中底层核心函数,如缺页中断响应函数do_no_page()

9.3.2uClinux源程序结构虚拟空间映射(mapping)操作do_mmap()和do_munmap()及系统调用brk的响应函数,都涉及进程虚拟空间地址的调整,相关源代码在mmap.c文件中。对mremap的操作代码则在mremap.c文件中。mlock.c文件实现四个关于内存vma段加锁操作的系统调用mlock、munlock、mlock-a11、munlockall。mprotect.C实现mprotect系统调用mprotect。9.3.2uClinux源程序结构

fs目录

直接隶属该目录的文件分别是:exec.c

实现execve系统调用。其余五种关于装入执行程序的函数都由C语言库文件实现。execve支持脚本(script)文件和多种格式的可执行文件。devices.c

负责设备的注册和注销,定义缺省的打开设备操作和释放设备操作。9.3.2uClinux源程序结构

block_dev.c

包含缺省的读、写设备操作

super.c

定义超级块的读操作及文件系统安装卸装操作

inode.cVFSinode的读写操作及维护inode缓存的程序

dcache.c

维护dcache的文件

namei.c

访问权限检查。根据路径检索dentry的相关操作,如open_namei、path_walk、buffer.c

实现缓存区缓存的文件。9.3.2uClinux源程序结构open.c。文件打开、关闭操作,实现系统调用chown、chmod、fchown、fchmod、chroot、chdir、fchdirread_write.c

系统调用read、write、lseek、llseek的源程序。oreaddir.c。实现读目录项的系统调用readdir和getdents

。

select.c。集中存放select操作的几乎全部源代码。9.3.2uClinux源程序结构pipe.c和fifo.c实现管道(pipe)和命名管道(fifo)除fifo_open()和fifo_init()函数在fifo.c文件外,其余均存放于pipe.c文件中。ioctl.c。实现系统调用ioctl。fcntl.c。实现关于fcntl操作命令的源代码。dquot.c。支持磁盘配额机制(quota)。9.3.2uClinux源程序结构

arch目录 与CPU类型相关的子目录和文件均集中安排在此目录下。这里又有子目录alpha、arm、armnommu、i386、ia64、m68k、mips、mips64、parisc、ppc、s390、sh、sparc,每个子目录对应一种CPU,例如/arch/armnommu/mach-micetek就是关于MICETEK板,没有mmu的armCPU子目录。9.3.2uClinux源程序结构容纳Linux源程序的所有头文件(headerfile)。其中:与平台无关的头文件在include/linux子目录下,与平台无关低级头文件在asm-generic目录下,与MICETEK平台相关的头文件在include/asm-armnommu/arch-micetek子目录下。另有关于网络设备的头文件目录include/net。9.3.2uClinux源程序结构

include目录

net目录中存放的是和Linux网络相关的C文件。其中每一种网络地址族都为一个目录,如appletalk、Ipv4等在core目录下是各种网络地址族公用的文件。sched目录下存放的是对高性能网络的QoS支持,khttpd目录中存放的是内核级别的-Web服务器支持。9.3.2uClinux源程序结构

net目录

drivers

9.3.2uClinux源程序结构在drivers目录下,存放各种设备的驱动程序。其中:/drivers/char目录下的ev44b0_sound、ev44b0_USB、ev44b0_kbd、ev44b0_ts是MICETEK是平台的声卡、USB、键盘和触摸屏的驱动程序在。/drivers/net目录存放Smc9113网卡驱动程序在下。

9.4简单编程事例

例1.在uClinux中实现文件的打开和读写操作,同时对ROMFS和RAMDISK中的EXT2文件系统进行了操作,从而了解了ROMFS文件系统的特性,对在RAMDISK中保存数据有了一些认识。

熟悉uClinux环境下文件系统,了解uClinux中文件系统的体系结构,编写文件系统处理程序。

下面对本例题涉及到的函数进行简要介绍:

int

creat(constchar*pathname,mode_tmode);

以mode方式创建一个以pathname为文件名的文件,返回新的文件句柄fd,错误返回-1及错误代码errno。

Int

open(constchar*pathname,intflags);

以flags方式打开一个以pathname为文件名的文件,正确返回0,错误返回-1及错误代码errno。

size_t

read(int

fd,void*buf,size_tcount);

把fd指向的文件传送count字节到buf指针所指向的内存中,正确返回实际写入的字节数,错误返回-1及错误代码errno。

size_t

write(int

fd,void*buf,size_tcount);

把buf指针指向的内存count字节传送到fd指向的文件中,正确返回读到的字节数或0,错误返回-1及代码errno。

off_t

lseek(int

fd,off_t

offset,intwhere);

将fd所指文件的读写指针在where位置移动offset个位移

温馨提示

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

评论

0/150

提交评论