第二章 PCI 驱动的基本流程
概要
PCI 声卡的最简单的流程如下:
定义一个 PCI Id 表(参考 PCI Entries 章节)
建立 probe()回调函数
建立 remove()回调函数
建立包含上面三个函数入口的 pci_driver 表
建立 init()函数,调用 pci_register_driver()注册上面的 pci_drvier 表
建立 exit()函数,调用 pci_unregister_driver()函数
代码示例
代码如下所示。一些部分目前还没有实现,将会在后续章节逐步实现。如:在
snd_mychip_probe()函数的注释部分的号码。
Example2-1.PCI 驱动示例的基本流程
#include <sound/driver.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <sound/core.h>
#include <sound/initval.h>
/*模块参数(参考“Module Parameters”)*/
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
/*定义和 chip 相关的记录*/
struct mychip{
struct snd_card *card;
//剩余的其他实现将放到这里
//”PCI Resource Management”
};
/*chip-specific destrcutor
*(see “PCI Resource Management”
*/
static int snd_mychip_free(struct mychip *chip)
{
...//后续会实现
}
/*component-destructor
*(see “Management of Cards and Components”
*/
static int snd_mychip_dev_free(struct snd_device *device)
{
return snd_mychip_free(device->device_data);
}