Tôi đang phát triển một mô-đun hạt nhân sử dụng unlocked_ioctl. Tôi đã thử nghiệm nó với phiên bản kernel 2.6.24-23-generic và nó hoạt động hoàn hảo. Bây giờ tôi đã thử nó với phiên bản kernel 3.3.1-1-ARCH và một cái gì đó kỳ lạ xảy ra: chức năng ioctl không được thực hiện khi giá trị yêu cầu (cmd) là 2. Nó trả về 0, nhưng chức năng không được thực hiện. Để kiểm tra xem nó không được thực hiện tôi đã làm như sau:ioctl không được gọi nếu cmd = 2
static long midriver_ioctl(struct file *file,
unsigned int cmd, unsigned long arg) {
printk("Called with cmd = %d\n", cmd);
Tôi đã viết một chương trình thử nghiệm mà các cuộc gọi ioctl cho thiết bị này 0-4096, và tôi có thể nhìn thấy trong dmesg thông báo "gọi với cmd = n "cho tất cả các giá trị đó, ngoại trừ" 2 ", giá trị duy nhất không được hiển thị.
Bất kỳ manh mối nào về những gì tôi đang làm sai?
Cảm ơn bạn trước,
Một số mã lên trong chuỗi được chặn cmd == 2 và xử lý nó? – zvrba