【发布时间】:2013-06-03 01:11:59
【问题描述】:
我需要自定义 android 的内核才能在我的 Nexus S 上运行。
所以我下载了分支名称为“remotes/origin/android-samsung-2.6.35-gingerbread”的内核
我尝试按照http://source.android.com/source/building-kernels.html 此处的说明构建内核。为此,我需要交叉编译工具。在我的目标 android 源代码版本 android-2.3.5_r1 中,没有这样的工具(没有 prebuilts/ 文件夹)。所以我下载了 4.1.2 版本并将工具设置为路径 prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin 。 然后我尝试构建我的内核,但出现以下错误:
[root@localhost samsung]# make
scripts/kconfig/conf -s arch/arm/Kconfig
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC drivers/gpu/pvr/osfunc.o
In file included from drivers/gpu/pvr/osfunc.c:39:0:
include/linux/pagemap.h: In function 'fault_in_pages_readable':
include/linux/pagemap.h:415:16: error: variable 'c' set but not used [-Werror=unused-but-set-variable]
drivers/gpu/pvr/osfunc.c: In function 'OSAccessOK':
drivers/gpu/pvr/osfunc.c:2144:13: error: variable 'linuxType' set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors
make[3]: *** [drivers/gpu/pvr/osfunc.o] Error 1
make[2]: *** [drivers/gpu/pvr] Error 2
make[1]: *** [drivers/gpu] Error 2
make: *** [drivers] Error 2
我应该禁用“所有警告都被视为错误”来解决它吗?或者也许我需要一个更好的工具链?
PS:master分支和4.2分支的工具链我用不了。因为看起来它们是为 64 位操作系统而设计的,而我的 linux 是 32 位的
【问题讨论】:
-
在发出 'make' 之前您是否执行了其他步骤?
-
@PeterL。当然。从更改 ARCH 到 make herring_defconfig
-
我构建Android树已经一年多了,但似乎记得还有更多步骤。请参阅显示“初始化构建环境”的链接(从您在帖子中指向的位置)。第一次构建需要几个小时。最好(这就是我发现它的方式)一次构建所有内容,然后在需要时进入并重新构建内核。此外,您应该从 Android 树的顶部进行初始构建。
-
@PeterL。太好了。它有效。构建 AOSP 后,一些工具链将自动添加到 PATH。我想首先构建内核的原因是我想将构建的内核二进制文件添加到 AOSP 中,然后再进行 AOSP 构建。所以我认为我应该先构建AOSP,然后构建内核,最后用新构建的内核再次构建AOSP。
-
这就是我们过去经常要做的事情。首先构建所有内容不变,然后修改内核中需要更改的内容并重新构建它。仅更改代码的第二次构建会更快。
标签: android compilation kernel