加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux设备驱动程序,是否可以使用文件描述符获取次要编号?

发布时间:2020-12-13 16:56:48 所属栏目:Linux 来源:网络整理
导读:我正在为 Linux编写设备驱动程序.它创建了一个包含4个次要编号的设备.每当我们尝试以次要编号3写入设备时,我们都会想要杀死设备,目前除了打印它正在写入booga设备之外,它不会做任何其他事情.这是我当前的一些代码,如果有必要,我可以发布更多代码: 写方法:
我正在为 Linux编写设备驱动程序.它创建了一个包含4个次要编号的设备.每当我们尝试以次要编号3写入设备时,我们都会想要杀死设备,目前除了打印它正在写入booga设备之外,它不会做任何其他事情.这是我当前的一些代码,如果有必要,我可以发布更多代码:

写方法:

static ssize_t booga_write (struct file *filp,const char *buf,size_t count,loff_t *f_pose) {
    printk("Attempting to write to booga devicen");
    /* 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 devicen");
    out = write(src,buf,bufsize);
    fprintf(stderr,"Wrote %d bytes.n",out);
    free(buf);
    close(src);

}

我想知道是否有办法获得次要号码.我查看了linux / fs.h,看到文件结构有一个名为private_data的成员,但每当我试图调用它时,它会使我的系统崩溃,因为它当前设置为null.

或者,我是否应该尝试从结构文件中获取次要编号,并且应该在我第一次打开设备时尝试跟踪它?

解决方法

您可以像这样得到次要号码:
iminor(filp->f_path.dentry->d_inode)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读