Linux驱动(1)--关于驱动的概述
2024-06-03 20:36:36
关于驱动的概述
- Linux驱动包含三种:字符设备驱动、块设备驱动、网络设备驱动。块设备驱动主要包括存储类设备的驱动,比如RAM,SD卡等;网络设备驱动主要包括网络相关设备的驱动,比如以太网等;剩下的都属于字符设备驱动,比如IIC.UART,AD等。我们开发Linux驱动主要是字符设备驱动的开发。
- linux把led,蜂鸣器,IIC,LCD等等设备,都看成了文件。
- 对于文件来讲,不管是什么设备,对它的操作无非是读和写。
- 对于文件的操作一般有五个函数:
open() 打开
read() 读取
write() 写入
ioctl() IO控制
close() 关闭 - 做驱动,尤其是字符类驱动,就是做好open() write() ioctrl()等几个函数的,然后等着上层去调用就可以了。
- 在linux文件系统里面,肯定有个目录叫做/dev,这个目录里的所有文件是设备文件,而不是普通文件。也就是说所有的设备,只要是做好了驱动,都要在这个目录里生成一个文件。比如对led操作,那就要用open这个函数打开设备文件/dev/leds。
- 设备文件里面包含两个信息,主设备号和次设备号。主设备号用来区分不同类的设备,比如LED,串口,网络等。次设备号区分同类设备里的不同的硬件,比如迅为的板子有四个串口,这四个串口主设备号相同,次设备号却不相同。
- 设备号怎么和硬件对应起来呢?
做驱动,其实就是做那几个函数而已,比如open,read等,但是做完那几个函数以后必须注册到系统!注册以后linux才能找到它,上层才能找到它并调用他。 - 怎么注册?
Linux为了解决这个问题,专门做了一个函数,就是为注册而生的,register_chrdev()
int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);
这个函数的第一个参数就是major ,也就是刚才说的主设备号!
第二个参数就是 name, 也就是设备文件的名字!
第三个是个结构file_operations,这个里面就是函数指针,实际就是我们做的那5个函数存在里面!我们先写 open, read,write, close 那几个函数,然后把这几个函数,放到一个结构里面,也就是file_operations。最后通过函数register_chrdev(),把我们做的那几个函数和设备文件以及设备号关联起来就可以了。 - 主设备号自己指定明知要保证和别的设备不一样就可以了。
- 驱动介于文件系统和底层硬件之间,是嵌入到内核中的程序。
- 上层是文件系统和应用,中间是Linux内核和下层是硬件。
Linux设备驱动附着在Linux内核上。
– 对上:Linux设备驱动要给上层提供调用的接口;
– 对中:Linux设备驱动要注册到Linux内核中(或者挂载在总线);
– 对下:操作硬件(GPIO,中断IO、PWM,I2C,SPI等等)
– 以上三个,Linux内核均提供了接口函数。
Linux驱动(1)--关于驱动的概述相关推荐
- Linux和Windows设备驱动架构比较
毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和 ...
- Linux驱动开发 -- touch驱动注册
Linux i2c驱动开发 – touch 驱动 文章目录 Linux i2c驱动开发 -- touch 驱动 前言 一.i2c 驱动框架 二.Linux的MODULE声明 1. MODULE相关声明 ...
- Linux之PWM背光驱动
Linux之PWM背光驱动 | DD'NotesLinux之PWM背光驱动概述 Platform: RK3588/RK356X OS: Linux Kernel: v5.10 通过PWM调光的背光一般 ...
- 零基础学Linux内核之设备驱动篇(8)_设备模型
零基础学Linux内核系列文章目录 前置知识篇 1. 进程 2. 线程 进程间通信篇 1. IPC概述 2. 信号 3. 消息传递 4. 同步 5. 共享内存区 编译相关篇 1. GCC编译 2. 静 ...
- linux内核SPI总线驱动分析(一)
下面有两个大的模块: 一个是SPI总线驱动的分析 (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) SPI总线驱动分析 1 SPI概述 ...
- linux驱动:音频驱动(六)ASoc之codec设备
linux驱动:音频驱动(六)ASoc之codec设备
- linux驱动:音频驱动(五)ASoc之codec驱动
linux驱动:音频驱动(五)ASoc之codec驱动
- linux驱动:音频驱动(四)ASoc之machine设备
linux驱动:音频驱动(四)ASoc之machine设备
- 乾坤合一~Linux设备驱动之终端设备驱动
多想拥你在我的怀里 却无法超越那距离 美好回忆渐渐地远去 盼望今生出现奇迹 无尽的想念 荒了容颜 无助的爱恋 从未改变 这是今天的旋律,,,,今生今世,遥不可及~ 1 终端设备 终端是一种字符型设备, ...
最新文章
- Java项目:无库版银行管理系统(java+Gui+文档)
- POJ Mayor's posters——线段树+离散化
- 清华团队综述全面解读图神经网络理论方法与应用
- Consumer is not subscribed to any topics
- 第十五届全国大学生智能车竞赛室外光电创意组别进入线下比赛的队伍名单
- 速神经网络的训练算法LARS/LAMB工作原理 --UC Berkeley在读博士生尤洋
- avformat_seek_file及其flag含义
- 第四章:通过:driver.getAttribute(value); 获取value的值
- 在2012年安装XCODE旧版本的错误解决方法
- 使用sys无法通过sqlplus或者sqldeveloper连接数据库
- Android开发线程池管理类之ThreadPoolExecutor工具类
- 关于计算机应用基础问题,《计算机应用基础》习题及问题详解
- 云栖专辑 | 阿里开发者们的第8个感悟:在信息大爆炸的时代,保持专注度显得尤为可贵...
- 新手须知,前端该如何与后端合作?
- 深度强化学习调度研究的心路历程
- java swing tooltips_tooltips 提示
- Spine的默认材质Spine/Skeleton有毛边问题
- 优化 | 浅谈旅行商(TSP)的七种整数规划模型
- 梧桐冷 暮秋雨落夜三更
- 中国数字地球行业发展态势与投资前景展望报告(新版)2022-2027年