自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一程山水一程歌

ChinaUnix博客 blog.chinaunix.net/uid/31390529.html

原创 Android 8.1 从零开始写 HAL -- (5) 添加执行权限

Android 上使用 SELinux 来管理权限。 尽管在上一篇文章[《Android 8.1 从零开始写 HAL – (4) 编译与打包》](https://blog.csdn.net/Qidi_Huang/article/details/107434111)中, demoComponent HAL 已经成功编译且打包到系统镜像中,但到目前为止还没有被赋予访问 Binder 的权限。所以我们至少会看到,在将 demoService 注册为 Binder 服务时,日志中会打印类似下方的提示:```t

2020-07-20 20:34:12 97

原创 Android 8.1 从零开始写 HAL -- (4) 编译与打包

对于 demoComponent HAL,在上一篇文章[《Android 8.1 从零开始写 HAL – (3) 实现 Bp、Bn 端》](https://blog.csdn.net/Qidi_Huang/article/details/107428286)中,我们已经编写好了 demoService 代码、Bp 端代码和 Bn 端代码。现在来着手把源码编译成可执行文件和库,并且将它们打包进系统镜像中。---#### 一、编写 Makefile  **这里说的 Makefile 是指 `Andr

2020-07-18 19:45:13 86

原创 使用 libTomCrypt 实现 AES、HMAC、HKDF 运算

使用 libTomCrypt 实现 AES、HMAC、HKDF 运算Qidi 2017.11.06 (Markdown & Haroopad)1、libTomCrypt 简介  libTomCrypt 是一个使用 C 语言编写的开源加解密算法库,使用 WTF 协议进行授权,支持 AES、HMAC、HKDF、RSA、PRNG、BASE64 等常用加解密算法。2、基础文件  我们在使用 libTomCr

2020-07-18 14:36:52 557

原创 Android 8.1 从零开始写 HAL -- (3) 实现 Bp、Bn 端

既然 Binder 化的 HAL 依赖于 Binder 机制进行实现,那么我们自然必须按照 Binder 框架,相应编写 demoComponent HAL 的 Bp 端和 Bn 端。只有这样,才能打通客户端进程调用到服务端进程 —— 我们的 demoService —— 的通路。

2020-07-18 14:19:00 66

原创 Android 8.1 从零开始写 HAL -- (2) 实现 HAL 主体

通过上一篇文章[《Android 8.1 从零开始写 HAL -- (1) 定义接口》](https://blog.csdn.net/Qidi_Huang/article/details/107420019)的努力,我们定义好了 demoComponent HAL 的接口和参数,也了解到编译时会自动产生 Binder 框架代码。通过 Binder 机制,经过 demoComponent HAL 的 Bp 和 Bn 端,用户进程就可以调用到我们的 demoService 了。  在打通 Bp/Bn 通

2020-07-18 12:13:45 87

原创 Android 8.1 从零开始写 HAL -- (1) 定义接口

对于前一种场景,我们需要为外设编写全新的 HAL;对于后一种场景,我们不需要编写 HAL,但需要实现一个很类似的 vendor service。这二者的实现方式极其类似,区别只在于他们使用的设备节点不同(一个使用 `/dev/hwbinder`,另一个使用 `/dev/vndbinder`),还有各自申请的 sepolicy 权限有别。  以下正文以实现一个全新的 HAL 为例进行说明,但并不涉及对设备节点的操作。

2020-07-17 23:23:20 135

原创 详细图解 Android vndBinder

详细图解 Android vndBinder注意:本文基于 Android 8.1 进行分析Qidi 2020.07.03 (Markdown & Haroopad)【前言】图虽然是根据 vndBinder 的类关系和调用顺序画出的,但实际上对于 Binder 和 hwBinder 也适用。Binder driver 代码十分庞杂,基于安全考虑还存在与 LSM 的交互,所以这部分的调用关系图有所省略。【Binder 通信概要】如果说 Binder 通信机制是 Android 的心脏

2020-07-03 22:18:35 89

原创 AudioFlinger 如何通过 hwBinder 调用 Audio HAL

AudioFlinger 如何通过 hwBinder 调用 Audio HAL注意:本文基于 Android 8.0 进行分析Qidi 2020.07.03 (Markdown & Haroopad)我们已经知道,在AudioPolicyManager构造时,会解析配置文件audio_policy.conf或audio_policy_configuration.xml。之后,它会获取到AudioFlinger的实例,并根据解析结果,调用loadHwModule()依次加载各个 audio H

2020-07-03 21:05:53 137

转载 【转】为什么linux系统变慢了

声明:本文转自 http://www.alivepea.me/linux/why-linux-slow/为什么linux系统变慢了“系统变得很慢了,让我重启一下”,这个被经常使用且有效的做法真的很粗暴。 作为程序员最亲密的伙伴,可以待它温柔多些。在linux发行版中,内核很稳定,极少出现bug,所以通常是某个应用导致系统变慢。 只要查出是哪些应用导致的,kill之就可以了。...

2018-07-13 17:54:42 842

原创 为 Android 8.0 添加开机启动脚本

为 Android 8.0 添加开机启动脚本Qidi 2018.01.11 (Markdown & Haroopad)【写在前面】  本人对于 SELinux for Android 理解不深,下文中的各文件及安全规则虽都是我所编写,但也是一边查阅文档一边试验得出的。在此强行为文,若有理解错误之处,请各位工程师同仁热情指出。一、需求描述  项目上需要在 Andr

2018-01-12 10:25:42 12037 12

原创 在 Android 8.0 中绕过 hwbinder 实现跨模块对 audio HAL 调用

在 Android 8.0 中绕过 hwbinder 实现跨模块对 audio HAL 调用Qidi 2017.10.20 (Markdown & Haroopad)【需求描述】  Audio 模块中专门为 TV 产品添加了一些代码,需要在 hdmi 的 HAL 代码中进行调用以完成某些功能。【旧的实现】  在 Android 7.1 中的做法是在 hdmi 的

2017-10-24 15:07:59 6268 2

原创 Kernel 4.9 上 dma_alloc_coherent() 函数开辟 DMA 连续内存空间失败 解决办法

【问题描述】   将之前可以在 Kernel 3.14 上正常运行的驱动代码移植到 Kernel 4.9 上,发现驱动在进行 probe 时失败,具体失败位置为函数 dma\_alloc\_coherent(),对应代码段如下:amaudio_start_addr = (unsigned char *)dma_alloc_coherent(amaudio2_dev,

2017-09-27 10:50:31 4443

原创 git push 失败,提示 unpack error/unpack failed 解决方法

【问题描述】   在执行命令 git commit --amend 对提交进行修改后,再执行 git push review HEAD:refs/for/xxxx 将代码提交到 Gerrit 上,但是提交失败了并打印出下方这样的提示:qidi.huang@droid10$ git push review HEAD:refs/for/xxxxWriting objects: 100% (1/1),

2017-09-18 17:33:21 13460

原创 Linux 内核修改 xxx_defconfig 的正确方法

【前言】   昨天将 Android N 上的驱动代码移植到 Android O 上,xxxx_defconfig 文件是我手动修改的,但因为公司将内核版本切换到 4.9 之后开启了强制代码格式检查,所以 Patch 在提交到服务器之后无法通过格式检测,一直提示存在如下问题:checkpatch found errors or warnings: $ git log -1 | ./scrip

2017-09-14 20:01:08 4508 1

原创 使用 SysRq 查看系统信息

使用 SysRq 查看系统信息Qidi 2017.08.31 (Markdown & Haroopad)前言:因为看到有同事使用了 SysRq 的技巧进行 debug,虽然我目前还没有使用过,但为了便于以后使用也为了备忘,所以在这里简要记录一下。更详细的说明可以阅读文末所列参考文章。1、SysRq 是什么  在某些键盘上我们可以看到 SysRq 键,通过按下这个键和其它字母的组合,我们可以在系统挂起

2017-09-12 09:35:18 2787

原创 在 Android 中使用自定义函数接口替换 Frameworks 中的默认函数接口

在 Android 中使用自定义函数接口替换 Frameworks 中的默认函数接口Qidi 2017.08.31 (Markdown & Haroopad)注意:本文基于 Android 8.0 进行分析。1. 前言  自 Android 8.0 开始,为了实现 Project Treble 对更快完成系统升级的预期,Google 严格要求芯片 vendor 厂商不能再修改 AOSP 的 Fram

2017-08-31 17:18:18 1319 4

原创 Android 8.0 VTS 测试 FAIL 失败项解决记录

Android 8.0 VTS 测试 FAIL 项解决记录Qidi 2017.08.09 (Markdown & Haroopad)1. 前言  这篇文章所记录的是我自己在 Amlogic 平台上碰到的 Android Vendor Test Suite (VTS) 测试问题,所以下文中的各 FAIL 项不一定包含了所有的问题类型。但分析 VTS 问题的思路应该是类似的,希望这篇文章能给各位工程师朋

2017-08-10 09:19:05 13123 1

原创 Android Vendor Test Suite (VTS) 的概念、作用及测试方法

Android Vendor Test Suite (VTS) 的概念、作用及测试方法Qidi 2017.08.01 (Markdown & Haroopad)注意:本文基于 Android 8.0 进行分析。这篇文章会不定期更新,欢迎大家指出问题和提出建议。1、前言 - Project Treble  Android 目前有一个比较明显的缺点是设备升级到新版本系统所要花费的时间太长(比如从 And

2017-08-04 09:14:05 26717 149

原创 Android HIDL 简介

Android HIDL 简介Qidi 2017.08.01 (Markdown & Haroopad)注意:本文基于 Android 8.0 进行分析。1、HIDL 的概念  HIDL 读作 hide-l,全称是 Hardware Interface Definition Language。它在 Android Project Treble 中被起草,在 Android 8.0 中被全面使用,其诞

2017-08-02 10:45:49 30531 142

转载 【转】设备树的用法(Device Tree Usage)

【说明】    本文转载自《设备树的用法(Device Tree Usage)》【正文】设备树手册(Device Tree Usage)原文地址:http://www.devicetree.org/Device_Tree_Usage本文概述了如何为一个全新的计算机编写设备树。意在提供一个device tree概念的概述以及如何使用device tree描述一台计算机。有

2017-07-27 11:25:37 1189

原创 【I2C设备驱动】必须将id_table[]数组的最后一个元素设置为空的原因

忘记了在哪本书上看到过,说必须给 I2C 设备驱动的 id 表数组添加上一个空元素作为最后一个元素,就像下面的代码所展示的那样:struct i2c_device_id { char name[I2C_NAME_SIZE]; kernel_ulong_t driver_data; /* Data private to the driver */}static const str

2017-06-26 15:28:20 1956

原创 Android系统 boot.img 结构

【前言】   本文以我使用的 Intel x86 cherrytrail 平台为例进行说明,部分细节可能会与其它设备上看到的不同,比如 easyimage 是我们产品上自定义的分区,其它设备上如果没有是正常的。【正文】 编译完成后我们可以在out/target/product/<ProductModelName>/obj/PACKAGING/target_files_intermediates/

2017-06-19 18:02:51 2074

原创 把“dereference”翻译成“提领”不如直译为“引用解析”

【正文】   这 2 天在回顾《内核设计与实现(第3版)》这本书时又看到了“提领”这种说法,它出现在书上第 75 页。估计译者当时也不知道应该翻译成什么中文词汇比较好,所以在译文后加上了英文原文“dereference”。书上的原文是这样的: 节约两次提领(dereference)   如果你碰巧已经得到了 next 和 prev 指针,你可以直接调用内部链表函数,从而省下一点时间(其实

2017-06-13 11:48:51 1608 8

原创 Android 音频数据传输流程图 - Playback过程

【图示】【简要说明】    1、APP 将音频文件(比如.mp3文件)数据读取到匿名共享内存中;    2、AudioFlinger 从匿名共享内存中读取音频数据,通过 HAL 层接口将这些数据写入到 DMA 缓冲区;    3、DMA 控制器将 DMA 缓冲区中的数据拷贝到 SoC 的 I2S Tx FIFO 开始向 Codec 传输;    4、Codec 固件会自

2017-06-09 16:01:34 2941

原创 Android Audio BSP工程师 需要清楚的基本知识点

【前言】    这是我根据自己的工作经验所总结,有一定代表性,但可能不齐全。这只是个提纲。【知识点】    按照在操作系统中的层次划分,从上到下依次为:1、Android系统分层模型。知道 APP、JNI、Frameworks、HAL、Driver 的划分以及 用户空间、内核空间 的概念。2、Android Audio模块的启动、加载 及 放音/录音 流程。起码应该了解

2017-06-08 18:08:22 5793 3

原创 Android音频模块启动流程分析

Android音频模块启动流程分析Qidi 06.08.2017 (Markdown & Haroopad)1) 设备开机,系统启动时将执行 /system/etc/init/audioserver.rc ,运行 /system/bin/ 目录下的 audioserver 服务。audioserver.rc 内容如下:service audioserver /system/bin/audioserv

2017-06-08 12:21:15 7511

原创 Android系统中耳机按键键值上报不正确 解决过程

【问题现象】  根据测试组同事反馈:在我们的设备上使用 JBL 品牌某款带有 3 个按键的有线耳机时,按下“音量+”键时设备会减小音量而不是增加音量,按下“音量-”键时设备无响应;在设备上使用 Samsung 品牌某款带有 3 个按键的有线耳机时,按下“音量-”键时设备会启动语音助手而不是减小音量。但按下 2 款耳机的中间键(播放/暂停键)均可以得到正确的响应。【分析问题】

2017-05-27 16:48:21 3807

原创 Android系统下在te文件中为指定服务添加sepolicy权限

【正文】   设备在播放视频时有异常,使用Logcat查看日志时发现了如下记录:04-27 14:01:59.136 2825 2825 E SELinux : avc: denied { find } for service=display pid=3015 uid=1046 scontext=u:r:mediacodec:s0 tcontext=u:object_r:display_servi

2017-05-04 20:16:58 8162 1

原创 Miracast与Wi-Fi Direct技术简介

【使用场景相关】    2 个支持 Miracast 功能的设备进行互连时,并不需要将它们连接至同一个 WLAN 网络上(也即不需要连接至同一个无线路由器或AP上)。因为 Miracast 是基于 Wi-Fi Direct 技术实现的。【Miracast 简介】    Miracast 是一种通过无线连接的方式将设备(比如笔记本电脑、平板电脑、智能手机)的音视频传送到显示设备(

2017-04-10 17:22:26 5029

转载 【转】UsbAccessory和UsbDevice的区别

UsbAccessory和UsbDevice的区别UsbDevice:正常的,USB的Host和USB的Device架构中的USB的Device所以,此时:Android设备是USB的Host,外接的USB设备是USB的Device此时,Android设备作为USB的Host,要做USB Host该干的事情:给USB外接设备供电负责管理USB总线

2017-04-10 16:37:02 893

原创 Android系统下解决音频underrun噪声问题的一种更优方法

【问题概要】    上一次我介绍了一种 Android 系统下发生音频 underrun 问题的解决方法(参见《记一次Android系统下解决音频UnderRun问题的过程》),这之后平静了一段时间,测试组同事也没有再报告相关的噪声问题。    但就在前 2 天,测试组同事告诉我说她们又听见噪声了,并且这次的使用场景比上次复杂了许多——由于从 Android 6.0 开始已经支持应用多开以

2017-04-05 17:58:10 4798 5

原创 Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析

【前言】    Android系统为了保证各商业公司的利益,允许在系统中使用不开源的固件。因此我们可以看到比如用于音频处理的、用于键盘支持的等等大量固件。既然这么多模块要用到固件,那么我们也有必要来了解一下固件在崩溃后的自恢复过程。这篇博文是基于 Intel x86 平台写的,所分析的固件是 Intel 平台的一款音频 DSP 固件,使用 uevent 机制来收发固件恢复消息。所以如果读者使用

2017-03-29 08:50:33 975

原创 repo回退当前分支下所有仓库到指定日期前的最新代码版本

执行下面这样的repo命令就行了:repo forall -c 'commitID=`git log --before "2017-03-17 07:00" -1 --pretty=format:"%H"`; git reset --hard $commitID'参数说明: forall  操作分支中的所有仓库 -c  只操作当前分支 –before  早于指定时间点的提交记录 -1  只显

2017-03-23 14:28:50 6380

原创 使用reaver命令穷举PIN码破解WPA2-PSK加密的无线网络

【前言】 现在的路由器大多都默认用 WPA2-PSK 方式对无线网络进行加密了,不能再像 WEP 加密方式那样好破解,使用字典又需要费心费力地整理字典,而且字典破解的效率还慢。所以我们需要更有效率的破解方法。好在现在大多数的路由器都提供 WPS 功能,通过这个功能,用户可以使用 PIN 码登录到路由器。但这个 PIN 码的长度只有 8 位,而且可能的取值只有11000种(注意,不是 10...

2017-03-19 21:57:48 17196 7

原创 定位和解决git am冲突的方法

【正文】    在踩过几次坑之后,大多数工程师都会学会使用patch的形式来保存各个模块/功能的代码改动,这样可以很方便地为相应模块添加或者去除相关功能的代码。但是伴随着主线代码的不断更新,我们在早期保存出来的patch中有部分内容可能已经不能再直接打入现在的代码里了。这种情况下可以使用下面的方法解决冲突:    1、执行命令 git  am xxxx.patch 尝试直接打入补丁。因为我

2017-03-13 17:51:55 6231

原创 使用git命令修改指定的commit提交记录并提交到远程服务器的方法

【正文】    如果要修改最新的一次commit,我们知道可以使用 git commit --amend 命令。但是如果我们想要修改更早的提交记录,应该怎么做呢?比如我现在按照时间从旧到新,有 Commit1 到 Commit4 总共 4 次提交,其中 Commit4 是最新的一次提交,但是我只想修改 Commit3 的 Commit 信息并提交到远程服务器。关系如下:      Comm

2017-03-13 12:49:57 6271

原创 近期博客更新频次降低之说明

2017年春节前后,我博客更新的文章数量明显减少了,主要是2方面原因:一是工作量在这段时间里确实比平时多了一些,二是接触到Android音频系统更深入层次的东西后需要更多时间来理解消化。工作量上,我一边是在为平板电脑系统升级而忙碌,从Android 6.0升级到Android 7.0,再从Android 7.0升级到Android 7.1.1;另一边是对智能音箱的方案评估,整理阅读资料、线上线下会

2017-03-11 13:24:10 707

原创 Android Makefile常用函数简介(不定期更新)

word N, TEXT 作用:取出TEXT中第N个单词 示例:$(word 3, aaa bbb ccc) 结果为 ccc 出处:main.mk:26:#TOP := (dir(dir (word (words(words (MAKEFILE_LIST)),$(MAKEFILE_LIST)))

2017-03-02 08:16:41 1381

原创 Android 7.0 Audio的Resample过程详解

【前言】处理过音频文件的工程师都知道音频数据存在采样率(Sample Rate)这个指标。在位深度(Bit Depth)一定的情况下,采样率越高,理论上来说播放出来的声音就越细腻,录制的声音也就越保真,反之亦然。但在较早的Android系统版本上,不管音频文件原来的采

2017-02-24 10:46:10 4166 4

原创 Android Makefile中inherit-product函数简介,以及与include的区别

在 Android Makefile 中时不时会看见 inherit-product 函数的使用,类似下方这样:        $(call  inherit-product,  vendor/dolby/ds/dolby-product.mk)    从参数来看,我们可以猜到这条命令的作用应该是执行了 vendor/dolby/ds/dolby-product.mk 文件。如果仅仅是这样

2017-02-22 10:39:09 7458 3

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