RDK X5 如何打包镜像?防止每次重新生成deoloy目录。

我通过RDK X5 进行系统的编译。可以根据README中指导使用 pack_image.sh 脚本生成固件。但是此脚本每次会重新解压文件目录,导致我二次开发修改的文件被覆盖掉了,无法真正的打包进入固件。

举例:我要增加摄像头驱动,修改/deploy/rootfs_server/app/multimedia_samples/vp_sensors目录下的vp_sensor.c文件,但是每次调用./pack_image.sh后,会重新解压deploy这个目录,导致修改被更新覆盖掉了。

诉求:希望打包不会覆盖我修改的文件,因为要做二次开发。

deploy/rootfs_server 只是打包的中间产物:pack_image.sh 每次都会从 rootfs 包(tar/deb)重新解压展开这个目录,所以在 deploy 下面改文件必然被覆盖。修改必须落进「打包的源头」才能进固件,官方给了两条路:

1. 正确姿势:改驱动源码重编,产物再集成进镜像

vp_sensors 这类 sensor 驱动不该改 deploy 里的副本。X5 sensor 驱动源码在 hbre/camsys/libcam/src/sensor/<sensor名>/,编译产出 lib<sensor>.so.1.0.0,板端部署位置是 /usr/hobot/lib/sensor/:

./bd.sh hbre libcam pack   # 编译并打包 hbre.img
./bd.sh pack               # 重新生成完整固件

适配流程(dts、setting 表、gain_lut、接口实现)参考官方 Sensor Bring-Up 文档:

2. 把自定义文件固化进 system 镜像的两种官方方法

  • overlay 目录:把文件按板端路径放进 system/buildroot/prebuilt/boot-utils-runtime/,编译 system 镜像时会自动合并进去,不会被解压覆盖;
  • 重做 rootfs 包:修改后重新打包 rootfs deb,更新 system/buildroot/prebuilt/series 里的版本号,再 ./bd.sh system clean && ./bd.sh system。

文档见:

图省事的话也可以直接改 rootfs tar 包本身(解开、替换文件、重新压缩),这样每次解压出来的就是你的版本,但升级 SDK 时容易丢改动,不推荐长期用。

一个坑提前说:自编 sensor 驱动库的版本必须和板端 hobot-camera 配套,否则会出现 ioctl 号对不上、sensor init 失败(-203)这类问题,论坛有同样案例(rdk x5 点亮sc235hai问题 )。

另外你这个属于自研 sensor 适配 + 驱动源码定制,深度适配(非官方 sensor bring-up、私有硬件)官方公开文档覆盖有限,建议报名 DGP 开发者计划获取更深入的支持:https://developer.d-robotics.cc/dgp

你用的是 RDK X5 的 x5-rdk-gen。deploy/rootfs_server 是打包时展开的目录,每次运行 pack_image.sh 都会重建,直接改这里会丢。

建议先在 source 里找到 vp_sensor.c 所属工程,改源码后用 ./mk_debs.sh <对应包名> 重编 deb;确认新包在 deploy/deb_pkgs,再运行 sudo ./pack_image.sh -l 用本地包打镜像。vp_sensors 属于多媒体示例时,重点查 hobot-multimedia-samples,具体以你这版源码归属为准。打完再检查文件是否进了新镜像。若 source 里找不到这个文件,发一下所用分支和 find source -name vp_sensor.c 的结果,我们再帮你定位对应包。

官方 X5 构建说明:https://github.com/D-Robotics/x5-rdk-gen/blob/main/README.md