android arm64 的内核编译错误 (msm8996)

android kernel compiling error for arm64 (msm8996)

我正在尝试为具有 msm8996 SOC 的 arm64 android 设备编译我的自定义内核。我在 GitHub 上克隆了我的内核,只是为了确保我有一个完全干净的代码。然后我导出了这些:

export PATH=/home/nico/Downloads/kernel/aarch64-linux-android-4.9/bin:$PATH
export CROSS_COMPILE=aarch64-linux-android-
export ARCH=arm64
export SUBARCH=arm64

请记住,msm8996 有两个双核集群,它们都是 arm64。我尝试使用 Cyanogenmod 源代码附带的 gcc 4.9 工具链进行编译,然后我尝试使用两个 UberTC 4.9 工具链进行编译,这些工具链可以在这里找到:https://bitbucket.org/UBERTC/ aarch64-linux-android-4.9-kernel 和 aarch64-linux-android-4.9(我不知道这两者之间到底有什么区别)。 每次我重新构建我的内核时,我都会执行

make mrproper

并且还删除了 ccache 文件夹。然后我执行了一个

make cm_pme_defconfig

最后一个

make -j2

我也用

尝试了同样的程序
make -j1

我找不到其他人遇到同样的错误,所以我决定 post 在这里。 这是我终端中的错误消息:

In file included from drivers/net/ethernet/msm/rndis_ipa_trace.h:81:0,
                 from drivers/net/ethernet/msm/rndis_ipa.c:32:
include/trace/define_trace.h:83:43: fatal error: ./rndis_ipa_trace.h:
No such file or directory
#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
                                           ^
compilation terminated.

此外,这是我 GitHub https://github.com/nico151999/android_kernel_htc_msm8996

上的内核

虽然问题的解决方案可能很明显,但我真的需要你的帮助。提前致谢 ;)

我遇到了与高通内核完全相同的问题。一般来说,添加 CFLAGS_trace.o := -I$(源) 更正 Makefile 可以解决此构建问题。但这对我不起作用。所以我用了一个很大胆的方法。补丁如下:

diff --git a/drivers/net/ethernet/msm/rndis_ipa_trace.h b/drivers/net/ethernet/msm/rndis_ipa_trace.h
index c0fc573..c18046b 100644
--- a/drivers/net/ethernet/msm/rndis_ipa_trace.h
+++ b/drivers/net/ethernet/msm/rndis_ipa_trace.h
@@ -77,5 +77,5 @@ TRACE_EVENT(

 /* This part must be outside protection */
 #undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_PATH /opt/work/qcom/kernel/drivers/net/ethernet/msm/
 #include <trace/define_trace.h>
diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h b/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h
index d70abdf..7f7e452 100644
--- a/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h
+++ b/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h
@@ -131,5 +131,5 @@ TRACE_EVENT(

 /* This part must be outside protection */
 #undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_PATH /opt/work/qcom/kernel/drivers/platform/msm/ipa/ipa_v2/
 #include <trace/define_trace.h>

实际上基于这个 commit 我找到了全局答案 看看 :

diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h b/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h
index d70abdf..7f7e452 100644
--- a/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h
+++ b/drivers/platform/msm/ipa/ipa_v2/ipa_trace.h
@@ -131,5 +131,5 @@ TRACE_EVENT(

 /* This part must be outside protection */
 #undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_PATH ../../drivers/platform/msm/ipa/ipa_v2
 #include <trace/define_trace.h>

对其他人执行此操作 ("../../") TRACE_INCLUDE_PATH

我遇到了同样的问题。

好像可以修改每个目录下的文件"rndis_ipa_trace.h"中的"TRACE_INCLUDE_PATH"。并且,要修改的目录包含在构建错误消息中。

我在进行构建的过程中,发现了以下路径的问题,参考了上面其他人的解决方案进行了构建。

drivers/clk/qcom/mdss/rndis_ipa_trace.h & drivers/platform/msm/ipa/ipa_v2/rndis_ipa_trace.h

感谢您的指导=)

我一开始使用 Linux Kernel v3.18 - Moto G5 (Qualcomm SD 430) 的 LineageOS 源代码就在几个地方遇到了同样的问题。

修补文件“drivers/net/ethernet/msm/rndis_ipa_trace.h”@第 15 行

- #define TRACE_INCLUDE_FILE rndis_ipa_trace
+ #define TRACE_INCLUDE_FILE ../drivers/net/ethernet/msm/rndis_ipa_trace

和文件“drivers/platform/msm/ipa/ipa_v2/ipa_trace.h”@第 15 行

- #define TRACE_INCLUDE_FILE ipa_trace
+ #define TRACE_INCLUDE_FILE ../drivers/platform/msm/ipa/ipa_v2/ipa_trace

这两项更改都是为了减少侵入性,并避免修改“include/traces”处的文件,其他 C 文件可能会使用该文件。这是比一般更改更局部的解决方案。而且,不需要担心文件的绝对路径,“#include”调用的根位于“/path/to/source/linux/.”,所以如果你使用相对路径,知道它将从那里开始,更改可能有效。