全志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.0update_kdir()
{KERN_VER=$1KERN_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 "
NAMEbuild - The top level build script for Lichee Linux BSPSYNOPSISbuild [-h] | [-p platform] [-k kern_version] [-m module] | packOPTIONS-h             Display help message-p [platform]  platform, e.g. sun6i, sun6i_dragonboard, sun6i_fibersun6i: full linux bspsun6i_dragonboard: board test packagessun6i_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 programExamples:./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== packif [ "$1" = "pack" ]; thenecho "generate rootfs now, it will takes several minutes and log in out/"if [ ! -d "${OUT_DIR}" ]; thenmkdir -pv ${OUT_DIR}firegen_rootfs > out/gen_rootfs_log.txt 2>&1gen_output_sun6i >> out/gen_rootfs_log.txt 2>&1echo "generate rootfs has finished!"${BR_DIR}/scripts/build_pack.shexit 0
//if $1 == pack_deagonboardelif [ "$1" = "pack_dragonboard" ]; thenregen_dragonboard_rootfsgen_output_sun6i_dragonboard${BR_DIR}/scripts/build_pack.shexit 0
//if $1 == pcack_prvtelif [ "$1" = "pack_prvt" ]; then${BR_DIR}/scripts/build_prvt.shexit 0
fi//知道 PLATFORM == sun6i_fiber
while getopts hp:m:k: OPTION
docase $OPTION inh) show_helpexit 0;;p) PLATFORM=$OPTARG;;m) MODULE=$OPTARG;;k) KERN_VER=$OPTARGupdate_kdir $KERN_VER;;*) show_helpexit 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" ]; thenshow_helpexit 1
fiif [ -z "$PLATFORM" ]; thenshow_helpexit 1
ficlean_output// if $MODULE == buildroot 进入相关目录执行脚本,后面都是一样
if [ "$MODULE" = buildroot ]; thencd ${BR_DIR} && ./build.sh -p ${PLATFORM}
// if $MODULE == kernel
elif [ "$MODULE" = kernel ]; thenexport PATH=${BR_OUT_DIR}/external-toolchain/bin:$PATHcd ${KERN_DIR} && ./build.sh -p ${PLATFORM}
// if $MODULE == uboot
elif [ "$MODULE" = "uboot" ]; thencase ${PLATFORM} ina12_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
docase $OPTION inh) show_help;;p) PLATFORM=$OPTARG;;m) MODULE=$OPTARG;;*) show_help;;
esac
done
//如果platform等于空,则显示帮助并退出
if [ -z "$PLATFORM" ]; thenshow_helpexit 1
fi
//如果moudle等于空,则MODULE==all
if [ -z "$MODULE" ]; thenMODULE="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_helpexit 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_kernelclean_modules;;
all)build_kernel#build_modulesbuild_ramfs;;
*)show_help;;
esac

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

//编译UBOOT
elif [ "$MODULE" = "uboot" ]; thencase ${PLATFORM} ina12_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
elsecd ${BR_DIR} && ./build.sh -p ${PLATFORM}export PATH=${BR_OUT_DIR}/external-toolchain/bin:$PATHcd ${KERN_DIR} && ./build.sh -p ${PLATFORM}#regen_rootfsgen_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

