7
我正在爲Linux寫一個設備驅動程序。它創建一個包含4個小號碼的設備。無論何時我們試圖以次要編號3寫入設備,我們都假設要終止設備,並且目前不會執行任何其他操作,除非它正在寫入booga設備。下面是我的一些當前的代碼,如果需要我可以發佈更多的代碼:Linux設備驅動程序,是否可以使用文件描述符獲取次要號碼?
Write方法:
static ssize_t booga_write (struct file *filp, const char *buf, size_t count, loff_t *f_pose) {
printk("Attempting to write to booga device\n");
/* need to protect this with a semaphore if multiple processes
will invoke this driver to prevent a race condition */
if (down_interruptible (&booga_device_stats->sem))
return (-ERESTARTSYS);
booga_device_stats->num_bytes_written += count;
up(&booga_device_stats->sem);
return count; // pretend that count bytes were written
}
它是如何測試:
static void run_write_test(char *device, int bufsize)
{
char *buf;
int src;
int out;
src = open(device, O_WRONLY);
if (src < 0) {
perror("Open for write failed:");
exit(1);
}
buf = (char *) malloc(sizeof(char)*(bufsize+1));
fprintf(stderr, "Attempting to write to booga device\n");
out = write(src, buf, bufsize);
fprintf(stderr, "Wrote %d bytes.\n", out);
free(buf);
close(src);
}
我想知道是否有一種方法獲取次要號碼。我查看了linux/fs.h,看到文件struct有一個名爲private_data的成員,但每當我嘗試調用它時,它都會使我的系統崩潰,因爲它當前設置爲null。
或者我應該不是試圖從結構文件中獲取次要編號,並應該在第一次打開設備時嘗試跟蹤它?