全志A33_Vstar

全志A33_VStar编译android脚本

首先看看全志Android源文件的代码目录
A33_Vstar_Android_20170227.tar.bz2
A33_Vstar_Lichee_20170227.tar.bz2两个压缩包文件

进入ubuntu分别解压这两个文件夹

$ tar -vxf  A33_Vstar_Android_20170227.tar.bz2
$ tar -vxf A33_Vstar_Lichee_20170227.tar.bz2

lichee 目录包含 buildroot 工具、uboot 源码和 Linux 内核源码
进入Lichee查看一下编译命令

$ cd lichee/
$ ls
brandy  buildroot  build.sh  clean.sh  linux-3.4  out  README  tools
$ vi build.sh 

lichee目录下的build.sh

#!/bin/bash
set -e		//表示在set -e后面的所有代码中只要出现返回值非零,整个脚本会退出
buildroot/scripts/mkcommon.sh $@	// $@:表示显示当前所有脚本参数的内容

接下来我们看看下这个脚本 /lichee/buildroot/scripts/common.sh

#!/bin/bash
set -e

//定义的变量
PLATFORM=""
MODULE=""
CUR_DIR=$PWD
OUT_DIR=$CUR_DIR/out
KERN_VER=3.3
KERN_DIR=$CUR_DIR/linux-${KERN_VER}
KERN_OUT_DIR=$KERN_DIR/output
BR_DIR=$CUR_DIR/buildroot
BR_OUT_DIR=$BR_DIR/output
U_BOOT_DIR=$CUR_DIR/u-boot
KERN_VER_RELEASE=3.3.0


update_kdir()
{
        KERN_VER=$1
        KERN_DIR=${CUR_DIR}/linux-${KERN_VER}
        KERN_OUT_DIR=$KERN_DIR/output
}
/*帮助文件,就是在lichee文件下面执行./build.sh -h的时候会出现的提示内容  
-h显示帮助信息  
-p选择你所需要开发的平台  
-k内核  
-m所在的模块(比如kernel,uboot之类的)后面的脚本内容会用到这个参数  
再下面就是几个例子*/
show_help()
{
printf "
NAME
        build - The top level build script for Lichee Linux BSP

SYNOPSIS
        build [-h] | [-p platform] [-k kern_version] [-m module] | pack

OPTIONS
        -h             Display help message
        -p [platform]  platform, e.g. sun6i, sun6i_dragonboard, sun6i_fiber
                   sun6i: full linux bsp
                   sun6i_dragonboard: board test packages
                   sun6i_fiber: android kernel

        -k [kern_ver]  3.3(default)                          [OPTIONAL]

        -m [module]    Use this option when you dont want to build all. [OPTIONAL]
                   e.g. kernel, buildroot, uboot, all(default)...
        pack           To start pack program

Examples:
        ./build.sh -p sun6i
        ./build.sh -p sun6i_dragonboard
        ./build.sh -p sun6i_fiber
        ./build.sh -p sun6i_fiber_a31s
        ./build.sh pack
"
}

//怎么知道这个OPTION是什么意思呢,你可以在lichee下面执行./build.sh -h可以看到一个OPTION的参数  
//也可以找到common.sh里面有一个show_help()的方法  
//以./build.sh -p sun6i_fiber这个为例子  
//所以可以知道 PLATFORM == sun6i_fiber  

下面的脚本内容都是些函数
现在来看看最后的部分
这里的$1就是上面实例中./build.sh 所带的参数

//if $1== pack

if [ "$1" = "pack" ]; then
        echo "generate rootfs now, it will takes several minutes and log in out/"
        if [ ! -d "${OUT_DIR}" ]; then
                mkdir -pv ${OUT_DIR}
        fi
        regen_rootfs > out/gen_rootfs_log.txt 2>&1
        gen_output_sun6i >> out/gen_rootfs_log.txt 2>&1
        echo "generate rootfs has finished!"
    ${BR_DIR}/scripts/build_pack.sh
        exit 0
//if $1 == pack_deagonboard

elif [ "$1" = "pack_dragonboard" ]; then
        regen_dragonboard_rootfs
        gen_output_sun6i_dragonboard
        ${BR_DIR}/scripts/build_pack.sh
            exit 0
//if $1 == pcack_prvt

elif [ "$1" = "pack_prvt" ]; then
        ${BR_DIR}/scripts/build_prvt.sh
            exit 0
fi

//知道 PLATFORM == sun6i_fiber  
while getopts hp:m:k: OPTION
do
        case $OPTION in
        h) show_help
        exit 0
        ;;
        p) PLATFORM=$OPTARG
        ;;
        m) MODULE=$OPTARG
        ;;
        k) KERN_VER=$OPTARG
        update_kdir $KERN_VER
        ;;
        *) show_help
        exit 1
        ;;
esac
done
 // 执行上面之后这个PLATFORM就不为空了  
//在这里也说下这个shell的判断语言的参数是什么意思  
  
