Linux Kernel 中的 Regmap

简介

Regmap 机制是在 Linux 3.1 加入进来的特性。主要目的是减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器。其实这就是内核做的一次重构。Regmap 除了能做到统一的 I/O 接口,还可以在驱动和硬件 IC 之间做一层缓存,从而能减少底层 I/O 的操作次数。

使用对比

在了解 Regmap 的实现细节前,我们先来对比一下,传统操作寄存器的方式,与 Regmap 之间的差异。

阅读全文

解析 Android 5.1 Sensor HAL

预热

前几天研究了 Android 5.1 相对于 Android 4.4,Sensor HAL 做了什么改动。然后就有了这篇文章。

首先,怎么知道 Android 5.1 对 Sensor HAL 改了什么东西呢?其实只要运行了一下如下命令:

1
2
diff -u /path/to/android_5.1/hardware/libhardware/include/hardware/sensors.h \
/path/to/android_4.4/hardware/libhardware/include/hardware/sensors.h

估计都懂了。

阅读全文

Linux 命令 tr 介绍

最近在用 gedit 打开一个 log 文件时,提示说有不能显示的字符,导致整个文件都乱码。用 file 命令去查看这个文件的类型,居然显示为二进制文件。明明是一个纯文本文件,怎么会显示为二进制文件呢?估计文件中存在奇特的字节,导致整个文件解析不正常。既然一堆沙子里混入了几颗石头,那么就要把这些石头剔除掉。有很多命令可以处理这个问题,这里我推荐 tr

tr 命令是一个很传统的 Unix 命令。本意就是 translate。也就是用来做字符替换、删除和去重的工作。其基本格式如下:

1
tr OPTION SET1 [SET2]

阅读全文

ADB 常见错误分析

ADB

ADB(Android Debug Bridge) 是 Google 为了调试 Android 设备和 Android 模拟器实例而写的调试工具。整个 ADB 分为 3 个部分,ADB Server,ADB Client 和 ADB Daemon(adbd)。ADB Server 是在主机上运行的一个进程,用来处理 ADB Client 和 ADB Daemon 之间的通信。平常所用的 adb kill-server 就是kill这个进程。ADB Client 就是我们在终端里运行的程序,用于处理用户输入,并和 ADB Server 通信。通常 ADB Client 和 ADB Server 会编译到同一个可执行文件 adb,所以在运行 adb 命令时,会主动检测是否有 ADB Server 这个进程,如果没有,就会默认后台运行 ADB Server。ADB Daemon 是一个运行在 Android 客户端的守护进程,用于和 ADB Server 进行通信,并给主机提供一系列的服务。

在我们平常的开发中,可能会碰到一些 Android 设备无法通过 adb 去连接。这里分析两种常见的连接错误。

阅读全文