news 2026/5/6 16:50:27

【飞腾平台实时Linux方案系列】第八篇 - 飞腾平台实时Linux开发环境进阶搭建。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【飞腾平台实时Linux方案系列】第八篇 - 飞腾平台实时Linux开发环境进阶搭建。

一、简介:为什么必须“进阶”搭建飞腾实时环境?

  • 政策驱动:2025 年关键基础设施 100% 国产化替代进入验收期,飞腾芯片市占率 > 35%,但原生开发资料零散

  • 痛点

    • 开发机 x86,目标机飞腾 ARM64 → 交叉编译配置复杂,手动拷文件效率低

    • 内核打 PREEMPT_RT 补丁后,驱动符号对不上

    • 多人协作,无 Git 流程,版本回溯靠“猜”。

  • 收益

    • 一套脚本完成“toolchain + kernel + driver + app”一体化编译

    • 基于 VS Code 远程调试,单步跟踪实时任务。

    • 通过 GitLab CI自动出件,缩短迭代周期 40%。


二、核心概念:5 个关键词先搞懂

关键词一句话本文出现场景
飞腾(Phytium)国产 ARMv8 处理器,工业宽温 -40~85 ℃FT-2000/4、D2000、E2000
交叉编译在 x86_64 主机生成 ARM64 指令gcc-linaro-11.3
PREEMPT_RT官方实时补丁,将 Linux 变成硬实时 OS5.15.71-rt53
Buildroot/Yocto根文件系统一键生成器本文用 Buildroot 2023.02 LTS
remote-sshVS Code 插件,远程直接调试目标板零拷贝、图形化

三、环境准备:10 分钟搭好“飞腾实验室”

1. 硬件清单

设备规格数量
飞腾开发板(EVB)D2000 4 核 1.8 GHz,8 GB DDR41
固态硬盘NVMe 256 GB(装系统 + 实时内核)1
串口线USB-TTL 1152001
网线千兆,连交换机1

2. 软件版本

组件版本下载地址(官方)
Host OSUbuntu 22.04 x86_64自带
交叉工具链gcc-linaro-11.3-2022.06-x86_64_aarch64-linux-gnuLinaro
内核linux-5.15.71 + rt53kernel.org + rt patch
Buildroot2023.02 LTSbuildroot.org
VS Code≥ 1.78官网 deb

3. 一键脚本: toolchain 自动下载

#!/bin/bash # install_toolchain.sh TOOLCHAIN=gcc-linaro-11.3-2022.06-x86_64_aarch64-linux-gnu wget https://releases.linaro.org/components/toolchain/binaries/latest-11.3-2022.06/aarch64-linux-gnu/${TOOLCHAIN}.tar.xz sudo tar -xf ${TOOLCHAIN}.tar.xz -C /opt/ echo 'export PATH=/opt/'${TOOLCHAIN}'/bin:$PATH' >> ~/.bashrc source ~/.bashrc aarch64-linux-gnu-gcc --version # 验证

四、应用场景(300 字):矿山皮带运输集控系统

山西某大型煤矿 2024 年国产化改造,主运输皮带全长 6 km,坡度 12°,最高带速 4 m/s。原控制器为国外 PLC,周期 10 ms;改造后采用飞腾 D2000 + 实时 Linux(PREEMPT_RT 5.15),周期缩短到 2 ms,实现:

  • 拉绳、跑偏、打滑 3 类保护信号硬实时响应 ≤ 1 ms;

  • 分布式 I/O 通过 EtherCAT 总线 1 kHz 同步;

  • 双机热备,故障切换时间 < 50 ms;

  • 整套系统需通过 SIL 2 认证,满足《煤矿安全规程》。

开发团队在上海 x86 主机编码,通过本文“一体化编译环境”一键出件,现场零调试,2024 年 6 月顺利通过国家矿山安全监察局验收,成为首批国产化井下主运集控示范案例


五、实际案例与步骤:30 min 完成“一体化构建 + 远程调试”

所有脚本均放~/phytium-lab,可逐行复制。

5.1 目录结构规划(可复制)

mkdir -p ~/phytium-lab/{kernel,buildroot,app,scripts,debug} cd ~/phytium-lab tree -L 1

输出:

. ├── kernel # 内核 + RT 补丁 ├── buildroot # 根文件系统 ├── app # 用户实时应用 ├── scripts # 一键编译脚本 └── debug # VS Code 配置

5.2 步骤 1:内核实时化与交叉编译

