Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34308
  • 博文数量: 20
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 21:01
文章分类
文章存档

2011年(1)

2009年(19)

我的朋友
最近访客

分类: LINUX

2009-10-06 12:33:52

5.1 Linux文件操作
5.1.1 文件操作的相关系统调用
       涉及到的函数: creat; umask; open; read; write; lseek; close;
5.1.2 C库函数的文件操作
       fopen 打开模式Linux系统不区分二进制文件和文本文件
       fgetc; fputc; fgets; fputs; fprintf; fscanf; fread; fwrite; fgetpos; fsetpos; fseek; fclose;
5.2 Linux文件系统
5.2.1 Linux文件系统目录结构
       /proc 目录为伪文件系统proc的挂载目录,proc并不是真正的文件系统,它存在于内存之中。
       /sys Linux 2.6内核所支持的sysfs文件系统被映射到此目录。
5.2.2 Linux文件系统与设备驱动
       应用程序和VFS之间的接口是系统调用,而VFS与磁盘文件系统以及普通设备之间的接口是file_operation结构体成员函数。由于字符设备的上层没有磁盘文件系统,所以字符设备的file_operation成员函数就直接由设备驱动提供了,file_operation正是字符设备驱动的核心。
       在设备驱动程序的设计中,一般而言,会关心结构体file和inode这两个结构体。
1.      file结构体。文件结构体代表一个打开的文件(设备对应于设备文件),系统中每个打开的文件在内核空间都有一个关联的struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。
文件读/写模式mode、标志f_flags都是设备驱动关心的内容,而私有数据指针private_data在设备驱动中被广泛应用,被指向设备驱动自定义用于描述设备的结构体。
2.      inode结构体。它是Linux管理文件体统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。对于表示设备的inode结构,i_rdev字段包含设备编号。Linux 2.6 设备编号分为主设备编号和次设备编号,前者为dev_t的高12位,后者为dev_t的低20位。
5.3 devfs设备文件系统
       不需要为设备驱动程序分配主设备号以及处理次设备号,在程序中可以直接给register_chrdev()传递0主设备号以动态获得可用的主设备号,并在devfs_register()中指定次设备号。
5.4 udev设备文件系统
5.4.1 udev与devfs的区别
       udev完全在用户态工作,利用设备加入或移除时内核所发送的热插拔事件来工作。在热插拔时,设备的详细信息会由内核输出到位于/sys的sysfs文件系统。
       采用devfs,当一个并不存在的/dev节点被打开的时候,devfs能自动加载对应的驱动,而udev则不能。这是因为udev的设计者认为Linux应该在设备被发现的时候加载驱动模块,而不是当它被访问的时候。udev的设计者认为devfs所提供的打开/dev节点时自动加载驱动的功能对于一个配置正确的计算机是多余的。
5.4.2 sysfs文件系统与Linux设备模型
       Linux 2.6 内核引入了sysfs文件系统,改文件系统是一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息的proc文件系统十分类似。sysfs的一个目的就是展示设备驱动模型中各组件的层次关系。
5.4.3 udev的组成
       udev以3个分割的子计划发展:namedev、libsysfs和udev。在namedev中使用5个步骤来决定指定设备的命名。
5.4.4 udev规则文件
       udev规则文件以行为单位,以“#”开头的行代表注释行。其余的每一行代表一个规则。每个规则分成一个或多个匹配和赋值部分。
       可以借助udev中的udevinfo工具查找规则文件可以利用的信息。
5.4.5 创建和配置udev
       嵌入式系统中,只需要udevd和udevstart就能使udev工作。
       生成配置udev。
(1)    下载udev程序。()
(2)    解压缩udev程序包。
(3)    运行make编译,当前目录生成工具程序。
(4)    将工具程序复制到/sbin目录,同时将解压后获得的etc目录下的udev目录复制到系统的/etc下。
本文来自: USR组织SNS网站(/home) 详细出处参考:http://www.yellowater.usr.cc/home/space.php?uid=188&do=blog&id=305

阅读(1240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~