【发布时间】:2013-04-26 02:53:52
【问题描述】:
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,它将被两个不同的内核模块使用。
我如何声明和使用这样一个导出的函数来执行以下操作:
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的句柄,但这似乎是一种违规。
【问题讨论】:
-
我不明白。为什么要在两个不同的模块(两个不同的驱动程序)中使用一个函数?或者您的意思是两个不同的实例使用相同的驱动程序?
-
我希望每个内核模块都与不同的实例进行交互。
标签: c linux-kernel linux-device-driver kernel-module kernel