在现代内核版本中注册 Midi 设备

问题描述

我目前正在编写一个 Linux 内核模块,它将创建一个虚拟的 Midi 设备,以便用户空间程序可以将 MIDI 信号发送到任何类似 DAW 的软件。我找到了一个 wonderful function 来帮助我完成任务:int register_sound_midi(const struct file_operations * fops,int dev)。问题是这个功能在Kernel Version 4.15之后就不复存在了。从 V15V16注册和取消注册功能就消失了。我现在对如何在 4.15 之后的版本中从内核注册一个假的 midi 设备感到目瞪口呆。如何在内核版本 4.15 中注册 MIDI 设备?是否可以使模块向后兼容旧内核版本?

当前代码

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/sound.h>
#include <sound/core.h>


MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Module to create dummy midi devices.");
MODULE_VERSION("0.01");

static int dummy_midi_open(struct inode *,struct file *);
static int dummy_midi_release(struct inode *,struct file *);
static ssize_t dummy_midi_read(struct file *,char *,size_t,loff_t *);
static ssize_t dummy_midi_write(struct file *,const char *,loff_t *);

static struct file_operations dummy_midi_fops = {
    .owner = THIS_MODULE,.read = dummy_midi_read,.write = dummy_midi_write,.open = dummy_midi_open,.release = dummy_midi_release
};

static int minor;

static int dummy_midi_open(struct inode *midi_inode,struct file *midi_file)
{
    printk(KERN_INFO"Open\n");
    return 0;
}

static int dummy_midi_release(struct inode *midi_inode,struct file *midi_file)
{
    printk(KERN_INFO"Release\n");
        return 0;
}

static ssize_t dummy_midi_read(struct file *filp,char *buf,size_t count,loff_t *f_pos)
{
    printk(KERN_INFO"Read\n");
    return 0;
}

static ssize_t dummy_midi_write(struct file *filp,const char *buf,loff_t *f_pos)
{
    printk(KERN_INFO"Write\n");
        return 0;
}


static int __init midimodule_init(void)
{
    printk(KERN_INFO"Initializing Module\n");
    minor = register_sound_midi(&dummy_midi_fops,-1);
    printk(KERN_INFO"Registered MIDI Device: %d\n",minor);
    return 0;
}

static void __exit midimodule_exit(void)
{
    printk(KERN_INFO"Leaving Now\n");
    unregister_sound_midi(minor);
    printk(KERN_INFO"Unregistered MIDI Device: %d\n",minor);
}

module_init(midimodule_init);
module_exit(midimodule_exit);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...