Go to file
2024-05-17 16:13:14 +08:00
assets [rk3568-plc] install matched modules at selfbuild and update readme 2024-05-17 16:13:14 +08:00
materials [fl-rk3588] add fl-rk3588.dts 2024-03-09 12:08:29 +08:00
pkgs [rk3568-plc] install matched modules at selfbuild and update readme 2024-05-17 16:13:14 +08:00
products_scripts [product] Encapsulated the build function for a specific product and update readme 2024-05-16 12:37:38 +08:00
public_configs add rk3568-plc_bpo6_ubuntu-b custom build dist scripts 2024-02-23 17:41:47 +08:00
scripts [rk3568-plc] install matched modules at selfbuild and update readme 2024-05-17 16:13:14 +08:00
.gitignore [readme] update readme, add ACO_DEBUG env variable 2024-05-17 14:07:06 +08:00
main.sh [readme] update readme, add ACO_DEBUG env variable 2024-05-17 14:07:06 +08:00
README.md [rk3568-plc] install matched modules at selfbuild and update readme 2024-05-17 16:13:14 +08:00

简易自动打包工具

初衷保证构建一致性, 跟成熟的构建系统目前相差甚远, 目标打包成各厂商的boot.img, updateimg, sdimg, iso 方便整体测试或者单个测试

基本配置

  1. 克隆该仓库
  2. 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

100Tai_start 完成截图 100Tai_end

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

rk3568-plc_start

产物路径: dists/build_dists_[时间戳]/[产品名称-内核版本-rootfs类型-源码形式]/

  • boot.img
  • ubuntu-rootfs.img: rootfs镜像
  • update.img: 完整的刷机镜像 rk3568-plc_end

注意事项

  1. 如果当前目录下的./pkgs/rootfs/u22_rootfs/ubuntu22.04_rootfs.tgz用git lfs拉取不下来(显示还是ascii文件)则从这个地址ubuntu-rootfs-base下载到上面这个路径