411 Rev 1 [English Rev 3] 1/26 AN41f20;BACKGROUND-COLOR:#4ae2f7">4503 应用笔记 环境传感器:用于 Android 的硬件抽象层 作者:Adalberto Muhuho / Lorenzo Sarchi 前言 本应用笔记为将意法半导体环"> 传感器安卓4

传感器安卓4

安卓4.4.4  时间:2021-01-29  阅读:()
2016年3月DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]1/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503应用笔记环境传感器:用于Android的硬件抽象层作者:AdalbertoMuhuho/LorenzoSarchi前言本应用笔记为将意法半导体环境传感器(气压、湿度、紫外线传感器)成功集成到Linux/Android操作系统提供指南.
www.
st.
com目录AN41f20;BACKGROUND-COLOR:#4ae2f7">45032/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]目录1文档概述.
41f20;BACKGROUND-COLOR:#4ae2f7">41.
1Android传感器HAL概述41f20;BACKGROUND-COLOR:#4ae2f7">41.
1.
1内核51.
1.
2传感器库51.
1.
3应用框架52测试环境/生态系统62.
1将传感器连接到PandaBoard62.
2Ubuntu13.
041f20;BACKGROUND-COLOR:#4ae2f7">4环境的特定设置72.
3构建AndroidKitKat-41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">482.
3.
1下载软件包92.
3.
2使用需要的补丁102.
3.
3编译源码102.
3.
41f20;BACKGROUND-COLOR:#4ae2f7">4烧写image文件到PandaBoardSD卡113Linux内核空间123.
1环境概述123.
1.
1IC总线初始化补丁123.
1.
2IC_board_info结构补丁133.
1.
3platform_data示例133.
1.
41f20;BACKGROUND-COLOR:#4ae2f7">4重建内核之后133.
2驱动描述133.
2.
1如何编译和安装设备驱动133.
2.
2从Linux用户空间控制设备驱动141f20;BACKGROUND-COLOR:#4ae2f7">43.
3权限设置163.
41f20;BACKGROUND-COLOR:#4ae2f7">4驱动的输出数据163.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
1数据位置163.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
2用于读取数据的应用样例1641f20;BACKGROUND-COLOR:#4ae2f7">4Android传感器HAL1841f20;BACKGROUND-COLOR:#4ae2f7">4.
1概述1841f20;BACKGROUND-COLOR:#4ae2f7">4.
1.
1传感器库1841f20;BACKGROUND-COLOR:#4ae2f7">4.
2文件18DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]3/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503目录2641f20;BACKGROUND-COLOR:#4ae2f7">4.
3如何编译和安装Android传感器HAL185为测试构建简单apk206故障排除237关键字241f20;BACKGROUND-COLOR:#4ae2f7">47.
1术语和缩略语241f20;BACKGROUND-COLOR:#4ae2f7">48版本历史25文档概述AN41f20;BACKGROUND-COLOR:#4ae2f7">450341f20;BACKGROUND-COLOR:#4ae2f7">4/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]1文档概述本文档描述如何将意法半导体环境传感器集成到Linux/Android系统.
它提供关于如何管理此任务的详细信息和流程.
您可以通过当地销售代表获取文档中提及的ST代码.
为了成功集成不同类型的传感器,除了问题和可能的解决方案,还将讨论传感器HAL(硬件抽象层)的配置文件.
最后,还将描述该库的编译和安装.
1.
1Android传感器HAL概述Android传感器HAL是提供从内核空间驱动程序到Android传感器服务和Android传感器管理器的链路的库.
Android传感器框架的架构如下图所示.
DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]5/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503文档概述26图1.
Android传感器HAL概述1.
1.
1Kernel该层包含使用输入子系统(所有输入设备的通用Linux框架)创建的Linux设备驱动.
数据通过Sysfs虚拟文件系统导出到用户空间(/sys/class/input/).
驱动通过稳定的Linux子系统IC从/向传感器接收/发送数据.
1.
1.
2传感器库这些库用于为上层创建复杂接口.
通过SensorManager类、传感器服务类和传感器HAL完成此任务.
1.
1.
3应用框架apk应用使用该层从传感器获取数据.
通信从创建传感器服务实例的SensorManager类开始,通过传感器JNI(Java本地接口)到达下层.
*$066*,&傧+$/$3.
测试环境/生态环境AN41f20;BACKGROUND-COLOR:#4ae2f7">45036/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]2测试环境/生态环境本文档适用于下列测试环境:Pandaboard:–处理器:Omap41f20;BACKGROUND-COLOR:#4ae2f7">441f20;BACKGROUND-COLOR:#4ae2f7">430–测试板:PandaBoardESRevB2.
主机:–HPEliteBook841f20;BACKGROUND-COLOR:#4ae2f7">470pLinux:–Ubuntu13.
041f20;BACKGROUND-COLOR:#4ae2f7">4Android:–KitKat-41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">4编译环境:–androidearm-eabi72.
1将传感器连接到PandaBoard我们的意法半导体DIL241f20;BACKGROUND-COLOR:#4ae2f7">4适配器STEVAL-MKI141f20;BACKGROUND-COLOR:#4ae2f7">41V2、STEVAL-MKI141f20;BACKGROUND-COLOR:#4ae2f7">42V1和STEVAL-MKI165V1分别使用"HTS221湿度传感器"、"LPS25H气压传感器"和"LPS25HB气压传感器"进行测试.
更多信息,请参考www.
st.
com.
将适配器连接到PandaBoard的J3扩展连接器;使用IC总线执行测试.
举例来说,对于下图中的STEVAL-MK141f20;BACKGROUND-COLOR:#4ae2f7">41V2(可以对另外两块适配器重复相同步骤),假设适配器的脚位如下:图2.
DIL241f20;BACKGROUND-COLOR:#4ae2f7">4模块DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]7/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503测试环境/生态环境26引脚1:Vdd;引脚2:Vdd_IO;引脚19:CS;引脚20:SCL;引脚21:SDA;引脚22:SDO其中引脚1在左上,引脚12在左下,引脚13在右下,引脚241f20;BACKGROUND-COLOR:#4ae2f7">4在右上.
这些引脚必须连接到PandaBoard的"扩展连接器A,J3"的下列引脚:2.
2Ubuntu13.
041f20;BACKGROUND-COLOR:#4ae2f7">4环境的特定设置在完成Ubuntu-13.
041f20;BACKGROUND-COLOR:#4ae2f7">4的标准安装后,应用一些特定设置.
使用的软件包版本:Java:JDK1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45和JRE1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45GNUMake3.
82Python2.
7.
41f20;BACKGROUND-COLOR:#4ae2f7">4下列网页描述了其他安装软件包:"http://source.
android.
com/source/initializing.
html#installing-required-packages-ubuntu-12041f20;BACKGROUND-COLOR:#4ae2f7">4",其中用amd641f20;BACKGROUND-COLOR:#4ae2f7">4替代了i386标签用于641f20;BACKGROUND-COLOR:#4ae2f7">4位软件包.
注:在编写时,13041f20;BACKGROUND-COLOR:#4ae2f7">4软件包的特有副标题不存在.
sudoapt-getinstallgitgnupgflexbisongperfbuild-essential\zipcurllibc6-devlibncurses5-dev:amd641f20;BACKGROUND-COLOR:#4ae2f7">4x11proto-core-dev\libx11-dev:amd641f20;BACKGROUND-COLOR:#4ae2f7">4libreadline6-dev:amd641f20;BACKGROUND-COLOR:#4ae2f7">4libgl1-mesa-glx:amd641f20;BACKGROUND-COLOR:#4ae2f7">4\libgl1-mesa-devg++-multilibmingw32tofrodos\python-markdownlibxml2-utilsxsltproczlib1g-dev:amd641f20;BACKGROUND-COLOR:#4ae2f7">4sudoln-s/usr/lib/amd641f20;BACKGROUND-COLOR:#4ae2f7">4-linux-gnu/mesa/libGL.
so.
1/usr/lib/amd641f20;BACKGROUND-COLOR:#4ae2f7">4-linux-gnu/libGL.
so用相应的32位libz替代641f20;BACKGROUND-COLOR:#4ae2f7">4位libz.
so.
1.
sudoapt-getinstalllib32z1.
在使用代理时,为了使用上述及其他设置所需的"apt-get",使用下列单行代码创建文件/etc/apt/apt.
conf.
d/01proxy:acquire:http::Proxyhttp://username:password@proxyname:8080表1.
DIL241f20;BACKGROUND-COLOR:#4ae2f7">4模块对比PandaBoard连接STDIL241f20;BACKGROUND-COLOR:#4ae2f7">4PANDAJ3扩展连接器A引脚编号信号引脚编号信号1VDD1VIO_1V82Vdd_IO1VIO_1V813GND28GND141f20;BACKGROUND-COLOR:#4ae2f7">4INT120GPIO_1341f20;BACKGROUND-COLOR:#4ae2f7">419CS(1)1.
CS引脚必须连接至Vdd_IO20SCL241f20;BACKGROUND-COLOR:#4ae2f7">4SCL21SDA23SDA22SDO22SDO/GPIO_39测试环境/生态环境AN41f20;BACKGROUND-COLOR:#4ae2f7">45038/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]使用下列单行代码在文件夹"/home/user"中创建文件bashrc:exportUSE_CACHE=1从AndroidRoot源码应用下列指令:[RAS]:/prebuilts/misc/linux-x86/ccache/ccache-M50G为了下载和编译内核源码,将'git'进行如下配置:$gitconfig--globaluser.
email"e-mailing_address"$gitconfig--globaluser.
name"user"为了使用fastboot指令和adb指令连接到测试板,将下列代码行添加到文件/etc/udev/rules.
d/51-android.
rules.
#adbprotocolonpanda(PandaBoard)SUBSYSTEM=="usb",ATTR{idVendor}=="041f20;BACKGROUND-COLOR:#4ae2f7">451",ATTR{idProduct}=="d101",MODE="0666",owner="username"#fastbootprotocolonpanda(PandaBoard)SUBSYSTEM=="usb",ATTR{idVendor}=="041f20;BACKGROUND-COLOR:#4ae2f7">451",ATTR{idProduct}=="d022",MODE="0666",owner="username"#usbbootprotocolonpanda(PandaBoard)SUBSYSTEM=="usb",ATTR{idVendor}=="041f20;BACKGROUND-COLOR:#4ae2f7">451",ATTR{idProduct}=="d010",MODE="0666",owner="username"还必须修改该文件的权限:"chmoda+x/etc/udev/rules.
d/51-android.
rules.
然后,使用指令"sudoserviceudevrestart"重启udev服务.
2.
3构建AndroidKitKat-41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">4为了构建环境,需执行下列步骤:下载软件包使用需要的补丁编译源码烧写image文件到PandaBoardSD卡下面几节将详细描述这些步骤.
DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]9/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503测试环境/生态环境262.
3.
1下载软件包表2.
下载封装(分步说明)步骤说明在根目录中创建工作区$mkdir~/panda_work$exportPANDA_WORK=~/panda_work$mkdir~/panda_work/android$exportANDROID_ROOT=~/panda_work/android(1)1.
这在现有文档中被视为RAS(AndroidRoot源码).
下载Android41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">4(可能需要几个小时)$cd$ANDROID_ROOT$repoinit-uhttps://android.
googlesource.
com/platform/manifest-bandroid-41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">4_r1.
1$reposync为PandaBoard下载合适的图形二进制文件,用于内核中的PVR驱动$wgethttps://dl.
google.
com/dl/android/aosp/imgtec-panda-20130603-539d1ac3.
tgz(2)2.
上述链接在编写时有效(20141f20;BACKGROUND-COLOR:#4ae2f7">4年41f20;BACKGROUND-COLOR:#4ae2f7">4月).
$tarzxvfimgtec-panda-20130603-539d1ac3.
tgz$.
/extract-imgtec-panda.
sh在下载的Android41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">4源码中添加对PandaBoard的支持$cd$ANDROID_ROOT$gitclonehttps://github.
com/sola-dolphin1/sola_device_ti_panda.
git-bkitkatdevice/ti/panda(2)下载工具链用于编译x-loader、u-boot和内核$cd$PANDA_WORK$gitclonehttps://android.
googlesource.
com/platform/prebuilt(2)$exportARCH=arm$exportCROSS_COMPILE=$PWD/prebuilt/linux-x86/toolchain/arm-eabi-41f20;BACKGROUND-COLOR:#4ae2f7">4.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
3/bin/arm-eabi-下载X-loader$cd$PANDA_WORK$gitclonegit://git.
omapzoom.
org/repo/x-loader.
git(2)$cdx-loader$gitcheckout-bomap41f20;BACKGROUND-COLOR:#4ae2f7">4_devorigin/omap41f20;BACKGROUND-COLOR:#4ae2f7">4_dev下载U-boot$cd$PANDA_WORK$gitclonegit://git.
omapzoom.
org/repo/u-boot.
git(2)$cdu-boot$gitcheckout-bomap41f20;BACKGROUND-COLOR:#4ae2f7">4_devorigin/omap41f20;BACKGROUND-COLOR:#4ae2f7">4_dev下载内核$cd$PANDA_WORK$gitclonehttps://android.
googlesource.
com/kernel/omap.
gitkernel(2)$cdkernel$gitcheckout-bandroid-omap-panda-3.
0origin/android-omap-panda-3.
0测试环境/生态环境AN41f20;BACKGROUND-COLOR:#4ae2f7">450310/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]2.
3.
2使用需要的补丁2.
3.
3编译源码注:上述链接在编写时有效(20141f20;BACKGROUND-COLOR:#4ae2f7">4年41f20;BACKGROUND-COLOR:#4ae2f7">4月).
表3.
使用需要的补丁(分步说明)步骤说明在U-boot中使用补丁$cdu-boot$wgethttp://android-development-environment.
googlecode.
com/files/0001-change-bootarges.
patch(1)1.
上述链接在编写时有效(20141f20;BACKGROUND-COLOR:#4ae2f7">4年41f20;BACKGROUND-COLOR:#4ae2f7">4月).
$gitapply0001-change-bootarges.
patch使用内核补丁$cd$PANDA_WORK$cdkernel$wgethttp://sola-dolphin-1.
net/data/Panda/0001-panda-jb41f20;BACKGROUND-COLOR:#4ae2f7">4.
2_kernel.
patch$gitapply0001-panda-jb41f20;BACKGROUND-COLOR:#4ae2f7">4.
2_kernel.
patch表41f20;BACKGROUND-COLOR:#4ae2f7">4.
编译源码(分步说明)步骤说明编译X-loader$cdx-loader$gitcheckout-bomap41f20;BACKGROUND-COLOR:#4ae2f7">4_devorigin/omap41f20;BACKGROUND-COLOR:#4ae2f7">4_dev$makeomap41f20;BACKGROUND-COLOR:#4ae2f7">441f20;BACKGROUND-COLOR:#4ae2f7">430panda_config$makeift$cp-aMLO$ANDROID_ROOT/device/ti/panda/xloader.
bin编译U-boot$cdu-boot$makeomap41f20;BACKGROUND-COLOR:#4ae2f7">441f20;BACKGROUND-COLOR:#4ae2f7">430panda_config$make$cp-au-boot.
bin$ANDROID_ROOT/device/ti/panda/bootloader.
bin编译内核$cd$PANDA_WORK$cdkernel$makepanda_defconfig$make$cp-aarch/arm/boot/zImage$ANDROID_ROOT/device/ti/panda/kernel编译Android$cd$ANDROID_ROOT$sourcebuild/envsetup.
sh$lunchaosp_panda-userdebug$make–j41f20;BACKGROUND-COLOR:#4ae2f7">4DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]11/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503测试环境/生态环境262.
3.
41f20;BACKGROUND-COLOR:#4ae2f7">4烧写image文件到PandaBoardSD卡请参考$ANDROID_ROOT/device/ti/panda/中的README文件.
Linux内核空间AN41f20;BACKGROUND-COLOR:#4ae2f7">450312/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]3Linux内核空间该层包含Linux设备驱动:hts221.
ko、lps25.
ko和uv.
ko.
它们使用输入子系统,这是一种适用于其他输入设备(包括鼠标和摇杆)的通用Linux框架.
通过Sysfs虚拟文件系统(/sys/class/input/)导出到用户空间的数据可以在/dev/input/input中找到,每个设备具有唯一的.
驱动通过稳定的Linux子系统IC从/向传感器接收/发送数据.
注:在编写时,hts221驱动仅在OneShot模式下工作.
3.
1环境概述为了正确配置PandaBoard,将湿度、气压和紫外线传感器的适配器连接到IC总线上的PandaBoard(请参考第41f20;BACKGROUND-COLOR:#4ae2f7">4.
1章)然后,如下文所述对[KR]/arch/arm/mach-omap2/board-omap41f20;BACKGROUND-COLOR:#4ae2f7">4panda.
c中的文件board-omap41f20;BACKGROUND-COLOR:#4ae2f7">4panda.
c使用补丁.
3.
1.
1IC总线初始化补丁staticint__initomap41f20;BACKGROUND-COLOR:#4ae2f7">4_panda_i2c_init(void){omap41f20;BACKGROUND-COLOR:#4ae2f7">4_pmic_init("twl6030",&omap41f20;BACKGROUND-COLOR:#4ae2f7">4_panda_twldata);omap_register_i2c_bus(2,41f20;BACKGROUND-COLOR:#4ae2f7">400,NULL,0);/**将总线3连接到设备(例如picoDLP)的DVI端口*投影仪在频率为41f20;BACKGROUND-COLOR:#4ae2f7">400kHz时无法可靠工作*/omap_register_i2c_bus(3,100,panda_i2c_eeprom,ARRAY_SIZE(panda_i2c_eeprom));omap_register_i2c_bus(41f20;BACKGROUND-COLOR:#4ae2f7">4,200,panda_i2c_memsensors,ARRAY_SIZE(panda_i2c_memsensors));return0;}添加以上以粗体显示的代码行,以便初始化总线41f20;BACKGROUND-COLOR:#4ae2f7">4(设备所连接的总线).
还需添加下列结构.
DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]13/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503Linux内核空间263.
1.
2IC_board_info结构补丁staticstructi2c_board_info__inidatapanda_i2c_memsensors[]={{I2C_BOARD_INFO("lps25h",0x5d),.
platform_data=&lps25h_platform,},{I2C_BOARD_INFO("hts221",0x5f),.
platform_data=&hts221_platform,},{I2C_BOARD_INFO("uvis25",0x41f20;BACKGROUND-COLOR:#4ae2f7">47),.
platform_data=&uvis25_platform,}}3.
1.
3platform_data示例:staticstructhts221_platform_datahts221_platform={.
poll_interval=1000,.
min_interval=100,}文件hts221.
h中有同名结构,用于编译相应设备的模块驱动,位于[KR]/include/linux/input中.
3.
1.
41f20;BACKGROUND-COLOR:#4ae2f7">4重建内核之后复制合适文件夹[RAS]/device/ti/panda/中的新建zImage作为'kernel',然后重建boot.
img.
[KR]$cp-aarch/arm/boot/zImage$ANDROID_ROOT/device/ti/panda/kernel[RAS]$makebootimage3.
2驱动描述设备驱动是与硬件的第一个接口;它们通过i2c总线直接与传感器通信.
每个驱动有两个文件:.
c和.
h文件.
3.
2.
1如何编译和安装设备驱动为了编译合适的设备驱动,.
c文件必须位于/drivers/misc文件夹,而相应的.
h文件必须位于/include/lilnux/input中.
如果将驱动作为独立模块进行编译,下面的示例演示了要添加到/drivers/misc下的Makefile文件的代码行:obj-m=hts221.
oobj-m+=lps25.
oLinux内核空间AN41f20;BACKGROUND-COLOR:#4ae2f7">4503141f20;BACKGROUND-COLOR:#4ae2f7">4/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]obj-m+=uv.
ko然后,从运行指令:"makemodules".
编译模块完成后运行下面的指令:[RAS]$adbroot[RAS]$adbremount按照常用流程将编译出的hts221.
ko、lps25.
ko和uv.
ko模块(位于/drivers/misc下)置于Android文件系统中:[RAS]$adbpush[modulename].
ko/system/lib/hw然后,可以安装模块并实现功能:[RAS]$adbshell[Androidshell]$insmod/system/lib/hw/[modulename].
ko3.
2.
2从Linux用户空间控制设备驱动可以从Linux用户空间控制设备,方法是使用合适的'echo'指令从shell将所需设置写入相关控制文件,或写入库或应用程序.
上述文件位于"/sys/class/input/input[x]/device///"目录下,其中busnum是总线编号(在使用PandaBoard的本测试示例中为'41f20;BACKGROUND-COLOR:#4ae2f7">4'),i2c地址随使用的设备而异:hts221:0041f20;BACKGROUND-COLOR:#4ae2f7">4flps25h:005duvis25:0041f20;BACKGROUND-COLOR:#4ae2f7">47可以在驱动的相应.
c文件中找到这些控制文件的名称,其使用的结构是"attributes".
最重要的文件为'enable_device'.
在本例中,Panda-board测试环境中lps25h的完整路径为:"/sys/class/input/input[x]/device/41f20;BACKGROUND-COLOR:#4ae2f7">4/41f20;BACKGROUND-COLOR:#4ae2f7">4-005d/enable_device"将其配置为'1'可设置设备打开,配置为'0'(零)可设置设备关闭.
为了从'Linux用户空间'设置设备的打开或关闭,使用下列指令:[Androidshell]$echo1>/sys/class/input/input[x]/device///enable_device[Androidshell]$echo0>/sys/class/input/input[x]/device///enable_device或者:[Androidshell]$echo1>/sys/bus/i2c/devices///enable_device[Androidshell]$echo0>/sys/bus/i2c/devices///enable_deviceThedevicescanbecontrolledthrough:/sys/bus/i2c/devices///还可以设置其他功能的打开或关闭.
例如对于lps25h,可以修改FIFO设置.
FIFO模式为:DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]15/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503Linux内核空间26在结构"attributes"中,有"enable_fifo"、"fifo_mode"和"num_samples_fifo".
在下面的例子中,我们将fifo_mode设置为6、采样数设置为8:[Androidshell]$echo1>//enable_fifo[Androidshell]$echo6>//fifo_mode[Androidshell]$echo8>/num_samples_fifo另一个例子是,如果现在考虑hts221,我们可以按以下方式选择加热器或odr:打开加热器:[Androidshell]$echo1>//heater关闭加热器:[Androidshell]$echo0>//heater设置ODR:[Androidshell]$echo'n'>//poll_period_ms其中'n'为:1000:1hz,141f20;BACKGROUND-COLOR:#4ae2f7">4341f20;BACKGROUND-COLOR:#4ae2f7">42:12.
5hz.
设置OneShot模式:[Androidshell]$echo1>//oneshot表5.
FIFO设置ID意义1FIFO2Stream6Mean3Stream2FIFO41f20;BACKGROUND-COLOR:#4ae2f7">4Bypass2Stream7Bypass2FIFOLinux内核空间AN41f20;BACKGROUND-COLOR:#4ae2f7">450316/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]3.
3许可设置ramdisk.
img中某些文件的许可应特别设置,方法是向相应init.
.
rc文件添加某些代码行(对于Panda-board,文件init.
omap41f20;BACKGROUND-COLOR:#4ae2f7">4pandabpard.
rc位于/device/ti/panda中).
尤其是:chmod0666/sys/class/input/input/device/device/enable_devicechownsystemsystem/sys/class/input/input/device/device/enable_devicechmod0666/sys/class/input/input/device/device/full_scalechownsystemsystem/sys/class/input/input/device/device/full_scalechmod0666/sys/class/input/input/device/device/poll_period_mschownsystemsystem/sys/class/input/input/device/device/poll_period_ms其中,对应于相应事件的'编号'.
在修改上述文件后,从运行"makebootimage"以编译新的boot.
img.
这一新image包含内核(/arch/arm/boot中的zImage)和ramdisk.
img,可以在/device/ti/panda中找到.
3.
41f20;BACKGROUND-COLOR:#4ae2f7">4驱动的输出数据3.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
1数据位置Linux基础设施从已分配/dev/input/event设备的驱动提供原始数据(参见常规_report_values,其中为设备名称hts221或lps25h或uvis).
可以从Linuxshell使用相应指令访问此数据.
[Androidshell]$getevent/dev/input/event还可以通过Minicom读取实际数据(从设备读取或计算),但只是出于调试目的.
为此,可在相应驱动中启用#DEBUG,然后通过hts221_get_data()或lps25_prs_get_presstemp_data()中的pr_info读取数据.
3.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
2用于读取数据的应用样例对于输出到/dev/event/input的数据,还可以使用简单的C语言算法、动态库或直接从应用程序读取.
下面是一个简单的框架,其中argv[1]为路径:/dev/input/event#include#include#include#include#include#include#include#includeDocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]17/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503Linux内核空间26structinput_event{structtimevaltime;uint16_ttype;uint16_tcode;int32_tvalue;};intmain(intargc,char*argv[]){intfd;structinput_eventev;assert(16==sizeof(structinput_event));if(argc!
=2){fprintf(stderr,"missing/dev/input/XXX\n");return1;}if((fd=open(argv[1],O_RDONLY))==-1){perror("open");return1;}while(1){do{read(fd,&ev,sizeof(structinput_event));if(ev.
type==EV_ABS)printf("type:%ucode:%uvalue:%d\n",ev.
type,ev.
code,ev.
value);usleep(500000);/*2readspersec*/}while(ev.
type!
=EV_SYN);}close(fd);return0;}当getevent指令启动时,类型、时间、代码和值对应的数字会输出到shell.
在我们的示例中,可以看到气压(abs_pr)、温度(选为abs_gas)和湿度(选为abs_misc)的输入值分别为:18、09和28.
Android传感器HALAN41f20;BACKGROUND-COLOR:#4ae2f7">450318/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]41f20;BACKGROUND-COLOR:#4ae2f7">4Android传感器HAL41f20;BACKGROUND-COLOR:#4ae2f7">4.
1概述Android传感器HAL是提供从内核空间驱动程序到Android传感器服务和AndroidSensorManager的链路的库.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
1.
1传感器库这些库是动态的;它们从/dev/input/event中获取数据并提供给上层.
通过SensorManager类、传感器服务类和传感器HAL完成此任务.
Android框架的ServiceManager检查路径/system/lib/hw以便了解下列动态库是否存在:sensors.
default.
sosensors.
.
so41f20;BACKGROUND-COLOR:#4ae2f7">4.
2文件当前考虑的环境传感器为:HTS221:相对湿度+温度LPS25:气压+温度UVIS25:紫外线在这一阶段,路径和名称为硬编码;具体而言,即"lps25h"、"hts221"和"uvis25",如基础内核驱动所提供.
路径可通过libsensor找到.
库以使用面向对象方法的C++语言编写.
每个传感器都有一个自定义类文件:HumSensor.
cpp、PressSensor.
cpp和UVSensor.
cpp,它扩展了公共基类(SensorBase.
cpp).
41f20;BACKGROUND-COLOR:#4ae2f7">4.
3如何编译和安装Android传感器HAL为了在正确环境中从源码文件开始编译libsensors.
so,必须按照下列说明编译软件包并将其添加到实际传感器HAL库:将传感器HAL压缩文件包复制到相关Android源码路径,通常位于:[RootAndroidSources]/device/[vendorname]/[boardname]/解压缩"tar-xzvflibsensors_env.
tar.
gz"(有可能是.
zip格式)在编译库之前,初始化Android环境:[RAS]$sourcebuild/envsetup.
sh[RAS]$lunch[targetboard]编译库.
DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]19/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503Android传感器HAL26在HAL文件夹中:[RAS]/device/[vendorname]/[boardname]/libsensors在HAL文件夹中启动"mm"指令,以便构建名为sensors.
[板名称].
so的动态库.
在进程结束时,可以在下列目录中找到库:[RAS]/out/target/product/[boardname]/system/lib/hw/然后,可以将此库添加到现有库,重新挂载文件系统并使用"adbpush"指令.
执行以下步骤:[RAS]$adbroot[RAS]$adbremount[RAS]$adbpushsensors.
[boardname].
so/system/lib/hw[RAS]$adbshell]stop[RAS]$adbshell]start注:为防止与其他类似的库同名,使用有含义的不同名称,例如sensors.
[处理器名].
so.
就Panda-board而言,例如:sensors.
omap41f20;BACKGROUND-COLOR:#4ae2f7">4.
so.
所构建的库名称可以被选择和修改,将所需名称写入:相关Android.
mk文件中的LOCAL_MODULE:=sensors.
$(TARGET_BOARD_PLATFORM).
为测试构建简单apkAN41f20;BACKGROUND-COLOR:#4ae2f7">450320/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]5为测试构建简单apk为了快速构建大致的测试应用,使用常用构建工具(ADT/Eclipse等)从"made-by-default"apk开始,并修改下列内容:步骤1:/res/layout/activity_main.
xmlAndroidapk样例:activity_main.
xml步骤2:/src/com.
example.
com.
MainActivity.
javapackagecom.
example.
importandroid.
os.
Bundle;importandroid.
app.
Activity;importandroid.
view.
Menu;importandroid.
view.
ViewGroup.
LayoutParams;importjava.
io.
IOException;importjava.
io.
InputStream;importandroid.
annotation.
SuppressLint;importandroid.
hardware.
Sensor;importandroid.
hardware.
SensorEvent;importandroid.
hardware.
SensorEventListener;importandroid.
hardware.
SensorManager;importandroid.
util.
Log;importandroid.
view.
View;importandroid.
widget.
Button;importandroid.
widget.
TextView;@SuppressLint("NewApi")DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]21/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503为测试构建简单apk26publicclassMainActivityextendsActivityimplementsSensorEventListener{privateSensorManagermSensorManager;privateSensormHumidity;TextViewxViewP=null;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.
onCreate(savedInstanceState);setContentView(R.
layout.
activity_main);xViewP=(TextView)findViewById(R.
id.
TextView01);xViewP.
setText("Humidity:");//传感器mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);mHumidity=mSensorManager.
getDefaultSensor(Sensor.
TYPE_RELATIVE_HUMIDITY);}@OverrideprotectedvoidonResume(){if(mSensorManager!
=null)mSensorManager.
registerListener(this,mHumidity,SensorManager.
SENSOR_DELAY_NORMAL);super.
onResume();}@OverrideprotectedvoidonPause(){super.
onPause();mSensorManager.
unregisterListener(this);}publicvoidonSensorChanged(SensorEventevent){if(event.
sensor.
getType()==Sensor.
TYPE_RELATIVE_HUMIDITY){xViewP.
setText("Humidity:"+event.
values[0]+"-Temperature:"+event.
value[1]);}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//填充菜单;这样可以将项目添加到操作栏(如果有)中.
为测试构建简单apkAN41f20;BACKGROUND-COLOR:#4ae2f7">450322/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]getMenuInflater().
inflate(R.
menu.
main,menu);returntrue;}}以上只是测试环境的简单示例;在构建合适的apk时应考虑其他特性.
请注意,将在被测环境传感器中设置的传感器类型为:LPS25H:PressureHTS221:Relative_HumidityUVIS25:Light在实际的Android应用中,无法预知是否为紫外线类传感器;因此将选项"Light"视为正确选择.
DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]23/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503故障排除266故障排除下面是潜在问题列表和相应的解决方案:硬件环境设置:–在使用shell指令"insmod/system/lib/hw/.
ko"加载模块时,主机的"minicom"shell应显示关于正确探测到设备的消息.
–然后,应可以使用路径/sys/class/input/input[x]/device//下的所有文件(特别是enable_device).
可通过minicom查看数据,但是没有导出到/dev/input/event–input_allocate_device中可能存在问题;检查整个环境.
–另外,确认文件的合适权限.
特别是文件enable_device和pollrate_ms应该至少为6641f20;BACKGROUND-COLOR:#4ae2f7">4.
数据被输出到/dev/input/event,但是不能通过apk查看.
–检查Linux用户空间或Android环境中的问题.
–第3.
41f20;BACKGROUND-COLOR:#4ae2f7">4.
2节中的应用样例可用于确认数据是否到达Linux用户空间.
如果是,问题出在Android特有的环境中;从主机上的RAS尝试下列指令:[RAS]$adblogcat或[RAS]$adblogcat|grepsensor选择与该主题相关的消息.
–更好的选择可能是在文件夹中添加某些特定的日志,以便说明问题的位置.
可通过向原始代码中添加"ALOGI("消息类型")"来实现这一点.
AndroidRoot源码的Java编译问题.
–为防止编译在几分钟后失败,确保JavaPATH和选择设置正确:假设jdk位于/usr/java中,则:$PATH=/usr/java/jdk1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45:$PATH注:某些情况下,在路径末尾添加"/"(即/usr/java/jdk1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45/)可能产生编译问题.
–$sudoupdate-alternatives--安装"/usr/bin/java""java""/usr/java/jdk1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45/bin/java"1–$sudoupdate-alternatives--安装"/usr/bin/javac""javac""/usr/javac/jdk1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45/bin/javac"1–$sudoupdate-alternatives--安装"/usr/bin/javaws""javac""/usr/javaws/jdk1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45/bin/javaws"1–在/etc/environment中,添加:exportJAVA_HOME='usr/java/jdk1.
6.
0_41f20;BACKGROUND-COLOR:#4ae2f7">45/binLinux正常但是Android故障,并且在屏幕上无法查看.
–检查与帧缓冲失败相关的错误消息.
如果有,按照第2.
3.
1节确认下载的"Imgtec"图库完美匹配内核中的PVR驱动(在gpu/pvr/中).
关键字AN41f20;BACKGROUND-COLOR:#4ae2f7">4503241f20;BACKGROUND-COLOR:#4ae2f7">4/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]7关键字7.
1术语和缩略语下面是本文档中使用的术语、缩写和缩略语(按字母顺序排序).
ACK-回应APK-Android应用程序包FIFO-先进先出HAL-硬件抽象层HW-硬件JNI-Java本地接口KR-内核RootPCB-印刷电路板RAS-AndroidRoot源码:~/panda_work/androidSoC-片上系统SW-软件TS-时间戳UML-统一建模语言DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]25/26AN41f20;BACKGROUND-COLOR:#4ae2f7">4503版本历史268版本历史表6.
文档版本历史日期版本变更20141f20;BACKGROUND-COLOR:#4ae2f7">4年6月23日1初始版本20141f20;BACKGROUND-COLOR:#4ae2f7">4年7月29日2更新了封面的标题2016年1月21日3更新:图2和第2.
1节第6页表7.
中文文档版本历史日期版本变更2016年3月18日1中文初始版本版本历史AN41f20;BACKGROUND-COLOR:#4ae2f7">450326/26DocID02641f20;BACKGROUND-COLOR:#4ae2f7">411Rev1[EnglishRev3]重要通知-请仔细阅读意法半导体公司及其子公司("ST")保留随时对ST产品和/或本文档进行变更、更正、增强、修改和改进的权利,恕不另行通知.
买方在订货之前应获取关于ST产品的最新信息.
ST产品的销售依照订单确认时的相关ST销售条款.
买方自行负责对ST产品的选择和使用,ST概不承担与应用协助或买方产品设计相关的任何责任.
ST不对任何知识产权进行任何明示或默示的授权或许可.
转售的ST产品如有不同于此处提供的信息的规定,将导致ST针对该产品授予的任何保证失效.
ST和ST徽标是ST的商标.
所有其他产品或服务名称均为其各自所有者的财产.
本文档中的信息取代本文档所有早期版本中提供的信息.
2016STMicroelectronics-保留所有权利2016

