سؤال

أقوم بإضافة بعض التعليمات البرمجية إلى برنامج تشغيل جهاز FreeBSD الحالي وأحاول تمرير أ char* من مساحة المستخدم إلى برنامج التشغيل. لقد قمت بتطبيق العرف ioctl() أمر باستخدام _IOW الماكرو مثل ذلك: #define TIBLOOMFILTER _IOW(0,253,char*)

مكالمتي تبدو مثل هذا:

int file_desc = open("/dev/ti0", O_RDWR);
ioctl(file_desc, TIBLOOMFILTER, (*filter).getBitArray());
close(file_desc);

عندما أتصل ioctl() انا حصلت: Inappropriate ioctl for device كرسالة خطأ. أي تخمين لما قد يفعل خطأ؟ لقد حددت نفس الماكرو في برنامج تشغيل الجهاز الخاص بي ، وأضفته إلى case بيان.

هل كانت مفيدة؟

المحلول

هل قمت بتسجيل معالج IOCTL الخاص بك مع

.d_ioctl  = ioctl_handler

في؟ devsw (جدول تبديل الجهاز char/block)؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top