博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
驱动程序原理
阅读量:6507 次
发布时间:2019-06-24

本文共 1386 字,大约阅读时间需要 4 分钟。

驱动程序原理

Linux驱动程序的数据结构

驱动程序本质:接口函数(应用程序可以操作设备)

  • Linux提供了统一的接口,各个设备厂商实现这个接口

  • Linux如何管理所有的驱动程序呢

  • 块设备和字符设备

  • 内核中使用了2个全局数组存放2类驱动程序

#define MAX_CHRDEV      255#define MAX_BLKDEV      255struct device_struct {     const char * name;     struct file_operations * fops;};static struct device_struct chrdevs[MAX_CHRDEV];static struct {     const char *name;     struct block_device_operations *bdops;} blkdevs[MAX_BLKDEV];

驱动程序调用

int register_chrdev(unsigned int major, const char * name, struct file_operations *fops) 把厂商的接口函数fops存放到chrdevs这个数组中

  • 还记得我们查看设备管理的时候看到的主设备号吗,就是数组index

设备节点如何产生

  • Linux下设备也是文件,只是它们的文件属性特殊而已,应用程序通过文件名来访问设备的驱动程序。

  • 这些文件我们专业点,那就是设备节点。/dev目录下

  • 创建一个设备节点,一个name为mtd4的字符设备节点

mknod /dev/ mtd4 c MTD_CHAR_MAJOR 4

我们创建了一个普通的磁盘文件,没有数据,大小为0,只有文件属性,包括设备类型、主设备号、次设备号

设备节点本质上就是没有内容的文件,只有文件属性,不信你可以vim sda看看,所有文件都是空的

应用程序是如何访问设备驱动的?

例子:向nor flash的第四分区的起始位置偏移512字节写入100字节的数据

fd = open(“/dev/mtd4”, O_RDWR);  lseek (fd,512, SEEK_SET);  write (fd , write_buffer, 100);  close(fd);
  • 应用程序调用Open函数,这是个系统调用函数,程序会进入内核空间调用sys_open函数

  • 在sys_open,首先会根据文件路径“/dev/mtd4”找到这个文件节点,这部分工作是属于VFS(虚拟文件系统)的

  • /dev/mtd4的文件属性是字符设备,于是sys_open会调用函数chrdev_open()

在这个函数里有一句话:

filp->f_op = get_chrfops(MAJOR(inode->i_rdev), MINOR(inode->i_rdev));

  • get_chrfops()里面返回 chrdevs[major].fops

  • Write()最终一定会调用到chrdevs[major].fops->write();

  • Read()最终一定会调用到chrdevs[major].fops->read();

  • 各种驱动程序比较特殊的功能函数都可以通过ioctl()来得到调用。

  • 而次设备号也会作为参数传递给你。

参考自

转载地址:http://sizfo.baihongyu.com/

你可能感兴趣的文章
jre与jdk的区别
查看>>
全景图的种类
查看>>
git 维护
查看>>
jfinal框架下使用c3P0连接池连接sql server 2008
查看>>
Jfinal Generator 不需要生成带某个前缀的表名数组的方法
查看>>
struts2中使用标签操作静态方法等
查看>>
熬夜写了一个小游戏,向SpaceX聊表敬意
查看>>
JPA增删改查,
查看>>
apache 开启 gzip 压缩服务
查看>>
python mysql
查看>>
开源 免费 java CMS - FreeCMS1.5-建站向导
查看>>
jquery 1.6以上版本 全选
查看>>
AppCan 学习
查看>>
flask框架
查看>>
《疯狂Java讲义》学习笔记(十)异常处理
查看>>
Lua(Codea) 中 table.insert 越界错误原因分析
查看>>
ELK 5.x日志分析 (二) Elasticserach 5.2 安装
查看>>
一次奇怪的AP注册异常问题处理
查看>>
TableStore: 海量结构化数据分层存储方案
查看>>
Unity 4.x游戏开发技巧集锦(内部资料)
查看>>