编译前的选项配置:
(1)source build/envseutp.sh
(2)choosecomb
1.source build/envsetup.sh
source 是用来运行 shell 脚本的命令 功能和 "." 和相同,因此 也可以写作: . build/envsetup.sh
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
2.choosecombo
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
上面内容对应envseup.sh的choosecombo函数,主要调用choosetype,chooseproduct,choosevariant等函数,确定TARGET_PRODUCT,TARGET_BUILD_TYPE,TARGET_BUILD_VARIANT。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
下面我们具体来看每个选项的内容
2.1 project choices(项目选择)
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
这里导出了SIMCOM_PROJECT变量的值,比如C6000
加入我们要增加另个工程,比如C6000,要修改PROJECT_CHOICES的值,
修改前:
PROJECT_CHOICES=(CB03)
修改后:
PROJECT_CHOICES=(CB03 C6000)
中间不能用逗号。
基于上面的修改,所有项选择之后输出
read(): can't openbuild/buildplus/namespace/names.ini for read: 没有那个文件或目录 atbuild/buildplus/tool/qrdplus_target_gen.pl line 98.
target build Env generate failed, yourshould abort continuous make procedure!
此错误信息是initbuildspec()输出的
?
1 2 3 4 5 6 7 8 9 10 | |
这里会找build\buildplus\namespace\目录下是否有names_ $(SIMCOM_PROJECT).ini的文件。所以需要在此目录下增加names_C6000.ini文件才可以编译通过。
2.2 build type选择
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
这里导出环境变量TARGET_BUILD_TYPE,其值为release或是debug,调用set_stuff_for_environment()来设置环境变量,如下:
?
1 2 3 4 5 6 7 8 9 10 11 | |
2.3 product choices(产品选择)
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | |
这里有几个重要的信息:
(1)通过查找device、vendor和build/target/product/下AndroidProducts.mk文件来寻找所有的产品,寻找此目录下LOCAL_DIR/文件和提取名为ProductSpecificFile的文件
比如\device\qcom\msm8909\ AndroidProducts.mk,此文件内容如下:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/msm8909.mk
提取msm8909.mk文件,msm8909就是一个产品。
我们如果要增加一个C6000的产品,需要做下面的处理:
(1)\device\qcom
基于此目录的msm8909产品,增加C6000产品的目录,然后修改AndroidProducts.mk文件内容如下:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/C6000.mk
所以还需要基于msm8909.mk改为C6000.mk,然后把C6000.mk中关于msm8909产品和项目名称为CB03的地方统一修改为C6000,但其中引用到的mixer_paths_msm8909_pm8916.xml文件这里的msm8909不需要改为C6000,因为共用msm8909处理器,也需要把device\qcom\C6000\overlay\CB03改为C6000
(2)\vendor\qcom
没有修改
(3)build/target/product/
没有修改
(4)envsetup.sh从device/qcom枚举所有的产品名
prodlist=(`/usr/bin/finddevice/qcom/msm8909 -name AndroidProducts.mk 2>/dev/null|
这是自带的,如果枚举所有的,可改为device/qcom,如果只想枚举指定的,比如msm8909和C6000,可改为
prodlist=(`/usr/bin/finddevice/qcom/msm8909 device/qcom/C6000 -name AndroidProducts.mk 2>/dev/null|
(5)导出TARGET_PRODUCT,其值为msm8909或是C6000
(6)设置产品名称的显示顺序
?
1 2 3 4 5 6 7 8 9 | |
这种方式会根据字母顺序来显示,如果想按照自己制定的顺序来显示,如下:
?
1 2 3 4 5 6 7 8 9 | |
2.4 variant choices不同的选择
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
导出环境变量TARGET_BUILD_VARIANT,其值为(user userdebug eng)三选一。
2.5 chipset
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
导出环境变量TARGET_CHIPSET,其值为8909或是8209。
2.6 multisim choices
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | |
导出环境变量SIMCOM_MULTISIM,其值为ssss或是dsds
基于上面的修改后,然后编译C6000,make –j4,遇到的问题如下:
(1)make: *** 没有规则可以创建目标“build/scm_scripts/C6000.mk”。 停止
envsetup.sh下关于我们make这个动作的函数如下
?
1 2 3 4 5 6 7 8 9 10 | |
可知会调用build/core/main.mk,此文件下通过TARGET_PRODUCT和SIMCOM_PROJECT环境变量搜索,相关部分如下
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
可知要创建build/scm_scripts/C6000.mk这个文件,然后编译
(2)make: *** 没有规则可以创建“out/target/product/C6000/obj/ETC/init.rc_intermediates/init.rc”需要的目标“system/core/rootdir/init_C6000.rc”。 停止
所以我们需要创建system/core/rootdir/init_C6000.rc
(3)Can't find defaultconfiguration "arch/arm/configs/msm8909-1gb-C6000-perf_defconfig"!
所以需要创建msm8909-1gb-C6000-perf_defconfig文件,此文件中的CONFIG_ARCH_MSM8909_CB03=y改为CONFIG_ARCH_MSM8909_C6000=y,此配置在\kernel\arch\arm\mach-msm\Kconfig用到,增加内容:
?
1 2 3 4 5 | |
(4)make: *** 没有规则可以创建“out/target/product/C6000/persist/WCNSS_qcom_wlan_nv.bin”需要的目标“device/qcom/C6000/WCNSS_qcom_wlan_nv_C6000.bin”。 停止。
把此目录下的WCNSS_qcom_wlan_nv_CB03.bin改为WCNSS_qcom_wlan_nv_C6000.bin
(5)make: ***[out/target/product/C6000/obj/PACKAGING/target_files_intermediates/C6000-target_files-eng.zip]错误 1
更多的编译错误信息如下:
?
1 2 3 4 5 6 7 | |
编译生成了所需要的系统文件,但少了misc.img、msm8909-otg-eng.zip、NON-HLOS.ota、Package_backup.zip、rpm.ota、sbl1.otg、splash.img、target_files-package.zip、tz.ota
可知需要vendor/simcom/C6000/mp_images文件夹下的NON-HLOS.bin文件来生成C6000-target_files-eng.zip文件,所以我们需要创建vendor/simcom/C6000文件夹及需要的文件,
(6)编译成功,但还是少了misc.img和splash.img
在vendor目录下搜索misc,发现vendor\qcom\proprietary\qrdplus\Extension\apps\BootAnimation\Android.mk文件相关内容如下:
?
1 2 | |
可知要拷贝BOOtAnimation目录下$(SIMCOM_PROJECT)下的splash.img、misc.img文件拷贝到$(PRODUCT_OUT)下,所以我们需要创建C6000的目录及需要的文件。
(7)烧录系统,开机的时候白屏,进入系统还是白屏,休眠唤醒后显示和TP正常
改为采用CB03编译出来的emmc_appsboot.mbn(uboot部分)就显示OK了,说明和uboot有关。
/c4050-q4/bootable/bootloader/lk/project/msm8909.mk文件增加
?
1 2 3 | |
bootable\bootloader\lk\target\msm8909\include\target\display.h
改为
?
1 2 3 4 5 6 7 8 9 | |
然后显示就OK了。
(8)用CB03编译,大小为852MB;用C6000编译,大小为846MB
编译出来的系统在点击桌面应用图标的时候,有提示音,做下面的修改
\device\qcom\common\common.mk
ifneq (, $(filter CB03, $(SIMCOM_PROJECT)))
改为
ifneq (, $(filter CB03 C6000,$(SIMCOM_PROJECT)))
到此编译出来的烧录就不存在上面的问题。
(9)增加C6000相对应的设备树文件
\kernel\arch\arm\boot\dts\qcom\Makefile增加
dtb-$(CONFIG_ARCH_MSM8909) +=msm8909-sim.dtb \下面增加
dtb-$(CONFIG_ARCH_MSM8909_C6000) +=msm8909-1gb-qrd-skue-c6000.dtb
增加msm8909-1gb-qrd-skue-c6000.dts,此文件需要#include "msm8909-qrd-skue-c6000.dtsi",所以需要增加msm8909-qrd-skue-c6000.dtsi文件
msm8909-qrd-skue-cb03.dtsi文件内容如下
?
1 2 3 4 5 6 7 8 9 10 | |
但因为我们C6000和cb03的video部分一样,所以保留dsi-panel-otm9605a-qhd-cb03-video.dtsi,增加msm8909-qrd-c6000.dtsi文件,此文件下
?
1 2 3 | |
(10) vendor\qcom\proprietary\common\config\device-vendor.mk,
此文件下有增PRODUCT_LIST += CB03
我这里暂时没有增加
PRODUCT_LIST += C6000
编译出来的系统测试发现近距离传感器无效,接着验证。