Linux驱动入门篇
文章平均质量分 93
理论+实践
又见南风
集百家之长,努力分析Linux内核方面的知识。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SPI驱动理论与实例分析2
/将一字节十进制数字转换成二进制 debug用,一般用于查看寄存器每个位的数值//将一字节十进制数字转换成二进制 debug用,一般用于查看寄存器每个位的数值 # define PRINTF_BINARY_PATTERN_INT8 "%c %c %c %c %c %c %c %c" # define PRINTF_BYTE_TO_BINARY_INT8(i) \(((i) & 0x80ll)?原创 2023-09-18 18:03:25 · 390 阅读 · 0 评论 -
PWM驱动理论与分析
瑞芯微 PWM 控制器驱动源码:/kernel/drivers/pwm/pwm-rockchip.c目前主流的 pwm 设备驱动都是集成到 sysfs 文件系统中,通过 cat 和 echo 操作来控制,我接到的任务也是这样。所以编写 pwm 设备驱动的核心就是完成 sysfs 操作集,通过 sysfs 来操作脉冲宽度。PWM的原理是通过调整周期性波形的高电平时间宽度,从而改变有效信号的占空比,实现对设备的供电控制。原创 2023-09-13 17:28:49 · 1355 阅读 · 0 评论 -
SPI驱动理论与实例分析
实例部分分为几个部分:1、正点原子 imx6ull 陀螺仪模块驱动,非常经典,基本满足所有 SPI 驱动开发;2、瑞芯微官方 SPI 设备驱动例程;由于文章长度,以下两个实战例子放在另一篇文章。3、高通 DACx0501 (ADC)模块驱动;4、高通 IDT8V97003 (无线发射接收器)模块驱动。SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。原创 2023-09-06 11:58:08 · 1634 阅读 · 0 评论 -
LCD驱动理论与实例分析
基础篇和驱动篇使用 I.MX6U-ALPHA 开发板。实例篇使用 RK3568 开发板和 mipi LCD 模块。原创 2023-09-04 18:33:19 · 2808 阅读 · 0 评论 -
TSP驱动理论与实例分析
文章目录前言一、设备树编写IIC设备地址:复位管脚配置中断管脚配置二、驱动分析数据设定和数据结构probe 解析硬件相关基础设定IIC读取函数解析设备模型添加中断服务函数总结本驱动相对于原版驱动的改动将驱动添加到内核tslib 移植与使用使用内核自带的驱动前言如果是从IIC协议跳转过来的,那么还需要了解一个 input 子系统。触摸屏驱动虽然用的协议是 IIC,也就是说驱动架构是 IIC 驱动,但是在IIC驱动中又把任务都丢给了 input 子系统,而且还要再 IIC 消息中还包装硬件业务。内核未原创 2023-09-04 17:24:48 · 514 阅读 · 0 评论 -
IIC驱动理论与实例分析
不啰嗦,直接从驱动开讲,需要学习IIC协议基础知识的可以先看这篇文章:https://www.rstk.cn/news/369263.html?提示:需要了解 IIC 的帧格式、读写/命令模式才能彻底了解 i2c_msg 的使用。不想进半导体厂的驱动工程师直接看 设备驱动和设备驱动编写!!!原创 2023-09-01 02:45:51 · 314 阅读 · 1 评论 -
input子系统理论与实例分析
直接上图:(图片来源于正点原子笔记)(输入子系统对触摸屏狠重要,会用 TS Handler 狠重要!驱动层:输入设备的具体驱动程序,比如按键驱动程序,向内核层报告输入内容。核心层:承上启下,为驱动层提供输入设备注册和操作接口。通知事件层对输入事件进行处理。事件层:和用户空间进行交互。驱动触发消息,内核收集后产生对应的回调任务,事件层就可以执行内核发布的回调任务。为什么不直接内核执行任务?你当内核傻啊,内核主要就是调度任务,这个更重要。任务下发后就可以被更重要的任务阻塞。原创 2023-09-01 01:51:47 · 422 阅读 · 1 评论 -
热插拔理论与实例分析
热插拔:带电的情况下装卸设备。热插拔是内核与用户空间之间,通过调用用户空间程序来实现的。当内核发生了某种热插拔事件时,内核就会调用用户空间的程序实现交互。产生机制主要有 udev、mdev,mdev 是 udev 的简化版本。udev 通过 netlink 监听内核发送的 uevent 执行相应的回调。mdev 基于 uevent_helper 机制,内核产生的 uevent_helper 所指的用户程序 mdev 来执行热插拔操作。原创 2023-08-29 00:44:07 · 312 阅读 · 2 评论 -
设备模型理论与实例分析
Linux 系统内部开启了一个监视进程,负责接收和归类注册的设备和模块,然后给新设备匹配驱动,匹配了就能用,道理就这么简单。原创 2023-08-29 00:11:51 · 194 阅读 · 1 评论 -
根文件系统构建后的第三方软件移植
SSH 全称为 Secure Shell(安全外壳协议,简称 SSH),是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。ssh:ssh 软件用于替换 rlogin 与 Telnetscp 和 sftp:将文件复制到其他主机上,用于替换 rcpsshd:SSH 服务器。原创 2023-08-23 18:17:48 · 444 阅读 · 0 评论 -
Linux三大根文件系统移植
buildroot、yocto、ubuntu base原创 2023-08-23 17:29:18 · 948 阅读 · 0 评论 -
中断子系统理论与实例分析
使用自定义工作队列需要构建一个 workqueue_struct 结构体name:工作队列名create_workqueue() 可以给每个 CPU 都创建一个工作队列,创建成功返回 workqueue_struct 结构体指针,失败返回 NULL。create_singlethread_workqueue() 只给一个 CPU 创建工作队列。调度和取消调度工作队列queue_work_on() 用来调度自定义工作队列;原创 2023-08-04 21:45:04 · 239 阅读 · 1 评论 -
驱动中的高级IO处理
在驱动的 read() 中,先判断 file->f_flags 是否带有 O_NONBLOCK,即是否为非阻塞 IO,如果是,则继续判断数据就绪条件 condition 的值,数据没有就绪就直接退出 read(),并返回 -EAGAIN。timeout:为超时时间,单位为 ms,timeout 大于 0,poll 等待时间直到指定的时间,timeout 为 0,poll 立即返回,timeout 为 -1,一直等待,直到时间发生。当数据就绪后,内核才会将数据拷贝到用户空间,最后返回用户线程,开始处理数据。原创 2023-08-02 14:56:46 · 137 阅读 · 0 评论 -
并发竞争理论与实例分析
这么做之后,当一个线程打开该设备,如果未关闭该设备,另一个线程也打开该设备时就会陷入阻塞,直到第一个线程关闭了该设备,第二个线程才能打开设备。相应的,多线程中打开同一个设备,慢打开的时候会被阻塞,等到先打开的设备的线程执行完临界操作后关闭设备时,慢打开设备的线程才能唤醒打开设备。就是说,如果某线程需要获取锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在。相应的解决办法是,在自旋锁的使用过程中要尽可能短的时间内拥有自旋锁,而且。信号量是操作系统中最典型的用于同步和互斥的手段,本质上是一个全局变量。原创 2023-08-02 14:19:57 · 153 阅读 · 0 评论 -
所以真的了解GPIO了吗?
以点亮LED为例。GPIO0_A2 管脚输出高电平时,VCC和地极导通,LED1点亮。原创 2023-07-23 12:13:33 · 734 阅读 · 1 评论 -
字符驱动程序设计的思路
ioctl() 传送的变量 cmd 是应用程序用于区别向设备驱动程序请求处理的内容的值,cmd 除了可区别的数字外,还包含有助于处理的几种相应的信息。首先,Linux 系统的应用层活动于用户态,用户态无法直接访问硬件。想要在应用层访问硬件就需要切换到内核态,内核态访问硬件后又切换回用户态继续工作。可能会有学完STM32的杆精说中断,应用程序哪来的途径直接使用中断,中断都是在驱动中配好的,轮不到应用层调用。触发内核态的方式有很多,系统调用是驱动中用得最广泛的一种。原创 2023-07-10 15:19:34 · 177 阅读 · 1 评论 -
设备树基础语法与实例分析
* 自定义一个管脚标号的属性 pinnum */ pinnum = < 0 1 2 3 4 >;驱动可以拿到设备树中的任意节点的任意数据,至于有没有用,用来做什么,都是驱动开发的事情了,所以开放自定义属性合理。中断控制器中,必须有一个属性 #interrupt-cells 表示其他节点使用这个中断控制器需要几个 cell 来表示使用哪一个中断。中断控制器中,必须有一个属性 interrupt-controller 表示它是中断控制器。原创 2023-07-10 14:31:19 · 1036 阅读 · 1 评论
分享