Android L版本中实现32bit userspace程序能通过ioctl()系统调用与64bit的kernel dr...
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
[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()接口;
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()接口;
mark....................
mark----------------------------
多谢分享,解决了同样的问题
mark....
