今天拿到TI的ICS源码,发现在system/core/adb目录下使用mm出错:
make: Entering directory `/home/weike/TI/TI_ICS_CUR'
make: *** No rule to make target `out/target/product/generic/obj/lib/crtbegin_dynamic.o',
needed by `out/target/product/generic/obj/EXECUTABLES/adb_intermediates/LINKED/adb'. Stop.
make: Leaving directory `/home/weike/TI/TI_ICS_CUR
分析得知,我使用的处理器为AM335X,上述配置使用了默认的generic配置,
但是我这里的ICS代码在lunch以后没有看到任何有关AM335X的信息,只有以下信息:
You're building on Linux
Lunch menu... pick a combo:
1. full-eng
2. full_x86-eng
3. vbox_x86-eng
Which would you like? [full-eng]
所以需要给TI的这个ICS添加lunch选项,以下是具体步骤:
1.查看device/ti/下有哪些目录,正好找到我需要的目录:device/ti/am335xevm;
2.查看device/ti/am335xevm是否具有自己的AndroidProducts.mk文件,我这里,TI已经有了AndroidProducts.mk文件;
3.查看device/ti/am335xevm是否具有vendorsetup.mk文件,这里没有这个文件,也是lunch看不到am335x信息的原因
4.在 device/ti/am335xevm目录下创建一个vendorsetup.sh文件,写入以下内容:
add_lunch_combo am335xevm-eng
5.之后使用. build/envsetup.sh时,就可以看到以下输出:
including device/ti/am335xevm/vendorsetup.sh
具体原理:
envsetup.sh调用product_config.mk完成产品型号的匹配,product_config.mk根据vendorsetup.sh中添加的型号,收集所有AndroidProducts.mk文件,在每个AndroidProducts.mk中找到与型号名称匹配的xxx.mk文件,例如在device/ti/am335xevm/AndroidProduct.mk文件中内容是:
PRODUCT_MAKEFILES := $(LOCAL_DIR)/am335xevm.mk
那么,为了在寻找是能够匹配成功,在device/ti/am335xevm/vendorsetup.sh中就要写成:
add_lunch_combo am335xevm-eng
其中am335xevm一定要和am335xevm.mk名称一致,至于后面的“-eng”名称,也是在"-eng","userdebug"中选取
通过以上配置,然后重新运行envsetup和lunch以后,出现am335xevm-eng选项,选择后,进入adb目录,使用mm编译成功。