linux设备文件系统统驱动和设备驱动的区别 以及介绍

嵌入式 Linux Android 内核 驱动
Linux设备驱动开发详解-Note(10)--- Linux 文件系统与设备文件系统(2)
Linux 文件系统与设备文件系统(2)
成于坚持,败于止步
Linux 文件系统目录结构
进入 Linux 根目录(即“/”,Linux 文件系统的入口,也是处于最高一级的目录),运行“ls –l”命令,可以看到 Linux 系统包含以下目录。
包含基本命令,如 ls、cp、mkdir 等,这个目录中的文件都是可执行的。
Linux 系统的内核及引导系统程序所需要的文件,如 vmlinuz、initrd.img 文件都位于这个目录中。
设备文件存储目录,应用程序通过对这些文件的读写和控制就可以访问实际的设备。
系统配置文件的所在地,一些服务器的配置文件也在这里,如用户账号及密码配置文件。
普通用户的家目录。
库文件存放目录。
7./lost+found
在 Ext2 或 Ext3 文件系统中,当系统意外崩溃或机器意外关机时会产生一些文件碎片放在这里。
/mnt 这个目录一般是用于存放挂载储存设备的挂载目录的,比如有 cdrom 等目录,可以参看/etc/fstab 的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。
opt 是“可选”的意思,有些软件包会被安装在这里,比如在 Fedora Core 5.0 中的 OpenOffice 就是安装在这里,用户自己编译的软件包也可以安装在这个目录中。
操作系统运行时,进程及内核信息(比如 CPU、硬盘分区、内存信息等)存放在这里。/proc 目录为伪文件系统 proc 的挂载目录,proc 并不是真正的文件系统,它存在于内存之中。
Linux 超级权限用户 root 的家目录。
存放可执行文件,大多是涉及系统管理的命令,是超级权限用户 root 的可执行命令存放地 ,普通用户无权限执行这个目录下 的命令 ,这个目录和/usr//usr/X11R6/sbin 或/usr/local/sbin 目录是相似的。
有时用户运行程序的时候会产生临时文件,/tmp 用来存放临时文件。
这个是系统存放程序的目录,比如命令、帮助文件等,它包含很多文件和目录,Linux 发行版提供的软件包大多被安装在这里。
var 表示的是变化的意思,这个目录的内容经常变动,如/var 的/var/log 目录被用来存放系统日志。
Linux 2.6 内核所支持的 sysfs 文件系统被映射在此目录。Linux 设备驱动模型中的总线、驱动和设备都可以在 sysfs 文件系统中找到对应的节点。当内核检测到在系统中出现了新设备后,内核会在 sysfs 文件系统中为该新设备生成一项新的记录。
17./initrd
若在启动过程中使用了 initrd 映像作为临时根文件系统,则在执行完其上的/linuxrc 挂接真正的根文件系统后,原来的初始 RAM 文件系统被映射到/initrd 目录。
Linux 文件系统与设备驱动
图 5.1 所示为 Linux 系统中虚拟文件系统、磁盘文件(存放于 RamDisk、Flash、ROM、SD 卡、U 盘等文件系统中的文件也属于磁盘文件)及一般的设备文件与设备驱动程序之间的关系。
应用程序和 VFS 之间的接口是系统调用,而 VFS 与磁盘文件系统以及普通设备之间的接口是 file_operations 结构体成员函数,这个结构体包含对文件进行打开、关闭、读写、控制的一系列成员函数。
由于字符设备的上层没有磁盘文件系统,所以字符设备的 file_operations 成员函数就直接由设备驱动提供了,file_operations 正是字符设备驱动的核心。
而对于块存储设备而言,ext2、fat、jffs2 等文件系统中会实现针对 VFS 的file_operations 成员函数,设备驱动层将看不到 file_operations 的存在。磁盘文件系统和设备驱动会将对磁盘上文件的访问最终转换成对磁盘上柱面和扇区的访问。
在设备驱动程序的设计中,一般而言,会关心结构体 file 和 inode 这两个结构体。
1.file 结构体
文件结构体代表一个打开的文件(设备对应于设备文件),系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核和驱动源代码中,struct file 的指针通常被命名为 file 或 filp(即 file pointer)。代码清单给出了文件结构体的定义。
struct file {
* fu_list becomes invalid after file_free is called and queued via
* fu_rcuhead for RCU freeing
struct list_head fu_
struct rcu_head
struct path
#define f_dentry f_path.dentry
#define f_vfsmnt f_path.mnt
const struct file_operations *f_
spinlock_t
/* f_ep_links, f_flags, no IRQ */
#ifdef CONFIG_SMP
f_sb_list_
atomic_long_t
unsigned int
struct fown_struct f_
const struct cred *f_
struct file_ra_state f_
#ifdef CONFIG_SECURITY
/* needed for tty driver, and maybe others */
#ifdef CONFIG_EPOLL
/* Used by fs/eventpoll.c to link all the hooks to this file */
struct list_head f_ep_
struct list_head f_tfile_
#endif /* #ifdef CONFIG_EPOLL */
struct address_space *f_
#ifdef CONFIG_DEBUG_WRITECOUNT
unsigned long f_mnt_write_
文件读/写模式 mode、标志 f_flags 都是设备驱动关心的内容,而私有数据指针private_data 在设备驱动中被广泛应用,大多被指向设备驱动自定义用于描述设备的结构体。
驱动程序中经常会使用如下类似的代码来检测用户打开文件的读写方式。if (file-&f_mode & FMODE_WRITE) //用户要求可写
if (file-&f_mode & FMODE_READ) //用户要求可读
} 下面的代码可用于判断以阻塞还是非阻塞方式打开设备文件。 if (file-&f_flags & O_NONBLOCK)
pr_debug("open: non-blocking\n");
pr_debug("open: blocking\n"); 2.inode 结构体
VFS inode 包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是 Linux 管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁,inode 结构体的定义如代码所示。struct inode {
/* RCU path lookup touches following: */
const struct inode_operations *i_
struct super_block *i_
spinlock_t
i_ /* i_blocks, i_bytes, maybe i_size */
unsigned int
unsigned long
#ifdef CONFIG_SECURITY
struct mutex
unsigned long
dirtied_ /* jiffies of first dirtying */
struct hlist_node i_
struct list_head i_wb_ /* backing dev IO list */
struct list_head i_
/* inode LRU list */
struct list_head i_sb_
struct list_head i_
struct rcu_head
unsigned long
unsigned int
unsigned int
#ifdef __NEED_I_SIZE_ORDERED
seqcount_t
struct timespec
struct timespec
struct timespec
unsigned short
struct rw_semaphore i_alloc_
const struct file_operations *i_ /* former -&i_op-&default_file_ops */
struct file_lock *i_
struct address_space *i_
struct address_space i_
#ifdef CONFIG_QUOTA
struct dquot
*i_dquot[MAXQUOTAS];
struct list_head i_
struct pipe_inode_info *i_
struct block_device *i_
struct cdev
#ifdef CONFIG_FSNOTIFY
i_fsnotify_ /* all events this inode cares about */
struct hlist_head i_fsnotify_
#ifdef CONFIG_IMA
i_ /* struct files open RO */
#ifdef CONFIG_FS_POSIX_ACL
struct posix_acl *i_
struct posix_acl *i_default_
*i_ /* fs or device private pointer */
对于表示设备文件的 inode 结构,i_rdev 字段包含设备编号。Linux 2.6 设备编号分为主设备编号和次设备编号,前者为 dev_t 的高 12 位,后者为 dev_t 的低 20 位。
下列操作用于从一个 inode 中获得主设备号和次设备号:
unsigned int iminor(struct inode *inode);
unsigned int imajor(struct inode *inode);
查看/proc/devices 文件可以获知系统中注册的设备,第 1 列为主设备号,第 2 列为设备名,如下所示: Character devices:
4 /dev/vc/0
5 /dev/tty
5 /dev/console
5 /dev/ptmx
171 ieee1394
189 usb_device
Block devices:
......杳看/dev 目录可以获知系统中包含的设备文件,日期的前两列给出了对应设备的主设备号和次设备号,如下所示: crw-rw---- 1 root uucp 4, 64 Jan 30 2003 /dev/ttyS0
brw-rw---- 1 root disk 8, 0 Jan 30 2003 /dev/sda 主设备号是与驱动对应的概念,同一类设备一般使用相同的主设备号,不同类的设备一般使用不同的主设备号(但是也不排除在同一主设备号下包含有一定差异的设备)。因为同一驱动可支持多个同类设备,因此用次设备号来描述使用该驱动的设备的序号,序号一般从 0 开始。
内核 Documents 目录下的 devices.txt 文件描述了 Linux 设备号的分配情况,它由LANANA ( The Linux Assigned Names And Numbers Authority , 网 址 :http://www.lanana.org/)组织维护,Torben Mathiasen 是其中的主要维护者。需要注意的是,LANANA 给出的设备号标准并不是硬性规定,在具体的设备驱动程序中,尽管一般会遵循 LANANA,但是也可以有例外。
udev 设备文件系统
udev 与 devfs 的区别
尽管 devfs 有这样和那样的优点,但是,在 Linux 2.6 内核中,devfs 被认为是过时的方法,并最终被抛弃,udev 取代了它。
udev 完全在用户态工作,利用设备加入或移除时内核所发送的热插拔事件(hotplug event)来工作。在热插拔时,设备的详细信息会由内核输出到位于/sys 的 sysfs 文件系统。
udev 的设备命名策略、权限控制和事件处理都是在用户态下完成的,它利用 sysfs 中的信息来进行创建设备文件节点等工作。
由于 udev 根据系统中硬件设备的状态动态更新设备文件,进行设备文件的创建和删除等,因此,在使用 udev 后,/dev 目录下就会只包含系统中真正存在的设备了。 devfs 与 udev 的另一个显著区别在于:采用 devfs,当一个并不存在的/dev 节点被打开的时候,devfs 能自动加载对应的驱动,而 udev 则不能。这是因为 udev 的设计者认为 Linux 应该在设备被发现的时候加载驱动模块,而不是当它被访问的时候。udev的设计者认为 devfs 所提供的打开/dev 节点时自动加载驱动的功能对于一个配置正确
的计算机是多余的。系统中所有的设备都应该产生热插拔事件并加载恰当的驱动,而udev 能注意到这点并且为它创建对应的设备节点。
就到这里了,O(∩_∩)O~
我的专栏地址:
待续。。。。
没有更多推荐了,您的位置: >
> linux内核探秘:深入解析文件系统和设备驱动的架构与设计 pdf扫描版
linux内核探秘:深入解析文件系统和设备驱动的架构与设计 pdf扫描版
软件大小:46.4M
软件语言:简体中文
软件类型:国产软件
软件授权:免费软件
更新时间:
软件类别:电子阅读
软件官网:
应用平台:Windows10, Windows8, Windows7, WinVista, Win2003, WinXP, Win2000
网友评分:0分
linux内核探秘:深入解析文件系统和设备驱动的架构与设计是一本linux内核学习指导书,由高剑林编著。本书从工业需求角度出发,注重效率和实用性,是帮助内核研发及调试、驱动开发等领域工程师正确认识并高效利用Linux内核的难得佳作。全书将整个内核分为基础层和应用层,内核中的内存管理、任务调度和中断异常处理归为基础部分,而文件系统,设备管理和驱动归为应用部分,这种划分大大减少了阅读内核的难度,非常适合所有的linux系统爱好者和从业人员下载阅读。内容介绍《linux内核探秘:深入解析文件系统和设备驱动的架构与设计》出发点和写作方式可谓独辟蹊径,将Linux内核分为两个维度,一是基础部分和应用部分,二是内核架构和内核实现,将两个维有机统一,深入分析了Linux内核的文件系统、设备驱动的架构设计与实现原理。全书在逻辑上分为三部分:第一部分(第1~2章)首先将内核层划分为基础层和应用层,讲解了基础层包含的服务和数据结构,以及应用层包含的各种功能,然后对文件系统的架构进行了提纲挈领的介绍,为读者学习后面的知识打下基础;第二部分(第3~9章)从设备到总线到驱动,逐步深入,剖析了设备的总体架构、为设备服务的特殊文件系统sysfs、字符设备和input设备、platform总线、serio总线、PCI总线、块设备的实现原理和工作机制;第三部分(第10~13章)对文件系统的读写机制进行了深入分析,最后通过一个真实文件系统ext2,复习本书所有知识点。 linux内核探秘章节目录前言
第1章 内核的基础层和应用层
1.1 内核基础层提供的服务
1.1.1 内核中使用内存
1.1.2 内核中的任务调度
1.1.3 软中断和tasklet
1.1.4 工作队列
1.1.5 自旋锁
1.1.6 内核信号量
1.1.7 原子变量
1.2 内核基础层的数据结构
1.2.1 双向链表
1.2.2 hash链表
1.2.3 单向链表
1.2.4 红黑树
1.2.5 radix树
1.3 内核应用层
1.4 从Linux内核源码结构纵览内核
1.5 内核学习和应用的四个阶段
1.6 本章小结
第2章 文件系统
2.1 文件系统的基本概念
2.1.1 什么是VFS
2.1.2 超级块super_block
2.1.3 目录项dentry
2.1.4 索引节点inode
2.1.5 文件
2.2 文件系统的架构
2.2.1 超级块作用分析
2.2.2 dentry作用分析
2.2.3 inode作用分析
2.2.4 文件作用分析
2.3 从代码层次深入分析文件系统
2.3.1 一个最简单的文件系统aufs
2.3.2 文件系统如何管理目录和文件
2.3.3 文件系统的挂载过程
2.3.4 文件打开的代码分析
2.4 本章小结
第3章 设备的概念和总体架构
3.1 设备的配置表
3.2 访问设备寄存器和设备内存
3.3 设备中断和DMA
3.4 总线对设备的扫描
3.5 设备驱动管理
3.6 本章小结
第4章 为设备服务的特殊文件系统sysfs
4.1 文件和目录的创建
4.1.1 sysfs文件系统的初始化
4.1.2 sysfs文件系统目录的创建
4.1.3 普通文件的创建
4.2 sysfs文件的打开操作
4.2.1 real_lookup函数详解
4.2.2 为文件创建inode结构
4.2.3 为dentry结构绑定属性
4.2.4 调用文件系统中的open函数
4.3 sysfs文件的读写
4.3.1 读文件的过程分析
4.3.2 写文件的过程分析
4.4 kobject结构
4.4.1 kobject和kset的关系
4.4.2 kobject实例:总线的注册
4.5 本章小结
第5章 字符设备和input设备
5.1 文件如何变成设备
5.1.1 init_special_inode函数
5.1.2 def_chr_fops结构
5.2 input设备的注册
5.2.1 主从设备号
5.2.2 把input设备注册到系统
5.2.3 设备区间的登记
5.2.4 注册字符设备
5.2.5 打开input设备
5.3 input设备架构
5.3.1 注册input设备的驱动
5.3.2 匹配input管理的设备和驱动
5.3.3 注册input设备
5.4 本章小结
第6章 platform总线
6.1 从驱动发现设备的过程
6.1.1 驱动的初始化
6.1.2 注册驱动
6.1.3 为总线增加一个驱动
6.1.4 驱动加载
6.1.5 遍历总线上已经挂载的设备
6.2 从设备找到驱动的过程
6.2.1 注册设备和总线类型
6.2.2 注册设备的资源
6.2.3 增加一个设备对象
6.3 本章小结
第7章 serio总线
7.1 什么是总线适配器
7.2 向serio总线注册设备
7.2.1 注册端口登记事件
7.2.2 遍历总线的驱动
7.2.3 注册input设备
7.3 虚拟键盘驱动
7.3.1 键盘驱动的初始化
7.3.2 与设备建立连接
7.3.3 启动键盘设备
7.3.4 输入设备和主机系统之间的事件
7.4 键盘中断
7.4.1 q40kbd设备的中断处理
7.4.2 serio总线的中断处理
7.4.3 驱动提供的中断处理
7.5 本章小结
第8章 PCI总线
8.1 深入理解PCI总线
8.1.1 PCI设备工作原理
8.1.2 PCI总线域
8.1.3 PCI资源管理
8.1.4 PCI配置空间读取和设置
8.2 PCI设备扫描过程
8.2.1 扫描0号总线
8.2.2 扫描总线上的PCI设备
8.2.3 扫描多功能设备
8.2.4 扫描单个设备
8.2.5 扫描设备信息
8.3 本章小结
第9章 块设备
9.1 块设备的架构
9.1.1 块设备、磁盘对象和队列
9.1.2 块设备和通用磁盘对象的绑定
9.1.3 块设备的队列和队列处理函数
9.2 块设备创建的过程分析
9.2.1 nbd驱动的初始化
9.2.2 为通用磁盘对象创建队列成员
9.2.3 将通用磁盘对象加入系统
9.3 块设备文件系统
9.3.1 块设备文件系统的初始化
9.3.2 块设备文件系统的设计思路
9.4 块设备的打开流程
9.4.1 获取块设备对象
9.4.2 执行块设备的打开流程
9.5 本章小结
第10章 文件系统读写
10.1 page cache机制
10.1.1 buffer I/O和direct I/O
10.1.2 buffer head和块缓存
10.1.3 page cache的管理
10.1.4 page cache的状态
10.2 文件预读
10.3 文件锁
10.4 文件读过程代码分析
10.5 读过程返回
10.6 文件写过程代码分析
10.7 本章小结
第11章 通用块层和scsi层
11.1 块设备队列
11.1.1 scsi块设备队列处理函数
11.1.2 电梯算法和对象
11.2 硬盘HBA抽象层
11.3 I/O的顺序控制
11.4 I/O调度算法
11.4.1 noop调度算法
11.4.2 deadline调度算法
11.5 I/O的处理过程
11.5.1 I/O插入队列的过程分析
11.5.2 I/O出队列的过程分析
11.5.3 I/O返回路径
11.6 本章小结
第12章 内核回写机制
12.1 内核的触发条件
12.2 内核回写控制参数
12.3 定时器触发回写
12.3.1 启动定时器
12.3.2 执行回写操作
12.3.3 检查需要回写的页面
12.3.4 回写超级块内的inode
12.4 平衡写
12.4.1 检查直接回写的条件
12.4.2 回写系统脏页面的条件
12.4.3 检查计算机模式
12.5 本章小结
第13章 一个真实文件系统ext2
13.1 ext2的硬盘布局
13.2 ext2文件系统目录树
13.3 ext2文件内容管理
13.4 ext2文件系统读写
13.5 本章小结
使用说明1、下载并解压,得出pdf文件2、如果打不开本文件,请务必下载3、安装后,在打开解压得出的pdf文件4、双击进行阅读
linux内核探秘:深入解析文件系统和设备驱动的架构与设计 pdf扫描版
高速下载通道
其它下载地址
感谢您对多多软件站的信任,请把这份信任分享给您的朋友!
您的评论需要经过审核才能显示!
软件排行榜
69M / 简体中文 /7.7分
11.6M / 简体中文 /6.2分
58M / 简体中文 /4.3分
54.52M / 简体中文 /5分
15.8M / 简体中文 /6.4分
21M / 简体中文 /5分
59.85M / 简体中文 /6分
1.4M / 简体中文 /6.7分
61M / 简体中文 /7.5分
11M / 简体中文 /8.6分
Copyright (C)
www.ddooo.com. All rights reserved.linux的设备驱动一般分为几类?各有什么特点?_百度知道
linux的设备驱动一般分为几类?各有什么特点?
linux的设备驱动一般分为几类?各有什么特点?
我有更好的答案
大致分为三类,字符驱动,块设备驱动,网络设备驱动。字符设备可以看成是用字节流存取的文件块设备则可以看成是可以任意存取字节数的字符设备,在应用上只是内核管理数据方式不同网络设备可以是一个硬件设备,或者是软件设备,他没有相应的read write,它是面向流的一种特殊设备。
采纳率:25%
为您推荐:
其他类似问题
您可能关注的内容
设备驱动的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。文件过滤驱动和设备驱动的区别
Windows驱动中有较为实用,接近物理层次的驱动设计,称为设备驱动.基于Windows操作系统上还有其他类型的驱动,比如文件系统过滤驱动不属于WDM层次,虽然在编程思路上很相似.文章只是做了简要的异同点总结,更多详细的总结可以下载PDF浏览。PDF下载地址:http://download.csdn.net/detail/u88543一、文件过滤驱动概念在Windows驱动开发中,有一种驱动开发为“文件过滤驱动”,为文件系统提供一种附加的过滤驱动,也是WINDOWS NT执行体的一部分。二、文件过滤驱动的作用文件系统过滤驱劢可以过滤一个或多个文件系统或文件系统卷的 I/O 操作。按不同的种类划分,文件系统过滤驱动可以分成日志记录、系统监测、数据修改或事件预防几类。通常,以文件系统过滤驱动为核心的应用程序有防毒软件、加密程序、分级存储管理系统等。三、文件过滤驱动不是设备驱动文件过滤驱动是协助操作系统进行I/O请求处理,这方面的操作是比较多的。包括:创建、打开、关闭、枚丼文件和目录;获取和设置文件、目录、卷的相关信息;向文件中读取或写入数据。文件系统过滤驱动必须支持文件系统特定的功能,例如缓存、锁定、稀疏文件、磁盘配额、压缩、安全、可恢复性、还原点和卷装载等四、两者的相似点1、请求格式的相似类似亍设备驱劢,文件系统过滤驱劢有着属亍自己的 DriverEntry、Dispatch 和 I/O 组件例程。文件系统过滤驱劢同设备驱劢一样调用许多相同的系统核心例程,它们都会过滤发送给它们所关联的设备的 I/O 请求。2、功能类似文件系统过滤驱劢和设备驱劢都是 I/O 子系统的组成部分,因此它们都接收和作用亍 I/O 请求包(IRP)。类似亍设备驱劢,文件系统过滤驱劢同样可以创建它们自己的 IRP 并将该 IRP 发送到低层驱劢。这两种驱劢均可以通过注册回调函数来接收多种系统事件的通知。3、文件系统控制码同设备驱劢类似,文件系统过滤驱劢可以接收传入的 I/O 控制码(IOCTLs)。而丏,文件系统过滤驱劢还可以接收和定义文件系统控制码(FSCTLs)。同设备驱劢类似,文件系统过滤驱劢可以被配置为在系统引导过程中加载或者在系统吭劢过程完成后加载。五、两者的不同点(1)、无需电源管理由亍文件系统过滤驱劢并丌是真正的设备驱劢,而丏它们丌需要直接控制硬件设备,因此它们并丌接收 IRP_MJ_POWER 请求。(电源管理 IRP 将直接发送到存储设备堆栈中。但是,在非常罕见的情况下,文件系统过滤驱劢有可能会影响到电源管理。)由此,文件系统过滤驱劢并丌注册IRP_MJ_POWER 相关例程,它们也丌会调用 PoXxx 例程。(2)、非WDM文件系统过滤驱劢并丌是 WDM 驱劢程序,WDM 驱劢模型仅适用亍设备驱劢。(3)、没有 AddDevice 或 StartIo 例程由亍文件系统过滤驱劢并丌是设备驱劢,而丏它们并丌直接控制硬件设备,因此它们没有AddDevice 或 StartIo 例程。(4)、创建丌同的设备对象虽然文件系统过滤驱劢和设备驱劢均需要创建设备对象,但是它们所创建的设备对象的种类和数量都是丌同的。设备驱劢创建物理和功能设备对象来描述设备。即揑即用(PnP)管理器将构建一个设备树来存放所有由设备驱劢所创建的设备对象。文件系统过滤驱劢所创建的设备对象,并丌包含在这个设备树中。文件系统过滤驱劢并丌创建物理或功能设备对象,它们创建控制设备对象和过滤设备对象。控制设备对象对系统和用户模式应用程序提供过滤驱劢的描绘。过滤设备对象执行对指定文件系统或卷的实际过滤工作。文件系统过滤驱劢通常创建一个控制设备对象和多个过滤设备对象(5)、其它丌同点:由亍文件系统过滤驱劢并丌是设备驱劢,因此他们将丌会执行直接内存访问(DMA)。不设备过滤驱劢丌同,设备过滤驱劢可以附加到目标设备功能驱劢的上层和下层,文件系统过滤驱劢仅能附加到目标文件系统驱劢的上层。因此在设备驱劢队列中,文件系统仅能迚行上层过滤而无法迚行下层过滤。
没有更多推荐了,Linux文件系统与设备驱动
应用程序和VFS之间接口是系统调用,VFS与磁盘文件系统及普通设备之间接口是file_operations结构体成员函数,包含对文件打开、关闭、读写、控制的一系列成员函数。File_operations是字符设备驱动的核心。
磁盘文件系统和设备驱动将对磁盘文件的访问转换对磁盘上柱面和扇区的访问。
1、& file结构体 系统打开的文件在内核空间都有一个关联的struct
file。由内核在打开时创建,传递给在文件上操作的任何函数。文件关闭后内核释放结构。命名:file或filp
2、& inode结构体
包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。是Linux管理文件系统的最基本单位。
Devfs设备文件系统& 由Linux 2.4内核引入。
驱动程序调用下面函数进行设备文件的创建和删除工作:
Devfs_handle_t
devfs_mk_dir(devfs_handle_t dir, const char *name, void *info);
//创建设备目录
Devfs_handle_t
devfs_register(devfs_handle_t dir, const char *name, unsighed int
flags, unsighed int major, unsighed int minor, umode_t mode, void
*ops, void *info); //创建设备文件
devfs_unregister(devfs_handle_t de); //撤销设备文件
例子:static
devfs_handle_t devfs_
Static int __init
xxx_init(void){
register_chrdev(xxx_MAJOR, DEVICE_NAME,
&xxx_fops);
Printk(DEVICE_NAME, “cannot register major
number\n”);
Devfs_handle =
devfs_register(NULL, DEVICE_NAME DEVFS_FL_DEFAULT, xxx_MAJOR, 0,
S_IFCHR | S_IRUSR | S_IWUSR, &xxx_fops,
Printk(DEVICE_NAME, “initialized\n”);
Static void
__exit xxx_exit(void){
Devfs_unregister(devfs_hangle);
Unregister_chrdev(xxx_MAJOR, DEVICE_NAME);
Module_init(xxx_init);
Module_exit(xxx_exit);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 嵌入式设备文件系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信