【发布时间】:2014-10-13 10:27:08
【问题描述】:
我在 .h 文件中定义了以下全局结构:
file1.h
struct kobject_saved {
struct kobject* kobject;
}
extern struct kobject_saved *ksaved;
file1.c
#include <file1.h>
struct kobject_saved *ksaved = kmalloc(sizeof(struct kobject_saved), GFP_KERNEL);
ksaved->kobject = some_kobject; // some_kobject is a initialized pointer to kobj
file2.c
#include <file1.h>
struct kobject *ko = ksaved->kobject;
在这里,我将 kobject 的值设为空。即使对 file2.c 的调用是在 file1.c 初始化之后进行的
你能帮我在不丢失数据的情况下访问 kobject 吗?可能指出我哪里出错了?
非常感谢,
更新:这是我对 some_object 的确切代码。我得到了正确的“ko”地址..
void save_my_kobject(struct kobject *ko)
{
ko_saved = kmalloc(sizeof(struct kobject_saved), GFP_KERNEL);
*ko_saved = (struct kobject_saved) {
.kobj = ko
};
}
【问题讨论】:
-
取出文件1.h中的extern,在文件2.h中声明extern struct *ksaved。 extern 是为了让编译器知道,即使一个变量可能没有在那个文件中声明,它在另一个文件的某个地方,所以它可以被访问。
标签: c linux-kernel