全志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.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相关推荐
- 全志H3 uboot传参到内核分析,boot.scr文件分析
传参过程 uboot倒计时结束,默认以bootcmd来启动内核,它等于 fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr} 上面两 ...
- 海思3559与全志a83t比较
全志 a838t 8核 cpu0主频 1800000m,cpu7 480000m 满负荷运行 1608000m 海思开发板运行 第一次 opencv 运行图像处理 全志开发板需要35ms 海思355 ...
- 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 ...
- 全志h3linux移植教程,全志H3启动分析,移植主线UBOOT
全志H3启动分析,移植主线UBOOT 参考资源 启动流程 因为使用的是外扩SD卡,因此主要参考了这部分内容:Bootable SD card SD卡Layout如下: start sector siz ...
- 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian
花费 60 大洋购买了一台天敏电视精灵 3 安卓机顶盒.买来的目的就是为了刷入原生的 Debian 或其他发行版本. 查看了一下具体的硬件:全志 Allwinner A20 双核 CPU,Cortex ...
- 博通高通迈威尔螃蟹全志南方硅谷WiFi本质的区别
之前写了 螃蟹wifi驱动在AP模式下存在挂死系统的问题_MengXP的博客-CSDN博客 后来我也做了很多实验,查阅了一些资料.做了一些思考,现在总结如下: 无线网卡芯片本身一定是包含一个PHY.D ...
- 全志 修改485转CAN串口回显 Patch
问题起因:平台:全志A40I 系统:Android6.0 IC:TJ1050 客户:XX项目主板 发送指令给 XX设备, 会收到设备回复 ,同时会收到回显的信息.主板测试 把串口和TJA1050这个芯 ...
- 461在全志r16平台tinav3.0系统下使用地磁计QMC5883L
461在全志r16平台tinav3.0系统下使用地磁计QMC5883L 2018/9/7 14:08 版本:V1.0 开发板:SC3817R SDK:tina v3.0 (基本确认全志tina v3. ...
- 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 ...
- 全志a64linux内核编译,Ubuntu16.04编译AndroidM(SoC:Allwinner A64)
本文旨开记录从全新安装Ubuntu到构建AndroidM编译环境,成功编译全志A64 AndroidM SDK的过程. 一.安装Ubuntu 16.04 x64 编译Android SDK需要64位的 ...
最新文章
- 关于从Image字段读取图片流并显示在PictureBox控件时报‘参数无效’异常的解决方法...
- 编程异常——假设你报createSQLQuery is not valid without active transaction,...
- windows下php7.1安装redis扩展以及redis测试使用全过程
- OssImport系列之四——最佳实践
- 剑指 Offer 22. 链表中倒数第k个节点(C语言)
- JPA mysql wildfly jboss 存储时乱码
- 【LeetCode笔记】19.删除链表的倒数第N个结点(Java、快慢指针)
- vue 查看变量类型_前端开发问题集:Vue开发中数据更新了,为何视图没有发生变化呢...
- 网络基础---网络层
- DOM节点的属性和方法
- 【python学习】装饰器@
- cad导出pdf_CAD手机看图软件中导出的CAD图纸为什么没有颜色?
- adadelta算法_【深度学习】深入理解优化器Optimizer算法(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)...
- 筑巢引凤 - 男人25后是蓝筹股
- stm32视频教程分享:心率检测仪的设计与实现
- icd11中文版精神障碍pdf_简明国际神经精神障碍访谈检查(MINI)中文版.pdf
- 如何让行内元素可以设置宽高
- SQL语言_3 模糊查询和聚合函数
- java 地图坐标转换_百度地图经纬度和地址互转(Java代码)
- 快速提升SEO关键词搜索排名的5大伎俩
热门文章
- java面试题总结(七)--史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家!
- ENVI监督分类后背景值也被分成一种地物,解决方案和转移矩阵制作方法
- Snipaste下载以及一部分使用的快捷方式
- 安徽大学本科毕业论文中英文题目修改指南
- ice服务器修复教程,Bootice:系统引导菜单修复利器的功能解说
- 保姆级人声录剪混音教程|您的人声不是输给了混音,而是“选择”。(误区)|MZD Studios
- Alexa查询名词解释
- esp8266 安信可AiThinkerIDE_V1.5.2开发环境搭建
- 公司管理使用的文档[1]-软件技术服务合同模板
- python报错:ValueError: invalid literal for int() with base 16: ‘ ‘