MT6735平臺底層驅動的ioctl無效問題

由於工作需要,寫了一個底層驅動函數,很簡單,就是控制GPIO口的,平臺是MT6735,跑安卓5.0系統。
驅動代碼寫完後寫了一個簡單的main.c進行測試,一切都很順利,main.c測試通過。於是進一步寫了JNI給上層應用的開發工程師用,問題就來了:我測試很OK的代碼用JNI調用就是控制不到,很是鬱悶。
在試了很多方法,查了很多資料後,才明白:
其實問題很簡單,我這個平臺是64位的,而我寫的驅動代碼是按照以前的模型(32位)寫的,對於64位和32位的Linux底層驅動模型有一點小小的變化,請君對比一下:
32位的:
static struct file_operations simcom_power_ops = {
.owner = THIS_MODULE,
.open = power_open,
.release = power_close,
.unlocked_ioctl= power_ioctl,
};
64位的:
static struct file_operations simcom_power_ops = {
.owner = THIS_MODULE,
.open = power_open,
.release = power_close,
.compat_ioctl = power_ioctl,//used for 64Bit kernel
};
也就是說兩者的 ioctl 模型有這麼一點點區別,所以開發過程中要先分清平臺是32位的還是64位的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章