概述
a:ioctl出现的各种奇怪问题多数都在传参上 ,具体怎么传要根据情况变换,不能照搬拷贝,要特别注意ioctl用户空间和内核空间通信时的传参格式问题。
b:关于64位编译系统遇到的一系列问题:
1.该5.1版本中编译hal模块不能像4.x版本那样直接在 android/hardware/libhardware/modules/XX/ 下直接mm,z这样做会导致系统起不来,出现段错误等一系列奇怪问题,后经验证比对out下目标文件,查看mk文件,发现此处的模块并不是out下生成的目标库文件,无奈换个位置,找到了device/softwinner/common/hardware/,大胆再次mm编译一次,ok系统貌似起来了。
2.事实证明这里是可以的,但是gpioService没起来,打开模块失败,提示找不到库文件,反复检查库文件源码,并没有问题,后根据出错log跟踪发现其没有找到HMI,解决办法:为HMI添加声明__attribute__ ((visibility ("default"))),声明此模块对外可见。ok,这次找到HMI了。
3.但是,open设备节点失败了,log显示此库文件为32bit而非64bit库文件,哦,它要用64库,那想办法搞个64位库编出来直接push进去试试,还去/device/software/common/hardware/目录看看其他模块的mk文件,修改使其编出gpioHal,ok,好像编译成功了。
4.push进系统,还是提示此库为32bit库,我怀疑它并不像我们32位系统那样去/system/lib/hw/下找库文件,我忽视了一个文件夹/system/lib64/hw/,发现这里面确实也有一个同样的库文件,push进去,ok这次完全正常了,没有报错。
5.后来测试出的一次咧问题都在ioctl传参上了。
c:在写jni文件时还遇到一个问题,说是找gpioJni 方法注册失败,后来发现一个问题,方法中如果有string形参,string必须是第一个参数,不对,必须在其他类型参数的前面,靠左,例如:(Ljava/lang/String;Ljava/lang/String;JI)I.
mk文件写法附上:
# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := gpio.default
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MULTILIB := both
LOCAL_MODULE_PATH_32 := $(TARGET_OUT)/lib/hw
LOCAL_MODULE_PATH_64 := $(TARGET_OUT)/lib64/hw
LOCAL_SRC_FILES := gpio.c
LOCAL_C_INCLUDES :=
hardware/libhardware/include/hardware/
LOCAL_CFLAGS = -fvisibility=hidden -Wall -Werror
LOCAL_SHARED_LIBRARIES :=
liblog
libdl
libc
libcutils
LOCAL_MODULE_TAGS := optional
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_SHARED_LIBRARY)
最后
以上就是笨笨早晨为你收集整理的{gpio驱动-》gpioHal-》gpioJni-》gpioService-》gpioTest}问题总结的全部内容,希望文章能够帮你解决{gpio驱动-》gpioHal-》gpioJni-》gpioService-》gpioTest}问题总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复