0

dev-audio声明了两个设备:

struct platform_device s5pv210_device_iis0 = {
 63         .name = "samsung-i2s",
 64         .id = 0,
 65         .num_resources    = ARRAY_SIZE(s5pv210_iis0_resource),
 66         .resource         = s5pv210_iis0_resource,
 67         .dev = {
 68                 .platform_data = &i2sv5_pdata,
 69         },
 70 };   
 76 static struct resource s5pv210_iis1_resource[] = {
 77         [0] = DEFINE_RES_MEM(S5PV210_PA_IIS1, SZ_256),
 78         [1] = DEFINE_RES_DMA(DMACH_I2S1_TX),
 79         [2] = DEFINE_RES_DMA(DMACH_I2S1_RX),
 80 };
 81 
 82 struct platform_device s5pv210_device_iis1 = {
 83         .name             = "samsung-i2s",
 84         .id               = 1,
 85         .num_resources    = ARRAY_SIZE(s5pv210_iis1_resource),
 86         .resource         = s5pv210_iis1_resource,
 87         .dev = {
 88                 .platform_data = &i2sv3_pdata,
 89         },
 90 };
 91 
 92 static struct resource s5pv210_iis2_resource[] = {
 93         [0] = DEFINE_RES_MEM(S5PV210_PA_IIS2, SZ_256),
 94         [1] = DEFINE_RES_DMA(DMACH_I2S2_TX),
 95         [2] = DEFINE_RES_DMA(DMACH_I2S2_RX),
 96 };

这两个设备是i2s 驱动程序的 2 个实例。

假设我EXPORT_SYMBOLi2s 驱动程序中添加了一个函数,它将被 2 个不同的内核模块使用。

如何声明和使用这样的导出函数,执行以下操作:

if (called from kernel module 1):
 i2s_rxctrl the device id=0
elif (called from kernel module 2):
 i2s_rxctrl the device id=1

内核模块与设备 ID 存在一对一的映射关系。

所以基本上我要问的是如何使导出的符号Object oriented style对于每个实例都将执行特定于设备的代码。我想给内核模块一个句柄, *pdev但这似乎是一种违规。

4

2 回答 2

0

您可以创建包含所有必要信息的自定义结构,以在不同模块中唯一标识您的实例(为什么不,还有 *pdev)。然后,您将此结构传递给您的库。由于您的自定义结构,该库可以执行正确的操作。

于 2013-05-03T09:24:57.243 回答
0

我认为您始终可以将参数和值传递给内核模块并在驱动程序代码中检查它。

于 2013-05-02T04:53:22.933 回答