- 博客(43)
- 收藏
- 关注
原创 [Linux内核驱动]proc
proc是Linux上的一种虚拟文件系统,存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以更改其中某些文件来改变内核的运行状态。
2024-06-30 19:26:19
325
原创 [Linux内核驱动]platform
这里只是简单介绍,更详细的内容在中。Linux 系统要考虑到驱动的可重用性,因此提出了驱动的分离与分层这样的软件思路,为了达到所有硬件都可以按照总线设备驱动模型来实现驱动,Linux从2.6起就加入了 platform 设备驱动,在内核中建立一条虚拟的总线platform,它可以将那些不依赖于传统总线(如PCI, USB, I2C等)的设备,虚拟的挂在了platform总线上,达到统一。
2024-06-30 19:25:36
278
原创 [Linux内核驱动]工作队列
工作队列的使用方法和tasklet类似,但是工作队列的执行上下文是内核线程,可以调度和睡眠。使用工作队列构造下面数据表,并通过设备读取。
2024-06-30 19:23:00
354
原创 [Linux内核驱动]中断
对于中断处理,linux将其分为两个部分——上半部(top half)和下半部(bottom half)。上半部用于完成尽量少的比较紧急的任务并在清除中断标志后进行“登记中断”的工作,即将下半部处理程序挂到该设备的下半部执行队列中。一般来说,上半部被设计成不可中断,下半部可以被新的中断打断。下半部几乎做了中断处理程序的所有工作,下半部相对来说不是非常紧急的工作,而且相对耗时,不在硬件中断服务程序中执行。实现下半部的机制一般有tasklet,工作队列、软中断和线程化irq。
2024-06-30 19:20:52
301
原创 [Linux内核驱动]定时器
Linux内核中的定时器是通过timer_list结构体来表示的。该结构体包含了一些字段,用于记录定时器的到期时间、回调函数等。
2024-06-30 19:18:58
211
原创 [Linux内核驱动]延时
jiffies(系统时钟中断计数器)是一个全局变量,用于跟踪自系统启动以来经过的“滴答数”(tick counts)。每个“滴答”对应一个时钟中断的周期,这个周期的长度由内核配置中的 HZ 值决定。因此,jiffies 可以用来计算两个时间点之间的时间差,或者确定某个事件自上次发生以来已经过了多少时间。由于 jiffies 是一个无符号整数,因此它有一个最大值(这取决于 jiffies 的数据类型和大小)。
2024-06-30 19:17:46
374
原创 [Linux内核驱动]异步通知
异步通知:一旦设备就绪,则主动通知应用程序,这样应用程序就不需要查询设备状态,类似于“中断”。Linux中通过信号来通知应用程序。
2024-06-30 19:16:55
109
原创 [Linux内核驱动]轮询操作
关于用户空间的轮询操作,poll,select,epoll等自行查询,这里只简单介绍设备驱动中的poll函数这个函数主要进行下面两项工作poll_table。
2024-06-30 18:40:19
123
原创 [Linux内核驱动]等待队列
Linux内核的等待队列(Wait Queue)是重要的数据结构,与进程调度机制紧密相关联,可以用来同步对系统资源的访问、异步事件通知、跨进程通信等。在Linux中,等待队列以循环链表为基础结构,包括两种数据结构:等待队列头(wait queue head)和等待队列元素(wait queue),整个等待队列由等待队列头进行管理。
2024-06-22 12:33:23
130
原创 [Linux内核驱动]应用
创建10个同样globalmem设备,都在同一个globalmem类中,可以在下看到每个设备都使用互斥锁mutex实现基本的open,release,read,write,ioctl,llseek操作使用一个4k大小的mem存储数据。
2024-06-22 12:31:32
115
原创 [Linux内核驱动]ioctl
ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。
2024-06-21 19:31:05
429
原创 [Linux内核驱动]导出符号
在Linux内核中,导出符号(Exported symbols)是指内核模块可以访问的符号,这些符号通常是函数或变量。当内核模块需要调用内核中定义的函数或访问内核中定义的变量时,这些函数或变量必须被导出。导出的符号可以在文件中查看。
2024-06-21 19:11:54
272
原创 [Linux内核驱动]模块参数
目录下将出现以此模块名为名的目录。当模块参数权限为0时,表示此参数不存在对应的文件节点,此时无法通过文件节点来修改参数的值。对于权限不为0的参数,目录下将出现。可以用过 module_param(参数名,参数类型,参数读/写权限)的形式向模块传递参数,如果不传递,参数将使用模块内定义的缺省值。目录,里面包含以参数名为名的文件,文件中保存了参数的值。除此之外,模块也可以拥有参数数组,形式为。在装载内核模块是,用户可以通过。为模块定义一个参数。对于被内置的模块,无法。更多内容可以查看我的。
2024-06-21 19:01:43
243
原创 Linux设备驱动PCI总线
PCI(外部设备互联)总线是有Intel推出的一种局部总线,作为一种通用的总线接口标准PCI Host Bridge(PCI桥):PCI Host Bridge是PCI总线的起始点,它连接主机系统的CPU和内存与PCI总线之间的桥接器。PCI主机桥负责管理和控制PCI总线,并提供对PCI设备的访问和配置功能。PCI Bridge(PCI桥接器):PCI Bridge用于连接不同的PCI总线段,扩展PCI总线的拓扑结构。
2024-05-29 15:55:18
402
原创 Linux设备驱动SPI总线
更全面内容可以查看我的SPI 驱动的框架与I2C类似,都是分为主机控制器驱动和设备驱动,我们需要实现的是具体设备的驱动,主机控制器的驱动由Linux内核实现,也需要了解。
2024-05-29 15:48:55
381
原创 Linux内核驱动USB总线
更多内容可以查看我的Linux USB分为主机控制器(Host Controller)和USB设备控制器(UDC)。所有的USB传输,都是从USB主机这方发起的;USB设备没有"主动"通知USB主机的能力。
2024-05-29 15:40:39
932
原创 Linux input输入子系统
上面结构体的链表的关系如下面两图所示(这个图好难画-.-,就在网上找了一个,原文连接当我们使用注册一个设备的时候,就会将设备添加到链表中,同时便利进行匹配,匹配成功就会调用函数进行连接input_event: 表示一个输入事件evdev_client: 表示一个用户空间的应用程序或实体设备与输入设备之间的连接evdev: 输入设备驱动程序的接口实现,应用程序可以通过evdev与evdev_client之间的交互,实现输入事件的读取和输入。
2024-05-29 15:28:32
1234
原创 【问题解决】esp32烧录报错rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2)) waiting
在 ESP32 的芯片引脚图中,GPIO0 引脚位于芯片的第19号引脚,对应开发板上的 D3 引脚。需要注意的是,如果您在将 GPIO0 引脚连接到 GND 引脚时,同时按下了 ESP32 开发板上的 RESET 按钮,ESP32 将进入串口下载模式,以等待程序的烧录。因此,在进行串口下载时,通常需要将 GPIO0 引脚连接到 GND 引脚,以将 ESP32 切换到上传程序模式。我的开发板上并没有D3引脚,最终通过关闭串口助手,并重新烧录,按下RST,在打开串口助手后成功。
2023-12-04 11:32:42
2991
1
原创 在ubuntu上挂载WebDAV
重新登录以使更改生效。可以注销并重新登录,也可以使用以下命令重新启动。不在当前用户的用户组列表中,则需要将其添加到该列表中。工具挂载 WebDAV 文件共享了。
2023-12-01 14:21:38
1749
1
原创 在docker上搭建D1-H哪吒开发板环境
使用docker创建的ubuntu14.04容器搭建D1-H哪吒开发板环境,对一些可能出现的错误给出了解决方法
2023-11-25 13:28:50
453
基于Qt5开发的停车场管理系统源码
2023-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人