assets | ||
materials | ||
pkgs | ||
products_scripts | ||
public_configs | ||
scripts | ||
.gitignore | ||
main.sh | ||
README.md |
简易自动打包工具
初衷保证构建一致性, 跟成熟的构建系统目前相差甚远, 目标打包成各厂商的boot.img, updateimg, sdimg, iso 方便整体测试或者单个测试
基本配置
- 克隆该仓库
- git lfs install && git lfs pull
代码文件结构
.
├── dists # 产物路径
├── main.sh # 主命令脚本
├── materials # 各产品二进制打包素材
│ ├── 100Tai
│ ├── fl-rk3588
│ ├── kernel_Image
│ └── rk3568-plc
├── pkgs # 各种打包素材源码
│ ├── buildroot
│ ├── busybox
│ ├── debs
│ └── rootfs
├── public_configs
│ ├── config_template.txt
│ ├── ft2004-pcieX100_bpo4_buildroot-b.txt
│ ├── ft2004-X100_latest_buildroot-b.txt
│ └── rk3568-plc_bpo6_ubuntu-b.txt
├── products_scripts # 各产品独立构建脚本
│ ├── common_scripts
│ │ └── setup_ssh_nopass.sh
│ ├── custom_mk_all
│ │ ├── 100Tai_bpo6_custom-b.sh # 100tai独立脚本, 名称对应public_configs下对应文件名
│ │ └── rk3568-plc_bpo6_ubuntu-b.sh # rk3568-plc独立脚本, 名称对应public_configs下对应文件名
│ ├── FMQLMP-SDK-100T
│ │ ├── build.sh
│ │ ├── conf # 打包boot.img的its配置文件目录
│ │ ├── images
│ │ ├── mksdimg
│ │ ├── output
│ │ └── README.md
│ └── rk3568-plc
│ ├── mkbootimg # 制作boot.img相关配置及脚本
│ ├── recovery
│ └── updateimg
├── README.md
├── rk3568-plc_bpo6_ubuntu-b.txt
└── scripts
├── archive.sh # 归档产物到归档服务器
├── comm_funcs.sh # 通用函数脚本
├── global_config.sh # 全局环境变量配置文件
├── mkdtbs.sh # 未分离, 目前包含在products_scripts/custom_mk_all/下各产品的打包脚本
├── mkimages.sh # 未分离, 目前包含在products_scripts/custom_mk_all/下各产品的打包脚本
├── mkrootfs.sh # 未分离, 目前包含在products_scripts/custom_mk_all/下各产品的打包脚本
├── prepare_materials.sh # 准备打包素材, 从指定路径将素材放在对应目录
├── public_all.sh # 遍历public_configs中有效的config进行构建, 或者读取.aco_target_product构建单个目标
└── upload.sh # 上传网盘
脚本主要工作流
全量构建(./main.sh --all)遍历public_configs目录下所有有效目标产品配置文件进行制作dtb, boot.img, recovery.img, rootfs, ssh远程updateimg, 如果构建成功归档本次构建产物到归档服务器
单个产品构建(./main.sh --set 交互式选择, 选择一次后下次不加(--set和--all)就会进行单个产品构建), --set会弹出选择提示栏, 选择后会保存到.aco_target_product
主命令参数及配置说明
命令行参数
➜ acosail_public_tasks git:(master) ✗ ./main.sh --help
用法: ./main.sh [选项]
选项:
--help 显示帮助信息
--all 打包所有产品
--set 交互式设置目标产品, 第二次不加--set且不加--all则
target=<目标> 指定目标类型,可选值为 test、release、debug
示例:
./main.sh --help 显示帮助信息
./main.sh --all 打包所有产品
./main.sh --set 设置目标产品
./main.sh target=release 打包指定目标为 release 的产品
示例配置文件
# public_configs/rk3568-plc_bpo6_ubuntu-b.txt
# public_configs下有效地可被脚本读取为构建配置的文件名格式如下
# [产品名]_[内核版本]_[rootfs类型-源文件类型].txt
# 可用产品名: "ft2004-X100" "ft2004-pcieX100" "rk3568-plc" "100Tai"
# 可用内核版本: "latest" "bpo4" "bpo5" "bpo6"
# 可用rootfs类型-源文件类型: "buildroot-s" "buildroot-b" "busybox-s" "busybox-b" "ubuntu-s" "ubuntu-b" "custom-b"
product_name=
custom_mk_all=y # y:采用products_scripts/custom_mk_all下自定义脚本构建, 如本配置文件public_configs/rk3568-plc_bpo6_ubuntu-b.txt对应自定义脚本为products_scripts/custom_mk_all/rk3568-plc_bpo6_ubuntu-b.sh
kernel_repo=
kernel_branch_name=
kernel_commit_number=
dtb_repo=
dtb_branch_name=
dtb_commit_number=
rootfs_type=
rootfs_binaries_archive_path=
rootfs_src_repo=
rootfs_branch_name=
rootfs_commit_number=
# end
todolist
- 错误检查错误处理不完善
- 构建中间产物应该和源码分离或者统一后缀方便添加至gitignore
- e2000 d2000 rk3588构建脚本
- 指定内核构建目录时, 模块未安装到rootfs内, 造成不匹配
- 预构建材料最好统一放在归档服务器上, 不要和构建脚本放在一起
- 过分依赖原厂构建sdk, 未分离
- 没有集成构建内核, 构建rootfs的编译流程, 需要预编译好, 这个脚本目前只是选择编译好的内核deb包或者镜像以及在选择的rootfs二进制中添加客户需求的包版本
- 整个打包控制粒度还有待降低
- 由于直接ssh其他主机, 在某些路径进行构建, 故还需做好打包中的标记, 防止多人同时构建, 以及修改原厂build.sh同样做他人构建中检测
- 不支持单个构建, 之前的做法是手动在configs目录只保留一个配置文件
- 还存在需要个人账号信息的情况, 如需用到36 git服务器上luck账号, 密码是luck9994dv
100Tai构建示例
目前是用osc从obs下包, luckluck的obs密码是luckluck osc使用方法见此文档最下方https://acosail.yuque.com/ln4neu/dgzu0u/qp3vu0rxa0zawgrx
bash main.sh --set
# 选择 1)./public_configs/100Tai_bpo6_custom-b.txt
rk3568-plc构建示例
编译: selfbuild目录:/data2/lck_home/rk3568_sec_boot/usr/src/linux-source-5.15 编译命令: make -j12 打包:
变量名 | 值 |
---|---|
ACO_KERNEL_IMG_SRC | 空: 默认从obs服务器下载正式deb产物, obs目标服务器及路径在脚本scripts/global_config.sh内部变量ACO_KERNEL_OBS_PROJ_PATH指定 selfbuild: 从 ACO_SELF_BUILD_PATH 的scp路径拷贝Image, 而不是从obs获取 |
ACO_SELF_BUILD_PATH 依赖: ACO_KERNEL_IMG_SRC=selfbuild |
形如 [用户名]@[主机ip]:[内核源码根目录]形式: 内部用scp将自行构建的Image拷贝到需要的位置, 注意之前时确保该内核源码根目录 的arch/arm64/boot/Image编译完成 |
ACO_QUICK_BUILD | 空: 完整打包, 安装其他软件包, 如docker 1: 跳过安装其他软件包 |
ACO_SELF_BUILD_DTB | 空: 默认dtb从plc_dts仓库的gmac_3v3分支拉取编译dtb 形如 [用户名]@[主机ip]:[已构建的dtb路径]形式: 内部用scp将自行构建的dtb拷贝到需要的位置 |
ACO_SELF_BUILD_DTB_PASSWD 依赖: ACO_SELF_BUILD_DTB非空 |
[password]: ACO_SELF_BUILD_DTB的scp路径的用户在目标服务器的密码 |
常用示例
# 10.10.20.123机器 进入/home/luck/src1/codeberg/kernel/acosail_public_tasks
# ACO_QUICK_BUILD=1 决定是否快速打包, 快速打包不安装额外的软件包
# 默认dtb从http://36.110.67.90:31472/AcoSail/rk3568_plc_dts/src/branch/gmac_3v3的gmac_3v3分支拉取编译dtb
ACO_KERNEL_IMG_SRC=selfbuild \
ACO_SELF_BUILD_PATH=acosail@10.10.20.123:/data2/lck_home/rk3568_sec_boot/usr/src/linux-source-5.15/ \
ACO_QUICK_BUILD=1 \
bash main.sh
ACO_KERNEL_IMG_SRC=selfbuild \
ACO_SELF_BUILD_PATH=acosail@10.10.20.123:/data2/lck_home/rk3568_sec_boot/usr/src/linux-source-5.15/ \
ACO_QUICK_BUILD=1 \
ACO_SELF_BUILD_DTB=luck@10.10.20.131:/tmp/rk3568_plc_dts/output.dtb \
ACO_SELF_BUILD_DTB_PASSWD=luck \
bash main.sh
# ACO_KERNEL_IMG_SRC=selfbuild 决定从obs或者本地构建获取Image
# ACO_SELF_BUILD_PATH=acosail@host:/path/to/linux-source-5.15/ 指定本地构建的内核源码根目录
ACO_KERNEL_IMG_SRC=selfbuild \
ACO_SELF_BUILD_PATH=acosail@10.10.20.123:/data2/lck_home/rk3568_sec_boot/usr/src/linux-source-5.15/ \
ACO_QUICK_BUILD=1 \
bash main.sh
产物路径: dists/build_dists_[时间戳]/[产品名称-内核版本-rootfs类型-源码形式]/
注意事项
- 如果当前目录下的./pkgs/rootfs/u22_rootfs/ubuntu22.04_rootfs.tgz用git lfs拉取不下来(显示还是ascii文件)则从这个地址ubuntu-rootfs-base下载到上面这个路径