static struct xxx_device_data xxx_dev_data = {
.m = {
.x = 17,
},
};
static struct platform_device xxx_dev = {
.name = "xxx-dev-name",
.id = -1,
.dev = {
.platform_data = &xxx_dev_data,
},
};
void board_xxx_init(void)
{
struct xxx_device_data *pdata;
...
pdata = &xxx_dev.dev.platform_data;
pr_info("%s(before): @%p, x = %d\n", __func__, pdata, pdata->x); // 输出正常,x为17
platform_register_device(&xxx_dev.dev.platform_data);
pr_info("%s(after): x = %d\n", __func__, pdata->x); // 输出正常,x为17
...
}
drivers/base/platform.c
int platform_device_register(struct platform_device *pdev)
{
if (!strcmp(pdev->name, "xxx-dev-name")) {
struct xxx_device_data *pdata = pdev->dev.platform_data;
pr_info("%s: %s, @%p, x = %d\n", __func__, pdev->name, pdata, pdata->x); // 输出除x为0外,其他正常
}
...
}
board_xxx_init()函数中输出结果:
board_xxx_init(before): @c0bf6188, x = 17
board_xxx_init(after): x = 17
platform_device_register()函数中输出结果:
platform_device_register: xxx-dev-name, @c0bf6188, x = 0
为什么platform_device_register()函数输出结果中输出结果中的x为0?
在调用platform_device_register()函数前后的输出证明x的值没有被改变,所有的输出也证明platform_data指向的地址
也没有被修改,都是c0bf6188
那有什么可能造成了这个问题呢?请各位支招.