LayerStack$10.04/月(可选中国香港、日本、新加坡和洛杉矶)高性能AMD EPYC (霄龙)云服务器,

LayerStack(成立于2017年),当前正在9折促销旗下的云服务器,LayerStack的云服务器采用第 3 代 AMD EPYC™ (霄龙) 处理器,DDR4内存和企业级 PCIe Gen 4 NVMe SSD。数据中心可选中国香港、日本、新加坡和洛杉矶!其中中国香港、日本和新加坡分为国际线路和CN2线路,如果选择CN2线路,价格每月要+3.2美元,付款支持paypal,支付宝,信用卡等!...

弘速云(28元/月)香港葵湾2核2G10M云服务器

弘速云怎么样?弘速云是创建于2021年的品牌,运营该品牌的公司HOSU LIMITED(中文名称弘速科技有限公司)公司成立于2021年国内公司注册于2019年。HOSU LIMITED主要从事出售香港vps、美国VPS、香港独立服务器、香港站群服务器等,目前在售VPS线路有CN2+BGP、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。可联系商家代安装iso系统,目前推出全场vps新开7折,...

注册做什么96%可以干啥,常用的7个常用的国内国外域名注册服务商_云服务器可以干什么

日前,国内知名主机服务商阿里云与国外资深服务器面板Plesk强强联合,推出 阿里云域名注册与备案、服务器ECS购买与登录使用 前言云服务器(Elastic  只需要确定cpu内存与带宽基本上就可以了,对于新手用户来说,我们在购买阿里云服务申请服务器与域名许多云服务商的云服务器配置是弹性的 三周学会小程序第三讲:服务 不过这个国外服务器有点慢,可以考虑国内的ngrokcc。 ngrokcc...

安卓4.4.4为你推荐
在B2B的登录首页下方,点击账号密码查询连接Telewizjamedia中平迅雷债券127Toolgraph支持ipad请务必阅读正文之后的免责条款部分勒索病毒win7补丁我的电脑是windows7系统,为什么打不了针对勒索病毒的补丁(杀毒软件显win10445端口win7系统不能被telnet端口号,端口、服务什么全都开了css下拉菜单如何使用HTML和CSS制作下拉菜单
合租服务器 东莞电信局 buyvm 狗爹 cpanel 紫田 域名优惠码 网络星期一 sub-process 阿里云代金券 好看的桌面背景图片 网盘申请 qingyun drupal安装 创建邮箱 申请网站 512mb 创速 免费主页空间 密钥索引 更多