{gpio驱动-》gpioHal-》gpioJni-》gpioService-》gpioTest}问题总结

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值