![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 89
Leo丶Fun
这个作者很懒,什么都没留下…
展开
-
Device Tree
https://blog.csdn.net/qq_35065875/category_8499153.html转载 2020-10-19 19:51:43 · 492 阅读 · 1 评论 -
关于platform_device一些讲解
从2.6版本开始引入了platform这个概念,在开发底层驱动程序时,首先要确认的就是设备的资源信息,例如设备的地址,在2.6内核中将每个设备的资源用结构platform_device来描述,该结构体定义在kernel\include\linux\platform_device.h中:struct platform_device { const char * name; u32 id; struct device dev; u32 num_resources; struct resou转载 2020-10-15 11:18:41 · 5824 阅读 · 0 评论 -
如何修改dmesg log buffer size
需要修改 Linux 内核源码中的一个控制 log buffer size 的宏:CONFIG_LOG_BUF_SHIFT,buffer size 是 2 ^ shift,加大这个就可以。一、配置$ make menuconfigGeneral setup(18)Kernel log buffer size (16 => 64KB,17 => 128KB)二、源码kernel/printk.c#define __LOG_BUF_LEN (1 << CONFI原创 2020-09-08 18:57:07 · 1993 阅读 · 0 评论 -
Linux input子系统详解
一:前言最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)键盘驱动将检测到的所有按键都上报给了input子系统。Input子系统是所有I/O设备驱动的中间层,为上层提供了一个统一的界面。例如,在终 端系统中,我们不转载 2020-05-29 13:37:59 · 598 阅读 · 0 评论 -
Linux驱动中delayed workqueue用法
在驱动中,有时不能使用中断(这种情况很少遇到), 此时delayed_workqueue就可以发挥其巨大的功效了。也可以用其它同类的内核API实现:如timer。delayed_workqueue的使用过程如下: --> 定义workqueue: struct workqueue_struct *test_workqueue;...原创 2020-03-12 17:24:15 · 1329 阅读 · 0 评论 -
高通平台ADC开发-AT+QTEMP
1.高通平台AP内部没有集成ADC电路,使用的是PMU内部的ADC,通过PMU的GPIO或者AMUX采集接口,AT+QADC命令采集电压信息,AT+QTEMP命令将采集的电压信息转换为温度信息,信息通过spmi总线发送给AP处理。sdx55平台使用的PMU型号为PMX55,内部集成的ADC channel信息如下:PMX55 ADC功能图:ADC channel定义在qcom,sp...原创 2019-12-26 10:51:25 · 3113 阅读 · 0 评论 -
register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()函数的区别
https://blog.csdn.net/welbell_uplooking/article/details/83654312转载 2019-11-17 15:25:36 · 226 阅读 · 0 评论 -
Linux驱动加载后kernel panic的oops信息分析
kernel panic表示Linuxkernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息。首先看一下出错的kernel panic 现象,下面是一个kernel panic的出错log:如上崩溃信息,可知发生崩溃的函数为proslic_api_char_dev_init函数,偏移为0xf4的位置...原创 2019-11-14 09:57:18 · 706 阅读 · 0 评论 -
class_create() 、device_create()详解
在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_cre...转载 2019-11-07 20:02:11 · 2089 阅读 · 0 评论 -
udev 和 mdev 总结
关于udev和mdev之间的区别与联系我发现自己现在还没有把它完整的给区分开来和联系起来.设备文件系统有devfs,mdev,udevmdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般用在PC上的linux中,相对mdev来说要复杂些,devfs是2.4内核引入的,而在2.6内核中却被udev所替代,他们有着共同的优点,只是de...转载 2019-11-07 19:41:30 · 516 阅读 · 0 评论 -
linux内核sysfs详解
https://blog.csdn.net/skyflying2012/article/details/11783847转载 2019-11-03 14:50:34 · 285 阅读 · 0 评论 -
led驱动程序框架
//led_app.c#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <sys/ioctl.h>#define LED_MAGIC 'L'#define LED_ON _IOW(LED_MAGIC, 0...原创 2019-06-16 16:05:53 · 572 阅读 · 0 评论 -
高通uart调试总结
配置驱动选项1.1 首先通过原理图确定其串口号,比如UART1、UART3_HS,同时查看该串口引脚是否有复用功能,比如用作SIM卡引脚。如果有复用,需要在设备树配置中取消复用功能的选项,然后选中串口功能,高通平台设备树路径为:kernel\msm-xxx\arch\arm\boot\dts\qcom或者kernel\msm-xxx\arch\arm64\boot\dts\qcom,这个路径视...原创 2019-07-09 16:27:53 · 8225 阅读 · 0 评论 -
Linux电源管理-Linux regulator framework
1.kernel中有关regulator framework的介绍写的相当好(Documentation\power\regulator\*),先看官方文档。2.窝窝科技regulator介绍:http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html...原创 2019-06-28 16:37:29 · 486 阅读 · 0 评论 -
平台设备驱动框架二
从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。Linux中大部分的设备驱动,都可以使用这套机制, 设备用Platform_device表示,驱动用Platform_driver进行注册。通过bus(实质是一个链表)的.match来匹配,匹配上再调用drive中的probe函数:Linux platform drive...原创 2019-06-30 15:40:59 · 242 阅读 · 0 评论 -
linux内核kallsyms机制分析
一、前言 Linux内核是一个整体结构,而模块是插入到内核中的插件。尽管内核不是一个可安装模块,但为了方便起见,Linux把内核也看作一个模块。那么模块与模块之间如何进行交互呢,一种常用的方法就是共享变量和函数。但并不是模块中的每个变量和函数都能被共享,内核只把各个模块中主要的变量和函数放在一个特定的区段,这些变量和函数就统称为符号。 因此,内核也有一个module结构,叫做kernel...转载 2019-08-18 17:02:02 · 1663 阅读 · 0 评论 -
高通平台电源管理regulator介绍
1. 前期参考资料文档链接: 1).https://blog.csdn.net/longwang155069/article/details/53129378 2).https://blog.csdn.net/longwang155069/article/details/531614682. 高通sdx20平台上电后check regulator如下,一...原创 2019-08-21 10:23:30 · 2890 阅读 · 0 评论 -
I2C总线时序以及ACK和NACK(NAK)
额外资料:https://www.jianshu.com/p/ded5a26bf3aa关于i2c的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。...转载 2019-08-17 14:13:58 · 5012 阅读 · 1 评论 -
用户层和内核交互小方法
proc_create的使用方法proc文件系统是个有用的东东。创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互。proc虚拟文件是如何创建的呢?先看看比较简单的,创建proc文件夹。调用以下函数,即可实现proc文件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_...转载 2019-09-11 09:37:45 · 417 阅读 · 0 评论 -
Linux kernel debug技巧----开启DEBUG选项
kernel的source code中有很多使用pr_debug/dev_dbg输出的日志信息(例如device tree解析的代码,drivers/of/fdt.c)。默认情况下,kernel不会将这些日志输出到控制台上,比如dev_dbg定义如下:#if defined(CONFIG_DYNAMIC_DEBUG)#define dev_dbg(dev, format, ...) ...原创 2019-09-25 20:30:47 · 14357 阅读 · 3 评论 -
platform_driver_register( )过程追踪
以下代码源于linux3.1.9。platform_driver_register( ) 是内核中非常著名的函数 。platform_driver_register( )负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe( )。刨去参数检查、错误处理,platform_driver_register的主要过程如下:。。。{ 。。。 retur...原创 2019-09-28 14:59:53 · 9225 阅读 · 0 评论 -
Linux并发控制——顺序锁(seqlock)
Linux并发控制——顺序锁(seqlock)定义在头文件linux/seqlock.h中;顺序锁(seqlock)是对读写锁的一种优化,提高了读锁和写锁的独立性。写锁不会被读锁阻塞,读锁也不会被写锁阻塞。写锁会被写锁阻塞。若使用顺序锁,读执行单元绝对不会被写执行单元所阻塞,也就是说,临界区可以在写临界区对被顺序锁保护的共享资源进行写操作的同时仍然可以继续读,而不必转载 2018-02-07 09:08:50 · 3429 阅读 · 1 评论 -
设备树详解
设备树详解:https://blog.csdn.net/qq_28992301/article/details/53321610U-BOOT之寻找dtb位置:https://blog.csdn.net/qq_28992301/article/details/51873201设备树详解2:https://blog.csdn.net/woshidahuaidan2011/article/det...转载 2019-05-14 21:15:30 · 427 阅读 · 0 评论 -
gpio_tlmm_config()
http://www.voidcn.com/article/p-fndehkgz-wk.html先来看一下这个函数的原型:void gpio_tlmm_config(uint32_t gpio, uint8_t func, uint8_t dir, uint8_t pull, uint8_t drvstr, uint32_t enab...转载 2019-04-20 14:02:42 · 2429 阅读 · 0 评论 -
/proc/interrupts
cat /proc/interrupts读取到的内容从左到右,分别为:1、逻辑中断号,2、中断在各CPU发生的次数,3、中断所属设备类名称,4、硬件中断号,5、中断处理函数。如下图:代码实现分析如下红色字体1~ 5 .489 int show_interrupts(struct seq_file *p, void *v)490 {491 static in...转载 2019-04-03 10:03:42 · 2288 阅读 · 0 评论 -
韦东山驱动
1.nand flash的引脚作用: 当CE(片选信号)由高电平转为低电平时,表明nand flash已经被选中可以和CPU通信了。 当CLE为高电平的时候:IO 0~7传输的是命令(读数据还是写数据),当ALE是高电平的时候:IO 0~7传输的是地址,当CLE和ALE都是低电平的时候,IO 0~7传输的是数据。 当RE(读信号)是低电平时,是在flash...原创 2018-04-11 21:24:32 · 934 阅读 · 2 评论 -
平台设备驱动框架一
//platform_driver.c#include <linux/module.h>#include <linux/platform_device.h>MODULE_LICENSE("GPL");int hello_probe(struct platform_device *dev){ printk("hello_probe\n"); r...原创 2018-04-11 21:23:54 · 328 阅读 · 0 评论 -
nand flash驱动
NAND FLASH是一个存储芯片那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址,问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令 怎么传入命令?答2.在DAT...原创 2018-04-11 21:22:47 · 195 阅读 · 0 评论 -
Flash介质驱动层的三个核心功能
Flash转换层(FTL)是Flash设备驱动的核心构件,除了实现数据块映射外,FTL还实现了管理 Flash 设备的三个最重要的功能,分别是垃圾回收(或垃圾收集)、管理坏块和损耗均衡(有时也叫损益均衡、平均读写)。坏块管理是实现可靠存储必需的技术,如果Flash不能识别坏块,那么写入坏块的数据的一致性就无法保证。而垃圾回收和损耗均衡则是Flash存储介质的存储容量和存储性能的重要保证转载 2018-02-07 09:16:43 · 526 阅读 · 0 评论 -
SPI详解及SPI接口flash举例
一、SPI总线是怎么一回事:推荐文章http://blog.csdn.net/ce123_zhouwei/article/details/6897293,关于SPI与uart、i2c的比较,推荐文章http://www.cnblogs.com/lucky-apple/archive/2008/07/03/1234581.html,SPI最大的特点是它是它是同步的(有时钟,和uart最大转载 2018-02-02 09:22:50 · 22009 阅读 · 0 评论 -
I2C协议的理解
http://blog.csdn.net/Andy001847/article/details/76229137 题外话:这几天天气突然转冷了。今天已是11月23日了,查查黄历,昨天(11月22日)刚好是小雪,一夜温度骤降,果然老祖先的经验有灵验!冬天来了,还是多加加衣服,注意保暖!1.Abstract 前些天借用他人的一块MCS-51开发板来做实验,不想这块板子与我转载 2018-02-01 10:54:01 · 1211 阅读 · 1 评论 -
SPI、I2C、UART三种串行总线协议的区别
SPI、I2C、UART三种串行总线协议的区别第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)第二,区别在电气信号线上:转载 2018-02-01 08:58:50 · 305 阅读 · 0 评论 -
I/O控制的三种方法------DMA 中断 查询三者的区别
1:DMA(DIRECT MEMORY ACCESS)即直接存储器存取,是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。 要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式。利用中断进行数据传送,可以大大提高CPU的利用率。 2:中断传送是由CPU通过中断服务程序来传送,每次要保护断点,保护现场需要多条指令,每条指...转载 2018-01-31 15:27:09 · 5648 阅读 · 0 评论 -
认识UART接口
简单的讲:(UART与COM) 嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号). UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高电平为1(3.3...转载 2018-07-18 20:53:44 · 27821 阅读 · 0 评论 -
s3c2440 与LCD协议
一、信号分析 VFRAME/VSYNC:LCD控制器和LCD驱动器之间的帧同步信号。该信号告诉LCD屏新一帧开始了。LCD控制器在一帧显示完成后立即插入一个VFRAME信号,开始新一帧的显示。VLINE/HSYNC:LCD控制器和LCD驱动器之间的行同步脉冲信号。该信号用于LCD驱动器将水平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整行数据移人LCD驱动器后,插入一个VLI...转载 2018-07-18 22:05:49 · 596 阅读 · 0 评论 -
学习驱动开发,这几个论坛值得经常看看
对于从事Windows驱动开发的朋友,或者是对Windows内核感兴趣的朋友,以下几个BLOG值得经常看看!1,Kernel Mustard by Steve Dispensa link: http://kernelmustard.com/category/ddk/他以前的BLOG地址为:http://msmvps.com/blogs/kernelmustard/default.aspx2,Lar...转载 2018-07-14 23:36:35 · 3265 阅读 · 0 评论 -
linux驱动开发--中断:按键中断
https://blog.csdn.net/waldmer/article/details/19189023韦东山源码#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <...原创 2019-04-02 23:00:06 · 218 阅读 · 0 评论 -
class_create(),device_create自动创建设备文件结点
从linux 内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一 点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_cre...转载 2019-04-02 22:13:40 · 201 阅读 · 0 评论 -
linux spi驱动开发学习-----spidev.c和spi test app
http://www.cnblogs.com/sankye/p/3955630.html转载 2019-03-28 17:19:01 · 837 阅读 · 0 评论 -
19年linux驱动笔记
1.管道(pipe)是一种用来连接两个进程的虚拟文件,当进程A欲向进程B发送数据时,它把管道文件视作输出文件,向其中写数据,进程B则可将管道文件视作输入文件,从中读数据。于是,进程A和B之间的通信很像普通文件的读写。2.MINIX中进程的存储空间分为三部分:正文段(即代码段),数据段(即变量),和堆栈段。3.MINIX中一个简单的系统调用getpid返回调用进程的进程标识号,注意在调用fo...原创 2019-01-31 16:35:22 · 634 阅读 · 0 评论