kernel driver 用 standalone C program 寫 ioctl 是 OK 的。
但是在 hardware module hidl c program 中用一樣的方法,卻 return fail
在 driver 放 printk, 發現根本沒 call 到。
最後有人發現,android hardware module call ioctl 會 call 到 compact_ioctl, 和 standalone c program call 的 unlocked_ioctl 不一樣。
所以在 driver 層 implement compact_ioctl 後 (其實就是跟 unlocked_ioctl 一樣,只有 function name 不一樣),舊 OK了。
這樣說來,android hardware module 是 compile 成 32bit?
用 ninja -v command 把 該 module build 的 command 列出,發現,同一個 shared library, build 了兩次,
一次target 是 aarch64-linux-android,一次是 arm-linux-androideabi 同時 enable thumb.
所以 android 有可能 load 32bit shared library
沒有留言:
張貼留言