![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动
文章平均质量分 51
Neilo_chen
这个作者很懒,什么都没留下…
展开
-
Direct Rendering Manager - 基本概念
Direct Rendering Manager 基本概念 1 概述2 DRM2.1 libdrm2.2 KMS(Kernel Mode Setting)2.3 GEM(Graphics Execution Manager)2.3.1 Fence2.3.2 CMA(Conti...转载 2022-05-29 21:34:19 · 878 阅读 · 0 评论 -
Linux图形显示DRM框架学习
一、Direct Rendering Manager(DRM)是linux内核子系统,负责与显卡交互。DRM提供一组API,用户空间程序可以使用该API将命令和数据发送到GPU并执行诸如显示器的模式设置之类的操作。用户空间程序可以使用DRM API命令GPU执行硬件加速的3D渲染、视频解码、GPU计算。二、fbdev:Linux内核已经有一个fbdev的API,用来管理图形适配器的帧缓存区,但不能用于满足基于3D加速的现代基于GPU的视频硬件需求,这些设备通常需要在自己的内存中设置和管理命令队列,以将命令原创 2022-05-21 23:11:24 · 8412 阅读 · 0 评论 -
Linux Platform驱动模型(一) _设备信息
Linux Platform驱动模型(一) _设备信息我在Linux字符设备驱动框架一文中简单介绍了Linux字符设备编程模型,在那个模型中,只要应用程序open()了相应的设备文件,就可以使用ioctl通过驱动程序来控制我们的硬件,这种模型直观,但是从软件设计的角度看,却是一种十分糟糕的方式,它有一个致命的问题,就是设备信息和驱动代码冗余在一起,一旦硬件信息发生改变甚至设备已经不...转载 2022-02-03 16:17:46 · 307 阅读 · 0 评论 -
【Linux】LDD学习笔记——操作硬件——IO内存
原文出处:http://blog.chinaunix.net/uid-25014876-id-80627.html xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 在之前章节的驱动,都没有对硬件进行操作,接写来将从我之前学的裸板驱动开始,讲解在linux系...转载 2022-02-03 15:27:26 · 199 阅读 · 0 评论 -
Linux字符设备中的两个重要结构体(file、inode)
对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示上图描述了用户空间应用程序通过系统调用来调用程序的过程。一般而言在驱动程序的设计中,会关系 struct file 和 struct inode 这两个结构体。用户空间使用open()系统调用函数打开一个字符设备时( int fd = open("dev/demo", O_RDWR) )大致有以下过程:在虚拟文件系统VFS中的查找对应与字符设备对应 struct inode节点遍历字符设备列表(ch转载 2022-01-16 15:25:17 · 1291 阅读 · 0 评论 -
Linux驱动字符设备添加接口区别
一、静态分配register_chrdev_region:devno = MKDEV(major,minor);ret = register_chrdev_region(devno, 1, “hello”);cdev_init(&cdev,&hello_ops);ret = cdev_add(&cdev,devno,1);二、动态分配alloc_chrdev_region:alloc_chrdev_region(&devno, minor, 1, “hello”)原创 2022-01-15 23:18:21 · 432 阅读 · 0 评论 -
enable_irq_wake 中断唤醒低功耗模式的内核
低功耗模式 实现你所有驱动的supend和resume函数.注册一个中断唤醒源,一般是GPIO,RTC中断 .然后调用echo mem > state将系统挂起到内存中,这时候SDRAM在进行self-refresh的动作.基本电源的消耗在这里了 目前2.6.kernel已经为你作好了。你只需要在你每个驱动里按照接口函数suspend(...),和resume()将这个驱动的suspend 和r...转载 2021-05-25 18:18:23 · 874 阅读 · 0 评论 -
MTK平台执行disable_irq期间屏蔽掉的中断信号,会在我执行enable_irq后继续触发
https://bbs.csdn.net/topics/391952877https://blog.csdn.net/sususuda/article/details/78016975https://www.icxbk.com/ask/detail?tid=20456原创 2021-04-29 16:16:23 · 362 阅读 · 0 评论 -
device tree添加spi设备节点不成功的问题
在设备树中新添加了一个spi设备节点如下:&spi1 { gcore_touch@0 { compatible = "gcore,touchscreen"; spi-max-frequency = <1000000>; spi-cpha = <1>; spi-cpol = <1>; };};看起来没什么问题,但是在系统/sys/bus/spi/d原创 2021-04-01 21:09:10 · 5036 阅读 · 0 评论 -
linux kernel 通知链notifier chain
最近在分析TP驱动中的suspend和resume实现,发现是通过linux内核提供的通知链(notifier chain)来实现的,借此分析一下以加深理解。原创 2021-03-02 14:11:35 · 150 阅读 · 0 评论 -
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 · 135 阅读 · 0 评论 -
嵌入式Linux——oops:根据oops信息,找到错误的产生位置以及函数的调用关系
简介: 本文主要介绍通过oops信息找到程序中出错位置的方法。并结合自己代码中的错误来讲解如何找到出错位置。同时还会介绍使用栈信息来推到函数间的调用关系。 Linux内核:linux-2.6.22.6 所用开发板:JZ2440 V3(S3C2440A) 声明: 本文主要是对韦东山老师视频的总结,同时看了一些网友的博文来对这方面...转载 2020-12-31 18:19:27 · 2187 阅读 · 0 评论 -
file结构体中private_data指针的疑惑【转】
本文转载自:http://www.cnblogs.com/pengdonglin137/p/3328984.htmlhi all and barry, 最近在学习字符设备驱动,不太明白private_data在字符驱动中的作用,我们在 驱动中添加一个设备结构体,然后定义了这个结构体的全局指针变量,接着我们就能在 驱动程序中使用这个指针了。我看到很多驱动程序中都把结构体指针付给private_data, 然后对...转载 2020-12-31 11:08:59 · 540 阅读 · 0 评论 -
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 · 167 阅读 · 0 评论 -
关于linux设备驱动是否使用全局变量的问题
关于linux设备驱动是否使用全局变量的问题今天有人问我,关于linux设备驱动是否使用全局变量的问题,为什么说尽量不使用全局变量?其实这个问题从两方面说:1)使用全局变量,那么破坏了函数的重入性,为了实现函数重入,又不得不使用锁来保护全局变量。这个效率变得低下了。函数重入,主要是使用局部变量,即变量放在线程的栈中,各自使用自己的,就不会冲突。另外一种是使用锁来保护,保证数据的完整性。2)使用全局变量,那么就违背了linux驱动的编写原则。即一个驱动程序应该支持驱动多个设备同时工作。例如马达转载 2020-12-01 10:44:04 · 2027 阅读 · 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 · 4392 阅读 · 0 评论 -
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 · 1355 阅读 · 0 评论 -
fasync的总结
fasync的总结我们知道,驱动程序运行在内核空间中,应用程序运行在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时 候,我们希望通知用户...转载 2020-08-13 09:25:39 · 1094 阅读 · 0 评论 -
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 · 1722 阅读 · 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 · 1154 阅读 · 0 评论 -
Linux之Input子系统——基于5.4内核
一.Input子系统组成输入子系统由驱动层(Drivers),输入子系统核心层(Input Core),和事件处理层(Event Handler)三部分组成。一个输入事件,如鼠标移动,键盘按下等都是通过Driver -> Input Core -> Eventhandler ->userspace的顺序到达用户空间传个应用程序。二.Input设备驱动编写三...原创 2020-04-19 12:16:47 · 166 阅读 · 0 评论 -
input子系统详解
Input子系统详解一.Input子系统架构Linux系统提供了input子系统,按键、触摸屏、键盘、鼠标等输入都可以利用input接口函数来实现设备驱动,下面是Input子系统架构:Input子系统架构二.Input系统的组成输入子系统由驱动层(Driv...转载 2020-04-12 21:32:02 · 1794 阅读 · 0 评论 -
12.Linux之输入子系统分析(详解)
12.Linux之输入子系统分析(详解) </h1> <div class="clear"></div> <div class="postBody"> 在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机...转载 2020-04-12 21:29:29 · 195 阅读 · 0 评论