作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个内核可以很好地使用 ARM GCC 工具链构建。由于某种原因,aarch64 工具链会抛出此错误。
kernel/sched/core_ctl.c: In function 'cpufreq_gov_cb':
kernel/sched/core_ctl.c:1086:25: error: dereferencing pointer to incomplete type
core_ctl_set_busy(info->cpu, info->load);
^
kernel/sched/core_ctl.c:1086:36: error: dereferencing pointer to incomplete type
core_ctl_set_busy(info->cpu, info->load);
^
scripts/Makefile.build:257: recipe for target 'kernel/sched/core_ctl.o' failed
这是文件开头的结构体,其中定义了“cpu”(在 c 文件中找不到 load):
#include <linux/init.h>
#include <linux/notifier.h>
#include <linux/cpu.h>
#include <linux/cpumask.h>
#include <linux/cpufreq.h>
#include <linux/timer.h>
#include <linux/kthread.h>
#include <linux/sched.h>
#include <linux/sched/rt.h>
#include <linux/mutex.h>
#include <trace/events/sched.h>
#define MAX_CPUS_PER_GROUP 4
struct cpu_data {
/* Per CPU data. */
bool inited;
bool online;
bool rejected;
bool is_busy;
bool not_preferred;
unsigned int busy;
unsigned int cpu;
struct list_head sib;
unsigned int first_cpu;
struct list_head pending_sib;
/* Per cluster data set only on first CPU */
unsigned int min_cpus;
unsigned int max_cpus;
unsigned int offline_delay_ms;
unsigned int busy_up_thres[MAX_CPUS_PER_GROUP];
unsigned int busy_down_thres[MAX_CPUS_PER_GROUP];
unsigned int online_cpus;
unsigned int avail_cpus;
unsigned int num_cpus;
unsigned int need_cpus;
unsigned int task_thres;
s64 need_ts;
struct list_head lru;
bool pending;
spinlock_t pending_lock;
bool is_big_cluster;
int nrrun;
bool nrrun_changed;
struct timer_list timer;
struct task_struct *hotplug_thread;
struct kobject kobj;
struct list_head pending_lru;
bool disabled;
};
什么会使编译器报告不完整的类型?我对 C 中的指针和结构还不太熟悉..无法弄清楚。
最佳答案
在您的机器上编译 kernel/sched/core_ctl.c 时,似乎缺少 struct cpufreq_govinfo 的头文件。
struct cpufreq_govinfo {
unsigned int cpu;
unsigned int load;
unsigned int sampling_rate_us;
};
在我的机器(ARM:CortexA7)上,GCC编译器不会抛出编译错误,因为正确包含了以下头文件。
kernel/include/linux/cpufreq.h
此外,以下补丁将使您能够在构建 Linux 内核后拥有预处理文件。
diff --git a/Makefile b/Makefile
index b03ca98..f52240c 100644
--- a/Makefile
+++ b/Makefile
@@ -406,6 +406,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common \
-Werror-implicit-function-declaration \
-Wno-format-security \
+ -save-temps=obj \
-std=gnu89
如果你看一下预处理文件.tmp_core_ctl.i,你将能够看到用于编译core_ctl.c的所有头文件
关于Android 内核构建错误 : core_ctl. c - 取消引用指向不完整类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45541063/
这个内核可以很好地使用 ARM GCC 工具链构建。由于某种原因,aarch64 工具链会抛出此错误。 kernel/sched/core_ctl.c: In function 'cpufreq_go
我是一名优秀的程序员,十分优秀!