-e filename 如果 filename存在,则为真  
-d filename 如果 filename为目录,则为真   
-f filename 如果 filename为常规文件,则为真  
-L filename 如果 filename为符号链接,则为真  
-r filename 如果 filename可读,则为真   
-w filename 如果 filename可写,则为真   
-x filename 如果 filename可执行,则为真  
-s filename 如果文件长度不为0,则为真  
-h filename 如果文件是软链接,则为真  
filename1 -nt filename2 如果 filename1比 filename2新,则为真。  
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。  
-eq 等于  
-ne 不等于  
-gt 大于  
-ge 大于等于  
-lt 小于  
-le 小于等于  
至于!号那就是取非  

if [ -z "$PLATFORM" ]; then
        show_help
        exit 1
fi


if [ -z "$PLATFORM" ]; then
        show_help
        exit 1
fi

clean_output

// if $MODULE == buildroot 进入相关目录执行脚本,后面都是一样
if [ "$MODULE" = buildroot ]; then
        cd ${BR_DIR} && ./build.sh -p ${PLATFORM}
// if $MODULE == kernel
elif [ "$MODULE" = kernel ]; then
        export PATH=${BR_OUT_DIR}/external-toolchain/bin:$PATH
        cd ${KERN_DIR} && ./build.sh -p ${PLATFORM}
// if $MODULE == uboot
elif [ "$MODULE" = "uboot" ]; then
        case ${PLATFORM} in
        a12_nuclear*)
                        echo "build uboot for sun5i_a12"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a12
                ;;
        a12*)
                echo "build uboot for sun5i_a12"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a12
                ;;
        a13_nuclear*)
                        echo "build uboot for sun5i_a12"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a13
                ;;
        a13*)
                echo "build uboot for sun5i_a13"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a13
                ;;
        *)
                echo "build uboot for ${PLATFORM}"
                cd ${U_BOOT_DIR} && ./build.sh -p ${PLATFORM}
                ;;
        esac

//如果MODULE不等于以上这些,就执行这里
//进入buildroot目录,这个BR_DIR在common.sh最开始的地方有定义,执行脚本
				cd ${BR_DIR} && ./build.sh -p ${PLATFORM}
				 //设置环境变量 
				export PATH=${BR_OUT_DIR}/external-toolchain/bin:$PATH
				 //执行该脚本编译内核(根据你选择相关平台来执行相关脚本 如果编译build_sun6i.sh  ) 
       			cd ${KERN_DIR} && ./build.sh -p ${PLATFORM}

buildroot目录下build.sh脚本

#!/bin/bash
set -e
//定义变量
PLATFORM=""
MODULE=""

//帮助文件,在lichee文件下面执行.build.sh -h 的时候会出现的提示内容
-h显示帮助信息
-p选择所需要的开发平台
-k内核
-m在所在的模块(比如kernel,uboot之类的)后面的脚本内容会用到这个参数
再下面是几个例子
show_help()
{
        printf "\nbuild.sh - Top level build scritps\n"
        echo "Valid Options:"
        echo "  -h  Show help message"
        echo "  -p <platform> platform:sun6i sun6i_fiber sun6i_fiber_a31s or sun6i_dragonboard"
        printf "  -m <module> module\n\n"
}

//获得PLATFORM和MODULE的值
while getopts hp:m: OPTION
do
        case $OPTION in
        h) show_help
        ;;
        p) PLATFORM=$OPTARG
        ;;
        m) MODULE=$OPTARG
        ;;
        *) show_help
        ;;
esac
done
//如果platform等于空,则显示帮助并退出
if [ -z "$PLATFORM" ]; then
        show_help
        exit 1
fi
//如果moudle等于空,则MODULE==all  
if [ -z "$MODULE" ]; then
        MODULE="all"
fi
//判断目录下面的文件是否为可执行文件,执行相关脚本(这个脚本的功能就是解压工具链以及设置环境变量) 然后再回去看 ./scripts/common.sh
if [ -x ./scripts/build_${PLATFORM}.sh ]; then
        ./scripts/build_${PLATFORM}.sh $MODULE
else
//如果没有可执行文件就显示错误信息,并显示帮助退出  
        printf "\nERROR: Invalid Platform\nonly sun6i sun6i_fiber sun6i_fiber_a31s or sun6i_dragonboard support\n"
        show_help
        exit 1
fi
              

进入lichee/linux-3.3/scripts/build_sun6i.sh
1.设置编译工具链环境变量
2.

LICHEE_ROOT=`(cd ${LICHEE_KDIR}/..; pwd)`
export PATH=${LICHEE_ROOT}/buildroot/output/external-toolchain/bin:${LICHEE_ROOT}/tools/pack/pctools/linux/android:$PATH
 //这个$1就是lichee/linux-3.4/build.sh所执行的./scripts/build_${PLATFORM}.sh $MODULE  
    //MODULE值== all,所以执行all分支下面的函数
case "$1" in
kernel)
        build_kernel
        ;;
modules)
        build_modules
        ;;
