![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 89
风筝丶
随便看人家资料是不好的......
展开
-
ALSA子系统(十八)------指纹解锁动画提示声卡顿问题解析
很久没写kernel相关的东西了,主要是来到手机厂之后,大部分还是在Android上,Kernel虽然也有涉及,但毕竟只是有所涉及,主要业务逻辑还是在HAL之上,kernel的修改除了项目bringup,之后基本甚少修改。好,扯了这么一大堆,回归本题,如果出现了underflow,说明写数据不及时,写数据就是通过dsp_process_msg_thread这个线程里面写到DSP的,所以,我们只需要保证这个线程的正常调度运行即可。因为提示音是短音,走的fast通路,buf又小,确实容易出现问题。原创 2023-05-11 22:12:54 · 1227 阅读 · 2 评论 -
嵌入式Linux驱动笔记(三十一)------SYSRQ组合键使用
你好!这里是风筝的博客,欢迎和我一起交流。SYSRQ组合键是Linux调试的一种手段,即使在系统死机、panic等情况,只要系统还能响应中断,那么SYSRQ就派上用场了,具体的使用情况可以参考内核文档里的详细描述:Documentation/sysrq.txtnote:SYSRQ键也就是键盘上的Print Screen键.使用SYSRQ组合键需要在内核开启配置:CONFIG_MAGIC_SYSRQ可以通过在系统中使用cat /proc/sys/kernel/sysrq查看sysqr是否开启原创 2020-06-25 20:29:01 · 2860 阅读 · 1 评论 -
irq: nobody cared (try booting with the “irqpoll” option)
你好!这里是风筝的博客,欢迎和我一起交流。irq 286: nobody cared (try booting with the “irqpoll” option)之前看到这个一个warning,我看网上其他人写的有点奇怪,手痒特此记录一下:通过grep查找代码,可以发现这行语句在:__report_bad_irq函数:static inline int bad_action_ret(irqreturn_t action_ret){ if (likely(action_ret <= (原创 2020-06-11 15:00:59 · 5046 阅读 · 0 评论 -
嵌入式Linux驱动笔记(三十)------wait_event与wait_event_interruptible的区别
你好!这里是风筝的博客,欢迎和我一起交流。wake_up与wake_up_interrupt有什么区别?wait_event与wait_event_interruptible有什么区别?最近在项目,被报了一个log,然后就思考到了这个问题:wait_event_interruptible将当前进程的状态设置成TASK_INTERRUPTIBLE。wait_event将当前进程的状...原创 2020-01-20 16:42:43 · 2462 阅读 · 0 评论 -
嵌入式Linux驱动笔记(二十二)------设备树实现dts转换成platform_device
你好!这里是风筝的博客,欢迎和我一起交流。说来惭愧,虽说一直用设备树,但是都没有好好去看过他的实现细节,所以今天抽空看了一下代码和网上的文章,试着通过读代码的方式来好好了解一下设备树。Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处...原创 2019-02-28 21:40:46 · 4185 阅读 · 7 评论 -
嵌入式Linux驱动笔记(二十一)------GPIO和Pinctrl子系统的分析和思考
你好!这里是风筝的博客,欢迎和我一起交流。好久都没有写东西了,最近来广州某公司实习,顺便记录下吧。 吐槽下,因为是二级保密单位,公司里电脑不给联网,贼难受。。。。。。不过第一次接触真正的产品开发,正式的工程项目,还是有很多值得我学习的地方的。 公司用的是联芯的一套方案,分配电脑后,师傅给了我一个简单的任务:给一台手机(Android6.0)移植光线&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;距离传感器驱动和...原创 2018-09-02 17:25:14 · 4762 阅读 · 5 评论 -
嵌入式Linux驱动笔记(十九)------音频子系统(ASOC框架)之Machine
你好!这里是风筝的博客,欢迎和我一起交流。我们知道, Linux 内核驱动可以都是遵循一个逐层抽象的架构: 最上层的抽象层便于系统软件的访问, 中间层的实现硬件协议细节,同时提供上下两层连接的接口, 对于最下层的 driver 来说就是要定义底层驱动要实现的接口和实际的设备控制, 由于 Linux 内核各类驱动的框架支持,driver 可以更加关注设备本身的特性。 AS...原创 2018-06-11 17:43:27 · 3624 阅读 · 0 评论 -
嵌入式Linux驱动笔记(二十)------音频子系统(ASOC框架)之Codec
你好!这里是风筝的博客,欢迎和我一起交流。codec_dai和pcm配置信息通过结构体snd_soc_dai_driver描述,包括dai的能力描述和操作接口,snd_soc_dai_driver最终会被注册到asoc-core中。附上一位博主的话: “最后顺便提下dai_link中的codec和codec_dai的区别:codec指音频codec共有的部分,包括cod...原创 2018-06-20 14:55:02 · 4261 阅读 · 0 评论 -
嵌入式Linux驱动笔记(十)------通俗易懂式分析了解i2c框架
你好!这里是风筝的博客,欢迎和我一起多多交流。了解i2c框架时,在别的博客看到一张图,非常好,引用如下: 我们从上往下看起, 以kernel4.8.17为例: 在mach-smdk2440.c文件,static struct platform_device *smdk2440_devices[] __initdata = { &s3c_device_ohci, &s3c_dev原创 2017-09-06 20:15:56 · 2157 阅读 · 0 评论 -
嵌入式Linux驱动笔记(二十三)------使用buidroot构建文件系统
如上所述,Buildroot基本上是一组Makefiles,可以使用正确的选项下载,配置和编译软件。它还包括各种软件包补丁-主要参与的交叉编译工具链的那些(gcc,binutils和 uClibc)。每个软件包基本上有一个Makefile,它们以.mk扩展名命名。Makefile分为许多不同的部分。该toolchain/目录包含Makefile文件和相关文件的有关交叉编译工具链的所有软件:bi...原创 2019-03-13 20:49:29 · 1507 阅读 · 4 评论 -
嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)
你好!这里是风筝的博客,欢迎和我一起交流。最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来。我们知道,所以参考了这篇文章:68 linux framebuffer设备驱动之spi lcd屏驱动【吐槽】结果问题就来了。。。。。。。我把代码编译成模块,insmod 时就出现:Segmentation fault段错误一般都是指针指向或者引用...原创 2019-03-23 18:42:43 · 6543 阅读 · 5 评论 -
嵌入式Linux驱动笔记(二十五)------Input子系统框架
一、Input子系统概述在我们日常的Linux系统中,存在大量的输入设备,例如按键、鼠标、键盘、触摸屏、摇杆等,他们本身就是字符设备,linux内核将这些字符设备的共同性抽象出来,简化驱动开发建立了一个input子系统。二、Input子系统架构我们知道,Linux 内核驱动可以都是遵循一个逐层抽象的架构: 最上层的抽象层便于系统软件的访问,中间层的实现硬件协议细节,同时提供上下两层连接的接口...原创 2019-03-30 15:12:40 · 2312 阅读 · 6 评论 -
嵌入式Linux驱动笔记(二十六)------framebuffer之使用spi-tft屏幕(下)
你好!这里是风筝的博客,欢迎和我一起交流。上一篇文章,描述的是如何驱动spi的屏幕,嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕但是是使用的是在内核里开一个线程来不停的绘制图形,CPU占用率非常高,效率低。有种较为方便的办法,就是局部刷新,每次只重绘“脏区”即可。参考了github里几个9225芯片的驱动,对本驱动进行了一些改进,主要是加...原创 2019-06-03 22:55:29 · 4068 阅读 · 4 评论 -
嵌入式Linux驱动笔记(二十七)------中断子系统框架分析
你好!这里是风筝的博客,欢迎和我一起交流。中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。咋们做嵌入式的,说到中断,不得不了解一下GIC:GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specifica...原创 2019-07-26 15:02:40 · 1390 阅读 · 0 评论 -
嵌入式Linux驱动笔记(二十八)------DMA的简单使用分析
你好!这里是风筝的博客,欢迎和我一起交流。最近被一个需求折磨,对DMA传输速度有极大要求,被迫对着DMA进行魔改。。。。。简单复习总结一下关于DMA到一些知识:在DMA传输里,最耗时到莫过于map了。网上说:“根据DMA缓冲区期望保留的时间长短,PCI代码有两种DMA映射:一致性映射和流式映射”。我觉得说的不太对,对于缓存区保留时间到长短来分区两种映射有失偏见,这只能算是他们表现出来...原创 2019-08-30 20:01:40 · 4788 阅读 · 7 评论 -
嵌入式Linux驱动笔记(二十九)------内存管理之伙伴算法(Buddy)分析
你好!这里是风筝的博客,欢迎和我一起交流。我们知道,在一个通用操作系统里,频繁申请内存释放内存都会出现一个非常著名的内存管理问题:内存碎片。学过操作系统的都知道,有很多行之有效的方法(比如:记录现存的空闲连续页框块的情况,以尽量避免为满足小块的请求而分割大的空闲块;小内存单独分配,大内存系统自动分配)可以很大程度上避免出现内存碎片,其中伙伴算法被证明是非常行之有效的一套内存管理方法,因此也...原创 2019-09-26 10:24:15 · 1354 阅读 · 0 评论 -
嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl
你好!这里是风筝的博客,欢迎和我一起交流。上一章写了V4L2框架:嵌入式Linux驱动笔记(十七)——详解V4L2框架(UVC驱动) 现在来写V4L2的重点,他的用户空间操作函数集合:const struct v4l2_file_operations uvc_fops = { .owner = THIS_MODULE, .open =...原创 2017-11-19 15:47:05 · 6744 阅读 · 4 评论 -
嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)
你好!这里是风筝的博客,欢迎和我一起交流。前几天去面试,被问到Linux设备驱动模型这个问题,没答好,回来后恶补知识,找了些资料,希望下次能答出个满意答案。Linux早期时候,一个驱动对应一个设备,也就对应一个硬件地址,那当有两个一样的设备的时候,就要写两个驱动,显然是不合理的。应该是从Linux2.5开始,就引入了device-bus-driver模型。 其中设备驱动模型主...原创 2017-10-27 20:43:01 · 6646 阅读 · 12 评论 -
嵌入式Linux驱动笔记(一)------第一个LED驱动程序
你好!这里是风筝的博客,欢迎和我一起交流。如果本篇博客对您有帮助,或许可以在下方评论给我留个言。//应用程序:#include #include #include #include /* leddrvtest on * leddrvtest off */int main(int argc, char **argv){ int fd; int原创 2017-07-03 13:00:02 · 4551 阅读 · 3 评论 -
嵌入式Linux驱动笔记二)------定时器
你好!这里是风筝的博客,欢迎和我一起交流。如果本篇博客对您有帮助,或许可以在下方评论给我留个言。内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 和 kernel/timer.c 文件中。定时器的回调函数运行过一次后就不会再被运行了(相当于自动注销),但可以通过在回调函数中重新改变自己来周期运行。time原创 2017-07-12 14:48:28 · 1464 阅读 · 0 评论 -
嵌入式Linux驱动笔记(三)------LCD驱动程序
你好!这里是风筝的博客,欢迎和我一起交流。如果本篇博客对您有帮助,或许可以在下方评论给我留个言。开发板为JZ2440,Linux Kernel 4.4.18在Kernel自带的s3c2410fb.c文件中,就是LCD的驱动。我们可以照着这个文件编写一个LCD驱动。在文件中s3c24xxfb_probe函数就是LCD的初始化原创 2017-07-12 15:15:13 · 4619 阅读 · 10 评论 -
嵌入式Linux驱动笔记(四)------USB键盘驱动程序
你好!这里是风筝的博客,欢迎和我一起交流。如果本篇博客对您有帮助,或许可以在下方评论给我留个言。Kernel版本为4.4.17.编写USB键盘的驱动,可以参考Kernel里的usbkbd.c这个文件.我越发觉得驱动都是按套路来的.......流程都差不多一样.在这个文件里,最主要就是看usb_kbd_probe函数和usb_kbd_irq函数了。原创 2017-07-14 15:38:42 · 2548 阅读 · 0 评论 -
嵌入式Linux驱动笔记(五)------学习platform设备驱动
你好!这里是风筝的博客,欢迎和我一起交流。 设备是设备,驱动是驱动。如果把两个糅合写一起,当设备发生变化时,势必要改写整个文件,这是非常愚蠢的做法。如果把他们分开来,当设备发生变化时,只要改写设备文件即可,驱动文件巍然不动。从linux2.6内核起,引入一套新的驱动管理和注册机制:platform_device 和 platform_driver 。Linux 中大部分的设备驱...原创 2017-07-18 19:43:43 · 3257 阅读 · 0 评论 -
嵌入式Linux驱动笔记(六)------浅析input输入子系统框架
你好!这里是风筝的博客,欢迎和我一起交流。(文章写得比较早,当时自己也是一知半解,描述的不好,后来我参考了网上的大量资料,重新写了一篇:嵌入式Linux驱动笔记(二十五)------Input子系统框架)基于设备驱动分层的思想,其实理解了platform总线,输入子系统也是可以很好理解的。以kernel 4.8.17为例:input.c文件:staticchar*i...原创 2017-07-23 13:29:17 · 1442 阅读 · 0 评论 -
嵌入式Linux驱动笔记(七)------浅析tty与uart框架
你好!这里是风筝的博客,欢迎和我一起多多交流。 看一个驱动模型,先从注册函数看起。先看下设备文件:在init.c(arch/arm/plat-samsung)文件,有:static struct cpu_table *cpu;注意哦,这里有个结构体指针变量cpu,一定要记住,有大用!!!将下来:static int __init s3c_arch_init(v...原创 2017-07-28 19:54:15 · 2742 阅读 · 1 评论 -
嵌入式Linux驱动笔记(八)------依赖Linux kernel驱动的pwm编写
你好!这里是风筝的博客,欢迎和我一起多多交流。之前我们写Linux驱动,都是自己写,从platform driver到platform device,都是自己一手包办,其实,在kernel里,很多驱动都已经写好了的,只需我们会用就好了,省时省力。现在以pwm驱动为例,芯片是2440的芯片: 查阅芯片手册我们可以知道,S3C2440上有4 通道 16 位具有 PWM 功能的定时器,1 通道 16 位原创 2017-08-16 20:32:21 · 3567 阅读 · 2 评论 -
嵌入式Linux驱动笔记(九)------dts设备树在2440使用
你好!这里是风筝的博客,欢迎和我一起多多交流。在arch/arm/boot/dts里面,发现并没有关于2440的设备树文件,但是发现2416采用了设备树,所以我们只能参考2416来编写设备树了。其中,有dts文件和dtsi文件,先说下这两者关系: .dts文件是一种ASCII文本格式的DeviceTree描述。基本上,在ARMLinux内,一个.dts文件对应一个ARM的machine,一般放置在原创 2017-08-24 21:42:00 · 4343 阅读 · 3 评论 -
嵌入式Linux驱动笔记(十一)------i2c设备之mpu6050驱动
你好!这里是风筝的博客,欢迎和我一起交流。上一节讲了i2c框架: 嵌入式Linux驱动笔记(十)——通俗易懂式了解i2c框架 这次就来写一写真正的i2c设备驱动: mpu6050是一款6轴运动处理组件,采用i2c通信接口。 首先是厂家提供的mpu6050.h文件:#ifndef __MPU6050_H_#define __MPU6050_H_//定义MPU6050硬件...原创 2017-09-07 19:32:31 · 3675 阅读 · 0 评论 -
嵌入式Linux驱动笔记(十二)------通俗易懂式分析了解spi框架
你好!这里是风筝的博客,欢迎和我一起交流。之前讲过i2c框架:通俗易懂式分析了解i2c框架 如果之前你看懂了,那其实spi框架也差不多。 同样的,先上张图: 老规则,从上往下看起,以kernel4.8.17为例: 在mach-smdk2440.c文件里:static struct platform_device *smdk2440_devices[] __initd...原创 2017-09-09 21:15:43 · 3365 阅读 · 0 评论 -
嵌入式Linux驱动笔记(十三)------spi设备之RFID-rc522驱动
你好!这里是风筝的博客,欢迎和我一起交流。上一节讲了spi框架:通俗易懂式分析了解spi框架 现在我们写一下spi的设备驱动程序, rc522是一款刷卡模块,类似于学校食堂的刷卡机。以kernel4.8.17为例: 之前我们给mach-smdk2440.c文件添加了: &s3c_device_spi0,现在我要把rc522设备接在2440的spi1接口上,所以我们应该修改为: &s3c原创 2017-09-13 21:38:04 · 6562 阅读 · 1 评论 -
嵌入式Linux驱动笔记(十四)------详解clock时钟(CCF)框架及clk_get函数
你好!这里是风筝的博客,欢迎和我一起交流。我在找资料的时候,发现网上大部分文章都是说: 在s3c244x_init_clocks函数里:void __init s3c244x_init_clocks(int xtal){ s3c24xx_register_baseclocks(xtal); //完成祖宗级别时钟的注册 s3c244x_setup_clocks();//填充祖宗原创 2017-09-17 19:40:44 · 5047 阅读 · 0 评论 -
嵌入式Linux驱动笔记(十五)------编译使用tslib支持LCD触摸屏
你好!这里是风筝的博客,欢迎和我一起交流。从网上下载tslib,比如我这里用的是tslib-1.4解压:tar xzf tslib-1.4.tar.gz编译之前先安装三个文件: sudo apt-get install autoconf sudo apt-get install automake sudo apt-get install libtoolcd tslib ./autogen.s原创 2017-10-14 15:27:21 · 1150 阅读 · 0 评论 -
嵌入式Linux驱动笔记(十七)------详解V4L2框架(UVC驱动)
你好!这里是风筝的博客,欢迎和我一起交流。Video for Linux 2,简称V4l2,是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。首先来看看所有的v4l2驱动都必须要有的几个组成部分: – 用来描述每一个v4l2设备实例状态的结构(struct v4原创 2017-11-18 17:36:15 · 19904 阅读 · 10 评论 -
insmod出现loading out-of-tree module taints kernel
你好!这里是风筝的博客,欢迎和我一起交流。 之前把Linux Kernel移植好,就把驱动程序加载进去结果发现:/ # lsbin first_drv.ko linuxrc root tmpdev firstdrvtest mnt sbin usretc ...原创 2017-06-13 14:45:22 · 30314 阅读 · 3 评论