Linux设备驱动开发详解 笔记5 Linux文件与设备系统
应用程序和VFS之间的接口是系统调用,而VFS与磁盘文件系统以及普通设备之间的接口是file_operations结构体成员函数。由于字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数直接由设备驱动提供了,file_operations正是字符设备驱动的核心,如图:
而对块设备来说,ext2、fat、jffs2等文件系统中会实现针对VFS的file_operations成员函数,设备驱动层将看不到file_operations的存在。磁盘文件系统和设备驱动会将对磁盘上文件的访问最终转换成对磁盘上柱面和扇区的访问
在设备驱动程序的设计中,一般而言,会关心结构体file和inode这个两个结构体
一个file结构体实例对应一个打开的文件,file结构体中的f_mode(文件读写模式)、f_flags(标志)都是设备驱动关心的,而私有数据指针private_data在设备驱动中被广泛应用,大多指向设备驱动自定义用于描述设备的结构体
inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。是Linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。
其中的i_rdev字段的高12位为是主设备号,后20位为次设备号
Devfs(设备文件系统)优点:
1、可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载时将它删除
2、设备驱动程序可以指定设备名、所有者、权限位,用户空间程序仍可以修改所有者和权限位
3、在程序中可以直接给register_chrdev()传递0主设备号以动态获得可用的主设备号,并在devfs_register()中指定次设备号
在Linux2.4的设备驱动编程中,分别在模块加载和卸载函数中创建和撤销设备文件是被普遍采用并值得大力推荐的好方法:register_chrdev(……)-->devfs_register(……)--> devfs_unregister(……)--> unregister_chrdev(……)
Linux2.6中udev取代了devfs
Udev完全工作在用户态,利用设备加入或移除时内核锁发送的热插拔事件来工作,在热插拔式,设备的详细信息会由内核输出到/sys的sysfs文件系统
Linux2.6内核引入了sysfs文件系统,sysfs被看成是与proc、devfs、devpty同类的文件系统,该文件系统式一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息的proc文件系统十分相似
Sysfs的一个目的就是展示设备驱动模型中各组件的层次关系
在/sys/bus的pci等子目录下,有会分出drivers和devices目录,而devic
相关文档:
总览
用iptables -ADC 来指定链的规
则
,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <signal.h>
using namespace std;
extern char **environ;
void signal_handle(int signal_no){
cout << "sign:" &l ......
对Linux内核中进程上下文和中断上下文的理解
2010年3月3日 10:51 维库开发网 作 者:杨硕,华清远见嵌入式学院讲师
内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同 ......
我用的是最普通的usb摄像头,主芯片为中星微ZC0301P(据说市场占有率70%以上),COMS传感器为hynix的hv7131e1,市面上能买到的基本上是这种配置。
linux下驱动,我直接移植spca5xx,现在出了spc5xx-le(Light-Edition for Linux Embedded)更方便,直接针对嵌入式系统做了优化,可以参考这里http://mxh ......