【问题标题】:android kernel compiling error for arm64 (msm8996)arm64的android内核编译错误(msm8996)
【发布时间】:2017-01-05 19:37:47
【问题描述】:

我正在尝试为具有 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

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

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

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

【问题讨论】:

    标签: android arm64


    【解决方案1】:

    我在 Qualcomm 内核上遇到了完全相同的问题。一般来说,加 CFLAGS_trace.o := -I$(src) 更正 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>
    

    【讨论】:

    • 非常感谢。我尝试执行 Cyanogenmod 构建,结果是成功构建的内核。但是,仅构建内核会导致我发布的错误。由于它与 Cyanogenmod ROM 版本一起工作,我目前不想应用此补丁。无论如何,当我想再次构建内核时,我会尝试它。再次非常感谢;)
    【解决方案2】:

    实际上基于这个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 执行此操作 ("../../")

    【讨论】:

    • 这是真的,帮助我解决了这个问题。默认的 TRACE_INCLUDE_PATH 与 的路径相同,通常是 kernel_root_dir/include/trace。通过向上两个目录 (../../) 并包括引用 的 c 文件的路径,您可以修复任何此类编译错误,而无需对构建路径进行硬编码。就我而言,我将define #define TRACE_INCLUDE_PATH .更改为#define TRACE_INCLUDE_PATH ../../drivers/net/ethernet/msm/,这是rndis_ipa_trace.h的路径,从而解决了OP的问题,这是相等的。
    【解决方案3】:

    我也遇到了同样的问题。

    看来你可以为每个目录修改"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

    感谢您的指导 =)

    【讨论】:

      【解决方案4】:

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

      修补文件“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/.”,因此如果您使用相对路径,则知道它将从在那里,更改可能会起作用。

      【讨论】:

        猜你喜欢
        • 2018-02-01
        • 2015-10-14
        • 1970-01-01
        • 2017-05-22
        • 2013-06-03
        • 2017-07-30
        • 2010-12-06
        • 1970-01-01
        • 2018-04-19
        相关资源
        最近更新 更多