随笔分类 -  LINUX内核驱动

摘要:1. 图像存储容器 不同于字符串、整数(分别以string、int类型保存),图像时以矩阵的形式存储的,OPENCV 4提供了 Mat 类来存储矩阵数据。 早期的OPENCV是采用 C 语言接口,以结构体IplImage来存储图像的矩阵数据,但是C语言中需要手动释放内存,这极容易导致因程序结束后没有 阅读全文
posted @ 2023-09-19 16:27 成信吴彦祖(略胜亿筹) 阅读(74) 评论(0) 推荐(0)
摘要:模块相关的知识 1. 模块相较于宏内核(微内核优点) 模块消除了宏内核的许多限制,包括:缺乏动态可拓展性、导致内核映像尺寸膨胀、测试新特性时必须重启系统等。 2. 静态链接、动态链接及模块依赖(TIPS) 《深入理解计算机系统》中有这样一段话: 共享库是一个目标模块,在运行或加载时,可以加载到任意的 阅读全文
posted @ 2023-09-17 11:51 成信吴彦祖(略胜亿筹) 阅读(56) 评论(0) 推荐(0)
摘要:1. 学习模块前的一些基础知识 头文件:内核是一个特定的环境,对需要和它接口的代码有其自己的一些要求,所以大部分的模块代码中都会包含相当数量的头文件,其中有几个头文件是专门用于模块的,因此会出现在每个可装载的模块中: #include <linux/module.h> #include <linux 阅读全文
posted @ 2023-09-16 11:15 成信吴彦祖(略胜亿筹) 阅读(85) 评论(0) 推荐(0)
摘要:1. 编译模块 构造内核模块之前,需要注意以下条件:正确版本的编译器、模块工具和其他必要的工具。太新的或太老的工具都会对使得模块构造后产生许多复杂的问题,因为内核源代码对编译器做了大量假定,因此新的(或旧的)编译器版本可能导致问题出现。 另外,尽量运行和模块对应的内核版本。 2. 模块的装载和卸载 阅读全文
posted @ 2023-09-16 09:27 成信吴彦祖(略胜亿筹) 阅读(55) 评论(0) 推荐(0)
摘要:1. 关于内核并发 从2.6版本的内核开始,linux系统已经是可抢占式的任务调度,在此之前只有SMP系统(对称多处理器)才会有的并发问题,在2.6版本内核之后的单核处理器也会面对该问题。 很多程序员面对并发问题有一个常见的错误:“认为没有睡眠状态(或者阻塞)的进程就不会触发并发”。这即使放在2.6 阅读全文
posted @ 2023-09-14 16:23 成信吴彦祖(略胜亿筹) 阅读(36) 评论(0) 推荐(1)
摘要:毫无疑问,一个 file 结构体仅由 open 创建,由 realse 清除。通常我们以为 close 即为 realse ,实际并不是。 close 作为系统调用,会选择性调用 realse ,一旦调用 realse 将会清除整个 file 结构体,但例如 fork、dup 等调用会创建原进程副本 阅读全文
posted @ 2023-01-11 01:00 成信吴彦祖(略胜亿筹) 阅读(395) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2022-09-22 19:38 成信吴彦祖(略胜亿筹) 阅读(39) 评论(0) 推荐(0)
摘要:先放一张图,这张图简略描述了 cdev 结构体在字符设备驱动中的地位,及其依赖关系。这张图中被方框框起来的部分是内核空间。 很明显,无论是加载模块、卸载模块,都是直接对 cdev 进行操作,因为它描述了整个字符设备,包括 file_operations 结构体变量。 cdev结构体分析(简): fi 阅读全文
posted @ 2022-09-08 19:08 成信吴彦祖(略胜亿筹) 阅读(109) 评论(0) 推荐(1)