cd ~/phytium-lab/kernel wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.71.tar.xz wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.15/patch-5.15.71-rt53.patch.xz tar -xf linux-5.15.71.tar.xz cd linux-5.15.71 xzcat ../patch-5.15.71-rt53.patch.xz | patch -p1

飞腾 defconfig(已含 D2000 设备树):

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- phytium_defconfig ./scripts/config -e CONFIG_PREEMPT_RT ./scripts/config -e CONFIG_SERIAL_8250_CONSOLE make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

结果:
arch/arm64/boot/Image→ 内核镜像
arch/arm64/boot/dts/phytium/*.dtb→ 设备树


5.3 步骤 2:Buildroot 造出根文件系统

cd ~/phytium-lab/buildroot wget https://buildroot.org/downloads/buildroot-2023.02.tar.gz tar -xf buildroot-2023.02.tar.gz cd buildroot-2023.02

创建configs/phytium_defconfig

cat > configs/phytium_defconfig <<EOF BR2_arch="aarch64" BR2_aarch64=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TOOLCHAIN_EXTERNAL_PATH="/opt/gcc-linaro-11.3-2022.06-x86_64_aarch64-linux-gnu" BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="aarch64-linux-gnu" BR2_TARGET_GENERIC_HOSTNAME="phytium-rt" BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" BR2_PACKAGE_RT_TESTS=y BR2_PACKAGE_ETHTOOL=y EOF

一键编译:

make phytium_defconfig make -j$(nproc)

输出:output/images/rootfs.ext4
大小约 120 MB,内含 rt-tests、ethtool、gdbserver。


5.4 步骤 3:用户实时应用交叉编译

/* app/rt_loop.c 2 ms 循环示例 */ #include <stdio.h> #include <time.h> #include <unistd.h> int main() { struct timespec ts; while (1) { clock_gettime(CLOCK_MONOTONIC, &ts); printf("Tick %ld.%09ld\n", ts.tv_sec, ts.tv_nsec); usleep(2000); /* 2 ms */ } return 0; }

Makefile:

CROSS=aarch64-linux-gnu- CC=$(CROSS)gcc APP=rt_loop all: $(CC) -O2 -Wall rt_loop.c -o $(APP) clean: rm -f $(APP)

编译:

cd ~/phytium-lab/app make file rt_loop # 验证 ELF 64-bit LSB aarch64

5.5 步骤 4:SD 卡/TF 卡镜像打包(可复制脚本)

#!/bin/bash # scripts/mk_sdcard.sh DEV=/dev/sdX # 请确认自己的 SD 卡设备号 sudo parted $DEV mklabel gpt sudo parted $DEV mkpart primary 1MiB 100MiB sudo parted $DEV mkpart primary 100MiB 100% sudo mkfs.vfat -F 32 ${DEV}1 sudo mkfs.ext4 ${DEV}2 sudo mount ${DEV}1 /boot sudo mount ${DEV}2 /rootfs # 拷贝内核与 dtb sudo cp ~/phytium-lab/kernel/linux-5.15.71/arch/arm64/boot/Image /boot/ sudo cp ~/phytium-lab/kernel/linux-5.15.71/arch/arm64/boot/dts/phytium/d2000-evb.dtb /boot/ # 拷贝 rootfs sudo cp ~/phytium-lab/buildroot/buildroot-2023.02/output/images/rootfs.ext4 /rootfs/ sudo cp ~/phytium-lab/app/rt_loop /rootfs/root/ sudo umount /boot /rootfs echo "SD 卡制作完成,插到飞腾板卡即可启动"

5.6 步骤 5:VS Code 远程调试(零拷贝)

  1. 目标板启动后插网线,自动 DHCP 获得 IP(例:192.168.1.100)。

  2. 主机装插件:

    Remote-SSH / Remote-Explorer
  3. 一键 ssh config:

cat >> ~/.ssh/config <<EOF Host phytium HostName 192.168.1.100 User root ForwardX11 yes EOF
  1. 打开 VS Code → Remote-SSH: Connect to Host →phytium

  2. F5 调试:

    • 安装插件C/C++

    • 创建.vscode/launch.json

{ "version": "0.2.0", "configurations": [ { "name": "gdb remote", "type": "cppdbg", "request": "launch", "program": "/root/rt_loop", "miDebuggerServerAddress": "192.168.1.100:1234", "miDebuggerPath": "aarch64-linux-gnu-gdb", "cwd": "/root", "externalConsole": false } ] }
  1. 目标板运行:

    gdbserver :1234 /root/rt_loop

    主机点绿色三角 → 单步、断点、变量监视全部支持。


六、常见问题与解答(FAQ)

