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

优林70/月,西南高防地区最低70/月

优林怎么样?优林好不好?优林 是一家国人VPS主机商,成立于2016年,主营国内外服务器产品。云服务器基于hyper-v和kvm虚拟架构,国内速度还不错。今天优林给我们带来促销的是国内西南地区高防云服务器!全部是独享带宽!续费同价!官方网站:https://www.idc857.com​地区CPU内存硬盘流量带宽防御价格购买地址德阳高防4核4g50G无限流量10M100G70元/月点击购买德阳高防...

Virtono:圣何塞VPS七五折月付2.2欧元起,免费双倍内存

Virtono是一家成立于2014年的国外VPS主机商,提供VPS和服务器租用等产品,商家支持PayPal、信用卡、支付宝等国内外付款方式,可选数据中心共7个:罗马尼亚2个,美国3个(圣何塞、达拉斯、迈阿密),英国和德国各1个。目前,商家针对美国圣何塞机房VPS提供75折优惠码,同时,下单后在LET回复订单号还能获得双倍内存的升级。下面以圣何塞为例,分享几款VPS主机配置信息。Cloud VPSC...

星梦云:四川100G高防4H4G10M月付仅60元

星梦云怎么样?星梦云资质齐全,IDC/ISP均有,从星梦云这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,星梦云专注四川高防服务器,成都服务器,雅安服务器。星梦云目前夏日云服务器促销,四川100G高防4H4G10M月付仅60元;西南高防月付特价活动,续费同价,买到就是赚到!点击进入:星梦云官方网站地址1、成都电信年中活动机(成都电信优化线路,封锁...

安卓4.4.4为你推荐
新会区人民政府公报重庆重庆Sicherheitsserverhostschrome交换机route支持ipadoutput_buffering飞飞的官方网站是啥重庆网通重庆联通宽带ipad上网ipad上网速度很慢怎么回事?重庆电信宽带管家电信的宽带上网助手是什么?icloudiphone没开启icloud的iphone怎么用find my iphone找回
域名中介 骨干网 西安服务器 免费ftp空间 表单样式 天猫双十一秒杀 789电视 33456 支付宝扫码领红包 raid10 空间租赁 备案空间 丽萨 江苏徐州移动 umax tracker服务器 hdchina 网络安装 ddos攻击器 电脑主机启动不了 更多