自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gick

“只是因为三轮车好学,你就要一辈子骑三轮车吗?” – Douglas Englebart

原创 19年linux驱动笔记

1.管道(pipe)是一种用来连接两个进程的虚拟文件,当进程A欲向进程B发送数据时,它把管道文件视作输出文件,向其中写数据,进程B则可将管道文件视作输入文件,从中读数据。于是,进程A和B之间的通信很像普通文件的读写。 2.MINIX中进程的存储空间分为三部分:正文段(即代码段),数据段(即变量)...

2019-01-31 16:35:22 241 0

转载 Linux input子系统详解

一:前言 最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享! (这篇博客主要是以键盘驱动为例的,不过讲解的是Linux ...

2020-05-29 13:37:59 43 0

原创 Linux fuser命令用法

fuser命令是一个非常聪明的unix实用程序,用于查找哪个进程正在使用文件,目录或套接字。它还提供有关拥有进程和访问类型的用户的信息。 fuser工具显示使用指定文件或文件系统的每个进程的进程标识(PID)。fuser用法如下: 如下修改/sys/power/state,显示资源被占用: ...

2020-03-27 11:27:10 73 0

原创 Linux驱动中delayed workqueue用法

在驱动中,有时不能使用中断(这种情况很少遇到), 此时delayed_workqueue就可以发挥其巨大的功效了。也可以用其它同类的内核API实现:如timer。 delayed_workqueue的使用过程如下: --> 定义workqueue: struct workqueue_s...

2020-03-12 17:24:15 135 0

原创 USB学习之一:USB总线驱动程序

USB总线驱动程序的作用 1. 识别USB设备 1.1 分配地址 1.2 并告诉USB设备(set address) 1.3 发出命令获取描述符 描述符的信息可以在include\linux\usb\Ch9.h看到 2. 查找并安装对应的设备驱动程序 3. 提供USB读写函数 将一个USB...

2020-03-12 16:24:12 92 0

原创 高通平台ADC开发-AT+QTEMP

1.高通平台AP内部没有集成ADC电路,使用的是PMU内部的ADC,通过PMU的GPIO或者AMUX采集接口,AT+QADC命令采集电压信息,AT+QTEMP命令将采集的电压信息转换为温度信息,信息通过spmi总线发送给AP处理。sdx55平台使用的PMU型号为PMX55,内部集成的ADC cha...

2019-12-26 10:51:25 449 0

转载 register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()函数的区别

https://blog.csdn.net/welbell_uplooking/article/details/83654312

2019-11-17 15:25:36 76 0

原创 Linux驱动加载后kernel panic的oops信息分析

kernel panic表示Linuxkernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息。 首先看一下出错的kernel panic 现象,下面是一个kernel panic的出错log: 如上崩溃信息...

2019-11-14 09:57:18 208 0

转载 class_create() 、class_create()详解

在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。 内核中定义了struct class结...

2019-11-07 20:02:11 152 0

转载 udev 和 mdev 总结

关于udev和mdev之间的区别与联系我发现自己现在还没有把它完整的给区分开来和联系起来. 设备文件系统有devfs,mdev,udev mdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般用在PC上的linux中,相对mdev来说要复杂些,devf...

2019-11-07 19:41:30 71 0

转载 linux内核sysfs详解

https://blog.csdn.net/skyflying2012/article/details/11783847

2019-11-03 14:50:34 53 0

原创 platform_driver_register( )过程追踪

以下代码源于linux3.1.9。 platform_driver_register( ) 是内核中非常著名的函数 。platform_driver_register( )负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe( )。刨去参数检查、错误处理,platform_...

2019-09-28 14:59:53 510 0

原创 Linux kernel debug技巧----开启DEBUG选项

kernel的source code中有很多使用pr_debug/dev_dbg输出的日志信息(例如device tree解析的代码,drivers/of/fdt.c)。默认情况下,kernel不会将这些日志输出到控制台上,比如dev_dbg定义如下: #if defined(CONFIG_D...

2019-09-25 20:30:47 1220 0

转载 Linux 下C语言获取文件大小

Linux 下C语言获取文件大小 C语言是一种比较底层的语言,有时在其他语言中很容易操作的事情,在c语言中就比较麻烦,例如获取一个文件的大小。Java中File类有个length函数,Python中os.path包中有个getsize函数,C语言中却没有直接对应的函数获取文件大小。 目前,网...

2019-09-18 11:18:49 168 0

转载 perl子程序详解

定义子程序:使用关键字sub,例如 sub marine{ $n+=1; print "Hello,sailor number $n!\n"; }子程序可以定义在程序的任意位置,如果定义了两个重名的子程序,后面的会覆盖掉前面的 可以在子程序中使用任何全局变量 调用子程序:可以在...

2019-09-11 11:38:34 90 0

转载 用户层和内核交互小方法

proc_create的使用方法 proc文件系统是个有用的东东。 创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互。 proc虚拟文件是如何创建的呢? 先看看比较简单的,创建proc文件夹。 调用以下函数,即可实现proc文件夹的创建: struct proc_dir_e...

2019-09-11 09:37:45 59 0

原创 高通平台电源管理regulator介绍

1. 前期参考资料文档链接: 1).https://blog.csdn.net/longwang155069/article/details/53129378 2).https://blog.csdn.net/longwang155069/article/details/531...

