2014-06-28 71 views
2

我正在使用AOSP叉子划艇开发系统。它一直工作到今天,现在我明白了这一点:AOSP构建在构建开始时挂起

$ time make -j8 TARGET_PRODUCT=beagleboneblack OMAPES=4.x droid showcommands 
============================================ 
PLATFORM_VERSION_CODENAME=REL 
PLATFORM_VERSION=4.2.2 
TARGET_PRODUCT=beagleboneblack 
TARGET_BUILD_VARIANT=eng 
TARGET_BUILD_TYPE=release 
TARGET_BUILD_APPS= 
TARGET_ARCH=arm 
TARGET_ARCH_VARIANT=armv7-a-neon 
HOST_ARCH=x86 
HOST_OS=linux 
HOST_OS_EXTRA=Linux-3.13.0-29-generic-x86_64-with-LinuxMint-17-qiana 
HOST_BUILD_TYPE=release 
BUILD_ID=JDQ39 
OUT_DIR=out 
============================================ 
^CTraceback (most recent call last): 
    File "build/tools/findleaves.py", line 98, in <module> 
    main(sys.argv) 
    File "build/tools/findleaves.py", line 92, in main 
    results = list(set(perform_find(mindepth, prune, dirlist, filename))) 
    File "build/tools/findleaves.py", line 31, in perform_find 

real 7m19.311s 
user 0m0.236s 
for root, dirs, files in os.walk(rootdir, followlinks=True): 
sys 0m0.104s 
    File "/usr/lib/python2.7/os.py", line 294, in walk 

[email protected]$  for x in walk(new_path, topdown, onerror, followlinks): 
    File "/usr/lib/python2.7/os.py", line 294, in walk 
    for x in walk(new_path, topdown, onerror, followlinks): 
    File "/usr/lib/python2.7/os.py", line 294, in walk 
    for x in walk(new_path, topdown, onerror, followlinks): 

snip(这种情况持续很多)。

File "/usr/lib/python2.7/os.py", line 294, in walk 
    for x in walk(new_path, topdown, onerror, followlinks): 
    File "/usr/lib/python2.7/os.py", line 284, in walk 
    if isdir(join(top, name)): 
    File "/usr/lib/python2.7/genericpath.py", line 41, in isdir 
    st = os.stat(s) 
KeyboardInterrupt 
^C 
+0

我添加了一些打印语句来构建/ tools/findleaves.py,没有得到任何输出。但是,如果我让它运行半小时,它最终会以段错误结束。我怀疑它陷入了递归循环。 –

回答

4

我发现了这个问题。出于某种原因,当从makefile调用脚本时,输出被抑制。我手动运行脚本,发现了一些递归符号链接。删除它们,它再次工作。

编辑:这是我如何诊断问题。

构建从build/core/main.mk开始,它调用build/tools/findleaves.py。该脚本在整个源代码树中搜索名为Android.mk的文件,并将它们拼接在一起以创建临时的庞大makefile。

如果您在开始的几秒内按下Ctrl-C来开始构建并取消它,您将看到来自Python的熟悉的键盘中断消息。当我做到这一点时,Python堆栈转储为几页高度,因为脚本递归搜索目录树。

我所做的是:

  1. 我添加了一个简单的print语句到脚本,看看它会扫描哪个目录。
  2. 这很重要:我直接调用脚本,而不是通过makefile。这样,我可以看到它的输出,否则它将被makefile占用。将曲线打印到stderr而不是stdout可能也会起作用。

问题是,我在内核目录中创建了一些额外的子目录来“安装”模块和固件,以便我稍后复制。 make modules-install命令将一个符号链接安装回内核源代码树,指向模块的来源。所以有一个文件kernel/deploy/lib/modules/3.8.13/source这是一个符号链接回到kernel/目录。

Python脚本遵循符号链接并尝试扫描具有无限深度的树。

+0

您能否提供更多关于如何找到递归循环以及递归符号链接位置的信息? – sonntam

+1

@Marcus我根据你的要求编辑。 –