2016-08-04 94 views
1

我正在寫一個驅動程序代碼,以從x86讀取一些寄存器值,當我運行我的用戶空間應用程序時,出現以下錯誤。打開char dev文件時發生ioctl錯誤

IOCTL:用於設備

這裏是代碼嗅不適當的ioctl ..

fd = open_drvfile(); 
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1) { 
    perror("ioctl:"); 
    exit (0); 
} 

和open_drvfile()剛剛打開(創建和打開)字符文件如下

fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT); 
if (fd == -1) { 
    perror("Failed to open /dev/" DEV_NAME); 
} 
return fd; 

可以有一個點,我犯了這個錯誤?

+0

我不太明白你要做什麼,但是因爲你在問題標題中引用了一個char設備,所以open()下面的O_CREAT標誌對我來說沒有什麼意義。你在'open()'之前用'mknod()'創建了char設備嗎? – pah

+1

我正在使用open()創建並打開文件(因爲文件不存在)。我認爲這是錯誤的。在看到您的答案後,我使用mknod()創建文件並刪除了O_CREAT,現在它按預期工作。謝謝。 –

+0

我會發布答案,所以它可能會對其他人有所幫助:) – pah

回答

0

一個字符設備意味着它應mknod()被創建,而不是與open()O_CREATflags(這將創建一個普通的文件,而不是一個字符設備)。

(見問題評論)。