全志平台ap6476模组 gps功能调试

free-jdx 2021-01-22 15:28:47 6922
1. 前言

全志平台ap6476模组 gps功能调试

2. android定位服务框架

Android上可通过gps、wifi或电话基站进行定位,gps能提供最精准的定位但定位需要的时间是最多。Android的定位服务框架图如图:

由应用至实际的数据接收,可把服务框架划分为五层:

  • 应用层,android.location包中包含的内容,以Java语言提供的API;
  • 框架层,包含系统服务的实现,主要由Java语言实现;
  • 共享库层,由C以及C++语言实现,框架层与共享库层使用JNI进行衔接;
  • 内核层,android系统运行的基础,gps模组与android层交互的通道;
  • gps模组,卫星定位数据接收模块;
3.android定位服务代码结构

android定位服务涉及到applicant、framework、JNI和HAL四层

(1)applicant

文件路径:\android4.2\frameworks\base\location
应用层实现供应用程序调用的类,如LocationManager、GpsStatus、LocationProvider等,这些实现的类均集成在android.location包中。

(2)framework

涉及的文件有:
\frameworks\base\services\java\com\android\server\LocationManagerService.java
\frameworks\base\services\java\com\android\server\location\GpsLocationProvider.java
LocationManagerService.java是实现框架层位置服务的类,是一个系统服务。
GpsLocationProvider.java实现JNI层与framework层的通讯,为上层提供服务。

(3)JNI

文件路径:\frameworks\base\services\jni\com_android_server_location_GpsLocationProvider.cpp
JNI层依赖HAL层接口,提供GpsLocationProvider.java本地方法的实现,本地方法和JNI方法是一一对应。

(4)HAL

文件路径:\hardware\libhardware\include\hardware\gps.h
HAL层是与硬件相接触,用C语言实现,gps.h是gps模块HAL的头文件,里面包含很多常量(这些常量和GpsLocationProvider.java中的内容相对应)和结构体的定义。
Android源生代码中提供高通gps HAL层的实现,文件路径:\hardware\qcom\gps

4. 移植说明

gps功能移植只涉及android层的修改,内核不需要做修改,gps的数据通道是串口,跟蓝牙共用一路串口,串口会在系统启动被打开。

(1)fiber-xxx.mk

平台文件fiber-xxx.mk会把移植包的3个非源码文件拷贝到指定的目录。

PRODUCT_COPY_FILES += \
    device/softwinner/fiber-xxx/ap6476/gps.default.so:system/lib/hw/gps.default.so \
    device/softwinner/fiber-xxx/ap6476/gpsconfig.xml:system/etc/gps/gpsconfig.xml \
    device/softwinner/fiber-xxx/ap6476/glgps:system/bin/glgps

(2)init.sun6i.rc
平台文件init.sun6i.rc会创建gps数据目录、修改glgps和gps.default.so的执行权限和指定执行组,开启gps服务进程。

/data/gps目录的创建,/data/gps、glgps、gps.default.so执行权限的修改和执行组的指定:

# ap6476 gps
    chmod 777 /system/bin/glgps
    chown root system /system/bin/glgps
    chmod 777 /system/lib/hw/gps.default.so
    chown root system /system/lib/hw/gps.default.so
    mkdir /data/gps
    chmod 777 /data/gps
    chown root system /data/gps

Gps服务进程的开启:

service gpsd  /system/bin/glgps -c /system/etc/gps/gpsconfig.xml
    class main
    user root
    group system

gpsd进程的名称,/system/bin/glgps是进程的执行文件,gpsconfig.xml是glgps要解释的配置文件。
gpsd服务会在系统启动过程被加载,指定服务类是main,所在组是system,用户名是root。
由于服务开启中没有指定oneshot和onrestart选项,所以gpsd这个服务会一直存在,即使通过kill+进程号命令把其kill,它会立即被加载启动,可以看到gpsd的进程号是不一样的。

5. 调试及问题
(1)gpsd服务开启了但gps无法运行
问题:

系统启来后,由ps命令看到gpsd服务已正在运行,用gps测试apk测试定位,没接收到gps数,状态栏也没有显示gps运行的图标。

问题分析:

gps服务加载系统默认的gps库gps.fiber.so,而不是加载gpsd服务需要的gps.default.so库。
gps.fiber.so库是由于fiber-common下声明了BOARD_USES_GPS_TYPE为simulator而编译的,这是用于模拟器运行使用。

解决方法:

修改fiber-common/BoardConfigCommon.mk文件,把BOARD_USES_GPS_TYPE的声明去掉。

(2)gps数据
问题:

能否通过打印信息看gps是否能work。

解决方法:

可以打开gps HAL层的打印信息,通过打印看是否有接收到卫星数据初步判断gps是否work,若接收到卫星数据则代码gps已经在work。
gps HAL层打印信息的开关是在gpsconfig.xml文件中,把cLogEnabled赋值为true即可。

注:样机调试时可通过”busybox vi /system/etc/gps/gpsconfig.xml”对gpsconfig.xml文件进入修改而不用重新打包固件再烧写。

(3)天线问题

天线的好坏会直接影响到gps定位的速率和效果,能接收到卫星数据则代表gps已经在work,开始从卫星数据中提取星历的相关数据,相同的测试环境下,天线良好的样机定位时间比天线差的样机要短,天线差有可能会导致无法定位。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 98 7 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区