- 博客(95)
- 资源 (4)
- 收藏
- 关注
原创 linux kernel 通知链notifier chain
最近在分析TP驱动中的suspend和resume实现,发现是通过linux内核提供的通知链(notifier chain)来实现的,借此分析一下以加深理解。
2021-03-02 14:11:35
236
原创 kernel-5.4源码分析:input子系统
1.class_register(&input_class)2.input_proc_init()3.register_chrdev_region(MKDEV(INPUT_MAJOR, 0), INPUT_MAX_CHAR_DEVICES, "input");
2021-02-21 23:44:10
1040
6
转载 Android电容屏一些重要说明
1. 触摸屏设备分类 1.1 多点触摸 满足以下两个条件为多点触摸设备: 1)输入设备驱动报告了ABS_MT_POSITION_X 和ABS_MT_POSITION_Y存在 2)输入设备没有任何手柄按钮 1.2 单点触摸 满足以下两个条件为单点触摸设备: 1)输入设备不被归类为多点触摸设备 2)输入设备报告存在ABS_X和ABS_Y绝对轴,以及存在BTN_TOUCH按键码...
2021-02-20 11:36:43
309
转载 Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt
Multi-touch (MT) Protocol ------------------------- Copyright(C) 2009-2010 Henrik Rydberg<rydberg@euromail.se> 简介 ------------ 为了...
2021-02-18 17:13:45
283
原创 将windows上的文件复制到虚拟机中
问题:想要将windows上的内核源码拖拽到虚拟机的centos系统上去,查找资料发现需要在linux系统下载安装VMware Tools,在centos上下载安装后还是不行解决方法:经过多次尝试,发现在centos上安装VMware Tools是没有成功的,安装打印不对;系统换成Ubuntu是功能就可以正常使用了。...
2021-02-08 22:59:41
1443
原创 LDD:USB驱动程序
1. 从拓扑上来看,一个USB子系统并不是以总线的方式来布置的;它是一棵由几个点对点的连接构建而成的树。这些连接是连接设备和集线器(hub)的四线电缆(地线、电源线和两根信号线)。2. USB主控制器负责询问每一个USB设备是否有数据需要发送,一个USB设备在没有主控制器要求的情况下是不能发送数据的。3. USB设备具有要求一个固定的数据传输带宽的能力,以可靠地支持视频和音频IO。另一个重要的特性是它只担当设备和主控制器之间通信通道的角色,对它所发送的数据没有任何特殊的内容和结构上的要求。4.
2021-01-23 20:17:35
307
1
转载 linux中Oops信息的调试及栈回溯—Linux人都知道,这是好东西!
============================================================================= 原文地址:http://blog.micro-studios.com/?p=615#comment-1069 看后感想:這点比 ldd3上讲的都仔细 2012年11月29日11:24:17:有BUG_ON就不用反汇编了。。。 2012年11月3...
2020-12-31 18:20:44
208
转载 嵌入式Linux——oops:根据oops信息,找到错误的产生位置以及函数的调用关系
简介: 本文主要介绍通过oops信息找到程序中出错位置的方法。并结合自己代码中的错误来讲解如何找到出错位置。同时还会介绍使用栈信息来推到函数间的调用关系。 Linux内核:linux-2.6.22.6 所用开发板:JZ2440 V3(S3C2440A) 声明: 本文主要是对韦东山老师视频的总结,同时看了一些网友的博文来对这方面...
2020-12-31 18:19:27
2547
转载 file结构体中private_data指针的疑惑【转】
本文转载自:http://www.cnblogs.com/pengdonglin137/p/3328984.htmlhi all and barry, 最近在学习字符设备驱动,不太明白private_data在字符驱动中的作用,我们在 驱动中添加一个设备结构体,然后定义了这个结构体的全局指针变量,接着我们就能在 驱动程序中使用这个指针了。我看到很多驱动程序中都把结构体指针付给private_data, 然后对...
2020-12-31 11:08:59
670
原创 usb-skeleton.c 写法非常标准规范
usb-skeleton.c 非常标准规范的linux驱动模板写法,可以参考它的写法。/* Structure to hold all of our device specific stuff */struct usb_skel { struct usb_device *udev; /* the usb device for this device */ struct usb_interface *interface; /* the i...
2020-12-30 21:06:26
225
转载 Linux usb驱动开发(基础)
最近想学几个基于linux的驱动开发:(想想还是从usb驱动开始记录,毕竟USB的驱动的开发的讲解比较多,学习比较快) (做个笔记,忘了就进来看看) 参考文档:文档写的比较基础: https://blog.csdn.net/zqixiao_09/article/details/50984074 https://www.cnblogs.com/general001/articles/2319552.html ...
2020-12-30 17:58:04
313
转载 Linux USB驱动详解
首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程 &nb...
2020-12-30 17:55:34
1546
转载 linux下的usb驱动框架
一、linux 下的usb驱动框架 在linux系统中,usb驱动可以从两个角度去观察,一个是主机侧,一个是设备侧。linux usb 驱动的总体框架如下图所示: 从主机侧看usb驱动可分为四层:usb主机控制器硬件底层、usb主机控制器驱动、usb核心和usb设备驱动。 在主机侧要实现的驱动主要分为两类:usb主机控制器驱动和usb设备驱动。主机控制器驱动负责控制插入其中的usb设备,usb设备驱动主要负责us...
2020-12-30 17:51:21
1773
转载 Linux下USB驱动框架分析
Linux下USB驱动框架分析 </h1> <div class="clear"></div> <div class="postBody"> Linux USB驱动框架分析(一) 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了。好,言归正传,...
2020-12-30 17:46:45
485
转载 关于linux设备驱动是否使用全局变量的问题
关于linux设备驱动是否使用全局变量的问题今天有人问我,关于linux设备驱动是否使用全局变量的问题,为什么说尽量不使用全局变量?其实这个问题从两方面说:1)使用全局变量,那么破坏了函数的重入性,为了实现函数重入,又不得不使用锁来保护全局变量。这个效率变得低下了。函数重入,主要是使用局部变量,即变量放在线程的栈中,各自使用自己的,就不会冲突。另外一种是使用锁来保护,保证数据的完整性。2)使用全局变量,那么就违背了linux驱动的编写原则。即一个驱动程序应该支持驱动多个设备同时工作。例如马达
2020-12-01 10:44:04
2260
1
转载 STM32 之 USB 虚拟串口
在现代个人电脑的USB是几乎所有外设的标准通信端口。然而许多工业应用软件仍然使用经典的串口(UART)。USB虚拟串口提供了绕过这个问题的一个简单的解决方案。 为了让USB被视为一个COM端口,USB设备必须根据通信设备类(CDC)规范来实现两个接口: 1.抽象控制模型通信,在端点中有1个中断:在我们...
2020-10-26 16:48:28
5711
1
原创 Linux中断注册的硬件irq号如何获取?
Linux注册中断用request_irq(unsigned int irq, …),irq是硬件中断号(cat /proc/interrupts显示的应该就是这个号)是怎么获取的?在MTK平台和Rockchip平台分别看到两种获取方法(irq_of_parse_and_map和gpio_to_irq)(1)irq_of_parse_and_map()irq = irq_of_parse_and_map(op->dev.of_node, 0);rc = request_irq.
2020-09-27 16:03:03
4904
原创 MTK平台USB Gadget虚拟串口丢包分析
最近工作中接到一个需求:MTK平台和PC通过USB线传输数据。查看/usb/gadget目录下代码,发现android有实现好的usb转虚拟串口可以使用,本以为串口通信会很简单的,却遇到平台接收数据丢包的问题,花了两个星期才定位出来。因此在这里记录下定位过程。问题描述:PC串口助手发送数据,平台这边应用程序接收,会出现概率性接收不到,%5左右的概率,且丢的包没有什么规律。应用程序:fd_vcom = open("/dev/ttyGS0", O_RDWR);while (1) {...
2020-08-13 21:41:51
1767
转载 fasync的总结
fasync的总结我们知道,驱动程序运行在内核空间中,应用程序运行在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时 候,我们希望通知用户...
2020-08-13 09:25:39
1265
转载 linux驱动的异步通知(kill_fasync,fasync)---- 驱动程序向应用程序发送信号
应用程序#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <poll.h>#include <signal.h>#include <sys/types.h>#include <unistd.h>#include <fcntl.h> /* fifthdrvtest */.
2020-08-13 09:23:24
1800
1
转载 linux 内核态调试函数BUG_ON()与WARN_ON区别
linux 内核态调试函数BUG_ON()作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。 当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构 是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。你可以把这些调用当作断言使用..
2020-08-12 18:16:32
1354
原创 LDD:中断处理
1. Linux处理中断的方式很大程度上与它在用户空间处理信号时一样的。2. 从本质上讲,中断处理例程和其他代码并发运行。会不可避免引起并发问题,并竞争数据结构和硬件。...
2020-05-24 22:30:07
240
原创 LDD:与硬件通信
I/O端口和I/O内存每种外设都通过读写寄存器进行控制。大部分外设都有几个寄存器,不管是在内存地址空间还是在I/O地址空间,这些寄存器的访问地址时连续的。在硬件层,内存区域和I/O区域没有概念上的区别:它们都通过向地址总线和控制总线发送电平信号(比如读写信号)进行访问,再通过数据总线读写数据。一些CPU制造厂商在它们的芯片中使用单一地址空间,而另一些则为外设保留了独立的地址空间,以便和...
2020-04-20 02:18:03
429
原创 LDD:分配内存
除了kmalloc和kfree,内核提供了更加丰富的内存分配原语集。kmalloc函数的内幕1.除非被阻塞,否则这个函数可运行得很快2.不对所获取的内存空间清零,也就是分配给它的区域仍然保持着原有的数据。3.它分配的区域在物理内存中也是连续的。flags参数kmalloc的第一个参数是要分配的块的大小,第二个参数是分配标志(flags),它能够以多种方式控制kmalloc的......
2020-04-19 23:05:57
353
原创 Linux之Input子系统——基于5.4内核
一.Input子系统组成输入子系统由驱动层(Drivers),输入子系统核心层(Input Core),和事件处理层(Event Handler)三部分组成。一个输入事件,如鼠标移动,键盘按下等都是通过Driver -> Input Core -> Eventhandler ->userspace的顺序到达用户空间传个应用程序。二.Input设备驱动编写三...
2020-04-19 12:16:47
242
转载 input子系统详解
Input子系统详解一.Input子系统架构Linux系统提供了input子系统,按键、触摸屏、键盘、鼠标等输入都可以利用input接口函数来实现设备驱动,下面是Input子系统架构:Input子系统架构二.Input系统的组成输入子系统由驱动层(Driv...
2020-04-12 21:32:02
1886
转载 12.Linux之输入子系统分析(详解)
12.Linux之输入子系统分析(详解) </h1> <div class="clear"></div> <div class="postBody"> 在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机...
2020-04-12 21:29:29
338
原创 LDD:高级字符驱动程序操作
ioctl系统调用:用于设备控制的公共接口,通过设备驱动程序执行各种类型的硬件控制。系统调用原型:int ioctl(int fd, unsigned long cmd, ......)驱动程序的ioctl方法原型:int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long ar...
2020-04-06 00:12:55
319
原创 LDD:并发和竞态
并发的来源:1.正在运行的多个用户空间进程可能以一种令人惊讶的组合方式访问我们的代码。2.SMP系统甚至可在不同的处理器上同时执行我们的代码。3.内核是可抢占的,驱动程序代码可能在任何时候丢失对处理器的独占4.设备中断时异步事件,可能导致代码的并发执行5.内核还提供了许多可延迟代码执行的机制,比如workqueue、tasklet、timer等,这些机制使代码可在任何时候执行...
2020-04-05 17:22:26
187
转载 内存泄漏
参看资料:https://www.cnblogs.com/mfrbuaa/p/3851742.html1. 什么是内存泄漏(memory leak)? 指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用...
2020-03-29 15:22:21
261
转载 踩内存:总的来说,是访问了不应该访问的内存地址。尤其在C指针中。可以访问不合法的内存。
现象:挂死,程序跑的异常,数据被串改大致原因:数组越界,字符串操作越界,栈指针操作越界,操作了释放掉了的指针,多线程时序对资源保护控制不当,内存管理异常,使用了其他地方的内存定位方法:1. 类...
2020-03-29 15:14:28
745
转载 内存管理:mmap内存映射
Linux驱动mmap内存映射 </h1> <div class="clear"></div> <div class="postBody"> mmap在linux哪里?什么是mmap?上图说了,m...
2020-03-22 12:52:07
703
原创 LDD:字符设备驱动程序
1.主设备号和次设备号主设备号标识设备对应的驱动程序(driver)。次设备号由内核使用,用于正确确定设备文件所指的设备。MAJOR(dev_t dev) MINOR(dev_t dev) MKDEV(int major, int minor)动态分配主设备号:alloc_chrdev_region三个重要的内核数据结构file_operations ...
2020-03-17 23:37:10
394
原创 笔记:内存管理
进程使用对应内存区域的5个数据区:代码段:代码指令,不可写数据段:存放初始化的全局变量和静态变量(static)BSS:存放未初始化的全局变量和静态变量(static)堆:存放运行中动态分配的内存栈:存放临时局部变量、函数参数、返回值2.从用户到内核,内存地址从“逻辑地址”——“线性地址”——“物理地址”逻辑地址经过段机制转化为线性地址,线性地址经过页机制转化...
2020-03-15 16:12:30
283
原创 笔记:进程和线程的关系
1. 进程是运行时程序的封装,是系统进行资源分配和调度的基本单位。2. 线程是进程的子任务,是CPU进行调度和分配的基本单位,是比线程更小的能独立运行的基本单位。进程与线程的关系1. 一个线程只能属于一个进程,而一个进程可以有多个线程。2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量)、数据段(全局变量和静态变量)、扩展段(堆...
2020-03-15 11:37:19
317
转载 Linux内存管理(最透彻的一篇)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与...
2020-03-07 16:14:20
515
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