全志平台ap6476模组 gps功能调试
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,开始从卫星数据中提取星历的相关数据,相同的测试环境下,天线良好的样机定位时间比天线差的样机要短,天线差有可能会导致无法定位。
- 分享
- 举报
-
浏览量:8339次2021-01-20 17:16:00
-
浏览量:8353次2021-01-20 17:04:49
-
浏览量:14488次2021-01-16 15:43:02
-
浏览量:6208次2021-01-15 17:26:20
-
浏览量:7122次2021-01-16 14:52:44
-
浏览量:2230次2022-07-09 08:47:55
-
浏览量:4235次2020-09-23 19:01:05
-
浏览量:6059次2020-10-21 16:08:13
-
浏览量:10142次2021-01-22 16:07:20
-
浏览量:11313次2020-12-16 19:13:45
-
浏览量:10989次2020-12-16 18:56:54
-
浏览量:1943次2020-12-30 16:54:40
-
浏览量:6912次2020-11-26 17:02:47
-
浏览量:10272次2020-11-26 15:59:29
-
浏览量:7963次2021-01-08 15:04:53
-
浏览量:6504次2021-01-08 15:16:17
-
浏览量:4292次2021-07-22 14:48:32
-
浏览量:8407次2020-11-26 14:22:19
-
浏览量:5568次2021-04-12 16:15:46
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明