第5章 Linux文件系统与设备文件系统
来源:互联网 发布:知识产权侵权 淘宝 编辑:程序博客网 时间:2024/05/23 12:05
本文摘自(偶有较小改动)《Linux 设备驱动开发详解》(宋宝华 编著;人民邮电出版社;),留作纪念。
——Living Park
第5章 Linux文件系统与设备文件系统
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 Linux2.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程序。(http://www.us.kernel.org/pub/linux/utils/kernel/hotplug)
(2) 解压缩udev程序包。
(3) 运行make编译,当前目录生成工具程序。
(4) 将工具程序复制到/sbin目录,同时将解压后获得的etc目录下的udev目录复制到系统的/etc下。
- 第5章 Linux文件系统与设备文件系统
- Linux文件系统与设备文件系统
- linux驱动学习--第七天:第五章 Linux 文件系统与设备文件系统 之 linux文件操作
- linux驱动学习--第八天:第五章 Linux 文件系统与设备文件系统(二) 之 Linux 文件系统
- 5——linux文件系统与设备文件系统
- linux文件系统与设备文件系统的关系?
- Linux 文件系统与设备文件系统(3)
- Linux 文件系统与设备文件
- linux驱动学习--第十天:第五章 Linux 文件系统与设备文件系统(四) 之 设备文件系统 devfs 和 udev
- LINUX 文件系统和设备文件系统
- Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
- Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
- Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统
- Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统
- linux驱动学习--第九天:第五章 Linux 文件系统与设备文件系统(三) 之 file 结构体 和 inode 结构体
- Sysfs文件系统与Linux设备模型
- Linux-2.6设备模型与sysfs文件系统
- linux设备文件系统剖析与使用
- 鸳鸯刀
- 【转】mysql数据类型详解
- php的mssql_connect+端口连接不了的问题
- ext4带来的新变化(原文地址:http://www.ibm.com/developerworks/cn/linux/l-anatomy-ext4/index.html)
- null 对象
- 第5章 Linux文件系统与设备文件系统
- 数据库可以连接,但是对表的查询连接不上
- 哪些 JavaSE 类库最应该掌握
- Cygwin 快捷键无法退出 emacs
- object-c数据库 操作
- 无奈的offer
- java初学者忠告
- CLDC 1.1
- asp digital pagination