错误提示:
from /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.13.c:35:
include/linux/utsname.h: In function 'utsname':
include/linux/utsname.h:77:17: error: dereferencing pointer to incomplete type
return ¤t->nsproxy->uts_ns->name;
^
此提示显示错在 current 没有定义,这个current在哪里定义,怎么查找不到。
在GCONF.C 中有:
static struct menu *current;
LEMON.C 中有:
static struct config *current = 0;
要如何解决问题?
#ifndef _LINUX_UTSNAME_H
#define _LINUX_UTSNAME_H
#include <linux/sched.h>
#include <linux/kref.h>
#include <linux/nsproxy.h>
#include <linux/err.h>
#include <uapi/linux/utsname.h>
//#include "expr.h"
//extern struct menu *current;
enum uts_proc {
UTS_PROC_OSTYPE,
UTS_PROC_OSRELEASE,
UTS_PROC_VERSION,
UTS_PROC_HOSTNAME,
UTS_PROC_DOMAINNAME,
};
struct user_namespace;
extern struct user_namespace init_user_ns;
struct uts_namespace {
struct kref kref;
struct new_utsname name;
struct user_namespace *user_ns;
unsigned int proc_inum;
};
extern struct uts_namespace init_uts_ns;
#ifdef CONFIG_UTS_NS
static inline void get_uts_ns(struct uts_namespace *ns)
{
kref_get(&ns->kref);
}
extern struct uts_namespace *copy_utsname(unsigned long flags,
struct user_namespace *user_ns, struct uts_namespace *old_ns);
extern void free_uts_ns(struct kref *kref);
static inline void put_uts_ns(struct uts_namespace *ns)
{
kref_put(&ns->kref, free_uts_ns);
}
#else
static inline void get_uts_ns(struct uts_namespace *ns)
{
}
static inline void put_uts_ns(struct uts_namespace *ns)
{
}
static inline struct uts_namespace *copy_utsname(unsigned long flags,
struct user_namespace *user_ns, struct uts_namespace *old_ns)
{
if (flags & CLONE_NEWUTS)
return ERR_PTR(-EINVAL);
return old_ns;
}
#endif
#ifdef CONFIG_PROC_SYSCTL
extern void uts_proc_notify(enum uts_proc proc);
#else
static inline void uts_proc_notify(enum uts_proc proc)
{
}
#endif
static inline struct new_utsname *utsname(void)
{
return ¤t->nsproxy->uts_ns->name;
}
static inline struct new_utsname *init_utsname(void)
{
return &init_uts_ns.name;
}
extern struct rw_semaphore uts_sem;
#endif /* _LINUX_UTSNAME_H */
代码如上:
测试过在backport-3.13.c 中增加 struct menu *current; 定义是没有效果的。
Building backport-include/backport/autoconf.h ... done.
CC [M] /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.13.o
In file included from /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/backport-include/linux/cred.h:8:0,
from include/linux/sched.h:51,
from include/linux/nsproxy.h:5,
from include/net/scm.h:8,
from include/linux/netlink.h:8,
from /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/backport-include/linux/netlink.h:3,
from include/uapi/linux/genetlink.h:5,
from include/linux/genetlink.h:4,
from /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/backport-include/linux/genetlink.h:3,
from include/net/genetlink.h:4,
from /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/backport-include/net/genetlink.h:3,
from /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.13.c:35:
include/linux/utsname.h: In function 'utsname':
include/linux/utsname.h:77:17: error: dereferencing pointer to incomplete type
return ¤t->nsproxy->uts_ns->name;
^
scripts/Makefile.build:308: recipe for target '/home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.13.o' failed
make[9]: *** [/home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.13.o] Error 1
scripts/Makefile.build:455: recipe for target '/home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat' failed
make[8]: *** [/home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat] Error 2
去掉 在cred.h 中增加的
#include <linux/nsproxy.h>
#include <linux/utsname.h>
直接在backport-3.13 中增加这2个包含文件 编译通过、如下
uilding backport-include/backport/autoconf.h ... done.
CC [M] /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.13.o
CC [M] /home/lzx/work/test/mtk-openwrt-cc-v3.6/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/compat-wireless-2016-01-10/compat/backport-3.15.o
编译问题还是有点玄啊。