问题现象解决
make Image报缺 libssl-devHOSTCC scripts/extract-cert 失败sudo apt install libssl-dev
SD 卡启动 hang 在 “Starting kernel”设备树不匹配确认拷贝的是d2000-evb.dtb且 U-Boot fdtaddr 正确
gdbserver 提示“Exec format error”文件非 ARM64重新make时忘记CROSS_COMPILE
VS Code 无法连接网络不通ping 192.168.1.100确认;关闭主机防火墙
cyclictest 延迟 > 100 μs未关超线程/电源管理BIOS 关闭 Turbo、C-State,内核加nohz_full=2,3

七、实践建议与最佳实践

  1. 脚本化一切
    mk_sdcard.sh放 GitLab CI,每晚自动出件,第二天直接烧卡测试。

  2. 版本锁定
    toolchain、Buildroot、内核 commit 哈希写入versions.mk,任何升级需 MR 评审。

  3. 双备份策略
    同时输出Image.gzImage,现场调试用 uncompressed,节省 1 s 启动时间。

  4. 分区留余量
    SD 第 1 分区 100 MiB,后续可放第二套内核,支持 A/B 升级。

  5. 远程调试优先
    串口只输出 printk,应用调试全走 gdbserver,减少现场来回。

  6. 实时性验证门禁
    CI 里跑cyclictest -p99 -d60s,Max > 50 μs 即 Pipeline 失败,防止代码回归。


八、总结:一张脑图带走全部要点

飞腾实时 Linux 进阶环境 ├─ 主机:Ubuntu + Linaro 11.3 toolchain ├─ 目标:D2000 + RT 内核 5.15.71-rt53 ├─ 构建: │ ├─ kernel: make ARCH=arm64 CROSS_COMPILE=aa64- │ ├─ rootfs: Buildroot 2023.02 │ └─ app: Makefile 交叉编译 ├─ 调试:VS Code + gdbserver 零拷贝 └─ CI:自动出件 + cyclictest 门禁

下一步:在此环境基础上,继续加入 EtherCAT 主站、SIL 2 功能安全认证、双机冗余热切换——让“国产芯 + 实时系统”真正在矿山、电网、高铁等关键领域落地生根。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 16:06:00

MRIcroGL:专业医学影像可视化的全能解决方案

MRIcroGL&#xff1a;专业医学影像可视化的全能解决方案 【免费下载链接】MRIcroGL v1.2 GLSL volume rendering. Able to view NIfTI, DICOM, MGH, MHD, NRRD, AFNI format images. 项目地址: https://gitcode.com/gh_mirrors/mr/MRIcroGL 在医学影像分析领域&#xff…

作者头像 李华
网站建设 2026/5/5 16:05:48

5分钟快速解锁付费内容:新手必备的完整教程

5分钟快速解锁付费内容&#xff1a;新手必备的完整教程 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 还在为付费墙烦恼&#xff1f;想要轻松绕过付费限制&#xff0c;免费阅读优质内…

作者头像 李华
网站建设 2026/5/5 16:05:43

MOD管理工具深度解析:从冲突解决到高效管理

MOD管理工具深度解析&#xff1a;从冲突解决到高效管理 【免费下载链接】d3dxSkinManage 3dmigoto skin mods manage tool 项目地址: https://gitcode.com/gh_mirrors/d3/d3dxSkinManage 作为一名游戏MOD爱好者&#xff0c;我曾经饱受MOD冲突和贴图错误的困扰。直到我发…

作者头像 李华
网站建设 2026/5/5 16:06:00

C++命名空间

一、命名空间的核心作用你可以把命名空间理解成代码的 “文件夹” —— 不同文件夹里可以有同名的文件&#xff0c;不会互相干扰&#xff1b;同理&#xff0c;不同命名空间里可以有同名的变量、函数、类&#xff0c;避免命名冲突&#xff08;比如两个库都有叫print的函数&#…

作者头像 李华
网站建设 2026/5/5 23:29:33

LaserGRBL完全指南:免费开源的Windows激光雕刻控制软件

LaserGRBL完全指南&#xff1a;免费开源的Windows激光雕刻控制软件 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为激光加工优化的开源GRBL激光控制软件&#xff0c;为Windows用户…

作者头像 李华
网站建设 2026/5/2 12:13:28

springboot集成工作流教程(全面集成以及源码)

工作流集成实际项目案例&#xff0c;demo提供前言activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;请假审批demo从流程绘制到审批结束实例。源码获取方式&#xff1a;本文末个人名片直接获取。一、项目形式springbootvueactiviti集…

作者头像 李华