前面板移植

来源:互联网 发布:淘宝即将上架开售抢拍 编辑:程序博客网 时间:2024/05/03 14:58

最近在整前面板的移植,主要是关于LED灯的显示和按键问题,折腾了二个星期了,现在基本上差不多ok了,主要是驱动的问题,用的是长虹的盒子,但他们那边没有驱动,本人技术又不行,只能靠他们提供的技术支持,他们提供的是一个静态库,集成的时候遇到了比较多的麻烦,最主要的工作也是集中在这一块的调试了。开始调试的时候,我在一个进程中调用了这个库的初始化函数,而在另一个进程中去使用其它的接口,导致前面板不能正常显示,进程间的堆栈都独立的,所以初始化对于另一个进程没用,但是又不能多次的初始化,多次初始化也会导致前面板显示出现异常情况,所以后面把有关前面板的操作都放在了一个独立的线程中。

调用流程:

Java层HidevManager.java:提供给应用调用,控制前面板的相关显示。

JNI层android_app_hidev.cpp:相关jni接口,调用hidev.c中的相关接口实现相关功能 

hidev.c:调用hidev.cpp中实现的HAL层接口实现相关功能 

hidev.cpp:HAL层接口,对接驱动

在这里,由于没有提供驱动代码,hidev.cpp中对接的是第三方提供的库,这里面提供一个线程用于检测前面板按键,并查看是否有需要显示的字符。基本流程就是这样。

这里记录下这几天遇到的问题:

1、编译驱动,出现scripts/basic/fixdep: Syntax error: "(" unexpected

     解决:编译一下kernel就ok了,可能是需要kernel提供的某些支持

2、insmod /system/lib/modules/hi_fpanel_led.ko

    insmod: can't insert '/system/lib/modules/hi_fpanel_led.ko': unknown symbol in m
odule or invalid parameter

   解决:看下终端打印可以看到,可能是有驱动里面用到的一些函数未定义

3、编译问题: hi_fpanel_led: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint

     makefile写的有问题

hi_fpanelled-y := hi_fpanel_led_intf.o


EXTRA_CFLAGS += -I$(DRV_SRC_BASE)/keyled_std
hi_fpanel_led-y += keyled_std/keyled_std.o

EXTRA_CFLAGS += -I$(DRV_SRC_BASE)/keyled_pt6961
hi_fpanel_led-y += keyled_pt6961/keyled_pt6961.o

EXTRA_CFLAGS += -I$(DRV_SRC_BASE)/keyled_ct1642
hi_fpanel_led-y += keyled_ct1642/keyled_ct1642.o

改成:

hi_fpanel_led-y:= hi_fpanel_led_intf.o


EXTRA_CFLAGS += -I$(DRV_SRC_BASE)/keyled_std
hi_fpanel_led-y += keyled_std/keyled_std.o

EXTRA_CFLAGS += -I$(DRV_SRC_BASE)/keyled_pt6961
hi_fpanel_led-y += keyled_pt6961/keyled_pt6961.o

EXTRA_CFLAGS += -I$(DRV_SRC_BASE)/keyled_ct1642
hi_fpanel_led-y += keyled_ct1642/keyled_ct1642.o

4、还是编译问题,.cpp文件链接静态库的时候提示其中的函数找不到

解决:.cpp文件中使用c函数在声明c中函数时要加上extern "C"

5、前面调试遥控时候的问题,在调用遥控驱动的时候,接收到的脉冲数总是不稳定,后面把加在中断函数中的打印去掉后,就好了,估计是中断的函数中最好不要加打印。