clean)
        clean_kernel
        clean_modules
        ;;
all)
        build_kernel
        #build_modules
        build_ramfs
        ;;
*)
        show_help
        ;;
esac

这样内核就编译完了,kernel编译完成之后就是编译uboot
编译uboot在lichee/buildroot/scripts/common.sh的最下方可以看到

//编译UBOOT
elif [ "$MODULE" = "uboot" ]; then
        case ${PLATFORM} in
        a12_nuclear*)
                        echo "build uboot for sun5i_a12"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a12
                ;;
        a12*)
                echo "build uboot for sun5i_a12"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a12
                ;;
        a13_nuclear*)
                        echo "build uboot for sun5i_a12"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a13
                ;;
        a13*)
                echo "build uboot for sun5i_a13"
                cd ${U_BOOT_DIR} && ./build.sh -p sun5i_a13
                ;;
        *)
                echo "build uboot for ${PLATFORM}"
                cd ${U_BOOT_DIR} && ./build.sh -p ${PLATFORM}
                ;;
        esac
else
        cd ${BR_DIR} && ./build.sh -p ${PLATFORM}
        export PATH=${BR_OUT_DIR}/external-toolchain/bin:$PATH
        cd ${KERN_DIR} && ./build.sh -p ${PLATFORM}

        #regen_rootfs

        gen_output_${PLATFORM}
//最后编译完成会显示如下信息  
        echo -e "\033[0;31;1m###############################\033[0m"
        echo -e "\033[0;31;1m#         compile success     #\033[0m"
        echo -e "\033[0;31;1m###############################\033[0m"
        fi


     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 全志A33全志科技推出的一款低功耗、高性能的32位ARM Cortex-A7处理器,适用于智能穿戴设备、智能音箱、平板电脑等场景。Debian是一种常用的Linux操作系统,具有丰富的应用程序和强大的系统设置。全志A33 Debian固件就是将Debian操作系统移植到全志A33处理器上的一种固件,能够将全志A33处理器变成一台类似于电脑的设备。 使用全志A33 Debian固件可以实现如下功能: 1.运行普通PC上的应用程序 2.连接外部设备,如键盘、鼠标、外置硬盘等 3.使用缺省的GNOME桌面环境,支持多任务和多用户功能 4.支持浏览器、邮件客户端、媒体播放器等应用程序 5.通过SSH协议进行远程登录和管理 6.充分利用全志A33的性能,提供比其他嵌入式解决方案更好的用户体验。 总之,全志A33 Debian固件可以大大提高全志A33处理器的实用性和灵活性,使用户可以在嵌入式系统中获得更多的多媒体、游戏、互联网等方面的体验。 ### 回答2: 全志a33处理器是一款广泛应用于智能电视、平板电脑、智能家居等领域的芯片,它采用ARM Cortex A7结构设计,能够提供快速稳定的性能表现。而Debian固件则是为这种处理器开发的一种系统镜像,它基于Debian操作系统开发,兼具稳定性和开放性。 Debian固件的开源性和普适性让其成为软件开发者的首选,这个系统可以让用户享受到更多的开发自由度和DIY空间。而全志a33芯片的流行,也带来了对其能否支持Debian固件的讨论。经过不断的努力,目前已经可以使用全志a33 Debian固件来打造更高效的智能设备了。 使用全志a33 Debian固件,用户可以利用安装包管理器和便捷的命令行方式来自由控制系统,开发维护更加灵活自在。此外,全志a33 Debian固件也内置了大量的软件库和应用支持,帮助开发人员快速构建想要的功能。这种固件还支持多系统同时运行,方便用户在一个设备上运行不同版本的应用程序,提升了设备的效率和兼容性。 综上所述,全志a33 Debian固件是一种功能齐全、兼具可靠性和自由性的系统,众多开发者和用户都对其有很高的期望。相信随着技术和市场的不断变化,这种固件也将会展现更加出色的表现。 ### 回答3: 全志A33是一款低功耗、高性能的ARM Cortex-A7处理器,广泛用于平板电脑、智能家居、智能设备等领域。其中,Debian固件指的是以Debian Linux作为基础系统的固件。 全志A33 Debian固件的优势在于可以利用Debian社区的广泛资源和软件包,为用户提供更加丰富和稳定的软件支持。此外,Debian固件还可以定制化,用户可以根据实际需求选择安装所需要的软件和服务,而不必依赖于预装软件包。 但是,全志A33 Debian固件也存在一些不足之处。首先,由于Debian系统的安全性要求较高,因此对硬件的要求也相应升高,需要支持的硬件也较多,这可能会导致部分硬件不兼容而无法使用。其次,Debian固件相对于定制化的固件来说,开发难度和复杂度都较高,对开发者的技术水平和精力要求也较高。 综上所述,全志A33 Debian固件相对于其他定制化固件来说,拥有更加丰富和稳定的软件支持和更多的可定制化功能,同时也存在一些不足之处需要用户和开发者注意。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值