编译系统从compile.sh开始,所以从这个地方开始
1.判断代码路径是否合法,主要是判断是否包含空格。
SRC="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
# check for whitespace in ${SRC} and exit for safety reasons
grep -q "[[:space:]]" <<<"${SRC}" && { echo "\"${SRC}\" contains whitespace. Not supported. Aborting." >&2 ; exit 1 ; }
cd "${SRC}" || exit
2.将general.sh脚本source进来。文件在./lib/general.sh
general.sh脚本主要包含如下函数
函数名 | 作用 |
Cleaning() | 根据不同的参数做清除工作 |
Exit_with_error() | 出错时用于显示错误调节的功能,文件,行号,是否高亮,及相关的出错描述 |
Get_package_list_hash() | 打印新构建的文件系统安装包列表,以及文件系统的版本 |
Create_source_list() | 更新apt source.list到新构建的文件系统当中 |
fetch_from_repo() | 用于拉取git 仓库的代码 |
display_alert() | 根据不同的级别显示 |
fingerprint_image() | 将编译信息生成至etc/armbian.txt,其中包含 |
addtorepo() | 用于创建本地的apt仓库,下载交叉编译工具链,下载etcher_cli工具。可定制自已的镜像打包脚本。 |
download_toolchain() | 用于下载工具链。 |
download_etcher_cli() | 用于下载etcher_cli,该命令工具的功能相当于dd命令与校验功能的合体。 |
3.虚拟环境(docker或Vagrant)以及root权限检查
4.安装必要的包
对于容器环境(docker或Vagrant)还需要装其他的软件
。。。。。。。。。。。。。。。。。。。。5.新建userpatches目录
这个目录是用来存放用户自定义config文件的,下面第六步会用到。
6.创建默认config文件,这些文件是编译的关键参数。
如果userpatches目录是空的,就创建默认配置文件。
7.制定配置文件给CONFIG变量
8.加载配置文件
9.compile.sh参数处理
10.调用build相关函数
如果再运行compile.sh的时候,没有指定{BUILD_ALL}"这两个参数,就会调用main.sh脚本。
Main.sh脚本分析
1.貌似armbian不希望命令行直接调用main.sh。所以在开始,先做个检查。
2.设置output目录
3.shell窗口参数的设置
4.加载必要的脚本文件