全志平台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/gpsGps服务进程的开启:
service gpsd /system/bin/glgps -c /system/etc/gps/gpsconfig.xml class main user root group systemgpsd进程的名称,/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,开始从卫星数据中提取星历的相关数据,相同的测试环境下,天线良好的样机定位时间比天线差的样机要短,天线差有可能会导致无法定位。
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:全志平台ap6476模组 gps功能调试 https://www.yhzz.com.cn/a/13130.html