
驱动
文章平均质量分 52
Pintitus
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux内核编程----提权creds
一、序言 阅读驱动代码的时候,看到了关于creds方面的函数,但是不知道是做什么的,经过了解,原来是用于给进程/线程提权的。 在创建线程成功以后,需要给线程访问的权限,比如普通用户,也可以是超级用户root。二、API函数 详见内核驱动中的,多的不说,主要是如下两个函数的应用。#includ原创 2022-05-08 23:07:53 · 735 阅读 · 0 评论 -
linux内核编程-----内核线程kthread
一、序言 在linux驱动中需要创建多线程,实现同一时刻执行多个任务。这个时候我们就需要内核机制----kthread。二、内核API1.创建线程:struct task_struct *ret = kthread_create(threadfn, data, namefmt, arg...);2.唤醒线程: 将创建好的线程句柄传入该函数即可运行线程。i原创 2022-05-08 22:19:05 · 920 阅读 · 0 评论 -
Linux驱动之中断系统
一、Linux中断 在裸机中断中我们需要做很多工作,比如关闭MMU,Cache等配置寄存器,使能中断。但是linux内核提供了完善的中断框架,我们只需要申请中断request_irq,然后注册中断处理函数即可。使用很方便。最后还应释放中断free_irq。 我们还会经常使用到使能禁能中断。 如果有两个任务,A-B。当A先禁能中断10s,B后禁能2s,B要使能以后就会打乱A的节奏。所以要需要查看一下当前的中断状态flags,B才会决定是否要禁能2s后使能,否则A就会将系统崩溃。#inclu原创 2022-01-23 22:20:35 · 828 阅读 · 0 评论 -
linux驱动之输入子系统
一、输入子系统简介 输入子系统就是Linux内核专门针对输入设备创建的框架驱动。 输入子系统的主设备号都为13,我们使用input子系统处理输入设备的时候就不需要注册字符设备了。只需要定义input_device结构体即可。定义在linux/input.h中。 看结构体可知大概功能,按键的事件,按键,相对位置,绝对位置,其他,led,音频,前馈状态,开关。每一项的具体功能可以进一步追踪宏条件。比如EV_CNT都有哪些事件。struct input_dev { const char *n原创 2022-01-22 22:02:52 · 1223 阅读 · 0 评论 -
Linux驱动之i2c驱动
一、I2C简介 I2C是很常用的总线协议。它使用两条线在主控制器与从机直接进行数据通信。一条是时钟线,一条是数据线,两条数据线都要接4.7K的上拉电阻,空闲的时候处于高电平。I2C总线的标准模式下传输速度可以达到100k/s,快速模式达到400k/s。 常见的I2C驱动从设备有电容触摸屏,CMOS camera ,重力传感器,EEPROM,HDMI。二、I2C的协议内容 起始位S:数据位电平拉低 停止位P:数据位拉高 ACK1:MASTER发送完地址后,SLIVER将数据原创 2022-01-21 21:34:19 · 4282 阅读 · 1 评论 -
mt7620的wifi调试
1./tmp/RT2860.dat 文件进行配置wifi,字段说明详情看手册mtk_wi-fi_softap_software_programming_guide_v4.6.pdf2.启动wifi命令ifconfig ra0 up/down3.wifi驱动DEBUG查看驱动输出信息wpriv ra0 set Debug=30~50: Debug Off1: Debug Error2: Debug Warning3: Debug Trace4: Debug Info5: Deb原创 2022-01-18 09:11:09 · 2556 阅读 · 0 评论 -
Linux驱动之sysfs设备属性
1.创建设备文件系统属性①初始化内核设备属性其中_show , store 的回调函数用于sysfs下的cat命令以及echo命令所返回的信息。初始化的_name,从而创建了设备属性 **struct device_attribute dev_attr##_name**#define DEVICE_ATTR(_name, _mode, _show, _store) \ struct device_attribute dev_attr_##_name = __ATTR(_name, _mode原创 2022-01-10 11:58:11 · 596 阅读 · 0 评论 -
linux驱动之工作队列workqueue
1.应用场景在中断中处理太多的操作是非常危险的,对中断的及时响应有很大的影响,在linux中我们经常会用到,来处理中断需要响应的操作。2.使用方式#include <linux/workqueue.h>static void ili210x_work(struct work_struct *work)原创 2022-01-10 09:54:30 · 465 阅读 · 0 评论 -
Linux驱动-----内核定时器
一、内核时间管理 硬件定时器提供时钟源,linux内核中在图形化界面配置中可以配置,我们选择最低的系统频率100Hz,使得内核负载减小。也就是说一秒钟可以产生100次中断。 在Linux内核中以全局变量jiffies记录系统从启动以来的节拍数。如果系统频率1000Hz是64位的操系统,系统超过5.8亿年就会归0,所以不用考虑绕回问题。但是32位系统,只要49天定时器就会溢出二造成绕回现象。内核提供了处理绕回的API函数。函数timeout = jiffies + (2 * HZ)原创 2021-12-21 12:04:24 · 423 阅读 · 0 评论 -
应用程序之按键消抖---状态机法
也就是有的人所说的查询法。什么这法那法的,还说了一大堆没用的理论,不爱多说,show you the code。不过只适用与单按钮,如果要多按钮,需要增加掩码之类的。不喜欢if的嵌套,这种方式直观由易于阅读。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <time.h>#include <...原创 2021-12-09 18:24:56 · 410 阅读 · 0 评论 -
MT7620设置GPIO输入中断
1. 创建设备节点,设备号,这些不多说了。我们要对操作集中修改。static const structfile_operations ralink_gpio_fops ={ .owner = THIS_MODULE, .unlocked_ioctl = ralink_gpio_ioctl, .open = ralink_gpio_open, .release = ralink_gpio_release,};int __init ralink_gpio_init(v...原创 2021-12-09 17:49:34 · 535 阅读 · 0 评论