В последнее время я практикую простой IOCTL драйвер с тремя командами: печать, получить, установитьПочему некоторые случаи ioctl всегда терпят неудачу?
В заявлении IOCTL переключателя, он выглядит, как этот псевдо-код:
switch (cmd) {
case "print":
break;
case "get":
break;
case "set":
break;
default:
break;
}
Но, печатающий случай могут быть правильно выполнены, тогда как get и set case - нет. поэтому я получить выход
[ 2682.940000] mymem_ioctl: <---Switch Command =27395--->
[ 2682.940000] getdata=80046b01 80046b01setdata=40046b02 40046b02print=6b03 6b03
[ 2682.950000] <---ORG IOCPRINT :test_var=-1095999702--->
[ 2682.960000] <---IOCPRINT complete:test_var=111--->
cmd:6b03, arg=10 success
SETDATA cmd:40046b02
ioctl_setdata error
GETDATA cmd:80046b01
ioctl_getdata error
Я попытался расшифровать команду IOCTL, но все выглядит хорошо.
getdata=0x80046b01 => 1000 0000 0000 0100 ....
setdata=0x40046b02 => 0100 0000 0000 0100 ....
print=0x6b03
0100 is size of int
6b is my magic number 'k'
01,02,03 is the number of function(get,set,print)
Я не знаю, почему ... любой может помочь в этом?
версия ядра 2.6.38 и ниже мой код
Пожалуйста, обновите свой вопрос, чтобы увидеть действующий код. 'case" print ":' не будет компилироваться; вы не можете использовать строковые литералы в качестве ярлыков case. –
извините за неправильное неправильное .... это всего лишь образец кода, иллюстрирующий рабочий процесс. –
Вы собираетесь обновить вопрос? –