创建control device

来源:互联网 发布:掉头发怎么办知乎 编辑:程序博客网 时间:2024/05/23 05:09

/dev/snd # llcrw-rw---- system   audio    116,   0 2014-09-19 10:36 controlC0crw-rw---- system   audio    116,  32 2014-09-19 10:36 controlC1crw-rw---- system   audio    116,  64 2014-09-19 10:36 controlC2crw-rw---- system   audio    116,  96 2014-09-19 10:36 controlC3
创建controldevice的过程和pcm类似

snd_soc_register_cardsnd_soc_instantiate_cardsnd_card_createsnd_ctl_create

用户态对controlCx的操作怎么到kernel的哪?关键在snd_ctl_create中的注册函数snd_ctl_dev_register

static const struct file_operations snd_ctl_f_ops ={    .owner =    THIS_MODULE,    .read =     snd_ctl_read,    .open =     snd_ctl_open,    .release =  snd_ctl_release,    .llseek =   no_llseek,    .poll =     snd_ctl_poll,    .unlocked_ioctl =   snd_ctl_ioctl,    .compat_ioctl = snd_ctl_ioctl_compat,    .fasync =   snd_ctl_fasync,};static int snd_ctl_dev_register(struct snd_device *device){    if ((err = snd_register_device(SNDRV_DEVICE_TYPE_CONTROL, card, -1,                       &snd_ctl_f_ops, card, name)) < 0) }snd_ctl_ioctl   snd_ctl_elem_read_user      snd_ctl_elem_read         snd_ctl_find_id(card, &control->id);         kctl->get(kctl, control);

kctl来自card的controls链表。用户态传入的时候会有一个num id指定这个kcontrol

num id可以关注mixer_open中SNDRV_CTL_IOCTL_ELEM_LIST

对应于kernel中的snd_ctl_elem_list

0 0
原创粉丝点击