Android L版本中实现32bit userspace程序能通过ioctl()系统调用与64bit的kernel driver中的unlocked_ioctl()接口
[DESCRIPTION]
32bit的userspace进程通过ioctl()系统调用是不能够调用到
64bit的kernel driver中的unlocked_ioctl()接口的。
[SOLUTION]
通过在driver中实现compat_ioctl()接口来进行中转。具体实现方法如下:
step 1:在driver中实现compat_ioctl()接口:
step 2: 在alps\kernel-3.10\include\linux\sensors_io.h文件中增加 compat命令和相关头文件;
step 3: 参考step1和step2的方法修改完成driver中unlocked_ioctl()接口 用到的所有cmd命令。
使用场景举例:
1.gsensor校准数据在重新开机后被清零;
--》solution:根据上面的方法实现所用gsensor driver中的
compat_ioctl()接口;
2.msensor daemon是32bit的,kernel 是64bit的,apk读取不到
msensor的数据;
--》solution:根据上面的方法实现所用gsensor driver和
msensor driver中的compat_ioctl()接口;