linux内核--设备驱动程序(学习笔记)
字符设备驱动
一个字符设备要能够工作,需要三部分配合:
- 有一个设备驱动程序的ko模块,包含中断处理函数、设备操作函数。模块初始化时,将设备号注册到内核的全局数据结构cdev_map中。
- /dev目录下有一个文件表示该设备,这个文件在特殊的devtmpfs文件系统上,有相应的dentry和inode。inode中有设备号,通过设备号可以在cdev_map中找到设备驱动程序。
- 用户可以打开一个字符设备文件,类似打开一个普通文件。字符设备文件的相关操作file_operations会指向设备驱动中的设备操作函数。
中断处理程序
外部设备发起的中断,叫做外部中断。外部中断,会到达中断控制器,中断控制器会发送中断向量给CPU。
每一个CPU,有一个idt_table,里面存放了不同的中断向量的处理函数。硬件终端的处理函数由do_IRQ统一处理,do_IRQ根据中断向量查找设备驱动程序中注册的中断处理函数。
块设备驱动
所有的块设备被一个map结构管理从dev_t到gendisk的映射
/dev/xxx在devtmpfs文件系统上,存放有块设备号和dev_t。
mount一个设备,就是把伪文件系统bdev中的block_device信息,放到具体文件系统的super_block中
gendisk中存放有block_device_operations,可以进行块设备操作
注意两个文件系统:devtmpfs和伪文件系统bdev。
通过devtmpfs中的设备号dev_t在伪文件系统bdev中找到block_device。
通过bdev中的block_device,找到主流文件系统的super_block中,接下来就可以
通过主流文件系统(如ext4)的file_operations对块设备进行操作了。
由于主流文件系统有很多,而且未来可能推出新的,写操作系统内核时不可能每次都针对新的文件系统进行更改,因此devtmpfs和伪文件系统只是为了获取和打开block_device,最终对block_device进行读写是交给主流文件系统的。
参考:
https://time.geekbang.org/column/article/101719
linux内核--设备驱动程序(学习笔记)相关推荐
- 【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】
目录 1.Linux内核输入子系统概念导入 1.1 输入设备工作机制 1.2 运行框架 1.3 分层思想 2.驱动开发步骤 2.1 在init()或probe()函数中 2.2 在exit()或rem ...
- 【嵌入式环境下linux内核及驱动学习笔记-(15-1)例程】
目录 1.在APP直接调用标准文件IO操作I2C(针对学习笔记-15的15.3节) 1.1 mail.c 1.2 mpu6050.h 1.3 mpu6050.c 1.4 Makefile 2.以外称i ...
- 【嵌入式环境下linux内核及驱动学习笔记-(11-设备树)】
目录 1.设备树体系 1.1 DTS /DTSI / DTC / DTB 2.基础语法 2.1 节点语法 2.1.1 通用名称建议 2.2 属性语法 2.2.1 属性值 2.3 关于label 2.4 ...
- 反编译linux内核 kmem,Volatility学习笔记一:使用手册
0x00 概述 Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态. 特点: 开源:Python编写,易于和基 ...
- linux 网卡gso,linux内核网络协议栈学习笔记:关于GRO/GSO/LRO/TSO等patch的分析和测试...
TSO,全称是TCP Segmentation Offload,我们知道通常以太网的MTU是1500,除去TCP/IP的包头,TCP的MSS (Max Segment Size)大小是1460,通常情 ...
- linux内核地址映射,Linux内核设备驱动地址映射笔记整理
#include #define ioremap(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE)//cookie表示物理地址, size表示映射 ...
- linux 内核 ide,Linux设备驱动程序学习(7)-内核的数据类型
Linux设备驱动程序学习(7)-内核的数据类型 由于前面的学习中有用到 第十一章 内核数据结构类型 的知识,所以我先看了.要点如下: 将linux 移植到新的体系结构时,开发者遇到的若干问题都与不正 ...
- linux设备驱动程序调试方法,Linux设备驱动程序学习(2)-调试技术
Linux设备驱动程序学习(2)-调试技术 Linux设备驱动程序学习(2)-调试技术 今天进入<Linux设备驱动程序(第3版)>第四章调试技术的学习. 一.内核中的调试支持 在前面已经 ...
- linux lddbus设备,Linux设备驱动程序学习(14)-Linux设备模型(各环节的整合)
Linux设备驱动程序学习(14) -Linux设备模型(各环节的整合) 通过一个设备在内核中生命周期的各个阶段,可以更好地理解Linux设备模型.我将通过分析lddbus和sculld的源码来了解L ...
最新文章
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
- 远程更新FPGA配置的热启动地址(WBSTAR)的格式?
- 修改 ShiroUser 缓存用户
- python中的cli模块_Python 快速实现CLI 应用程序的脚手架
- ogg 11.2 for mysql_配置ogg异构mysql-oracle 单向同步
- SpringMVC介绍之约定优于配置
- 数据结构殷人昆电子版百度云资源_数据结构精讲与习题详解
- plt文件怎么转化为txt文件
- 高并发下的秒杀系统设计
- 阿里靠什么武功秘籍渡过“双十一“的天量冲击
- java协同过滤算法的演唱会门票售票系统
- Python:正则表达式 flags 参数
- 利用feather快速处理大数据
- 笔者带你剖析三种常见的分布式路由算法
- Python将图片写到音频频谱
- execute、executeQuery、executeUpdate的用途及返回值
- 区块链的未来发展趋势
- vue项目获取下拉框选中id_vue获取下拉框值
- 程序员职业规划之技术的精进-安晓辉-专题视频课程
- linux 查看环境变量和修改环境变量
热门文章
- overleaf入门
- 魔兽世界总是显示无法连接服务器,心得:launcher更新无法连接服务器如何解决...
- amd黑苹果万能显卡驱动_22款显卡乱战《赛博朋克2077》:AMD 4K败走麦城-显卡,赛博朋克2077,AMD,NVIDIA ——快科技(驱动之家旗下媒体)-...
- html如何移动整体列表,移动端H5各种各样的列表的制作方法(一)
- java将图片写入pdf
- pandas 按照固定的列顺序排序,并补足缺失列
- 解决centos7 wget 报错nown. wget: unable to resolve host address ‘mirrors.aliyun.com’
- python读取与写入配置文件
- seaborn单变量/双变量/多变量绘图
- java读取与写入excel(.xls .xlsx)