驱动变量异常2

JiMoKuangXiangQu JiMoKuangXiangQu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
arch/arm/mach-xxx/board-xxx.c
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
那有什么可能造成了这个问题呢?请各位支招.
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部