ptp clock 模块中owner的设定问题
本文是原「蜗窝讨论区」的历史存档(2016-10-08),来自版块「Linux kernel技术问答」,共 2 帖。讨论区已停止服务,此处仅供查阅。
您好 linuxer,请教一个问题:
我在读 linux-3.19.y 版本的 driver/ptp/ptp_clock.c 时看到使用 ptp clock 模块使用 posix_clock_register 注册 posix clock 时 posix_clock_operations 结构体 ptp_clock_ops 的 owner 设置为 THIS_MODULE(我理解这个 THIS_MODULE 为 ptp clock 模块)
static struct posix_clock_operations ptp_clock_ops = { .owner = THIS_MODULE, ... ... };
进入 posix_clock_register 函数时将 posix_clock -> cdev.owner 也设置为 ptp_clock_ops.owner
int posix_clock_register(struct posix_clock *clk, dev_t devid) { ... ...
cdev_init(&clk->cdev, &posix_clock_file_operations);
clk->cdev.owner = clk->ops.owner;
... ...
}
可是在 posix-clock.c 中 file_operations 结构体 posix_clock_file_operations(也就是上面 cdev_init 函数中传入的 file_operations 结构体)的 owner 被设置为 THIS_MODULE,这个 THIS_MODULE 指的是什么?如果指的是 posix-clock 的话,会不会又矛盾?
请教一下 linuxer 对于这样的设计,您是怎么看?
相关的软件结构图如下:

我是这么看的:一个数据结构的实例必须跟随驱动模块。例如说:posix_clock_file_operations这个数据归属于dynamic posix clock driver模块,因此其owner要指向dynamic posix clock driver模块。而ptp_clock(内嵌了posix_clock(内嵌了cdev))这个数据对象归属于ptp posix clock driver模块,因此其owner要指向ptp posix clock driver模块,同样的,ptp_clock_ops数据对象定义在ptp posix clock driver模块,因此其owner要指向ptp posix clock driver模块。
