ioctl返回失败,驱动中ioctl没调问题解决

在移植A64 jni库时,遇到ioctl一直返回失败,驱动加打印证明根本没调到驱动ioctl方法,自己写个测试demo,证明ioctl控制是没问题的,经网络资源学习以及文件系统代码中加log,证明当跑测试demo时,文件系统默认调用了unlock_ioctl,跑jni库时却走了另一条路,在文件一级一级调用时就已经调到compat_ioctl了,而驱动中并没有注册compat_ioctl。说到这里,基本可以猜出个大概了,由于,A64内核跑的是64位,而java上层(虚拟机之上)如果跑的是32位代码,就会调用compat_ioctl.  这正是unlock_ioctl以及compat_ioctl同事存在的意义。

解决办法:

1.将驱动中的ioctl方法同时注册为campat_ioctl 和 unlock_iocrtl,这样也保证了它的可移植性,不再会因为同样的问题由于找不到compat_ioctl而返回错误给上层了。

2、由于我的jni库是在eclipse上编译,直接联机调试的,所以在源码里面编译一下一样可以解决这个问题,原因猜想是因为eclipse ndk用的是32位的,我试过库确实是64位的,唯一不同的就是 apk。结合安卓虚拟机的意义,猜想用32位ndk编出了这个apk,虽然能跑,但是出现了这样的问题,未经证实,但是觉得应该是这样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值