2019-08-21 10:23:30 739 0

转载 linux内核kallsyms机制分析

一、前言 Linux内核是一个整体结构,而模块是插入到内核中的插件。尽管内核不是一个可安装模块,但为了方便起见,Linux把内核也看作一个模块。那么模块与模块之间如何进行交互呢,一种常用的方法就是共享变量和函数。但并不是模块中的每个变量和函数都能被共享,内核只把各个模块中主要的变量和函数放在一个...

2019-08-18 17:02:02 163 0

转载 I2C总线时序以及ACK和NACK(NAK)

额外资料:https://www.jianshu.com/p/ded5a26bf3aa 关于i2c的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和...

2019-08-17 14:13:58 828 0

转载 内核调试 /proc/kmsg 和 dmesg

dmesg 打印内核启动过程的所有信息,/proc/kmsg也是打印内核的信息, 但是与dmesg 有不同, 第一次执行/proc/kmsg 打印到目前位置的所有内核信息,再次执行/proc/kmsg, 不打印打印过了的信息,打印第一次执行之后的信息,下面举个例子: 第一次执行dmesg打印:...

2019-08-09 14:54:53 573 0

原创 高通uart调试总结

配置驱动选项 1.1 首先通过原理图确定其串口号,比如UART1、UART3_HS,同时查看该串口引脚是否有复用功能,比如用作SIM卡引脚。如果有复用,需要在设备树配置中取消复用功能的选项,然后选中串口功能,高通平台设备树路径为:kernel\msm-xxx\arch\arm\boot\dts\...

2019-07-09 16:27:53 1549 0

原创 STM32笔记

1.51单片机的供电电压为5V,STM32的供电电压一般为3.3V 2.总线是指一个主设备下面挂接多个从设备,通过一条通信线进行通信。比如SPI总线、IIC总线。 3.不同通信协议的UART: 4.spi总线 5.IIC驱动&应用 6.晶体管(三极管)的作用:开关作用...

2019-07-01 23:31:39 82 0

原创 平台设备驱动框架二

从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。 Linux中大部分的设备驱动,都可以使用这套机制, 设备用Platform_device表示,驱动用Platform_driver进行注册。通过bus(实质是一个链表)的.ma...

2019-06-30 15:40:59 91 0

原创 Linux电源管理-Linux regulator framework

1.kernel中有关regulator framework的介绍写的相当好(Documentation\power\regulator\*),先看官方文档。 2.窝窝科技regulator介绍:http://www.wowotech.net/pm_subsystem/regulator_fra...

