
linux驱动觉醒之路
文章平均质量分 84
一个只有自己能看懂的linux驱动笔记,持续更新...
stks
这个作者很懒,什么都没留下…
展开
-
8.声卡驱动06-自己实现alsa驱动-虚拟声卡-widget
平台:ubuntu 16.04,kernel版本是4.15.0, 理论任何平台都可以,甚至是android,只要能编译通过。需要完成的功能:一个codec里面可能有多个录音通道,如果要打开某一通道录音,需要怎么做?目的:就像做数学题一样,看一遍答案,以为自己看懂了,就会了,非也,真到自己去做时,不一定能做出来。那就在自己的驱动里实现一遍。本文只追求应用,不讲原理。想了解细节可以看官方文档或者看https://blog.youkuaiyun.com/droidphone/category_1118446.html。原创 2021-11-19 13:08:21 · 2266 阅读 · 0 评论 -
8.声卡驱动05-自己实现alsa驱动-虚拟声卡-kcontrol
平台:ubuntu 16.04,kernel版本是4.15.0, 理论任何平台都可以,甚至是android,只要能编译通过。需要完成的功能:前几篇文章完成了播放/录音功能,声卡驱动就这样完成了吗?某种意义上讲是完成了,但是如果需要控制音量怎么办?这里加一个kcontrol,实现音量控制功能。目的:就像做数学题一样,看一遍答案,以为自己看懂了,就会了,非也,真到自己去做时,不一定能做出来。那就在自己的驱动里实现一遍。本文只追求应用,不讲原理。想了解细节可以看官方文档或者看https://blog.csd原创 2021-11-16 21:43:02 · 2063 阅读 · 0 评论 -
8.声卡驱动04-写一个alsa应用程序
平台:ubuntu 16.04,kernel版本是4.15.0, 理论任何平台都可以,甚至是android,只要能编译通过。需要完成的功能:一个进程播放音频,一个进程录音。直接贴代码#include <stdio.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/wait.h>#include <alsa/asoundlib原创 2021-10-27 11:14:06 · 1128 阅读 · 0 评论 -
8.声卡驱动03-自己实现alsa驱动-虚拟声卡-缓存
平台:ubuntu 16.04,kernel版本是4.15.0, 理论任何平台都可以,甚至是android,只要能编译通过。需要完成的功能:传说中的回采,做过语音方案的童鞋应该能懂,就是播放的音频,录音录回去。因为是虚拟的声卡,不涉及硬件操作,也只能这样看点效果。目的:当然是为了能更直观的理解alsa驱动框架。虚拟出一个声卡,不涉及复杂的硬件操作,不涉及复杂的硬件调试,只关心数据流怎么一步一步传给应用的。1.数据是怎么交互的以playback为例驱动程序分配一个bufferAPP不断写原创 2021-10-27 11:09:31 · 6515 阅读 · 0 评论 -
8.声卡驱动02-自己实现alsa驱动-虚拟声卡-匹配
亲自动手,丰衣足食。本文目的是实现史上最简单的Linux声卡驱动。如果你是初学者,可能从其他文章了解到声卡驱动,不出意外你可能已经云里雾里了,除非你聪明绝顶(秃顶那种)。其实生成声卡的节点,子需要几个函数就可以了,它们分别是:platform:snd_soc_register_component()注册CPU DAI, snd_soc_register_platform()注册platform;codec:snd_soc_register_codec()注册CODEC DAI和CODEC;mac原创 2021-10-27 11:01:44 · 5000 阅读 · 0 评论 -
8.声卡驱动01-一些好文章
这里保存一些优秀的文章Linux ALSA声卡驱动之一:ALSA架构简介Linux ALSA声卡驱动之二:声卡的创建Linux ALSA声卡驱动之三:PCM设备的创建Linux ALSA声卡驱动之四:Control设备的创建Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)Linux ALSA声卡驱动之六:ASoC架构中的MachineLinux ALSA声卡驱动之七:ASoC架构中的CodecLinux ALSA声卡驱动之八:ASoC架构中的PlatformALSA声卡驱原创 2021-10-27 10:52:55 · 1173 阅读 · 0 评论 -
7.camera驱动08-全志-media framework
平台:全志A133 androidQ启动过程贯穿全篇的数据流向sensor0 ==> mipi0 ==> csi0 ==> isp0 ==> scale0(vipp0) ==> vinc0(dma0) ==> video0sensor1 ==> mipi1 ==> csi1 ==> isp0 ==> scale1(vipp1) ==> vinc1(dma1) ==> video1sensor、mipi、csi、isp、sc原创 2021-10-08 18:24:13 · 2149 阅读 · 4 评论 -
7.camera驱动07-写一个v4l2应用程序
直接贴代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include <malloc.h>#include <sys/stat.h>#include <sys/types.h>#include <原创 2021-10-06 13:09:50 · 360 阅读 · 0 评论 -
7.camera驱动06-自己实现v4l2驱动-虚拟摄像头
1. 框架分层实际上的v4l2框架:v4l2本质是还是一个字符设备驱动,有自己的fops。每注册一个video_device都会以次设备号为下标放到v4l2层的一个数组里。应用调用open函数时,v4l2会根据次设备号找到对应的video_device,进而调用video_device对应的fops。2. 注册v4l2_dev和video_device(1) 注册platform_device和platform_driver,也并不是一定要这样做,只是大家都这样做,那也就跟着做了(2) 注册原创 2021-10-04 22:11:19 · 4182 阅读 · 0 评论 -
7.camera驱动06-自己实现v4l2驱动-准备
平台:Ubuntu-16.04$uname -aLinux vbox-pc 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux可以看到内核版本是4.15.0,去www.kernel.org找同版本的内核,如果没有请找最相近的内核代码下载完后,解压,把linux-4.15\drivers\media\platform\vivid复制到ubunt原创 2021-10-04 22:07:35 · 699 阅读 · 1 评论 -
7.camera驱动05-V4L2框架-control的数据结构
原文地址:https://yellowmax.blog.youkuaiyun.com/article/details/83242446本篇文章写一下 V4L2 里面的众多 control 的组织方式,也就是它的数据结构。主要就是新建的 control 是如何存放的,以及在需要用到的时候如何查找。里面用到了类似于「桶」的概念,没错就是「桶排序」里面的那个桶,这种比较特殊的小优化为查找速度提供了不少的帮助。话不多说,直接进入正题,本文章是基于 linux-4.4.138 内核来探讨的。几个结构体之间的关系st转载 2021-10-02 21:57:35 · 324 阅读 · 0 评论 -
7.camera驱动04-V4L2框架-control
原文地址:https://yellowmax.blog.youkuaiyun.com/article/details/81430870本文介绍在 v4l2 框架下面的 control 控制接口,这些接口通常用来实现一些特效控制、菜单控制等等。简介既然涉及到视频输入,就会有很多与 ISP 相关的效果,比如对比度、饱和度、色温、白平衡等等,这些都是通用的、必须的控制项,并且大多数仅需要设置一个整数值即可。V4L2 很贴心地为我们提供了这样一些接口以供使用(可以说是非常贴心的了),在内核里面,这些控制项被抽象为一个转载 2021-10-02 21:56:08 · 735 阅读 · 0 评论 -
7.camera驱动03-V4L2框架-videobuf2
原文地址:https://yellowmax.blog.youkuaiyun.com/article/details/81054611本文介绍在 v4l2 框架之下的数据流交互的实现与使用,主要目的是实现一个能够进行用户空间与内核空间进行数据交互、数据流格式设置、数据流 buffer 申请与释放、数据流开启与关闭的 video 设备驱动。简介videobuf2 用于连接 V4L2 驱动层与用户空间层,提供数据交流的通道,它可以分配并管理视频帧数据。videobuf 层实现了很多 ioctl 函数,包括 buf转载 2021-10-02 21:54:00 · 465 阅读 · 0 评论 -
7.camera驱动02-V4L2框架-media device
原文地址:https://yellowmax.blog.youkuaiyun.com/article/details/80889947本文对 V4L2 的运行时数据流设备管理做一个详细的介绍,包括什么叫「运行时设备管理」,它是干什么用的,怎么使用等等。本文的目标是掌握 media device 的编码使用方法以及功能运用。media framework简介相关的控制 API 在 Documentation/DocBook/media/v4l/media-controller.xml,本文档聚焦于内核测的转载 2021-10-02 21:50:34 · 548 阅读 · 0 评论 -
7.camera驱动01-V4L2框架-v4l2 device
原文地址:https://yellowmax.blog.youkuaiyun.com/article/details/80782068本文对 V4L2 中比较容易理解的骨干结构进行介绍,涉及两个核心结构体:v4l2_device, v4l2_subdev。文章围绕这两个结构体以 Linux-4.4 内核的 omap3isp 代码为例进行相关的介绍,所谓介绍还是起到辅助作用,真真儿的还是要靠 RTFSC、WTFSC。下面「该例程」均指的是 omap3isp 这个例程。V4L2 框架补充首先看图:V4L2转载 2021-10-02 21:46:57 · 560 阅读 · 0 评论 -
7.camera驱动00-V4L2框架概述
导读:V4L2 是专门为 linux 设备设计的一套视频框架,其主体框架在 linux 内核,可以理解为是整个 linux 系统上面的视频源捕获驱动框架。其广泛应用在嵌入式设备以及移动端、个人电脑设备上面,市面上的编码产品类如:SDV、手机、IPC、行车记录仪都会用到这个框架来进行视频采集,当然,有比较厉害的厂家直接就使用自己实现的一套视频采集框架,这种属于是厂家中战斗机了。下文主要参考linux-4.4内核文档对V4L2框架进行一次全局的介绍。V4L2框架简介几乎所有的设备都有多个 IC 模块,它们可转载 2021-10-02 21:33:24 · 1319 阅读 · 0 评论 -
6. lcd驱动2-浅析mipi
1. MIPI简介MIPI联盟是一个开放的会员制组织。2003年7月,由美国德州仪器(TI)、意法半导体(ST)、英国ARM和芬兰诺基亚(Nokia)4家公司共同成立。MIPI联盟旨在推进移动应用处理器接口的标准化 。MIPI联盟下面有不同的WorkGroup,分别定义了一系列的手机内部接口标准,比如摄像头接口CSI、显示接口DSI、射频接口DigRF、麦克风/喇叭接口SLIMbus等。MIPI包括:MIPI-DBI 显示总线接口:MIPI联盟发布的第一个显示标准,用来规定显示接口;MIPI-DP原创 2021-08-28 10:24:39 · 3337 阅读 · 0 评论 -
6. lcd驱动1-硬件原理
1. 液晶显示原理TFT-LCD(Thin Film Transistor Liquid Crystal Display)即薄膜晶体管液晶显示器,是微电子技术与液晶显示器技术巧妙结合的的一种技术。目前主流的LCD显示器都是TFT-LCD,是由原有液晶技术发展而来。TFT液晶为每个像素都设有一个半导体开关,以此做到完全的单独控制一个像素点,液晶材料被夹在TFT阵列和彩色滤光片之间,通过改变刺激液晶的电压值就可以控制最后出现的光线强度和色彩,如下图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下原创 2021-08-26 09:26:16 · 12195 阅读 · 0 评论 -
4. 例-内核高精度定时器
1.初始化定时器void hrtimer_init(struct hrtimer *timer, clockid_t which_clock, enum hrtimer_mode mode);参数说明timer:描述高精度定时器的结构体; struct hrtimer { struct timerqueue_node node; ktime_t _softexpires;原创 2021-08-18 16:24:03 · 200 阅读 · 0 评论 -
2. 例-中断(GPIO按键事件)
LCD驱动(1)硬件部分 Tiny4412开发板 型号:AT070TN92 分辨率:800*480 接口:RGB888 全志A33开发板 型号: 分辨率:1024*600 接口:RGB硬件连接接口 TTL(RGB) LVDS MIPI时序[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S3OwZCjY-1629086471921)(file:///C:\Users\aspire\AppData\Local\Tem原创 2021-08-16 23:05:48 · 1107 阅读 · 0 评论 -
1. 例-字符设备驱动(开关灯)
字符设备驱动1.管理设备号dev_t dev = MKDEV(主设备号,次设备号) -->组合设备号主设备号 = MAJOR(dev_t dev) -->提取主设备号次设备号=MINOR(dev_t dev) -->提取次设备号2.分配设备号#include <linux/fs.h>int register_chrdev_region(dev_t from, unsigned count, const原创 2021-08-15 16:31:31 · 382 阅读 · 0 评论