Qidi_Huang
码龄12年
关注
提问 私信
  • 博客:1,402,422
    社区:79
    1,402,501
    总访问量
  • 139
    原创
  • 1,874,963
    排名
  • 523
    粉丝
  • 7
    铁粉

个人简介:技术是一种信仰,我愿做布道者。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:四川省
  • 加入CSDN时间: 2012-09-30
博客简介:

一程山水一程歌

博客描述:
ChinaUnix博客 blog.chinaunix.net/uid/31390529.html
查看详细资料
个人成就
  • 获得445次点赞
  • 内容获得516次评论
  • 获得1,774次收藏
  • 代码片获得836次分享
创作历程
  • 4篇
    2021年
  • 11篇
    2020年
  • 2篇
    2018年
  • 35篇
    2017年
  • 98篇
    2016年
  • 5篇
    2015年
成就勋章
TA的专栏
  • 嵌入式
    84篇
  • Linux
    56篇
  • Android
    68篇
  • C
    42篇
  • C++
    12篇
  • Python
    6篇
  • 脚本
    21篇
  • hack
    13篇
  • 杂项
    23篇
  • git
    6篇
  • intel
    1篇
兴趣领域 设置
  • 嵌入式
    单片机嵌入式硬件
  • 硬件开发
    驱动开发arm开发pcb工艺
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

352人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

【通知】此账号停止更新,后续文章将发表在博客园

感谢过去几年关注过、点赞过、评论过、收藏过我文章的朋友。此账号不再更新,希望在新的一隅可以和你们再次相遇。
原创
发布博客 2021.12.28 ·
1111 阅读 ·
8 点赞 ·
3 评论 ·
0 收藏

openjdk7.tar.bz2

发布资源 2021.04.21 ·
bz2

Android 音频数据流(2): 从 AudioTrack 到 ALSA 驱动

正如上文所说,上层部件每创建一个 `AudioTrack` 实例,都会有一个 `Track` 实例相应被构造出来。上层部件调用 `AudioTrack::write()` 写入 **匿名共享内存(AshMem)** 的音频数据,会在这个 `Track` 实例中被读取出来,随后,该 `Track` 实例会被加入到 `PlaybackThread` 的成员变量 `mTracks` 中,对应的音频数据也会在 `AudioFlinger` 中作混音处理。当 `AudioTrack::start()` 被调用后,
原创
发布博客 2021.01.15 ·
2700 阅读 ·
4 点赞 ·
0 评论 ·
36 收藏

Android 音频数据流(1): 从 MediaPlayer 到 AudioTrack

从上方时序图可以看出,`media_server` 进程启动时,`NuPlayerFactory` 实例被创建和添加到 `MediaPlayerFactory` 中。之后,当 APP 依次调用 `setDataSource()`、`prepare()` 和 `start()` 接口时,分别主要发生了这些事情:+ 调用 `setDataSource()` —— 创建对应的具体 `Source` 类实例、创建并配置 `BufferMonitor`;+ 调用 `prepare()` —— 创建对应的 `E
原创
发布博客 2021.01.11 ·
4579 阅读 ·
9 点赞 ·
0 评论 ·
49 收藏

State Machine Compiler 用法:使用 SMC 工具自动生成状态机代码

SMC (State Machine Compiler) 目前还没有正式中文名,这里把它意译成 状态机生成器,其主要作者是 Charles W. Rapp。状态机生成器实际上早在 2000 年左右就由 Robert C. Martin (他还有个网名叫 Uncle Bob) 创造出来了,现在一般把他发明的状态机生成器称作 OSMC (Original State Machine Compiler)。Charles 曾经是 Robert 的同事,在后者离职后,前者接手了 OSMC 的维护工作[1]。本文介
原创
发布博客 2021.01.02 ·
4224 阅读 ·
3 点赞 ·
5 评论 ·
22 收藏

在 QNAP(威联通)NAS 上自动查找和删除 重复文件 的方法

### 0. 前言看到很多人说在 QNAP NAS 上使用 `fdupes` 工具只能实现查找重复文件的效果,要删除文件只能对照生成的重复文件列表手动操作。这个说法其实是不对的,`fdupes` 完全支持自动去重功能。以下正文说明了使用 `fdupes` 工具自动查找并删除重复文件的详细步骤。---### 1. 安装 fdupesQNAP NAS 没有官方的去重工具,需要先手动下载并安装 `fdupes` 软件。`fdupes` 是一款用于文件去重的开源工具([代码仓库](https://
原创
发布博客 2020.12.12 ·
23850 阅读 ·
2 点赞 ·
0 评论 ·
30 收藏

AudioRecord 中的 Java、JNI 和 Native 关系浅析

在 Android 系统中,JNI 作为沟通 Java 和 Native 层的桥梁,从设计角度看,属于 代理模式(Proxy pattern) 的一种。它要求每一个使用 JNI 的组件,比如 AudioRecord、AudioSystem 等,都必须实现同一套接口,即都要在各自的 JNI 源文件中填充结构体数组 JNINativeMethod gMethods[],并在该数组中写明各个函数调用的映射关系。各组件的 JNI 源文件位于目录 frameworks/base/core/jni/ 下,文件命名风
原创
发布博客 2020.11.12 ·
850 阅读 ·
2 点赞 ·
1 评论 ·
6 收藏

Android 整包编译至 Linux Kernel 时失败并提示 .config 配置错误的解决方法

更新本地 Android 代码后,对 out/ 目录执行了 clean 操作,并重新编译整包。编译到 Kernel 时失败,报错信息如下:CHECK KERNEL DEFCONFIG FATAL ERROR :Kernel config copied from kernel/config-lts/v4.9/bxt/android/x86_64_defconfig has some config issue.Final '.config' and '.config.old' differ. This
原创
发布博客 2020.11.04 ·
3828 阅读 ·
2 点赞 ·
0 评论 ·
7 收藏

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 ·
2353 阅读 ·
3 点赞 ·
1 评论 ·
18 收藏

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 ·
2531 阅读 ·
0 点赞 ·
0 评论 ·
14 收藏

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

既然 Binder 化的 HAL 依赖于 Binder 机制进行实现,那么我们自然必须按照 Binder 框架,相应编写 demoComponent HAL 的 Bp 端和 Bn 端。只有这样,才能打通客户端进程调用到服务端进程 —— 我们的 demoService —— 的通路。
原创
发布博客 2020.07.18 ·
2104 阅读 ·
0 点赞 ·
1 评论 ·
13 收藏

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 ·
2665 阅读 ·
3 点赞 ·
0 评论 ·
15 收藏

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

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

详细图解 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 ·
1309 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

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 ·
2031 阅读 ·
4 点赞 ·
0 评论 ·
25 收藏

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

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

为 Android 8.0 添加开机启动脚本

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

使用 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 ·
1688 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

在 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 ·
7026 阅读 ·
1 点赞 ·
2 评论 ·
9 收藏

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 ·
8798 阅读 ·
2 点赞 ·
2 评论 ·
18 收藏
加载更多