全志A33_Vstar相关推荐

  1. 全志H3 uboot传参到内核分析,boot.scr文件分析

    传参过程 uboot倒计时结束,默认以bootcmd来启动内核,它等于 fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr} 上面两 ...

  2. 海思3559与全志a83t比较

    全志 a838t 8核 cpu0主频 1800000m,cpu7 480000m 满负荷运行 1608000m 海思开发板运行 第一次 opencv 运行图像处理 全志开发板需要35ms  海思355 ...

  3. 31全志r58平台Android4.4.2下打开USB摄像头

    31全志r58平台Android4.4.2下打开USB摄像头 2018/10/26 16:00 版本:V1.0 开发板:SC5806 1.系统编译:(略) 2.需要修改的文件: W:\r58_andr ...

  4. 全志h3linux移植教程,全志H3启动分析,移植主线UBOOT

    全志H3启动分析,移植主线UBOOT 参考资源 启动流程 因为使用的是外扩SD卡,因此主要参考了这部分内容:Bootable SD card SD卡Layout如下: start sector siz ...

  5. 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian

    花费 60 大洋购买了一台天敏电视精灵 3 安卓机顶盒.买来的目的就是为了刷入原生的 Debian 或其他发行版本. 查看了一下具体的硬件:全志 Allwinner A20 双核 CPU,Cortex ...

  6. 博通高通迈威尔螃蟹全志南方硅谷WiFi本质的区别

    之前写了 螃蟹wifi驱动在AP模式下存在挂死系统的问题_MengXP的博客-CSDN博客 后来我也做了很多实验,查阅了一些资料.做了一些思考,现在总结如下: 无线网卡芯片本身一定是包含一个PHY.D ...

  7. 全志 修改485转CAN串口回显 Patch

    问题起因:平台:全志A40I 系统:Android6.0 IC:TJ1050 客户:XX项目主板 发送指令给 XX设备, 会收到设备回复 ,同时会收到回显的信息.主板测试 把串口和TJA1050这个芯 ...

  8. 461在全志r16平台tinav3.0系统下使用地磁计QMC5883L

    461在全志r16平台tinav3.0系统下使用地磁计QMC5883L 2018/9/7 14:08 版本:V1.0 开发板:SC3817R SDK:tina v3.0 (基本确认全志tina v3. ...

  9. 02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示

    02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示 2017/8/18 13:53 版本:V1.0 开发板:SC5806(全志R58平台) SDK:android4.4.4 ...

  10. 全志a64linux内核编译,Ubuntu16.04编译AndroidM(SoC:Allwinner A64)

    本文旨开记录从全新安装Ubuntu到构建AndroidM编译环境,成功编译全志A64 AndroidM SDK的过程. 一.安装Ubuntu 16.04 x64 编译Android SDK需要64位的 ...

最新文章

  1. 关于从Image字段读取图片流并显示在PictureBox控件时报‘参数无效’异常的解决方法...
  2. 编程异常——假设你报createSQLQuery is not valid without active transaction,...
  3. windows下php7.1安装redis扩展以及redis测试使用全过程
  4. OssImport系列之四——最佳实践
  5. 剑指 Offer 22. 链表中倒数第k个节点(C语言)
  6. JPA mysql wildfly jboss 存储时乱码
  7. 【LeetCode笔记】19.删除链表的倒数第N个结点(Java、快慢指针)
  8. vue 查看变量类型_前端开发问题集:Vue开发中数据更新了,为何视图没有发生变化呢...
  9. 网络基础---网络层
  10. DOM节点的属性和方法
  11. 【python学习】装饰器@
  12. cad导出pdf_CAD手机看图软件中导出的CAD图纸为什么没有颜色?
  13. adadelta算法_【深度学习】深入理解优化器Optimizer算法(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)...
  14. 筑巢引凤 - 男人25后是蓝筹股
  15. stm32视频教程分享:心率检测仪的设计与实现
  16. icd11中文版精神障碍pdf_简明国际神经精神障碍访谈检查(MINI)中文版.pdf
  17. 如何让行内元素可以设置宽高
  18. SQL语言_3 模糊查询和聚合函数
  19. java 地图坐标转换_百度地图经纬度和地址互转(Java代码)
  20. 快速提升SEO关键词搜索排名的5大伎俩

热门文章

  1. java面试题总结(七)--史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家!
  2. ENVI监督分类后背景值也被分成一种地物,解决方案和转移矩阵制作方法
  3. Snipaste下载以及一部分使用的快捷方式
  4. 安徽大学本科毕业论文中英文题目修改指南
  5. ice服务器修复教程,Bootice:系统引导菜单修复利器的功能解说
  6. 保姆级人声录剪混音教程|您的人声不是输给了混音,而是“选择”。(误区)|MZD Studios
  7. Alexa查询名词解释
  8. esp8266 安信可AiThinkerIDE_V1.5.2开发环境搭建
  9. 公司管理使用的文档[1]-软件技术服务合同模板
  10. python报错:ValueError: invalid literal for int() with base 16: ‘ ‘