傅里叶变换就是这么简单,你学会了吗? 学习傅里叶变换需要面对大量的数学公式,数学功底较差的同学听到傅里叶变换就头疼。事实上,许多数学功底好的数字信号处理专业的同学也不一定理解傅里叶变换的真实含义,不能做到学以致用!事实上,傅里叶变换的相关运算已经非常成熟,有现成函数可以调用。对于绝大部分只需用好傅里叶变换的同学,重要的不是去记那些枯燥的公式,而是解傅里叶变换的含义及意义。本文试图不用一个数学公式,采用较为通俗的语言深入浅出的阐述傅里叶...
关于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
如何修改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
Linux input子系统详解 一:前言最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)键盘驱动将检测到的所有按键都上报给了input子系统。Input子系统是所有I/O设备驱动的中间层,为上层提供了一个统一的界面。例如,在终 端系统中,我们不
Linux fuser命令用法 fuser命令是一个非常聪明的unix实用程序,用于查找哪个进程正在使用文件,目录或套接字。它还提供有关拥有进程和访问类型的用户的信息。 fuser工具显示使用指定文件或文件系统的每个进程的进程标识(PID)。fuser用法如下:如下修改/sys/power/state,显示资源被占用:则使用fuser查看占用的进程如下:...
Linux驱动中delayed workqueue用法 在驱动中,有时不能使用中断(这种情况很少遇到), 此时delayed_workqueue就可以发挥其巨大的功效了。也可以用其它同类的内核API实现:如timer。delayed_workqueue的使用过程如下: --> 定义workqueue: struct workqueue_struct *test_workqueue;...
USB学习之一:USB总线驱动程序 USB总线驱动程序的作用1. 识别USB设备1.1 分配地址1.2 并告诉USB设备(set address)1.3 发出命令获取描述符描述符的信息可以在include\linux\usb\Ch9.h看到2. 查找并安装对应的设备驱动程序3. 提供USB读写函数将一个USB设备接到开发板上,看输出信息:usb 1-1: new full speed USB device ...
高通平台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...
register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()函数的区别 https://blog.csdn.net/welbell_uplooking/article/details/83654312
Linux驱动加载后kernel panic的oops信息分析 kernel panic表示Linuxkernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息。首先看一下出错的kernel panic 现象,下面是一个kernel panic的出错log:如上崩溃信息,可知发生崩溃的函数为proslic_api_char_dev_init函数,偏移为0xf4的位置...
class_create() 、device_create()详解 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_cre...
udev 和 mdev 总结 关于udev和mdev之间的区别与联系我发现自己现在还没有把它完整的给区分开来和联系起来.设备文件系统有devfs,mdev,udevmdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般用在PC上的linux中,相对mdev来说要复杂些,devfs是2.4内核引入的,而在2.6内核中却被udev所替代,他们有着共同的优点,只是de...
platform_driver_register( )过程追踪 以下代码源于linux3.1.9。platform_driver_register( ) 是内核中非常著名的函数 。platform_driver_register( )负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe( )。刨去参数检查、错误处理,platform_driver_register的主要过程如下:。。。{ 。。。 retur...
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, ...) ...
Linux 下C语言获取文件大小 Linux 下C语言获取文件大小C语言是一种比较底层的语言,有时在其他语言中很容易操作的事情,在c语言中就比较麻烦,例如获取一个文件的大小。Java中File类有个length函数,Python中os.path包中有个getsize函数,C语言中却没有直接对应的函数获取文件大小。 目前,网上有一种流传很广的方法,读取文件到内存,然后跳转到文件末尾,查看跳转的长度。代码如下:...
perl子程序详解 定义子程序:使用关键字sub,例如sub marine{$n+=1;print "Hello,sailor number $n!";}子程序可以定义在程序的任意位置,如果定义了两个重名的子程序,后面的会覆盖掉前面的可以在子程序中使用任何全局变量调用子程序:可以在任意表达式中使用子程序名(前面加上&)来调用,如&mari...
用户层和内核交互小方法 proc_create的使用方法proc文件系统是个有用的东东。创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互。proc虚拟文件是如何创建的呢?先看看比较简单的,创建proc文件夹。调用以下函数,即可实现proc文件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_...
高通平台电源管理regulator介绍 1. 前期参考资料文档链接: 1).https://blog.csdn.net/longwang155069/article/details/53129378 2).https://blog.csdn.net/longwang155069/article/details/531614682. 高通sdx20平台上电后check regulator如下,一...