apq8053 Androidthings 底层硬件接口分析

2023-10-19 03:32

本文主要是介绍apq8053 Androidthings 底层硬件接口分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//Androidthings 传感器流程
注册 SensorManager.DynamicSensorCallback
注册驱动服务 ProximityService

ProximityService中注册 Vcnl4200SensorDriver
Vcnl4200SensorDriver注册 UserDriverManager
UserDriverManager 调用 UserSensorReading
UserSensorReading调用readLight 真正的读取设备数据
在使能函数中做设备初始化。

//命令获取到的硬件接口
adb shell pio list uart

msm8x53_som:/ # pio list
gpio GPIO_0
gpio GPIO_1
gpio GPIO_117
gpio GPIO_127
gpio GPIO_13
gpio GPIO_140
gpio GPIO_35
gpio GPIO_42
gpio GPIO_43
gpio GPIO_44
gpio GPIO_45
gpio GPIO_46
gpio GPIO_48
gpio GPIO_65
gpio GPIO_68
gpio GPIO_85
gpio GPIO_86
gpio GPIO_87
gpio GPIO_98
gpio GPIO_99
i2c I2C1
i2c I2C2
uart UART6

接口配置
./msm8x53/somconfig/hardware_capabilities.xml

//在命令行测定GPIO
msm8x53_som:/ # pio gpio GPIO_85 read
1

系统中调用的是:
/etc/somconfig/default_configuration.pb
配置了需要的接口

在/device/qcom/msm8x53/msm8x53.mk中

P I/O HAL and SOM config for 8x53

202 PRODUCT_PACKAGES +=
203 default_configuration.pb
204 peripheral_io.msm8x53
205
206 # Camera
207 include device/qcom/msm8x53/camera.mk
208
209 # Keymaster

//映射函数
./qcom/msm8x53/pio_hal/pio_hal.cpp:98: // GPIO_1019 is a special-case, virtual GPIO that reflects the state of
./qcom/msm8x53/pio_hal/pio_hal.cpp:104: callbacks->register_sysfs_hidden_gpio(“GPIO_1019”, 1019);
//注册函数RegisterPeripherals

//从底层中取到节点然后注册 这个是example,更能直观的看出接口获取
// Initialization callback from PIO to register all known I/O. Called once
// on PIO daemon startup.
static int RegisterPeripherals(const pio_module_v1_t* /module/,
const pio_registration_callbacks_t* callbacks) {
// Register all the pins first.
for (const PioPin* pin : GetPins()) {
callbacks->register_pin(pin->hal_pin());
}

// Now link functions to their sysfs paths so PIO knows where to find them.
// Sysfs paths are just made up for this example HAL.

// GPIOs: /sys/class/gpio/gpio
callbacks->register_sysfs_gpio(“GPIO_A0”, 0);
callbacks->register_sysfs_gpio(“GPIO_A1”, 1);
callbacks->register_sysfs_gpio(“GPIO_A2”, 2);
callbacks->register_sysfs_gpio(“GPIO_A3”, 3);
callbacks->register_sysfs_gpio(“GPIO_B0”, 8);
callbacks->register_sysfs_gpio(“GPIO_B1”, 9);
callbacks->register_sysfs_gpio(“GPIO_B2”, 10);
callbacks->register_sysfs_gpio(“GPIO_B3”, 11);
callbacks->register_sysfs_gpio(“GPIO_B4”, 12);
callbacks->register_sysfs_gpio(“GPIO_B5”, 13);
callbacks->register_sysfs_gpio(“GPIO_B6”, 14);
callbacks->register_sysfs_gpio(“GPIO_B7”, 15);

// I2C0: /dev/i2c-4
callbacks->register_sysfs_i2c(“I2C0”, 4);

// PWM0: /sys/class/pwm/pwmchip0/pwm0
// PWM1: /sys/class/pwm/pwmchip1/pwm2
callbacks->register_sysfs_pwm(“PWM0”, 0, 0);
callbacks->register_sysfs_pwm(“PWM1”, 1, 2);

// SPI0.0: /dev/spidev1.0
// SPI0.1: /dev/spidev1.15
// SPI0.2: /dev/spidev1.32767
pio_sysfs_spi_chip_select_t chip_selects[] = {{0, 0}, {1, 15}, {2, 32767}};
callbacks->register_sysfs_spi(
“SPI0”, 1, chip_selects, arraysize(chip_selects));

// UART0: /dev/ttyS4
callbacks->register_sysfs_uart(“UART0”, “/dev/ttyS4”);

return 0;
}

系统中跑了一个peripheralman进程
peripheralman.rc
service peripheralman /system/bin/peripheralman
class main
user root
# Some UARTs are shared with Bluetooth, so give peripheralman access to the
# bluetooth group rather than giving everyone rw access to those devices.
# See b/78327678 and b/112380556.
group system bluetooth
onrestart restart zygote

msm8x53_som:/ # ps -A |grep peripheralman
root 517 1 38500 12516 SyS_epoll_wait 0 S peripheralman

这篇关于apq8053 Androidthings 底层硬件接口分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/237020

相关文章

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

哈希表的底层实现(1)---C++版

目录 哈希表的基本原理 哈希表的优点 哈希表的缺点 应用场景 闭散列法 开散列法 开放定值法Open Addressing——线性探测的模拟实现 超大重点部分评析 链地址法Separate Chaining——哈希桶的模拟实现 哈希表(Hash Table)是一种数据结构,它通过将键(Key)映射到值(Value)的方式来实现快速的数据存储与查找。哈希表的核心概念是哈希

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

Linux 云计算底层技术之一文读懂 Qemu 架构

Qemu 架构概览 Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。 正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成

【编程底层原理】方法区、永久代和元空间之间的关系

Java虚拟机(JVM)中的内存布局经历了几个版本的变更,其中方法区、永久代和元空间是这些变更中的关键概念。以下是它们之间的关系: 一、方法区: 1、方法区是JVM规范中定义的一个概念,它用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 3、它是JVM运行时数据区的一部分,与堆内存一样,是所有线程共享的内存区域。 二、永久代(PermGen): 1、在Java SE 7之前,

ElasticSearch底层原理简析

1.ElasticSearch简述 ElastiaSearch(以下简称ES)是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,支持RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ES设计用于云计算中,能够进行实时搜索,支持PB级搜索,具有稳定,可靠,快速,安装使用方便等

机器视觉硬件选型根据某项目相机镜头

一 项目总需求 1、大视野检测需求: (1)大视野: ①产品尺寸15.6寸屏幕,产品大小:350mm x 225mm; ②产品料盘尺寸大小:565mm x 425mm; ③工作距离:880mm;检测精度:500μm; 1、大视野检测需求: (1)大视野: ①产品尺寸15.6寸屏幕,产品大小:350mm x 225mm; ②产品料盘尺寸大小:565mm x 425mm; 工作距离:

【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理

Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己

了解elementUI的底层源码, 进行二次开发

Element UI 是一个基于 Vue.js 的桌面端组件库,广泛用于构建美观、交互友好的用户界面。要深入理解 Element UI 的底层源码并进行二次开发,你需要掌握以下几个关键点: Vue.js 原理 Element UI 是基于 Vue.js 构建的,因此首先需要熟悉 Vue.js 的核心概念和机制,包括: ● 组件系统:Vue.js 的组件化思想,如何定义组件、使用组件、传递属性和事