微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux ALSA声卡驱动之二:声卡的创建

Linux ALSA声卡驱动之二:声卡的创建

时间:12-07 来源:互联网 点击:

ev) {

card->card_dev = device_create(sound_class, card->dev,

MKDEV(0, 0), card,

"card%i", card->number);

if (IS_ERR(card->card_dev))

card->card_dev = NULL;

}

其中,sound_class是在/sound/sound_core.c中创建的:

static char *sound_devnode(struct device *dev, mode_t *mode)

{

if (MAJOR(dev->devt) == SOUND_MAJOR)

return NULL;

return kasprintf(GFP_KERNEL, "snd/%s", dev_name(dev));

}

static int __init init_soundcore(void)

{

int rc;

rc = init_oss_soundcore();

if (rc)

return rc;

sound_class = class_create(THIS_MODULE, "sound");

if (IS_ERR(sound_class)) {

cleanup_oss_soundcore();

return PTR_ERR(sound_class);

}

sound_class->devnode = sound_devnode;

return 0;

}

由此可见,声卡的class将会出现在文件系统的/sys/class/sound/下面,并且,sound_devnode()也决定了相应的设备节点也将会出现在/dev/snd/下面。

接下来的步骤,通过snd_device_register_all()注册所有挂在该声卡下的逻辑设备,snd_device_register_all()实际上是通过snd_card的devices链表,遍历所有的snd_device,并且调用snd_device的ops->dev_register()来实现各自设备的注册的。

if ((err = snd_device_register_all(card)) < 0)

return err;

最后就是建立一些相应的proc和sysfs下的文件或属性节点,代码就不贴了。

至此,整个声卡完成了建立过程。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top