msm8909+android5.1.1编译前配置及增加新项目和产品所需分支

编译前的选项配置:

(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
including device/lge/mako/vendorsetup.sh
includingdevice/generic/mini-emulator-x86/vendorsetup.sh
includingdevice/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
includingdevice/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
includingdevice/generic/mini-emulator-arm64/vendorsetup.sh
including device/qcom/common/vendorsetup.sh
includingdevice/htc/flounder/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
includingdevice/asus/tilapia/vendorsetup.sh
includingdevice/asus/grouper/vendorsetup.sh
including device/asus/deb/vendorsetup.sh
includingdevice/samsung/manta/vendorsetup.sh
includingvendor/qcom/proprietary/common/vendorsetup.sh
including sdk/bash_completion/adb.bash

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
Project choices are:
     1 . CB03
Which would you like? [CB03] 1
  
Build type choices are:
     1 . release
     2 . debug
  
Which would you like? [ 1 ] 1
  
Product choices are:
     1 . msm8909
Which product would you like? [msm8909] 1
  
  
Variant choices are:
     1 . user
     2 . userdebug
     3 . eng
Which would you like? [eng] 1
  
chipset are:
     1 . 8909
     2 . 8209
Which would you like? [ 8909 ] 1
  
Multisim choices are:
     1 . ssss
     2 . dsds
Which would you like? [ssss] 1
  
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION= 5.1 . 1
TARGET_PRODUCT=msm8909
TARGET_BUILD_VARIANT=user
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a7
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux- 3.16 . 0 - 30 -generic-x86_64-with-Ubuntu- 14.04 -trusty
HOST_BUILD_TYPE=release
BUILD_ID=LMY47V
SIMCOM_PROJECT=CB03
SIMCOM_MULTISIM=ssss
OUT_DIR=out
============================================

上面内容对应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
function choosecombo()
{
    chooseproject $ 1
    echo
  
    choosetype $ 2
  
     echo
    echo
    chooseproduct $ 3
  
    echo
    echo
    choosevariant $ 4
#modify to display TARGET_CHIPSET and builddate dynamicly by xueguobing begin
    echo
    echo
    choose_CHIPSET $ 5
#modify to display TARGET_CHIPSET and builddate dynamicly by xueguobing end
    echo
    echo
    
    echo
    echo
    chooseMultisim $ 6
    initbuildspec
  
    echo
    set_stuff_for_environment
    printconfig
}

下面我们具体来看每个选项的内容

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
Project choices are:
     1 . CB03
Which would you like? [CB03] 1
  
实现如下:
PROJECT_CHOICES=(CB03 C6000)
function chooseproject()
{
    T=$(gettop) #获取Android源码根目录
    echo "Project choices are:"
    local index= 1
    local v
    for v in ${PROJECT_CHOICES[@]}
    do
        # The product name is the name of the directory containing
        # the makefile we found, above.
        echo "     $index. $v"  #比如显示 1 .CB03
        index=$(($index+ 1 ))
    done
  
    local default_value=CB03
    local ANSWER
  
    export SIMCOM_PROJECT=  #导出环境变量
    while [ -z "$SIMCOM_PROJECT" ]
    do
        echo -n "Which would you like? [$default_value] "
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $ 1
            ANSWER=$ 1
        fi
  
        if [ -z "$ANSWER" ] ; then
            export SIMCOM_PROJECT=$default_value
        elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$" ) ; then
            if [ "$ANSWER" -le "${#PROJECT_CHOICES[@]}" ] ; then
                 exportSIMCOM_PROJECT=${PROJECT_CHOICES[$(($ANSWER- 1 ))]}
            fi
        else
            if check_project $ANSWER
            then
                 export SIMCOM_PROJECT=$ANSWER
            else
                 echo "** Not a validproject: $ANSWER"
            fi
        fi
        if [ -n "$1" ] ; then
            break
        fi
    done
  
}

这里导出了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
function initbuildspec()
{
    local -a GEN_QRDPLUS_ENV_RET
    GEN_QRDPLUS_ENV_PL=build/buildplus/tool/qrdplus_target_gen.pl
    #modify by lzq default mode is ct
    GEN_QRDPLUS_ENV_RET=(`perl $GEN_QRDPLUS_ENV_PL $SIMCOM_PROJECT`)
    if [ "$GEN_QRDPLUS_ENV_RET" != "GEN_SUCCESS" ] ;then
        echo "target build Env generate failed, your should abortcontinuous make procedure!"
    fi
}

这里会找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
Build type choices are:
     1 . release
     2 . debug
  
Which would you like? [ 1 ] 1
  
实现如下:
function choosetype()
{
    echo "Build type choices are:"
    echo "     1. release"
    echo "     2. debug"
    echo
  
    local DEFAULT_NUM DEFAULT_VALUE
    DEFAULT_NUM= 1
    DEFAULT_VALUE=release
  
    export TARGET_BUILD_TYPE=
    local ANSWER
    while [ -z $TARGET_BUILD_TYPE ]
    do
        echo -n "Which would you like? [" $DEFAULT_NUM "] "
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $ 1
            ANSWER=$ 1
        fi
        case $ANSWER in
        "" )
            export TARGET_BUILD_TYPE=$DEFAULT_VALUE
            ;;
        1 )
            export TARGET_BUILD_TYPE=release
            ;;
        release)
            export TARGET_BUILD_TYPE=release
            ;;
        2 )
            export TARGET_BUILD_TYPE=debug
            ;;
        debug)
            export TARGET_BUILD_TYPE=debug
            ;;
        *)
            echo
            echo "I didn't understand your response.  Please try again."
            echo
            ;;
        esac
        if [ -n "$1" ] ; then
            break
        fi
    done
  
    set_stuff_for_environment # 设置环境变量
}

这里导出环境变量TARGET_BUILD_TYPE,其值为release或是debug,调用set_stuff_for_environment()来设置环境变量,如下:

?
1
2
3
4
5
6
7
8
9
10
11
function set_stuff_for_environment()
{
    settitle
    set_java_home
    setpaths
    set_sequence_number
  
    export ANDROID_BUILD_TOP=$(gettop)
     #With this environment variable new GCC can apply colors to warnings/errors
    exportGCC_COLORS= 'error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
}

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
Product choices are:
     1 . msm8909
Which product would you like? [msm8909] 1
  
实现如下:
#
# This function isn't really right:  It chooses a TARGET_PRODUCT
# based on the list of boards.  Usually, that gets you something
# that kinda works with a generic product,but really, you should
# pick a product by name.
#
function chooseproduct()
{
# Find the list of all products by lookingfor all AndroidProducts.mk files under the
# device/, vendor/ andbuild/target/product/ directories and look for the format
# LOCAL_DIR/<productspecificfile.mk>and extract the name ProductSpecificFile from it.
# This will give the list of all productsthat can be built using choosecombo
  
    local -a prodlist
  
# Find all AndroidProducts.mk files underthe dirs device/, build/target/ and vendor/
# Extract lines containing .mk from them
# Extract lines containing LOCAL_DIR
# Extract the name of the product specificfile
  
    prodlist=(`/usr/bin/find device/qcom/msm8909 -name AndroidProducts.mk2>/dev/ null |
    xargs grep -h \.mk|
    grep LOCAL_DIR|
    cut -d '/' -f2|cut -d ' ' -f1|sort|uniq|cut -d '.' -f1`)
  
    export TARGET_PRODUCT=
    local index= 1
    local p
    echo "Product choices are:"
    for p in ${prodlist[@]}
    do
        echo "     $index. $p"
        let "index = $index + 1"
    done
  
    if [ "x$TARGET_PRODUCT" != x ] ; then
        default_value=$TARGET_PRODUCT
    else
        default_value=msm8909
    fi
  
    local ANSWER
    while [ -z "$TARGET_PRODUCT" ]
    do
        echo -n "Which product would you like? [$default_value] "
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $ 1
            ANSWER=$ 1
        fi
  
        if [ -z "$ANSWER" ] ; then
            export TARGET_PRODUCT=$default_value
        elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$" ) ; then
            local poo=`echo -n $ANSWER`
            if [ $poo -le ${#prodlist[@]} ] ; then
                 exportTARGET_PRODUCT=${prodlist[$(($ANSWER- 1 ))]}
            else
                 echo "** Bad productselection: $ANSWER"
            fi
        else
            if check_product $ANSWER
            then
                 export TARGET_PRODUCT=$ANSWER
            else
                 echo "** Not a validproduct: $ANSWER"
            fi
        fi
        if [ -n "$1" ] ; then
            break
        fi
    done
  
    set_stuff_for_environment
}</productspecificfile.mk>

这里有几个重要的信息:

(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
prodlist=(`/usr/bin/finddevice/qcom/msm8909 device/qcom/C6000 -name AndroidProducts.mk 2 >/dev/ null |
    xargs grep -h \.mk|
    grep LOCAL_DIR|
cut -d '/' -f2|cut -d ' ' -f1|sort|uniq|cut -d '.' -f1`)
  
显示结果
Product choices are:
     1 . C6000
     2 . msm8909

这种方式会根据字母顺序来显示,如果想按照自己制定的顺序来显示,如下:

?
1
2
3
4
5
6
7
8
9
prodlist=(`/usr/bin/finddevice/qcom/msm8909 device/qcom/C6000 -name AndroidProducts.mk 2 >/dev/ null |
    xargs grep -h \.mk|
    grep LOCAL_DIR|
cut -d '/' -f2|cut -d '.' -f1`)
  
显示结果
Product choices are:
     1 . msm8909
     2 . C6000

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
Variant choices are:
     1 . user
     2 . userdebug
     3 . eng
Which would you like? [eng] 1
  
实现如下:
VARIANT_CHOICES=(user userdebug eng)
function choosevariant()
{
    echo "Variant choices are:"
    local index= 1
    local v
    for v in ${VARIANT_CHOICES[@]}
    do
        # The product name is the name of the directory containing
        # the makefile we found, above.
        echo "     $index. $v"
        index=$(($index+ 1 ))
    done
  
    local default_value=eng
    local ANSWER
  
    export TARGET_BUILD_VARIANT=
    while [ -z "$TARGET_BUILD_VARIANT" ]
    do
        echo -n "Which would you like? [$default_value] "
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $ 1
            ANSWER=$ 1
        fi
  
        if [ -z "$ANSWER" ] ; then
            export TARGET_BUILD_VARIANT=$default_value
        elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$" ) ; then
            if [ "$ANSWER" -le "${#VARIANT_CHOICES[@]}" ] ; then
                 exportTARGET_BUILD_VARIANT=${VARIANT_CHOICES[$(($ANSWER- 1 ))]}
            fi
        else
            if check_variant $ANSWER
            then
                 export TARGET_BUILD_VARIANT=$ANSWER
            else
                 echo "** Not a validvariant: $ANSWER"
            fi
        fi
        if [ -n "$1" ] ; then
            break
        fi
    done
}

导出环境变量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
chipset are:
     1 . 8909
     2 . 8209
Which would you like? [ 8909 ] 1
  
CHIPSET=( 8909 8209 )
function choose_CHIPSET()
{
echo "chipset are:"
  local index= 1
    local v
    for v in ${CHIPSET[@]}
    do
        # The product name is the name of the directory containing
        # the makefile we found, above.
        echo "     $index. $v"
        index=$(($index+ 1 ))
    done
   local default_value= 8909
    local ANSWER
  
    export TARGET_CHIPSET=
    while [ -z "$TARGET_CHIPSET" ]
    do
        echo -n "Which would you like? [$default_value] "
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $ 1
            ANSWER=$ 1
        fi
  
        if [ -z "$ANSWER" ] ; then
            export TARGET_CHIPSET=$default_value
        elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$" ) ; then
            if [ "$ANSWER" -le "${#CHIPSET[@]}" ] ; then
                 exportTARGET_CHIPSET=${CHIPSET[$(($ANSWER- 1 ))]}
            fi
        else
            if check_variant $ANSWER
            then
                 export TARGET_CHIPSET=$ANSWER
            else
                 echo "** Not a validvariant: $ANSWER"
            fi
        fi
        if [ -n "$1" ] ; then
            break
        fi
    done
}

导出环境变量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
Multisim choices are:
     1 . ssss
     2 . dsds
Which would you like? [ssss] 1
  
MULTISIM_CHOICES=(ssss dsds)
function chooseMultisim()
{
    T=$(gettop)
  
    export SIMCOM_MULTISIM=
    local choose_multisim= 0
    local default_value=
  
    case $SIMCOM_PROJECT in
  
    "CB03" )
        choose_multisim= 1
        default_value=ssss
            ;;
  
    *)
        choose_multisim= 1
        default_value=ssss
            ;;
    esac
  
    if [ $choose_multisim -eq 1 ] ; then
  
    echo "Multisim choices are:"
    local index= 1
    local v
    for v in ${MULTISIM_CHOICES[@]}
    do
        echo "     $index. $v"
        index=$(($index+ 1 ))
    done
  
    local ANSWER
  
    while [ -z "$SIMCOM_MULTISIM" ]
    do
        echo -n "Which would you like? [$default_value] "
        if [ -z "$1" ] ; then
            read ANSWER
        else
            echo $ 1
            ANSWER=$ 1
        fi
  
        if [ -z "$ANSWER" ] ; then
            export SIMCOM_MULTISIM=$default_value
        elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$" ) ; then
            if [ "$ANSWER" -le "${#MULTISIM_CHOICES[@]}" ] ;then
                 exportSIMCOM_MULTISIM=${MULTISIM_CHOICES[$(($ANSWER- 1 ))]}
            fi
        else
            if check_multisim $ANSWER
            then
                 export SIMCOM_MULTISIM=$ANSWER
            else
                 echo "** Not a validmultisim: $ANSWER"
            fi
        fi
        if [ -n "$1" ] ; then
            break
        fi
    done
  
    fi
}

导出环境变量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
function m()
{
    local T=$(gettop)
    local DRV=$(getdriver $T)
    if [ "$T" ]; then
        $DRV make -C $T -f build/core/main.mk $@
    else
        echo "Couldn't locate the top of the tree.  Try setting TOP."
    fi
}

可知会调用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
$(info********************************************)
ifneq (,$(SIMCOM_PROJECT))
$(info !   override withvendor/simcom/$(SIMCOM_PROJECT)    !)
$(shell cp -rfvendor/simcom/$(SIMCOM_PROJECT)/frameworks ./)
$(shell cp -rfvendor/simcom/$(SIMCOM_PROJECT)/packages ./)
else
$(info SIMCOM_PROJECT is null !)
endif
$(info********************************************)
  
  
includebuild/buildplus/target/QRDExt_target.min
ifeq ($(Module_Nfc_Pn547), yes)
$(info !   override withvendor/simcom/Nfc_Pn547 !)
$(shell cp -rf vendor/simcom/Nfc_Pn547/*./)
endif
  
#ifeq (build/scm_scripts/$(SIMCOM_PROJECT)_$(TARGET_CUSTOMER).mk,$(wildcard build/projectEnv/$(TARGET_PRODUCT)_$(TARGET_CUSTOMER).mk))
#includebuild/scm_scripts/$(SIMCOM_PROJECT)_$(TARGET_CUSTOMER).mk
# else
includebuild/scm_scripts/$(SIMCOM_PROJECT).mk
#endif

可知要创建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
config ARCH_MSM8909_C6000
     bool "C6000 Product"
     depends on ARCH_MSM8909
     help
       Support for MSM8909 C6000.

(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
Package target files:out/target/product/C6000/obj/PACKAGING/target_files_intermediates/C6000-target_files-eng.zip
prepare the ota cp files.[vendor/simcom/C6000/mp_images]
out/host/linux-x86/bin/acp     vendor/simcom/C6000/mp_images/NON-HLOS.bin             out/target/product/C6000/NON-HLOS.ota
acp: file 'vendor/simcom/C6000/mp_images/NON-HLOS.bin' does not exist
make: ***[out/target/product/C6000/obj/PACKAGING/target_files_intermediates/C6000-target_files-eng.zip]错误 1
  
#### make failed to build some targets( 39 : 57 (mm:ss)) ####

编译生成了所需要的系统文件,但少了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
$(shell cp -r$(LOCAL_PATH)/$(SIMCOM_PROJECT)/splash.img $(PRODUCT_OUT)/splash.img)
$(shell cp -r$(LOCAL_PATH)/$(SIMCOM_PROJECT)/misc.img $(PRODUCT_OUT)/misc.img)

可知要拷贝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
ifeq ($(SIMCOM_PROJECT), C6000)
DEFINES += MSM8909_C6000= 1
Endif

bootable\bootloader\lk\target\msm8909\include\target\display.h

改为

?
1
2
3
4
5
6
7
8
9
# if (MSM8909_CB03 || MSM8909_C6000)
static struct gpio_pin reset_gpio = {
  "msmgpio" , 8 , 3 , 1 , 0 , 1
};
# else
static struct gpio_pin reset_gpio = {
  "msmgpio" , 25 , 3 , 1 , 0 , 1
};
#endif

然后显示就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
#include "msm8909-qrd-cb03.dtsi" 需要增加c6000对应的。
#include "msm8909-camera-sensor-skue.dtsi"
#include "dsi-panel-otm9605ag-qhd-video.dtsi" //major QHD LCM replace otm9605a
#include "dsi-panel-otm9605a-qhd-cb03-video.dtsi" //major QHD LCM replaceotm9605a CB03
#include "dsi-panel-otm9605a-qhd-video.dtsi"   //majorQHD LCM
#include "dsi-panel-hx8389bg-qhd-video.dtsi"    //minorQHD LCM
#include "dsi-panel-nt35512-fwvga-video.dtsi"  //majorFWVGA LCM
#include "dsi-panel-ili9806e-fwvga-video.dtsi"   //minorFWVGA LCM
#include "dsi-panel-jd9161ba-fwvga-video.dtsi" //minorFWVGA LCM replace ili9806e
#include "dsi-panel-ili9806e-wvga-video.dtsi"    //minorWVGA LCM

但因为我们C6000和cb03的video部分一样,所以保留dsi-panel-otm9605a-qhd-cb03-video.dtsi,增加msm8909-qrd-c6000.dtsi文件,此文件下

?
1
2
3
#include "msm8909-cb03.dtsi" 需要增加c6000对应的。
#include "msm8909-pm8909.dtsi"
#include "msm8909-pinctrl-cb03.dtsi" 需要增加c6000对应的。

(10) vendor\qcom\proprietary\common\config\device-vendor.mk,

此文件下有增PRODUCT_LIST += CB03

我这里暂时没有增加

PRODUCT_LIST += C6000

编译出来的系统测试发现近距离传感器无效,接着验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值