配置交叉编译环境 - PC to Raspi/RDK/...

配置交叉编译环境 - PC to Raspi/RDK/…

嵌入式 Linux 开发板性能有限,于是在电脑配置交叉编译环境,编译出 ARM 架构的软件

但是对于 C++ 此类依赖系统 glibc、stdc++ 的项目,电脑直接配置需要整理 glibc、stdc++版本,否则即便编译成功也不能正常运行。因此记录一下直接使用官方镜像配置交叉编译环境,不需再关心版本问题。

本文使用 Docker 进行配置,也可使用 QEMU 配置

准备工作

需要准备以下文件:

  1. raspberry pi 镜像/RDK镜像/……

需要安装以下环境

  • Windows

    1. WSL
    2. Docker
  • Linux

    1. Docker

配置 Docker

为 Docker 添加跨架构支持

1
docker run --rm --privileged tonistiigi/binfmt --install all

检查支持的架构

1
docker buildx ls | grep arm64
1
\_ default    \_ default       running   v0.0.0+unknown   linux/amd64 (+3), linux/arm64, linux/arm (+2), linux/ppc64le, (6 more)

打包镜像

查看镜像文件的分区

1
fdisk -l rdk-x3-ubuntu22-preinstalled-server-3.0.3-arm64.img

输出为

1
2
3
4
5
6
7
8
9
10
Disk rdk-x3-ubuntu22-preinstalled-server-3.0.3-arm64.img:7.19 GiB,7721713664 字节,15081472 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xffc5da1c

设备 启动 起点 末尾 扇区 大小 Id 类型
rdk-x3-ubuntu22-preinstalled-server-3.0.3-arm64.img1 8192 532479 524288 256M c W95 FAT3
rdk-x3-ubuntu22-preinstalled-server-3.0.3-arm64.img2 * 532480 15081471 14548992 6.9G 83 Linux

其中类型为 Linux 的分区,是根分区,将其挂载到一个目录

1
2
sudo mkdir -pv /mnt/rdkx3_img
sudo mount -o loop,offset=$((512*532480)) rdk-x3-ubuntu22-preinstalled-server-3.0.3-arm64.img /mnt/rdkx3_img

然后把所有文件打包成一个 docker 镜像

1
sudo tar -C /mnt/rdkx3_img -c . | docker import --platform linux/arm64 - rdkx3-img:3.0.3

完成

检查测试

检查 docker 镜像存在

1
docker image ls
1
2
3
4
5
                                                                               i Info →   U  In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
moby/buildkit:buildx-stable-1 fe0990fb85c4 227MB 0B
rdkx3-img:3.0.3 b1ab55e333ab 5.97GB 0B
tonistiigi/binfmt:latest 6989522fc1e3 83.3MB 0B

交互模式运行之

1
2
3
docker run -it --platform linux/arm64 rdkx3-img:3.0.3 /bin/bash
root@784c454554d8:/# arch
aarch64

在此 Docker 容器中编译完成的包、可执行文件,可以直接复制到板子上运行