我知道container_of()
的作用,但我想在某个结构体中获得一个指针字段,如下所示:
struct A {
int *ptr;
};
void some_func(int *ptr) {
struct A *a = container_of(&ptr, struct A, ptr);
}
但它似乎不工作。这是编译成功,但看起来像它产生错误的指针:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
struct A {
int *ptr;
};
void some_func(int *ptr)
{
struct A *a = container_of(&ptr, struct A, ptr);
if (a)
pr_info("%d", *a->ptr);
else
pr_info("Ooops");
}
int __init m_init(void)
{
int ptr = 10;
struct A a = {.ptr = &ptr};
some_func(&ptr);
return 0;
}
void __exit m_exit(void)
{
}
module_init(m_init);
module_exit(m_exit);
MODULE_LICENSE("GPL");
如果我执行container_of(ptr, struct A, ptr);
,则不会编译:
error: static assertion failed: "pointer type mismatch in container_of()"
我猜这是因为ptr
是一个指针,而不是一个普通的int
,所以__same_type
将返回false,所以使它成为一个指针。
谁能帮我修修这个?
1条答案
按热度按时间omhiaaxx1#
我不会工作,原因是
m_init
中的ptr
是局部变量,所以它的地址&ptr
对于重构另一个局部变量a
的地址没有意义。但是,您可以替换:
与
但是需要将
some_fun
改为struct A
的指针成员int*
,所以参数类型必须是int**
。