
linux驱动
文章平均质量分 84
Half-up
【Keep Reading , Keep Writing , Keep Coding.】
展开
-
Linux设备树
关于设备树的使用和说明的一些补充设备树能够更快速的编译,修改后不需要重新加载注册原创 2022-06-14 08:46:53 · 363 阅读 · 0 评论 -
Linux设备模型
关于Linux设备模型的一些补充原创 2022-06-12 22:00:07 · 684 阅读 · 0 评论 -
Linux内核驱动—内存管理与DMA
Linux内核驱动—内存管理与DMA原创 2022-06-06 22:36:05 · 1018 阅读 · 1 评论 -
内核中的互斥与同步
文章链接:从零开始学Linux驱动–(9)内核中的互斥与同步原子变量补充:原子变量操作的API:函数如下:罗列一些:atomic_read(v)atomic_set(v, i)int atomic_add_return(int i, atomic_t *v);int atomic sub_ return(int i, atomic_t*v);int atomic add negative(int i, atomic_t*v)void atomic_add (int i, atomic_t原创 2022-06-01 18:30:10 · 749 阅读 · 0 评论 -
Linux内核驱动—中断和时间管理
中断进入过程本章采用的目标板子是三星的Exynos4412使用的是4核的Cortex-A9,对应的中断控制器被称为GIC,相比于一般的中断控制器而言,其最主要的特点在于可以将一个特定的中断分发给一个特定的ARM核。但这并不是我们关注的重点,在后面的分析中,应该主要知道当中断发生后要如何调用驱动中的中断处理函数,以及在这个过程中所涉及的重要数据结构。整个过程中涉及较多的和体系结构相关的内容,主要体现在中断处理的前期阶段;为了更方便读者理解这部分内容,在下面的讨论中会重新改写这部分代码。汇编阶段的主要相关原创 2022-05-19 09:45:46 · 944 阅读 · 1 评论 -
高级I/O操作-定位操作
高级I/O操作-定位操作原创 2022-05-16 10:15:25 · 220 阅读 · 0 评论 -
mmap设备文件操作
mmap设备文件操作原创 2022-05-16 09:19:51 · 512 阅读 · 0 评论 -
异步I/O+异步通知
linux内核笔记(四)高级I/O操作(二)分析第一个代码:代码第50行 struct aiocb aiow, aior;定义了两个分别用于读和写的异步I/O控制块代码第56行到76行初始化了这二个控制块。memset(&aiow, 0, sizeof(aiow)); memset(&aior, 0, sizeof(aior)); aiow.aio_fildes = fd; aiow.aio_buf = malloc(32); strcpy((char *)aiow.a原创 2022-05-15 21:40:52 · 592 阅读 · 0 评论 -
I/O多路复用
阻塞型IO相对于非阻塞型IO来说,最大的优点就是在设备的资源不可用时,进程主动放弃CPU,让其他的进程运行,而不用不停地轮询,有助于提高整个系统的效率。但是其缺点也是比较明显的,那就是进程阻塞后,不能做其他的操作,这在一个进程要同时对多个设备进行操作时显得非常不方便。比如一个进程既要读取键盘的数据,又要读取串口的数据,那么如果都是用阻塞的方式进行操作的话,如果因为读取键盘而使进程阻塞,即便串口收到了数据,也不能及时获取。解决这个问题的方法有多种,比如多进程、多线程和I/O多路复用。在这里我们来讨论I/原创 2022-05-15 01:01:47 · 236 阅读 · 0 评论 -
非阻塞型I/O和阻塞型I/O
非阻塞型I/O和阻塞型I/O:非阻塞型I/O阻塞型I/O如果资源不可用,进程阻塞关于它的代码补充分析:wait_queue_head_t rwqh;wait_queue_head_t wwqh;增加了r读和w写的等待队列头代码init_waitqueue_head(&vsdev.rwqh);init_waitqueue_head(&vsdev.wwqh);初始化这二个队列头if (kfifo_is_empty(&vsfifo)) { if (fi原创 2022-05-13 18:26:42 · 373 阅读 · 0 评论 -
高级I/O—2 proc文件操作
高级I/O-——2 proc文件操作原创 2022-05-12 22:51:07 · 137 阅读 · 0 评论 -
高级IO操作—ioctl设备操作
为了处理设备非数据的操作(这些可以通过read、write接口来实现),内核将对设备的控制操作委派给了ioctl接口,ioctl 也是一个系统调用,其函数原型如下。int ioctl(int d,int request,...);d是要操作文件的文件描述符,request 是代表不同操作的数字值,比如驱动可以规定0x12345678表示点灯,而0x12345679表示灭灯等。但是这个操作码,更确切地说是命令,应该具有一定的编码规则,这个我们在后面会介绍。...表示C语言中实参个数可变的.但在这里表示的原创 2022-05-12 22:18:34 · 2390 阅读 · 3 评论 -
Linux驱动—实现一个驱动支持多个设备
每个设备都写一个驱动太麻烦了,所以要Linux驱动—实现一个驱动支持多个设备。原创 2022-05-09 23:15:41 · 4392 阅读 · 0 评论 -
虚拟串口设备驱动
字符设备驱动除了前面搭建好的框架外,接下来最重要的是实现设备的操作方法。#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/kfifo.h>#define VSER_MAJOR 256#define VSE原创 2022-05-09 17:42:48 · 4340 阅读 · 0 评论 -
字符设备驱动
字符设备驱动字符设备驱动基础通过mknod命令来创建一个设备文件文件目录下添加目录项字符设备驱动框架linux根据驱动程序实现的模型框架将设备的驱动分为了三类:字符设备驱动:以字节流为单位顺序读写,不能随机访问。如,帧缓冲( framebuffer)驱动,声卡,串口等。块设备驱动:以固定大小的块(block) 为单位读写,可以随机访问。网络设备驱动:网络接口是一个能够和其他主机交换数据的设备。接口通常是一个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口。网络接口由内核中的网络原创 2022-05-06 22:52:29 · 2768 阅读 · 0 评论 -
Linux驱动—内核模块参数,依赖(进一步讨论)
Linux驱动—内核模块参数,依赖(进一步讨论)内核模块的一般形式内核模块的一般形式前面咱们做实验时候不是介绍了这个是因为加载vser模块而导致内核被污染,并且因此禁止了锁的调试功能。这是什么原因造成的呢?众所周知,Linux 是一个开源的项目,为了使Linux在发展的过程中不成为一个闭源的项目,这就要求任何使用Linux 内核源码的个人或组织在免费获得源码并可针对源码做任意的修改和再发布的同时,必须将修改后的源码发布。这就是所谓的GPL许可证协议。在此并不讨论该许可证协议的详细内容,而是讨论在原创 2022-05-03 23:04:25 · 2742 阅读 · 1 评论 -
Linux驱动—内核模块基本使用
linux驱动——内核模块基本使用makefile文件编写内核模块工具原创 2022-04-26 09:23:09 · 1878 阅读 · 1 评论