繁体   English   中英

Android 7.1.1内核编译错误(工具链)

[英]Android 7.1.1 kernel compile errors (tool chain)

构建环境是ubuntu 16.04,带有最新的gcc 5.4.0和GNU Make 3.82。 我的目标是可以运行android 4.4的am335x自定义板。 我将为Android 7.1.1支持它。

该项目是从Google android清单清单android-7.1.1_r46 ,内核是从msm标签android-7.1.1_r0.63 我正在使用的交叉编译器来自prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin

那就是环境信息。 我尚未安装NDK或SDK,因为我看到android 7.1.1的api级别是25,而最新的NDK仅支持多达24,所以我有点困惑。

如果我运行命令: m -j8 uboot linux uboot可以很好地编译,但是在编译linux内核时会出现很多错误。

/media/yangjiel/disk2/android/kernel/arch/arm/mach-omap2/prm_common.c: In function 'omap_prcm_register_chain_handler':
/media/yangjiel/disk2/android/kernel/arch/arm/mach-omap2/prm_common.c:293:2: warning: passing argument 2 of 'irq_set_chained_handler' from incompatible pointer type [enabled by default]
error, forbidden warning: prm_common.c:293
make[2]: *** [arch/arm/mach-omap2/prm_common.o] Error 1
make[1]: *** [arch/arm/mach-omap2] Error 2
make[1]: *** Waiting for unfinished jobs....
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:141:13: error: 'KERN_BOOT_REASON' undeclared here (not in a function)
  { CTL_INT, KERN_BOOT_REASON,  "boot_reason" },
             ^
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:528:13: error: 'NET_IPV6_ACCEPT_RA_PREFIX_ROUTE' undeclared here (not in a function)
  { CTL_INT, NET_IPV6_ACCEPT_RA_PREFIX_ROUTE, "accept_ra_prefix_route" },
             ^
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:528:2: error: initializer element is not constant
  { CTL_INT, NET_IPV6_ACCEPT_RA_PREFIX_ROUTE, "accept_ra_prefix_route" },
  ^
/media/yangjiel/disk2/android/kernel/kernel/sysctl_binary.c:528:2: error: (near initialization for 'bin_net_ipv6_conf_var_table[24].ctl_name')
make[2]: *** [kernel/sysctl_binary.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [kernel] Error 2
make: *** [sub-make] Error 2
make: Leaving directory `/media/yangjiel/disk2/android/kernel'
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1
make: Leaving directory `/media/yangjiel/disk2/android'

如果我将导致该错误的文件中的行删除,上述错误已解决,但我会得到另一个错误

/media/yangjiel/disk2/android/kernel/kernel/cgroup.c: In function 'subsys_cgroup_allow_attach':
/media/yangjiel/disk2/android/kernel/kernel/cgroup.c:2138:37: error: invalid operands to binary != (have 'kuid_t' and 'kuid_t')
   if (current != task && cred->euid != tcred->uid &&
                                     ^
/media/yangjiel/disk2/android/kernel/kernel/cgroup.c:2139:18: error: invalid operands to binary != (have 'kuid_t' and 'kuid_t')
       cred->euid != tcred->suid)
                  ^
make[2]: *** [kernel/cgroup.o] Error 1
make[2]: *** Waiting for unfinished jobs....
  CC      kernel/trace/power-traces.o
  CC      kernel/trace/rpm-traces.o
  CC      kernel/trace/trace_probe.o
  LD      kernel/trace/libftrace.o
  LD      kernel/trace/built-in.o
make[1]: *** [kernel] Error 2
make: *** [sub-make] Error 2
make: Leaving directory `/media/yangjiel/disk2/android/kernel'
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1
make: Leaving directory `/media/yangjiel/disk2/android'

后面还有更多错误。

我到处搜索,大多数人说这是一个工具链问题。 但是我找不到很多有关如何正确安装工具链的说明,尤其是对于7.1.1。 android 4.4内核似乎不需要任何工具链。 我获取自定义的android 4.4内核,并且编译良好。

上面的问题是因为我下载了错误版本的Android内核。 我下载的是https://android.googlesource.com/kernel/msm/+/android-7.1.1_r0.63 ,这是内核v3.10。

显然,这不适用于Android 7.1.1(应使用内核v4.4)。 因此,当我尝试使用预构建的“新”交叉编译器编译“旧”内核时,它会产生“旧”编译器不会产生的整体错误。 我最终使用从内核https://android.googlesource.com/kernel/common/+/upstream-linux-4.4.y upstream-linux-4.4.y分支,它是与Android 7.0到7.1.2兼容。

我不知道为什么Google将其命名为android-7.1.1_r0.63 ,但是绝对不能供Android 7.1.1使用。 希望没有人像我一样遇到同样的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM