zoukankan      html  css  js  c++  java
  • 编译cubieboard android 源码过程详解之(二):source build/envsetup.sh

    2014-02-26

    这是最先要做的一步,主要是做编译之前的配置。

    旅程开始:从哪里开始?

    首先要找到该脚本从哪里开始执行,如果你使用的编辑器支持代码折叠和symbles浏览,那么这件事情就比较简单。

    代码折叠后,看一下脚本的整体结构,可以发现基本全是函数,期间零星分散着一些变量的设置。函数是要被调用的,

    自然不会从函数开始。直到最后才发现函数调用:

    for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/*/vendorsetup.sh device/*/*/vendorsetup.sh 2> /dev/null`
    do
        echo "including $f"
        . $f
    done
    unset f

    这段代码做了什么呢:

    将 “vendor/*/”、“vendor/*/*/”、“device/*/*/”目录下名为“vendorsetup.sh”的脚本包含进来。

    如果你在shell里实际试一下这段代码,就会发现很多脚本都会被包含进来。难道是一个无底洞?不要忘记出发是为了什么,我们分析脚本更多是为了开发自己的产品,因此只要分析和自己开发的产品相关的脚本就行了。何况以上每个脚本所做的应该是类似的事情。所以对作者来说,下面几个才是需要分析的:

    device/softwinner/apollo-cubieboard/vendorsetup.sh
    device/softwinner/common/vendorsetup.sh

    旅程继续

    device/softwinner/apollo-cubieboard/vendorsetup.sh

    这个脚本中都是函数,其中对于cubieboard来说,较重要的是 extract-bsp 和 pack,后面会提到。

    device/softwinner/common/vendorsetup.sh

    这个脚本中只有一行:

    add_lunch_combo apollo_cubieboard-eng

    功能是添加产品配置,会出现在lunch命令的产品列表中。add_lunch_combo函数定义于build/envsetup.sh,代码如下:

    function add_lunch_combo()
    {
        local new_combo=$1
        local c
        for c in ${LUNCH_MENU_CHOICES[@]} ; do #{LUNCH_MENU_CHOICES[@]}表示取出数组中所有的元素
            if [ "$new_combo" = "$c" ] ; then
                return
            fi
        done
        LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo) #添加新的产品
    }

    旅程结束

    addcompletions

    通过symbles浏览功能,定位到这个函数,内容如下:

    function addcompletions()
    {
        local T dir f
    
        # Keep us from trying to run in something that isn't bash.
        if [ -z "${BASH_VERSION}" ]; then
            return
        fi 
    
        # Keep us from trying to run in bash that's too old.
        if [ ${BASH_VERSINFO[0]} -lt 3 ]; then
            return
        fi
    
        dir="sdk/bash_completion"
        if [ -d ${dir} ]; then
            for f in `/bin/ls ${dir}/[a-z]*.bash 2> /dev/null`; do
                echo "including $f"
                . $f
            done
        fi
    }
    这个函数将“
    sdk/bash_completion”目录下的脚本包含进来,为bash提供自定义自动补全。
    
    

    至此,source build/envsetup.sh  命令执行结束,但该脚本中的内容在后面的命令中还大有用处,后面还会再提到。

  • 相关阅读:
    【LeetCode】147. Insertion Sort List
    【LeetCode】64. Minimum Path Sum
    【LeetCode】7. Reverse Integer
    【LeetCode】107. Binary Tree Level Order Traversal II (2 solutions)
    【LeetCode】114. Distinct Subsequences
    【LeetCode】35. Search Insert Position (2 solutions)
    为什么easyui的datagrid里getSelections还有getChecked只能获取一行值呢?
    IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
    修改easyui的easyloader的默认css目录路径
    如何在Visual Studio的查找功能中使用正则表达式?
  • 原文地址:https://www.cnblogs.com/JonnyLulu/p/3569915.html
Copyright © 2011-2022 走看看