
Linux内核驱动
文章平均质量分 88
khl0616
这个作者很懒,什么都没留下…
展开
-
内核模块参数
本文主要介绍linux kernel 中的内核模块参数,包括内核模块参数相关的宏定义,参数,以及使用方法等前面的文章已经介绍了内核模块,内核模块参数就是内核模块使用的参数,像用户程序一样, 内核模块也可以接受命令行参数,这样就可以根据给定的参数动态的改变内核模块的行为。如下图所示是,内核模块参数在内核源码中的宏定义由上图所知, module_param()主要有3个参数,分别是nametypepermname: 用作内核模块参数的变量名称。原创 2023-12-18 23:23:37 · 1291 阅读 · 0 评论 -
Linux内核同步方法之完成量
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2022-03-01 23:20:53 · 887 阅读 · 0 评论 -
外部内核模块的Makefile实例
前言本文主要介绍如何编写基于交叉工具链的外部内核模块的Makefile一、外部内核模块很多时候,我们为了开发某个内核驱动,都是使用内核模块的方式来进行开发的,这个时候我们只需要知道内核版本就可以了, 不需要拿到整个内核源码,驱动及Makefiel写完后,就可以直接释放给第三方,第三方拿到该内核模块源码后只需要在该驱动的Makefile中指定对应的内核源码路径就可以正常编译了。这种模式大大的方便了驱动的开发。最典型的就是SOC中GPU的驱动, 如PowerVR等, 均是以外部内核模块的方式来进行开发原创 2022-02-24 00:43:07 · 276 阅读 · 0 评论 -
基于platform总线的字符设备驱动实例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2022-02-24 00:19:11 · 749 阅读 · 0 评论 -
字符设备号的相关介绍
前言软硬件环境:硬件:PC软件:ubuntu18.04本文主要介绍如果编写最简单的字符设备驱动, 并对主要的字符设备驱动接口进行相关介绍。一、字符设备号介绍1. 字符设备号的组成字符设备号本质就是一个32位的无符号整型值。高12位为主设备号,低20位为次设备号内核源码路径: include/linux/kdev_t.h在知道主,次设备号后,可以使用MKDEV宏去创建字符设备号。2. 字符设备主设备号范围早期的内核字符主设备分配范围为0-255,后来由于不够用,对字符主设备号分配范围扩原创 2022-02-21 22:49:08 · 603 阅读 · 0 评论 -
Linux内核同步方法之等待队列
文章目录前言一、什么是等待队列二、使用步骤1.引入库2.读入数据总结参考资料前言软硬件环境:硬件:PC软件:ubuntu18.04提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是等待队列示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):原创 2022-02-19 17:19:30 · 692 阅读 · 0 评论 -
Linux内核同步方法之互斥体
文章目录前言一、什么是互斥体二、如何使用互斥体1. 互斥体的相关接口函数2. 互斥体的调用流程3. 互斥体的使用实例三、互斥体的特性1. 互斥锁的使用条件2. 互斥锁和自旋锁的区别3. 适合互斥锁的使用场景4. 死锁实例总结参考资料前言软硬件环境:硬件: PC软件: ubuntu18.04本文主要介绍内核中用于保护临界区的一种机制——互斥体(又叫互斥锁),它只允许一个进程进入临界区,适合保护比较长的临界区,因为竞争互斥锁时进程可能睡眠和再次唤醒,代价很高。一、什么是互斥体互斥体(Mutex)原创 2021-12-21 00:04:41 · 570 阅读 · 0 评论 -
Linux内核同步方法之自旋锁
文章目录前言一、什么是自旋锁1. 自旋锁的含义2. 单处理器的自旋锁3. 多处理器(SMP)的自旋锁二、自旋锁及其衍生型三、自旋锁的使用实例1. spin_lock()/spin_unlock()2. spin_lock_irq()/spin_unlock_irq()3. spin_lock_irqsave()/spin_lock_irqrestore()4. Makefile四、使用自旋锁的注意点1.使用自旋锁时的注意点2. 死锁实例3. 自旋锁适用场景总结参考资料前言软硬件环境硬件: PC软件原创 2021-12-20 00:28:14 · 231 阅读 · 0 评论 -
多个文件生成单个内核模块实例
文章目录前言一、内核模块源代码实例1. module_demo.c2. add.c3. add.h二、Makefile1. 第一种Makefile编写方法2. 第二种Makefile编写方法3. 编译三、加载和卸载内核模块总结前言前面的文章介绍了最简单的内核模块实例,本文主要是介绍由多个文件组成的内核模块,包括代码实例及对应的Makefile文件的写法;和应用层代码一样,当该内核模块(驱动)实现的功能比较复杂时, 不可能把所有的代码都全部写在一个.c文件里面,它也会根据具体的功能,使用模块化编程,即将原创 2021-12-17 23:35:44 · 267 阅读 · 0 评论 -
linux内核竞态与并发介绍
文章目录前言一、相关术语的含义1. 临界区2. 进程上下文3. 中断上下文4. SMP二、竞争条件1. 临界区被并发访问产生竞争条件2.防止竞争条件三、造成并发执行的原因四、解决并发访问临界区的手段总结参考资料前言在Linux 内核中,当多个线程同时访问相同的资源(驱动程序中的全局变量是一种典型的共享资源)可能会引发"竞态",因此我们必须对共享资源进行并发控制,防止出现各线程之间相互覆盖共享数据的情况,造成被访问数据处于不一致的状态。提示:以下是本篇文章正文内容,下面案例可供参考一、相关术语的含原创 2021-12-13 23:22:24 · 704 阅读 · 0 评论 -
Linux内核模块的最简实例
文章目录前言一、内核模块的主要组成部分1. 头文件2. 模块加载函数3. 模块卸载函数4. 模块许可证声明5. 可选部分二、最简内核模块实例1. 内核模块代码2. 内核模块所对应的Makefile3. 内核模块编译4. 内核模块的加载和卸载5. 查看内核模块信息总结前言软硬件环境硬件:PC软件:Ubuntu 18.04Linux 内核是宏内核, 和QNX等微内核相比,它的整体结构非常庞大,包含的组件非常多,如果我们将所有的功能都编译进Linux 内核中,那么Linux 内核镜像将会很大,也将使k原创 2021-12-05 21:28:37 · 375 阅读 · 0 评论 -
V4L2子系统框架介绍
序言 本系列文章主要介绍Linux内核驱动中的V4L2子系统框架,基于Linux4.14.35内核中的相关代码来介绍。1.V4L2框架图 V4L2目前主要支持以下几类设备:视频输入设备(重点)、视频输出设备、VBI设备和radio设备,其中作为视频输入设备使用的最广泛,主要是应用在摄像头上。下面主要以视频输入设备(摄像头)来介绍。 如下图所示,展示了V4L2子系统中...原创 2020-01-14 23:29:25 · 588 阅读 · 0 评论