linux驱动开发
文章平均质量分 88
the_wan
173092515@qq.com
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SRAM/SDRAM/DDR/Cache
参考:正点原子《I.MX6U 嵌入式 Linux 驱动开发指南》1、RAM 与 ROMRAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR 等都是 RAM。RAM 一般用来保存程序数据、中间结果。ROM:只读存储器,断电信息不会丢失。从其制造工艺和功能上分,ROM有五种类型,即掩膜编程的只读存储器MROM(Mask-programmedROM)、可编程的只读存储器PROM(Programmable ROM)、可擦除可编程的只读存储器EP原创 2021-10-11 23:16:06 · 4456 阅读 · 0 评论 -
设备驱动中的异步通知机制
参考:正点原子《I.MX6U 嵌入式 Linux 驱动开发指南》1. 异步通知的概念在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据,类似于中断。Linux 提供了异步通知这个机制来完成此功能。异步通知的意思是:一旦设备就绪,则主动通知应用程序进行访问。这样,使用无阻塞IO...原创 2021-10-07 23:47:48 · 386 阅读 · 0 评论 -
linux开机自动挂载配置文件/etc/fstab
开机自动挂载如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。文件挂载的配置文件:/etc/fstab查看此文件可知,每行定义一个要挂载的文件系统;其每行的格式如下:#要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序#UUID=6efb8a23-bae1-427c-ab10-3caca95250b1 /boot xfs defaults 0 0proc ...转载 2021-07-13 23:37:05 · 4828 阅读 · 0 评论 -
Linux内核定时器
1. Linux时间管理和内核定时器1.1 内核时间管理Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、定时器。硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate),比如 1000Hz,100Hz 等等说的就是系统节拍率。系统节拍率是可以设置的,单位是 Hz,我们在编译 Linux 内核的时候可以通过图形化界面设置系统节...原创 2021-10-01 23:50:28 · 570 阅读 · 0 评论 -
Linux中断
参考:《Linux驱动开发入门与实战》《正点原子:I.MX6U 嵌入式 Linux 驱动开发指南》1. 中断的概念中断是指在CPU正常运行期间,由于外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回取继续运行被暂时中断的程序。2. 中断的分类2.1 中断的宏观分类中断从宏观上可以分为两大类,即硬中断和软中断。硬中断硬中断就是由系统硬...原创 2021-09-25 23:53:45 · 693 阅读 · 0 评论 -
Linux杂项设备驱动
一、概念杂项设备是一种特殊的字符设备,在linux2.6之后出现,与platform虚拟总线相关。通常嵌套在 platform 总线驱动中,实现复杂的驱动。其主设备号固定为10,设备注册是用主设备号10来调用register_chrdev()来实现。调用class_create()和device_create()为每个杂项设备创建设备类和设备节点。杂项设备是对字符设备驱动的再次封装,降低了字符设备驱动的难度,同时节约了主设备号资源。二、字符设备与杂项设备实现对比1、字符设备驱动开发...原创 2021-09-22 22:08:32 · 1702 阅读 · 0 评论 -
ioctl应用详解
前言参考以下资料:linux 内核 - ioctl 函数详解https://blog.youkuaiyun.com/qq_19923217/article/details/82698787Linux设备驱动之Ioctl控制https://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html概念1、ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新.原创 2020-09-06 23:56:53 · 2907 阅读 · 2 评论 -
Linux 字符设备驱动(一)---cdev、file_operations、inode、file结构体详述,上层应用如何访问到底层驱动
参考资料: 《Linux驱动开发入门与实战》,概念及源码主要参考《Linux驱动开发入门与实战》,务求准确。同时衷心感谢其他网友的分享。大部分内容都是手敲的,错漏之处望指正,谢谢!linux设备驱动之字符设备驱动https://www.linuxprobe.com/linux-device-driver.htmlLinux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析https://blog.youkuaiyun.com/zqixiao_09/article/det...原创 2020-09-06 18:33:44 · 2697 阅读 · 0 评论 -
Linux 字符设备驱动(二)---字符设备驱动开发流程及主要函数定义
参考资料: 《Linux驱动开发入门与实战》,概念及源码主要参考《Linux驱动开发入门与实战》,务求准确。同时衷心感谢其他网友的分享。大部分内容都是手敲的,错漏之处望指正,谢谢!linux设备驱动之字符设备驱动https://www.linuxprobe.com/linux-device-driver.htmlLinux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析https://blog.youkuaiyun.com/zqixiao_09/article/det...原创 2020-09-06 19:35:37 · 1154 阅读 · 0 评论 -
设备驱动中的并发控制-完成量
参考:《Linux驱动开发入门与实战》Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某事件已经发生,可以在此事件基础上做你想做的另一个事件。1. 完成量的实现完成量是实现两个任务之间同步的简单方法,在内核中完成量由struct completion结构体表示。该结构体定义在include\linux\completion.h文件中,其定义如下所示:struct ...原创 2021-09-05 16:35:06 · 227 阅读 · 0 评论 -
设备驱动中的并发控制-信号量
与自旋锁一样,信号量也是保护临界资源的一种有效方法。Linux中提供两种信号量,一种用于内核程序中,一种用于应用程序中。这里讲的是内核程序中的信号量。只有得到信号量的进程和线程才能进入临界区,执行临界代码。当获取的信号量没有释放时,进程会将自身加入一个等待队列中去睡眠,直到拥有信号量的进程释放信号量后,处于等待队列中的那个进程才被唤醒。当进程唤醒之后,就立刻重新从睡眠的地方开始执行,又一次试图获得信号量,当获得信号量后,程序继续执行。从信号量的原理上来...原创 2021-09-05 16:11:33 · 388 阅读 · 0 评论 -
设备驱动中的阻塞和同步机制
1.阻塞和非阻塞1.1 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。应用程序阻塞读取数据,如下所示:int fd;int ret = 0;int data = 0;fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */ret = read(fd, &data, sizeof(data)); /* 读取数据 */应用程序调用 read 函数从设备中读取数据,...原创 2021-09-04 21:16:47 · 378 阅读 · 0 评论 -
设备驱动中的并发控制-自旋锁
在linux中提供了一些锁机制来避免竞争,引入锁的机制是因为单独的原子操作不能满足复杂的内核设计需求。Linux中一般可以认为有两种锁,一种是自旋锁,另一种是信号量。这两种锁是为了解决内核中遇到的不同问题开发的。其实现机制和应用场合有所不同。自旋锁是一种简单的并发控制机制,其是实现信号量和完成量的基础。自旋锁对资源有很好的保护作用。自旋锁的使用在linux中,自旋锁的类型为struct spinlock_t。内核提供了一系列的函数对struct spinlock_...原创 2021-09-02 23:48:05 · 746 阅读 · 0 评论 -
设备驱动中的并发控制-原子操作
现代操作系统有三大特性;中断处理、多任务处理、多处理器(SMP)。这些特性导致当多个进程、线程或CPU同时访问同一个资源时,可能会发生错误。为了避免这种错误,内核需要提供并发控制机制,对公共资源进行保护。1. 并发与竞争并发是指在操作系统中,同一时间段内有几个程序都处在已启动状态,且这几个程序都是在同一处理机上运行,但是任意时间点只有一个程序在处理机上运行。并发容易导致竞争问题。竞争就是两个或两个以上的进程同时访问同一资源,从而引起的错误。...原创 2021-09-01 23:06:36 · 793 阅读 · 0 评论 -
linux设备驱动开发基础(一)
参考:《Linux驱动开发入门与实战》设备驱动程序时计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁。1. 设备驱动的分类Linux将设备分为3大类,分别是字符设备、块设备、网络设备。每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备。1.1 字符设备是指只能一个字节一个字节读写数据的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。字符设备是面...原创 2021-08-30 22:54:02 · 673 阅读 · 0 评论 -
linux设备驱动开发基础(二)
参考:《Linux内核驱动开发入门与实战》1 驱动模块的组成:一个驱动模块主要由如下部分组成,如图下图所示。这是一个规范的驱动模块应该包含的结构。这些结构在图中的顺序也是在源文件中的顺序。 头文件(可选) 模块参数(可选) 模块功能函数(可选) 其他(可选) 模块加载函数(必须) 模块卸载函数(必须) 模块许可声明(必须) 1.1 头文件:...原创 2021-08-30 21:28:42 · 273 阅读 · 0 评论
分享