文艺小少年
这个作者很懒,什么都没留下…
展开
-
Linux驱动学习--android声卡之蓝牙‘sco over hci‘ 通话的使用配置(基于tinyalsa库)
目录一、引言二、sco over hci------>HCI接口------>驱动中的’sco over hci’开关三、声卡中PCM的使用配置(基于tinyalsa库、tiny工具)------>tiny 工具的使用------>tinycap、tinyplay源码分析------>tinyalsa库 源码分析---------------->pcm_open---------------->pcm_read----------------&原创 2020-08-21 10:44:09 · 1807 阅读 · 5 评论 -
Linux驱动学习--ALSA声卡驱动之PCM设备的参数设置及蓝牙SCO通话的调试
目录一、引言二、PCM设备相关的参数配置三、ASOC之PCM Write/Read 数据流引言之前调试的蓝牙SCO声卡,在通话是有杂音出现,需要排查原因,所以来系统整理一下PCM节点使用的相关部分二、PCM设备相关的参数配置1、声卡的声音缓存和数据传输每个声卡都有一个硬件缓存区来保存记录下来的样本。当缓存区足够满时,声卡将产生一个物理中断。内核声卡驱动然后使用直接内存(DMA)访问通道将样本传送到内存中的应用程序缓存区。类似地,对于回放,任何应用程序使用DMA将自己的缓存区数据传送到声卡的硬原创 2020-08-31 16:35:25 · 4073 阅读 · 0 评论 -
Linux驱动学习--蓝牙数据传输物理结构介绍
目录一、引言二、HCI三、Controls的使用四、源码分析一、引言之前分析了很多,但都是蓝牙接收到数据后,由通讯接口通过各种类型的接口协议传输到主存的过程,而蓝牙是如何收发数据的呢,就来简单分析一下HCI主机控制接口(HCI)位于传输协议之中,它并不是严格意义上的通信协议,它仅为应用协议堆栈的高层部分提供了一个访问低层传输协议的指令接口。如果我们从HCI层出发,可以将蓝牙协议堆栈分为硬件与软件2个协议块。硬件部分由射频部分(RF)、基带部分(BB)、链路管理器部分(LM)和HCI固件构成原创 2020-09-18 10:16:10 · 505 阅读 · 0 评论 -
Linux驱动学习--ALSA框架(四)Control设备的创建
目录一、引言二、ALSA中的PCM设备------> PCM介绍------> alsa-driver中的PCM中间层------> 重要结构体三、PCM设备的创建使用------> snd_pcm_new源码分析------> snd_pcm_set_ops------> 设备文件节点的建立(dev/snd/pcmCxxDxxp、pcmCxxDxxc)ALSA驱动框架的应用流程------> ALSA字符设备的注册------> AL原创 2020-09-13 14:10:54 · 418 阅读 · 0 评论 -
Linux驱动学习--ALSA框架(三)PCM设备的创建--以SCO虚拟声卡为例
目录一、引言二、框架介绍------> OSS 框架------> ALSA 框架------> 两个框架的联系一、引言之前分析了ALSA框架下声卡设备的创建,而其中提到了创建声卡的功能部件,而在这些功能部件中,又以PCM设备最为重要,这篇文章就来大体分析一下二、ALSA中的PCM设备1、PCM介绍PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制。我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的原创 2020-09-12 14:25:13 · 971 阅读 · 0 评论 -
Linux驱动学习--ALSA框架(二)声卡的创建--以SCO虚拟声卡为例
目录一、引言二、框架介绍------> OSS 框架------> ALSA 框架------> 两个框架的联系一、引言上篇文章分析了ALSA框架,这章开始和大家简单介绍ALSA框架下相关设备的创建,先说一下声卡的创建,正好使用前段时间调过的SCO虚拟声卡为例二、ALSA声卡相关结构体snd_cardsnd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第原创 2020-09-12 13:07:17 · 1354 阅读 · 0 评论 -
Linux驱动学习--ALSA框架(一)ALSA框架的介绍
目录一、引言二、代码框架三、网络设备框架常用接口介绍------> dts对应的通用驱动------> soc_camera_pdrv驱动------> 芯片驱动一、引言本篇文章来分析一下基于ALSA框架的声卡创建,以及在此基础上利用ASOC的声卡创建二、ALSA的使用...原创 2020-09-12 10:50:37 · 894 阅读 · 0 评论 -
Linux驱动学习--wifi驱动(rtl88xx系列网卡芯片)源码分析
目录一、引言二、网络设备驱动架构介绍三、网络设备框架常用接口介绍------>网络协议接口层------>sk_buff------>sk_buff的操作函数------>网络设备接口层------>net_device相关介绍------>设备驱动接口层四、驱动源码分析------>接收数据源码分析------>发送数据源码分析一、引言今天来和大家分析一下rtl88xx 系列网卡的驱动框架,该网卡是USB接口的,也就是结合了两种驱原创 2020-09-03 20:32:30 · 5419 阅读 · 0 评论 -
Linux驱动学习--网络设备驱动架构介绍及底层源码分析
目录一、引言二、网络设备驱动架构介绍三、网络设备框架常用接口介绍四、驱动源码分析一、引言Linux素来以其强大的网络功能著名,同时, 设备’>网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对设备’>网络设备贯彻其”一切皆文件”的思想,设备’>网络设备不以/dev下的设备文件为接口,用户程序通过socket作为访问硬件的接口,本篇文章就来系统的剖析一下网络设备驱动框架二、网络设备驱动架构介绍Linux网原创 2020-09-02 15:25:13 · 554 阅读 · 0 评论 -
Linux驱动学习--HCI框架及源码分析
目录一、引言二、HCI框架三、pcm_read简要分析一、引言最近一直在分析蓝牙驱动,发现在底层驱动与上层协议栈间还有一层HCI,主机控制层,两者之间通过HCI协议通讯而Linux也将HCI协议抽象层了一个框架。为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。HCI在硬件中的固件与HCI在主机端的驱动通信方式有多种,比如像 UART、USB和PC Card等等。hci_core.c相当于一个框架,用于把各种具体通信方式绞合起来,并提供一些公共函数的实现。今天就来简单的分析一下二原创 2020-09-01 20:19:41 · 1498 阅读 · 0 评论 -
Linux驱动学习--USB接口蓝牙芯片驱动补充(urb分析)及pcm_read简要分析
目录一、引言二、驱动分析三、pcm_read简要分析一、引言本章是对之前一篇文章 Linux驱动学习–ALSA声卡驱动之PCM设备的参数设置及蓝牙SCO通话的调试的补充,这篇文章介绍了从上层到底层的蓝牙控制,我们今天就来针对底层驱动进行分析二、驱动分析USB接口的蓝牙芯片,结合了ALSA音频和USB总线框架,而其实对于驱动来说,也只是个普通的USB外设,只不过最后会将接收到的数据复制到ALSA的缓冲区中,所以,我们先来着重分析一下蓝牙驱动的USB部分USB部分首先在dts中定义对应的节点后原创 2020-09-01 18:01:22 · 1264 阅读 · 0 评论 -
Linux驱动学习--蓝牙协议及HCI等通讯接口
目录一、引言二、蓝牙通讯接口PCM与I2Ssco over hci三、蓝牙通讯协议一、引言最近在做蓝牙方面的项目,发现这块了解的很少,所以来系统的整理一下二、蓝牙通讯接口HCI接口主机(计算机或MCU)与主机控制器(实际蓝牙芯片组)之间的通信遵循主机控制器接口(HCI),如下所示。HCI定义了如何交换命令,事件,异步和同步数据包。异步数据包(ACL)用于数据传输,而同步数据包(SCO)用于带有耳机和免提配置文件的语音。在桌面级计算机上 笔记本电脑,USB主要用作HCI传输层。对于US原创 2020-07-29 20:39:56 · 1826 阅读 · 0 评论 -
Linux驱动学习--USB 网卡(rtl88xx)驱动扫描过程详细分析(NL80211接口)
目录一、引言二、源码分析扫描过程分析1、wpa之前的博客,给大家介绍了wpa中上报的流程wpawpa_driver_nl80211_event_receive -> nl_recvmsgs -> process_global_event -> do_process_drv_event -> do_process_drv_event //cmd: NL80211_CMD_NEW_SCAN_RESULTS原创 2020-07-28 10:43:07 · 1962 阅读 · 0 评论 -
Linux驱动学习--WPA扫描相关流程及WIFI通用接口NL80211/WEXT分析
目录1、引言2、WIFI通用接口介绍3、内核中的wifi通用接口4、wpa从上层到内核驱动的流程分析(主要结合80211分析)5、驱动中的扫描上报功能一、引言最近在做wifi相关的项目,抽空将驱动整个的框架结合wpa的调用看了一下整个wifi框架由以下几个层次构成:上层服务应用 --> wpa库 --> wifi通用接口 --> 具体型号的wifi驱动其中后面两个都是在kernel中二、WIFI通用接口介绍无线网卡驱动的通用接口主要有两个:WEXT(Wireles原创 2020-07-13 11:04:42 · 1483 阅读 · 0 评论 -
Linux驱动学习--linux以太网驱动及硬件结构介绍(结合gmac项目分析)
目录1、引言2、以太网硬件结构3、以太网驱动分析(结合gmac项目)3.1 dts节点分析3.2 gmac驱动源码分析(open 收发包机制简要分析)一、引言最近在Android项目中,遇到以太网相关的问题,故来整理一下相关东西涉及代码:drivers/net/ethernet/gmac/,以及相关dts文件二、以太网硬件结构以太网结构主要分为以下几个部分MAC: 通常集成在ARM芯片中,功能类似于一个controller,以太网协议层数据传送给MAC,由MAC通过DMA发送到外部接口原创 2020-06-28 16:01:40 · 3710 阅读 · 0 评论 -
Linux驱动学习--USB接口wifi/BT芯片开发之BT开发(BlueDroid框架)
目录一、引言二、整体框架分析(结合实际芯片分析)三、内核中的相关配置四、厂家驱动分析五、蓝牙BlueDroid协议一、引言之前我们简单分析过BlueDroid框架,今天来结合源码,挑重点分析一下二、整体框架分析具体的框架之前分析过,不熟悉的朋友可以看我这篇文章 Linux驱动学习–DRM框架介绍及基于DRM框架的HDMI开发,这里就结合源码来实际讲解一下1、内核驱动识别到对应类型的设备,我们这里是USB蓝牙接口的BT芯片,调用该驱动生成对应节点"/dev/ttyOx"2、厂家提供的驱原创 2020-06-22 17:32:17 · 2265 阅读 · 1 评论 -
Linux驱动学习--BT框架一之Bluez、BlueDroid框架介绍
一、引言之后的项目可能要用到蓝牙,所以打算先吧蓝牙相关的框架都了解整理一下二、整体框架整体框架可以抽象成以下1、驱动层通常蓝牙芯片是通过某个类型的接口与协议栈通讯,接口包括(UART、USB等)2、bluez层bluez为Bluetooth协议栈,往下对接内核代码,往上为用户态程序及工具集而内核代码分为:BlueZ核心协议和驱动程序2.1 BlueZ核心协议位于kernel/net/bluetooth中其中包含hci,l2cap,hid,rfcomm,sco,SDP,BNEP等原创 2020-05-21 17:45:52 · 3223 阅读 · 1 评论 -
Linux驱动学习--WIFI框架二之JAVA、JNI 、Wifi Hardware层详细解析
一、引言我们在上篇文章中给大家介绍了android中的wifi框架,也介绍了手动其wpa进程来测试wifi的方式。在本篇文章中会和大家介绍从上层(java)层,也就是一般用界面上的wifi开关打开wifi的流程二、JAVA层框架1、界面开关WifiManager中提供了接口用来控制wifi开关,setWifiEnabled,参数true表示开启、false表示关闭。public boolean setWifiEnabled(boolean enabled) { try {原创 2020-05-10 16:00:47 · 710 阅读 · 1 评论 -
Linux驱动学习--WIFI框架一之整体介绍及底层测试手段
一、引言本篇文章来跟大家一起了解一下Android中的wifi框架二、WIFI框架整体框架图1、Java应用层原生机目录:packages/apps/Settings/src/com/android/settings/wifi/主要的类:WifiSettings.java 负责显示Wifi的设置界面WifiEnabler.java 负责Wifi的开关逻辑WifiDialog.j...原创 2020-05-05 13:25:26 · 1378 阅读 · 0 评论 -
Linux驱动学习--wifi芯片传输物理结构介绍
目录一、引言二、HCI三、蓝牙子系统--------> 无线射频单元(Radio)--------> 基带控制器(BB)--------> 链路管理层(LMP)--------> 整体结构--------> 结构图分析相关知识介绍一、引言前一章系统的整理了BT芯片相关的物理结构,这章来整理下wifi相关的物理结构,能够帮助我们更好的理解wifi的工作方式二、wifi物理框架相关部件介绍1、媒体访问控制(Media Access Control,MAC原创 2020-09-18 12:08:37 · 587 阅读 · 0 评论 -
Linux驱动学习--USB接口蓝牙芯片驱动获取数据详解
目录一、引言二、驱动分析------>USB部分------>urb的使用------>循环接收数据三、pcm_read简要分析一、引言分析贴一张之前分析过的PCM_read 流程pcm_read tinyalsa/pcm.c ioctl(pcm->fd, SNDRV_PCM_IOCTL_READI_FRAMES, &x) ====>snd_pcm_playback_ioctl1 kernel/sound/core/pcm_native原创 2020-09-18 15:25:48 · 796 阅读 · 0 评论 -
八、Android中的编译系统之Ninja及Cmake
一、引言之前我们已经了解了,在Android中,会使用Android.mk来编译生成目标文件并放入对应目录Android其实也是一种Makefile,android中的编译系统也会将其翻译成Makefile后编译。而Makefile对于比较大的项目有时候会比较慢,Google的程序员在开发Chrome的时候因为忍受不了Makefile的速度,自己重新开发出来一套新的控制编译的工具叫作Ninja,Ninja相对于Makefile这套工具更注重于编译速度。除了Chrome现在还有一些其他的比较大的项目也在原创 2020-05-25 17:52:39 · 2091 阅读 · 0 评论 -
Android设备调试之adb的使用
二、adb的使用在主机上通过adb连接android可以使用两种方式:USB和网络连接1、usb将android终端上的usb连接到主机后adb devices即可看到设备是否连接上2、网络现在android上找到终端的IP再输入adb connect IPadb device即可连接上会出现如下命令List of devices attached192.168....原创 2020-03-19 11:23:46 · 318 阅读 · 0 评论 -
七、Android/Linux安全机制简单了解
一、引言:Android是一个基于Linux内核的移动操作系统。Linux是一个支持多用户的系统,Android在Linux内核提供的基于UID和GID的安全机制的基础上,又实现了一套称为Permission的安全机制,本文即来分析一下这两种安全机制二、Linux的安全机制Linux是基于UID和GID的安全机制,它包含三个基本角色:用户、进程和文件,如下图所示:Linux中的每一个用...原创 2020-01-30 22:54:29 · 458 阅读 · 0 评论 -
六、Android底层开发之增加启动任务进程
一、引言本文,我们通过修改Android操作系统源码,在原生的Android项目中增加一个我们自定义的线程,并修改init.rc(具体见我之前博客:Android源码之init.rc文件详解 ),来增加启动过程中的任务。...原创 2020-01-27 23:21:17 · 313 阅读 · 0 评论 -
五、Andriod编译分析之Android build框架介绍
一、引言Android源码的巨大(repo下来,大概2、3G)给人以Android相当复杂的错觉。本文从Android编译系统的角度,让大家了解Android。Android编译系统(build system)集中于Android源码下的build/core下,其下有n多个*.mk文件,另外还有一些shell脚本,可谓相当庞大。而main.mk是整个编译系统的主导文件。二、Android B...原创 2020-01-15 11:46:05 · 465 阅读 · 0 评论 -
四、安卓源码分析之Android.mk
一、引言原创 2020-01-14 10:49:41 · 605 阅读 · 0 评论 -
三、Android系统的分区及img文件、移植烧写过程
一、引言本章介绍Android的几个分区,已经编译后生成的.img镜像文件,对于大家移植整个Android有一定的帮助。本人也首次接触Android,有不正确的地方,欢迎指正!二、Android的主要分区介绍1、主要分区列表Modem分区bootloader分区boot分区recoverty分区system分区data分区cache分区...原创 2020-01-12 22:52:27 · 2396 阅读 · 0 评论 -
二、Android源码目录结构分析梳理
一、引言本章主要分析Android项目源码的目录结构,如果大家对Android框架还不熟悉,可以查看我上一篇目录 一、安卓系统架构全面分析。二、整体结构各个版本的源码目录基本是类似,编译后的源码根目录会多增加一个out文件夹,用来存储编译产生的文件。Android7.0的根目录结构说明如下表所示。Android源码根目录描述abi应用程序二进制接口art全新的...原创 2020-01-12 20:47:09 · 893 阅读 · 0 评论 -
一、安卓系统架构全面分析
一、引言Android系统非常庞大,横跨了多个领域,但整体架构设计清晰。底层内核空间:以Linux Kernel作为基础。上层用户空间:由Native系统库、虚拟机运行环境、Framework框架层组成。通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个...原创 2020-01-12 19:32:05 · 6780 阅读 · 3 评论