• 编译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  命令执行结束,但该脚本中的内容在后面的命令中还大有用处,后面还会再提到。

  • 相关阅读:
    【xsy2506】 bipartite 并查集+线段树
    Linux K8s容器集群技术
    Linux 运维工作中的经典应用ansible(批量管理)Docker容器技术(环境的快速搭建)
    Linux Django项目部署
    Linux Django项目测试
    Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试
    Linux centos系统安装后的基本配置,Linux命令
    Linux 虚拟机上安装linux系统 (ip:子网掩码,网关,dns,交换机,路由知识回顾)
    $ Django 调API的几种方式,django自定义错误响应
    $Django 路飞之显示视频,Redis存购物车数据,优惠卷生成表,优惠卷的一个领取表。(知识小回顾)
  • 原文地址:https://www.cnblogs.com/JonnyLulu/p/3569915.html
Copyright © 2020-2023  润新知