4.4.3. 根文件系统适配指南
4.4.3.1. 使用 Buildroot 制作根文件系统
X5 的
initramfs:包含
最 简化 的 根 文件系统,与 Linux Kernel 合并 打包 为 boot.img,主要 用于 安全 启动 和 恢复 系统。 system:用于
提供 系统 运行 环境 的 完整 根 文件系统。
Buildroot 源码
源码
版本: 2022.08
在 system/buildroot/source 目录
.
├── buildroot_packages_2025.02 # 存放下载的 Buildroot 软件包源码,避免多次调试时重复下载
├── build.sh # 主脚本程序
├── configs # 软件包配置文件
├── framework # 输出目录
└── hb_patch_buildroot # X5 系统在原始 Buildroot 上打的补丁
说明:首次build.sh 脚本buildroot_packages_2025.02 目录BR2_DL_DIR 实现)。
如果buildroot_packages_2025.02 目录
注意:该
预编译的根文件系统
当前 BSP 提供
# system
system/buildroot/prebuilt/dr-system_0.0.21~gcc11.3.1_all.deb
# initramfs
system/initramfs/dr-initramfs_0.0.1~gcc11.3.1_all.deb
# QT支持包
system/buildroot/prebuilt/dr-system-qt5_0.0.1~gcc11.3.1_all.deb
对应system/buildroot/source/configs:
.
├── x5_initramfs_defconfig
├── x5_system_defconfig
├── x5_system_qt5_defconfig
├── x5_system_quickstart_defconfig
└── x5_system_with_docker_defconfig
用户
cd system/buildroot/source
./build.sh menuconfig x5_initramfs_defconfig
./build.sh menuconfig x5_system_defconfig
制作 system
执行 buildroot 编译
操作 cd system/buildroot/source ./build.sh build x5_system_defconfig <version number> # eg: 0.0.1
比如:
./build.sh build x5_system_defconfig 0.0.1
注意: 制作
根 文件系统 命令 中 最后 一个 参数 为 镜像 版本号,可以 根据 需要 修改,最终 该 版本号 会 拼接 到 镜像文件 名称 中,编译 出来 的 根 文件系统 镜像 在 system/buildroot/source/framework/output/images目录中,比如: dr-system_0.0.1~gcc11.3.1_all.deb
拷贝
新 镜像 到 预置 目录 并 更新 索引 文件 编译
烧录 所 需 的 根 文件系统 镜像 的 时候,需要 将 新 制作 的 镜像文件 复制到 system/buildroot/prebuilt/目录,也就是 前 文 提到 的 预 编译 的 system rootfs 存放 目录(注意 各个 镜像文件 的 版本号 以 实际 版本 为准): system/buildroot/prebuilt$ ls boot-utils-runtime dr-libgtest_1.14.0~gcc11.3.rel1_arm64.deb dr-system_0.0.29~gcc11.3.1_all.deb dr-initramfs_0.0.1~gcc11.3.1_all.deb dr-libhpatchz_3.1.1~gcc11.3.rel1_arm64.deb series dr-libdnn_1.24.5~gcc11.3.rel1_arm64.deb dr-perf_6.1.12~gcc11.3.rel1_arm64.deb dr-libgdcbin_1.0.0~gcc11.3.rel1_arm64.deb dr-system_0.0.1~gcc11.3.1_all.deb
此时
需要 修改 同一 目录 下 的 system/buildroot/prebuilt/series文件,把旧 版本号 改成 前面 编译 所 配置 的 新 版本号,例如: diff --git a/buildroot/prebuilt/series b/buildroot/prebuilt/series index 42ba771..4617101 100644 --- a/buildroot/prebuilt/series +++ b/buildroot/prebuilt/series @@ -1,4 +1,4 @@ -dr-system_0.0.29~gcc11.3.1_all.deb +dr-system_0.0.1~gcc11.3.1_all.deb dr-libgtest_1.14.0~gcc11.3.rel1_arm64.deb dr-libgdcbin_1.0.0~gcc11.3.rel1_arm64.deb dr-perf_6.1.12~gcc11.3.rel1_arm64.deb
一般
的,建议 按 顺序 递增 版本号,以便 于 维护。 重新
打包 回到
工程 根目录,执行: ./bd.sh system clean ./bd.sh system
即可
在 out/product/目录下 得到 新 的 根 文件系统 镜像 system.img,该镜像 可 直接 用于 烧录。
制作 initramfs
cd system/buildroot/source
./build.sh build x5_initramfs_defconfig <version number> # eg: 0.0.1
比如:
./build.sh build x5_initramfs_defconfig 0.0.1
关于
制作 QT支持包
如果
执行 buildroot 编译
操作 cd system/buildroot/source ./build.sh build x5_system_qt5_defconfig <version number> # 例如: 0.0.1
比如:
./build.sh build x5_system_qt5_defconfig 0.0.1
注意: 制作 QT 支持
包根 文件系统 时,命令 中 最后 一个 参数 为 镜像 版本号,可以 根据 需要 修改。最终 该 版本号 会 拼接 到 镜像文件 名称 中,编译 出 的 根 文件系统 镜像 在 system/buildroot/source/framework/output/images目录中,比如: dr-system-qt5_0.0.1~gcc11.3.1_all.deb
拷贝
新 镜像 到 预置 目录 并 更新 索引 文件 编译
烧录 所 需 的 根 文件系统 镜像 的 时候,需要 将 新 制作 的 镜像文件 复制到 system/buildroot/prebuilt/目录,也就是 前 文 提到 的 预 编译 的 system rootfs 存放 目录(注意 各个 镜像文件 的 版本号 以 实际 版本 为准): system/buildroot/prebuilt$ ls boot-utils-runtime dr-initramfs_0.0.1~gcc11.3.1_all.deb dr-libdnn_1.24.5~gcc11.3.rel1_arm64.deb dr-libgdcbin_1.0.0~gcc11.3.rel1_arm64.deb dr-libgtest_1.14.0~gcc11.3.rel1_arm64.deb dr-libhpatchz_3.1.1~gcc11.3.rel1_arm64.deb dr-perf_6.1.12~gcc11.3.rel1_arm64.deb dr-system-qt5_0.0.1~gcc11.3.1_all.deb dr-system_0.0.1~gcc11.3.1_all.deb dr-system_0.0.30~gcc11.3.1_all.deb dr-system_0.0.31~gcc11.3.1_all.deb dr-system_1.1.2~gcc11.3.1_all.deb series此时
需要 修改 同一 目录 下 的 system/buildroot/prebuilt/series文件,把旧 版本号 改成 前面 编译 所 配置 的 新 版本号,例如: diff --git a/buildroot/prebuilt/series b/buildroot/prebuilt/series index 793d99b..0993a86 100644 --- a/buildroot/prebuilt/series +++ b/buildroot/prebuilt/series @@ -1,4 +1,4 @@ -dr-system_0.0.30~gcc11.3.1_all.deb +dr-system-qt5_0.0.1~gcc11.3.1_all.deb dr-libgtest_1.14.0~gcc11.3.rel1_arm64.deb dr-libgdcbin_1.0.0~gcc11.3.rel1_arm64.deb dr-perf_6.1.12~gcc11.3.rel1_arm64.deb
一般
的,建议 按 顺序 递增 版本号,以便 于 维护。 重新
打包 回到
工程 根目录,执行: ./bd.sh system clean ./bd.sh system
即可
在 out/product/目录下 得到 新 的 根 文件系统 镜像 system.img,该镜像 可 直接 用于 烧录。
4.4.3.2. 使用 Multistrap 制作 Ubuntu 根文件系统
X5 支持
预编译的根文件系统
当前 BSP 提供
system/ubuntu/prebuilt/dr-system-jammy_0.0.1_all.deb
对应system/ubuntu/source/configs:
.
└── x5_system_jammy.conf
用户
制作 system
cd system/ubuntu/source
./build.sh clean
sudo ./build.sh build x5_system_jammy.conf 0.0.1
使用 Multistrap 制作
制作 jammy 的
dpkg --configure -a 逐个4.4.3.3. 使用 APPSDK 进行应用开发
APPSDK(Application SDK,下面arm-gnu-toolchain,拿到 SDK deb 包后install.sh 即可source environment-setup 激活
sysroot 取自 BSP 解包out/deploy/system)+ hbre 产物 + 工具链./bd.sh hbre && ./bd.sh appsdk 即可
SDK 版本号
SDK 内含:
ARM GNU Toolchain 副本(
aarch64-none-linux-gnu-gcc等)bin/下交叉 工具链 相对路径 软链(指向 arm-gnu-toolchain/bin/,无 wrapper 中间层)完整 sysroot(glibc crt + 系统
库 头文件 与 库,如 OpenSSL 3.x、alsa、dbus、bluez、libdrm 等;来自 rootfs 运行库 + 工具链 libc 合并) hbre 库(libcam、libvpf、libalog、libhbmem、libdsp、libpowerctl 等
的 .so与头文件,含 versioned runtime 软链 .so.N)system 域库(libgdcbin、libcjson、libdnn、libgtest、libhpatchz 等,来自 series 引用
的 deb) environment-setup-aarch64-x5-linux环境脚本( source后即可 使用) SDK 版 common
Makefile(hbre/app Makefile.in 通过SRC_DEVICE_COMMON_DIRinclude 该文件) version-aarch64-x5-linux版本追溯 信息
前置条件
SDK 打包者(产出 SDK 的开发者)
打包 SDK 的
完整 X5 项目
源码 已
执行 ./bd.sh lunch <board>选定板级 配置 system 已
解包: ./bd.sh system unpack(产出out/deploy/system/,是 sysroot 的 system 域库来源;改 了 根 文件系统 重编 dr-system deb 后 需 重新 unpack 刷新) hbre 已
构建: ./bd.sh hbre(产出out/build/hbre_deps/与out/deploy/hbre/)外部 toolchain tarball:
toolchain/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
建议./bd.sh 完整
无需out/deploy/system(rootfs 运行库)+ hbre 产物 + 工具链 libc 合并。打包./bd.sh hbre && ./bd.sh appsdk 即可
如果./bd.sh appsdk 会
SDK 使用者(应用开发者)
应用
Ubuntu 22.04(或
其它 Linux 发行版) build-essential、cmake、file(验收脚本 依赖,普通 开发 也 建议 装) 无需
/opt/arm-gnu-toolchain(SDK 自包含)
Ubuntu 可
sudo apt update && sudo apt install -y build-essential cmake file
打包 SDK
在./bd.sh lunch <board> 选板级):
./bd.sh appsdk
版本号HR_V_VER(device/horizon/x5/dr_release_version.mk 导出,如 _V1.1.2)自动v1.1.2),无需
清理 SDK 产物:
./bd.sh appsdk clean # 清 out/deploy/appsdk/images/ 下的 SDK 产物(等同 distclean)
打包out/deploy/appsdk/images/ 目录:
out/deploy/appsdk/images$ ls platform-appsdk-*
platform-appsdk-v1.1.2.deb # SDK 本体(deb 格式,含 SDK 全部文件)
platform-appsdk-v1.1.2.tar.gz # 总包(含 deb + install.sh + relocate-paths.sh + test-sdk.sh)
产物
名 格式 platform-appsdk-<sdk_version>。sdk_version 由HR_V_VER提取并 小写 化(如 _V1.1.2→v1.1.2),由 BSP 版本管理。
tar.gz 总包
$ tar tzf platform-appsdk-v1.1.2.tar.gz
platform-appsdk-v1.1.2.deb
install.sh
relocate-paths.sh
test-sdk.sh
应用tar.gz 总包
安装 SDK
把 tar.gz 总包
tar xzf platform-appsdk-v1.1.2.tar.gz
./install.sh platform-appsdk-v1.1.2.deb
install.sh 会
Found platform-appsdk-v1.1.2.deb
APPSDK supports two install modes:
[1] sudo mode (recommended, requires sudo)
- Installs to a fixed path /opt/platform-appsdk
- Managed by dpkg: upgrade (sudo dpkg -i <new>), remove (sudo dpkg -r)
- Source /opt/platform-appsdk/environment-setup-aarch64-x5-linux from any directory
- On upgrade, dpkg replaces old files automatically — no manual cleanup
[2] no-sudo mode (no sudo required)
- Choose install path interactively (e.g. current directory)
- Managed by install.sh: upgrade/remove via install.sh --uninstall
- WARNING: do not place personal files inside platform-appsdk/ (upgrade removes the whole dir)
- Source <install-path>/environment-setup-aarch64-x5-linux to use
Select [1/2] (default 1):
模式 1:sudo 模式(推荐)
用户sudo dpkg -i(sudo 自身
sudo dpkg -i platform-appsdk-v1.1.2.deb
安装
到 固定 路径 /opt/platform-appsdk用 dpkg 管理
升级 和 卸载 source路径固定,任意 目录 均 可 使用
模式 2:无 sudo 模式
用户dpkg-deb -x 解包
Install path [./]:
# SDK 解到 ./platform-appsdk/
无需 sudo 权限
安装
路径 可 自定义 注意:不要
在 platform-appsdk/目录内 放置 个人 文件(升级 时 整个 目录 会 被 删除 重装)
升级与卸载
升级
sudo 模式:
sudo dpkg -i platform-appsdk-v2.0.0.deb # dpkg 自动替换旧文件
dpkg 自动
无 sudo 模式:
./install.sh platform-appsdk-v2.0.0.deb # 选模式 2,自动删旧目录 + 解新 deb
实现rm -rf 整个platform-appsdk/ 目录platform-appsdk/ 内
卸载
sudo 模式:
sudo dpkg -r platform-appsdk # 软卸载:保留 conffile(environment-setup)
sudo dpkg -P platform-appsdk # 彻底卸载:连 conffile 一起删
无 sudo 模式:
./install.sh --uninstall <安装路径>
# 只删 SDK 文件,用户代码(不在 platform-appsdk/ 内的)保留
dpkg -r 与 dpkg -P 详细对比
| 维度 | sudo dpkg -r platform-appsdk (Remove) |
sudo dpkg -P platform-appsdk (Purge) |
|---|---|---|
| 普通 |
删除 | 删除 |
| conffile(environment-setup) | 保留 | 删除 |
| dpkg 数据库 |
/var/lib/dpkg/info/<pkg>.* 保留 |
/var/lib/dpkg/info/<pkg>.* 全删 |
| dpkg 状态 |
ii → rc(removed, config-files remain) |
ii → un/pn(unknown/purged, not installed) |
| postrm 触发 | postrm remove |
postrm remove + postrm purge |
能否dpkg -i 装回 |
支持 | 支持 |
关键
用 dpkg -r 卸载后:
/opt/platform-appsdk/environment-setup-aarch64-x5-linux ← 还在
/opt/platform-appsdk/sysroot/... ← 已删
dpkg -i platform-appsdk-v1.1.2.deb 重装:
1. 算 conffile md5
2. 比对 .dpkg-new(新版本文件):
- 用户未改 conffile(md5 一致)→ 用新版本覆盖
- 用户改过 conffile(md5 不一致)→ 保留用户版本,新版本存为 conffile.dpkg-dist
- 用户删了 conffile → dpkg 静默处理
3. dpkg 状态:rc → ii
选用
临时
卸载,要 :重装 sudo dpkg -r(保留 conffile,重装时 如果 未改 则 被 新 版本 覆盖) 彻底
清理,重新 :装 sudo dpkg -P(连 conffile 一起删,重装 完全 等于 首次 安装) 升级
到 :新 版本 sudo dpkg -i <新版.deb>(dpkg 自动 remove + install,行为等同 -r + install)
实际
# 1. 装好后看 dpkg 状态
dpkg -l platform-appsdk
# 预期:ii platform-appsdk 1.1.2
# 2. dpkg -r 后看状态
sudo dpkg -r platform-appsdk
dpkg -l platform-appsdk
# 预期:rc platform-appsdk 1.1.2 ← rc = removed, config-files
ls /opt/platform-appsdk/environment-setup-aarch64-x5-linux
# 预期:文件还在
# 3. dpkg -P 后看状态
sudo dpkg -P platform-appsdk
dpkg -l platform-appsdk
# 预期:un <无描述> (或找不到)
ls /opt/platform-appsdk/environment-setup-aarch64-x5-linux
# 预期:No such file or directory
使用 SDK 编译应用
方式一:直接用 gcc 编译
source environment-setup 后,CC、CXX、CFLAGS、LDFLAGS、SDKTARGETSYSROOT 等CC 已含 --sysroot 与 arch 参数),直接$CC/$CXX 编译
# source 环境脚本(每个新 shell 都要 source 一次)
source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
# 编译 helloworld
cat > hello.c <<'EOF'
#include <stdio.h>
int main() { printf("hello x5\n"); return 0; }
EOF
$CC hello.c -o hello
# 验证产物架构
file hello
# hello: ELF 64-bit LSB executable, ARM aarch64, ...
# 链接 hbre 库(如 libcam)
$CC app.c -o app -lcam -lvpf -lgdcbin
# 链接系统库(如 OpenSSL)
$CC app.c -o app -lssl -lcrypto
# C++ 项目用 $CXX
$CXX app.cpp -o app -lstdc++
# libdrm:头文件在 include/libdrm 子目录,需显式 -I
$CC app.c -o app -I${SDKTARGETSYSROOT}/usr/include/libdrm -ldrm
CC 的aarch64-none-linux-gnu-gcc -mcpu=cortex-a55 -mabi=lp64 --sysroot=<SDK sysroot>,已含$CC 即可。
CFLAGS 跟随 HR_TARGET_MODE:debug 模式-O0 -g,release 模式-O2,与 BSP build/common/Makefile 一致。
方式二:CMake 项目
source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
mkdir build && cd build
cmake ..
make
APPSDK 无toolchainfile.cmake,CMake 项目environment-setup 配好$CC。在 CMakeLists.txt 里取
cmake_minimum_required(VERSION 3.10)
set(CMAKE_C_COMPILER aarch64-none-linux-gnu-gcc)
set(CMAKE_C_FLAGS "-mcpu=cortex-a55 -mabi=lp64 --sysroot=$ENV{SDKTARGETSYSROOT} -isystem $ENV{SDKTARGETSYSROOT}/usr/include -L$ENV{SDKTARGETSYSROOT}/usr/lib")
project(myapp C)
add_executable(myapp main.c)
方式三:autotools 项目
主机sudo apt install -y autoconf automake libtool
source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
./configure --host=aarch64-none-linux-gnu
make
environment-setup 设CONFIGURE_FLAGS(含 --target、--host、--build、--with-libtool-sysroot),autotools 项目 ./configure 时会
若PKG_CHECK_MODULES([...],[libdrm]) 探测系统libdrm.pc 报 Package 'libdrm' not found。SDK 不带 .pc,设 <PREFIX>_CFLAGS/<PREFIX>_LIBS 环境变量不能旁路pkg-config --exists)。需pkg_cv_<PREFIX>_CFLAGS/_LIBS、PKG_CONFIG=true ./configure、或 patch configure.ac),机制
方式四:用 make 编译 X5 项目(platform_samples / hbre 模块)
X5 项目platform_samples 与 hbre 下APPSDK_ROOT(由 environment-setup 设置)即-I/-L 路径out/。
source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
# 编译 platform_samples 下的某个样例
cd platform_samples/sample_dsp
make clean && make
# 产物 sample_dsp(ELF 64-bit, ARM aarch64)
# 编译 hbre 下的某个模块
cd hbre/dsp
make clean && make
# 产物 out/src/libdsp.so.1.0.0(ELF 64-bit, ARM aarch64)
适用范围:
platform_samples:除
sunrise_camera(有独立 config 机制)和 multi_pipe_stereo_infer/client(源码含 -Werror下不过 的 warning)外,其余 样例 均 可 在 SDK 环境 编译。 hbre:
camsys/libcam、camsys/libvpf、dsp、hbutils、libefuse、libhbmem、libipc/libipcfhal、liblog、libmm、libspi/spi-hal、openssl-engine、otaupdate、power-ctl、secure_storage、viotool/libhbplayer共 15 个模块 均 可 make产出.so或可执行文件 到 模块 自身 out/。
SDK 模式environment-setup 时./bd.sh 流程。
hbre 模块裸 make 的 install 行为
make 的 install 行为hbre 多数Makefile.in 把 deb: 设deb: install,所以make(不带libxxx.so + 头文件 xxx.h)写$OUTPUT_HBROOTFS_DIR——SDK 模式${PWD}/deploy(source 时deploy/),不
# source 时 PWD 决定 deploy 落点
cd ~/myproject && source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
# 此时 OUTPUT_HBROOTFS_DIR=~/myproject/deploy,install 产物落这里
cd hbre/dsp && make
# 编译产物 → hbre/dsp/out/src/libdsp.so.1.0.0
# install 产物 → ~/myproject/deploy/usr/lib/libdsp.so(软链→out/)
# ~/myproject/deploy/include/xxx.h(软链→源码 include/)
deploy/ 是rm -rf deploy/ 清理,不make src/make build 只
验收 SDK
SDK 自带test-sdk.sh(在
bash ./test-sdk.sh /opt/platform-appsdk
预期
[PASS] 1. sysroot points to SDK
[PASS] 2. compile helloworld
[PASS] 2b. helloworld is aarch64
[PASS] 3. link hbre (libcam)
[PASS] 4. link system libssl
[PASS] 5. cmake project builds
[PASS] 6a. version file exists
...
[PASS] 6f. version has Timestamp
Results: 12 passed, 0 failed
全 PASS 说明 SDK 完整
SDK 目录结构
/opt/platform-appsdk/ # sudo 模式固定路径(无 sudo 模式为用户选的路径下/platform-appsdk/)
├── environment-setup-aarch64-x5-linux # source 入口(导出 APPSDK_ROOT/SDKTARGETSYSROOT/$CC 等)
├── version-aarch64-x5-linux # 版本追溯信息
├── Makefile # SDK 版 common(hbre/app Makefile.in 通过 SRC_DEVICE_COMMON_DIR include)
├── bin/ # 交叉工具链相对路径软链(→ ../arm-gnu-toolchain/bin/,无 wrapper)
├── arm-gnu-toolchain/ # ARM GNU Toolchain 副本
│ └── bin/
└── sysroots/
└── aarch64-x5-linux/ # sysroot(编译时 --sysroot 指向这里)
├── lib -> usr/lib # 根级软链(rootfs 布局)
├── lib64 -> lib
├── include -> usr/include
└── usr/
├── include/ # 头文件(X5 + libc 合并)
├── lib/ # 库(hbre .so/.so.N + system .so + rootfs 运行库)
└── lib64/ # crt 启动文件 + libc(来自工具链 libc)
version 文件
version-aarch64-x5-linux 记录 SDK 的
$ cat /opt/platform-appsdk/version-aarch64-x5-linux
Toolchain: arm-gnu-toolchain-11.3.rel1 (gcc 11.3.1)
APPSDK Version: v1.1.2
SDK Pack Timestamp: 20260722134800
HR_TARGET_MODE: debug
system debs (from series):
dr-system_1.0.0~gcc11.3.1_all.deb
...
hbre modules git hashes:
camsys: fdc59db7
dsp: 2fa6940
...
各字段
Toolchain:SDK 内置
的 工具链 版本 与 gcc 版本 APPSDK Version:与 BSP
HR_V_VER对齐的 大 版本号 SDK Pack Timestamp:SDK 打包
时刻(UTC) HR_TARGET_MODE:打包
时 的 板级 模式(debug/release),影响 CFLAGS system debs (from series):SDK 的 system 域库
来自 的 deb 文件名 清单 hbre modules git hashes:各 hbre 仓库
打包 时 的 git commit hash
排查”这个 SDK 是从
常见问题
source environment-setup 报错 “must be sourced, not executed”
environment-setup 必须source(或 .)加载,不能bash 直接
# 错误
bash /opt/platform-appsdk/environment-setup-aarch64-x5-linux
# 正确
source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
用 sh source 报错 “requires bash, not sh”
environment-setup 用
# 错误(dash/sh 不支持)
sh -c '. /opt/platform-appsdk/environment-setup-aarch64-x5-linux'
# 正确
bash -c 'source /opt/platform-appsdk/environment-setup-aarch64-x5-linux'
链接 hbre 库报错 “cannot find -lxxx”
先跑 test-sdk.sh 确认 SDK 完整。若
SDK 升级后旧版本残留
sudo 模式:
sudo dpkg -i <新版本.deb>自动替换 旧 文件,无需 手动 清理 无 sudo 模式:
./install.sh <新版本.deb>(选模式 2)自动 删旧 platform-appsdk/整目录 后 重装
SDK 移动到别的路径后不能用
sudo 模式/opt/platform-appsdk 是install.sh 即可。
dpkg -r 后 environment-setup 还在
这是 dpkg 标准dpkg -i 安装
如果没
改过 这个文件,dpkg 会 用 新 版本 覆盖(看起来 像”全新 安装”) 如果改过这个
文件(比如 改了 CFLAGS),dpkg 会 保留 版本,新 版本 存 为 .dpkg-dist,需要手动 合并
如果sudo dpkg -P platform-appsdk。
重装/升级时 dpkg 询问 environment-setup 如何处理(conffile 冲突)
症状:sudo 模式sudo dpkg -i platform-appsdk-vX.X.X.deb)时,dpkg 交互式
Configuration file '/opt/platform-appsdk/environment-setup-aarch64-x5-linux'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** environment-setup-aarch64-x5-linux (Y/I/N/O/D/Z) [default=N] ?
根因:environment-setup-aarch64-x5-linux 被 deb 标记
手动
编辑 过 /opt/platform-appsdk/environment-setup-aarch64-x5-linux(如调 CFLAGS、改路径 变量) 旧版 SDK 装着,新版 deb 的 environment-setup 内容
有 变化
选项
| 选项 | 行为 | 适用 |
|---|---|---|
Y / I |
用 deb 里 |
没 |
N / O(默认) |
保留 |
改过 conffile 想 |
D |
显示 |
想先 |
Z |
启动 shell 检查 | 想 |
解决方案:
没
改过 / 想 :输入用 新版 Y(推荐,确保用 最新 environment-setup) 改过
想 :输入保留 N(默认),保留你 的 本地 修改;之后 可 手动 对比 新 版本 合并 需要 的 部分 想先
看 :输入差异 D看清楚再选 Y/N
避免DEBIAN_FRONTEND=noninteractive 或 dpkg --force-confold/--force-confnew 跳过
# 保留本地 conffile 版本(非交互,等价默认 N)
sudo DEBIAN_FRONTEND=noninteractive dpkg -i platform-appsdk-v1.1.2.deb
# 或显式指定
sudo dpkg -i --force-confold platform-appsdk-v1.1.2.deb # 保留旧版本
sudo dpkg -i --force-confnew platform-appsdk-v1.1.2.deb # 用新版本覆盖
中断iU(已
dpkg -l platform-appsdk | tail -1
# 若显示 iU(Unpacked-not-configured)= 半安装,需重新配置:
sudo dpkg --configure platform-appsdk
# 或直接重装一次(这次正常回答 Y/N):
sudo dpkg -i platform-appsdk-v1.1.2.deb
conffile 保护
是 dpkg 标准 机制。conffile 被 标记 为 配置文件,重装/升级 时 dpkg 比较 md5 判断 是否 用户 改过,改过 则 交互式 询问——不是 bug。
升级 SDK 后需重新 source
升级 SDK(重装 deb)或environment-setup 后,之前$OUTPUT_HBROOTFS_DIR 还是make 会
echo $OUTPUT_HBROOTFS_DIR
# 应显示 .../deploy;若显示 .../sysroots/aarch64-x5-linux 则是旧环境
# 旧环境需重新 source:
source /opt/platform-appsdk/environment-setup-aarch64-x5-linux
注意事项
工具链
版本 :SDK 内置arm-gnu-toolchain-11.3.rel1,工具链升级 时需 重新 打包 SDK。 路径
固定 :sudo 模式装 到 /opt/platform-appsdk是固定 路径,不要 手动 移动;如 需换 路径,在 新 路径 重新 跑 install.sh。