如何为树莓派5交叉编译安装开发包并获取根文件系统?
树莓派5交叉编译:获取真实根文件系统及编译配置
一、能否从运行中的树莓派复制根文件系统?
可以,但需注意以下细节:
- 排除虚拟/临时目录:复制时要跳过
/proc、/sys、/dev这类内核虚拟文件系统,以及/tmp、/run、/mnt、/media等临时/挂载目录,避免无效数据和冲突。推荐用rsync命令:rsync -avz --exclude={/proc,/sys,/dev,/tmp,/run,/mnt,/media} pi@<树莓派IP>:/ /path/to/local/raspberrypi-rootfs - 修正系统配置:复制完成后,需修改根文件系统内的
/etc/fstab,注释掉虚拟文件系统的挂载项;若需要在主机上通过该根文件系统访问网络,可调整/etc/resolv.conf。 - 局限性:如果树莓派系统安装了大量无关软件,根文件系统会冗余过大;后续更新依赖需重新复制或进入chroot环境操作。
二、更推荐的方法:从官方镜像提取根文件系统
这种方式能获得干净、与树莓派官方系统完全一致的根文件系统,步骤如下:
- 下载官方镜像:获取树莓派5对应的64位Raspberry Pi OS(Bookworm版本)镜像。
- 挂载根分区:
- 用
fdisk -l /path/to/raspios.img查看镜像分区信息,找到根分区的起始扇区(比如27262976)。 - 计算偏移量并挂载:
sudo mount -o loop,offset=$((27262976*512)) /path/to/raspios.img /path/to/local/raspberrypi-rootfs
- 用
- 在chroot中安装依赖:
- 先挂载必要的虚拟文件系统,确保chroot环境正常运行:
sudo mount --bind /dev /path/to/local/raspberrypi-rootfs/dev sudo mount --bind /proc /path/to/local/raspberrypi-rootfs/proc sudo mount --bind /sys /path/to/local/raspberrypi-rootfs/sys - 安装
qemu-user-static以支持在x86_64主机上运行ARM64程序:sudo apt install qemu-user-static sudo cp /usr/bin/qemu-aarch64-static /path/to/local/raspberrypi-rootfs/usr/bin/ - 进入chroot环境并安装开发依赖:
sudo chroot /path/to/local/raspberrypi-rootfs apt update && apt install libwebkit2gtk-4.0-dev build-essential cmake exit - 退出后卸载虚拟文件系统:
sudo umount /path/to/local/raspberrypi-rootfs/{sys,proc,dev}
- 先挂载必要的虚拟文件系统,确保chroot环境正常运行:
三、CMake交叉编译配置
- 安装交叉编译器:
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - 创建工具链文件:新建
toolchain-aarch64-rpi.cmake,内容如下:set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) set(CMAKE_SYSROOT /path/to/local/raspberrypi-rootfs) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - 执行编译:
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=toolchain-aarch64-rpi.cmake cmake --build build
内容的提问来源于stack exchange,提问作者jiandingzhe