2019-06-28 16:37:29 296 0

转载 从windows到linux的换行转换工具dos2unix

同学们也许知道,windows中的文本文件的换行符是"\r\n",而linux中是"\n"。由于换行符的不同,所以有的时候会发生一些莫名其妙的状况。至于具体什么状况我就不举栗子了,场景要说起来比较多。反正具体的情况是酱婶的: 你在windows下写了一个文...

2019-06-20 08:57:39 279 0

原创 led驱动程序框架

//led_app.c #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <sys/ioctl.h> #defi...

2019-06-16 16:05:53 265 0

转载 设备树详解

设备树详解:https://blog.csdn.net/qq_28992301/article/details/53321610 U-BOOT之寻找dtb位置:https://blog.csdn.net/qq_28992301/article/details/51873201 设备树详解2:h...

2019-05-14 21:15:30 128 0

转载 Virtual Box内虚拟机的硬盘扩容方式

https://blog.csdn.net/orange_612/article/details/79597905

2019-04-23 13:31:04 169 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, ...

2019-04-20 14:02:42 535 0

转载 /proc/interrupts

cat /proc/interrupts 读取到的内容从左到右,分别为:1、逻辑中断号,2、中断在各CPU发生的次数,3、中断所属设备类名称,4、硬件中断号,5、中断处理函数。 如下图: 代码实现分析如下红色字体1~ 5 . 489 int show_interrupts(struct...

2019-04-03 10:03:42 291 0

原创 linux驱动开发--中断:按键中断

https://blog.csdn.net/waldmer/article/details/19189023 韦东山源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/...

2019-04-02 23:00:06 116 0

转载 class_create(),device_create自动创建设备文件结点

从linux 内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一 点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用...

2019-04-02 22:13:40 118 0

转载 linux spi驱动开发学习-----spidev.c和spi test app

http://www.cnblogs.com/sankye/p/3955630.html

2019-03-28 17:19:01 447 0

转载 Linux ALSA声卡驱动之一:ALSA架构简介

声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! 一.概述 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息...

2019-03-27 19:22:23 452 2

转载 linux ioctl()详解

https://blog.csdn.net/coolwriter/article/details/78242256

2019-03-27 10:33:19 91 0

原创 关于ioctl,unlocked_ioctl和compat_ioctl执行的顺序

关于ioctl,unlocked_ioctl和compat_ioctl执行的顺序 对于ioctl操作,优先执行f_op->unlocked_ioctl,如果没有unlocked_ioctl,那么执行f_op->ioctl sys_ioctl ==> vfs_ioctl ==>...

2019-03-26 18:49:04 154 0

转载 linux如何通过ioctl调用驱动的

ioctl作用:应用层的ioctl函数传入的cmd和arg参数会直接传入驱动层的ioctl接口,在对应驱动文件里会对相应的命令进行操作 对于传递的ioctl命令有一定的规范,具体可以参考:/include/asm/ioctl.h,/Documentation/ioctl-number.txt 这...

2019-03-26 16:40:42 695 0

转载 【高效程序员系列】别碰鼠标——让键盘飞起来

一、闪电启动软件的秘密 正如很多魔术,外行人苦思冥想也无法得知其中的奥秘,一旦揭穿则会让人大呼:原来是这样,太简单了。其实这里闪电启动软件业没有什么高深的方法,只不过是调用了运行而已。作为软件开发人员,我们经常会使用到“运行”,输入cmd就可以调用命令行,输入regedit则是编辑注册表。如果你...

2019-03-07 09:06:14 398 0

转载 Linux设备树语法详解

概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化...

2019-02-08 20:22:03 104 0

转载 内核kconfig语法介绍

https://blog.csdn.net/jianwen_hi/article/details/53398141

2019-02-05 20:29:29 180 0

提示
确定要删除当前文章?
取消 删除