源码资源:
2、【CORDIC工程源码】
系列章节目录:
【FPGA linux系列】:1.1什么是嵌入式 Linux 系统?(内容乱码修正)
【FPGA linux系列】:1.2 ZYNQ 异构平台简介:软件定义仪器的硬件基石
本项目创建一个7.4GB的镜像,包含两个分区:

普通挂载:物理设备(/dev/sda1)→ 挂载点
Loop 挂载:文件(.img)→ 虚拟设备(/dev/loop0)→ 挂载点
这个"Loop 设备"把文件模拟成块设备
对应image.sh第 91-139 行:
# 1. 找一个空闲的 loop 设备DEVICE=$(losetup -f)# 通常返回 /dev/loop0# 2. 关联镜像文件,-P 参数自动探测分区losetup -P $DEVICE $IMAGE# 结果:# /dev/loop0 → 整个镜像# /dev/loop0p1 → 分区1(boot)# /dev/loop0p2 → 分区2(root)# 3. 格式化分区mkfs.vfat /dev/loop0p1mkfs.ext4 /dev/loop0p2
对应image.sh第 145-176 行:
# 1. 读取分区表信息,计算偏移SECTOR_SIZE=512BOOT_START=8192# 扇区号(4MB / 512B = 8192)BOOT_OFFSET=$((BOOT_START * SECTOR_SIZE))# 4194304 字节# 2. 直接用 offset 挂载mount -o loop,offset=$BOOT_OFFSET,sizelimit=$BOOT_SIZE $IMAGE $BOOT_DIR
为什么用两种方式?
losetup -P(简单直接)对应ubuntu.sh第 69-80 行:
# 步骤 1:复制 DNS 配置(新系统也需要上网下载软件)cp /etc/resolv.conf $ROOT_DIR/etc/# 步骤 2:复制 QEMU 模拟器(让 ARM 程序能运行)cp /usr/bin/qemu-arm-static $ROOT_DIR/usr/bin/# 步骤 3:挂载系统目录(chroot 内的进程需要这些)sudo mount -o bind /dev/ ”${ROOT_DIR}/dev/”# 设备文件sudo mount -o bind /dev/pts ”${ROOT_DIR}/dev/pts”# 伪终端(SSH 需要)sudo mount -t proc proc ”${ROOT_DIR}/proc/”# 进程信息(ps 命令需要)sudo mount -t sysfs sys ”${ROOT_DIR}/sys/”# 系统信息sudo mount -o bind /run ”${ROOT_DIR}/run”# 运行时数据
chroot $ROOT_DIR <<- EOF_CHROOT# 这里面的命令都在新系统内执行!# /usr/bin/apt-get 实际上是 $ROOT_DIR/usr/bin/apt-getapt-get updateapt-get install -y vim# ... 其他命令EOF_CHROOT
注意事项:
我们在 x86 主机上执行:
chroot $ROOT_DIR /usr/bin/apt-get install vim
apt-get 是 ARM 二进制文件(因为 ROOT_DIR 是 ARM Ubuntu)
x86 CPU 不能直接执行 ARM 指令 → 会报错 "Exec format error"
Linux 内核有个功能叫binfmt_misc,可以注册"文件格式处理器":
注册规则:1、如果文件是 ARM ELF 格式2、用 /usr/bin/qemu-arm-static 来执行它结果:1、当你执行 /usr/bin/apt-get(ARM 程序)2、内核自动调用:/usr/bin/qemu-arm-static /usr/bin/apt-get3、翻译执行,就像在 ARM 机器上一样!
这就是为什么在 chroot 前要复制 qemu-arm-static 到 $ROOT_DIR/usr/bin/。
# 进入 chroot 后执行uname -m# 应该输出:armv7l (ARM 架构)# 而不是:x86_64(宿主机架构)
构建过程需要:
losetup、mount、chroot 等 root 权限操作Docker 保证:任何人、任何机器,构建环境完全相同。
对应Dockerfile:
# 1. 基础镜像:官方 Ubuntu 24.04FROM ubuntu:24.04# 2. 安装构建工具链(一次安装,重复使用)RUN apt-get update && apt-get install -y \bc bison build-essential curl qemu-user-static ...# 3. 复制项目文件(让容器包含所有构建脚本)COPY build.sh /build/COPY debian/ /build/debian/# 4. 启动时执行构建WORKDIR /buildCMD [”./build.sh”]
docker run \--privileged# 必须!需要 mount、losetup 等特权操作-v /dev:/dev# 必须!访问宿主机的 loop 设备-v $(pwd)/artifacts:/artifacts# 可选,把产物映射出来redpitaya-ubuntu-os-builder

项目把所有自定义服务放在overlay/etc/systemd/system/:
redpitaya_nginx.service | |
redpitaya_scpi.service | |
sockproc.service | |
jupyter.service | |
hostname-mac.service | |
ssh-reconfigure.service | |
wireless-mode-ap.service |
启用服务的命令:
systemctl enable jupyter# → 在 /etc/systemd/system/multi-user.target.wants/ 创建软链接# → 下次启动时自动运行
✨ 如果本文对你有帮助
推荐合集阅读
👇
下载资料请扫码进小程序,正在内测中.......
