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 driver的两个实例。
假设我在i2s driver中添加了一个函数EXPORT_SYMBOL
,它将被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
,但这似乎是违规行为。
答案 0 :(得分:0)
我认为您始终可以将参数和值传递给内核模块,并在驱动程序代码中进行检查。
答案 1 :(得分:0)
您可以创建自定义结构,其中包含所有必要信息,以便跨不同模块唯一标识您的实例(为什么不,也请* pdev)。然后,将此结构传递给您的库。由于您的自定义结构,库可以正确操作。