一、简介:为什么要做“全栈国产化”?

  • 政策驱动:能源、轨交、矿山等行业招标出现“国产化加分/必须”条款,不通过即出局。

  • 供应链安全:X86 断供风险倒逼“国产 CPU + 国产 OS + 国产数据库/中间件”全链条替代。

  • 实时刚需:风机主控、井工矿液压支架、地铁信号系统要求控制周期 ≤ 1 ms,普适 Linux 无法满足。

飞腾(Phytium)平台采用 ARMv8 架构,工业级 D2000/E2000 芯片支持 -40 ℃ ~ +85 ℃、ECC 内存、高可靠 IO,是当前国产化实时系统主力硬件。掌握其生态适配方法 = 拿到关键领域“入场券”。


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

关键词 一句话说明 本文出现场景
Phytium D2000 16 核 ARMv8 工业级 SoC,典型功耗 25 W 本文主力适配芯片
PREEMPT_RT Linux 实时补丁,将内核改为“完全可抢占” 风机 1 ms 控制循环必备
麒麟/统信/UOS 国产发行版,提供飞腾官方内核 rpm/deb 基础系统镜像
达梦/人大金仓/南大通用 国产关系型数据库,提供飞腾二进制包 SCADA、历史站数据库
东方通 TongWeb 国产 J2EE 中间件,替代 WebLogic 轨交综合监控后台
二进制翻译 在 ARM 上运行少量 X86 遗留 SO 过渡期可选 ros2-x86-bridge

三、环境准备:15 分钟搭好“国产化工作台”

1. 硬件清单

  • 飞腾 D2000 工控机 1 台(16 核 2.3 GHz,≥8 GB ECC DDR4,≥128 GB SSD)

  • 飞腾 E2000 嵌入式板 1 块(4 核 1.5 GHz,-40 ~ +85 ℃,用于矿下)

  • USB-串口线 1 根(调试口 115200-8-N-1)

2. 软件版本

组件 版本 获取方式
银河麒麟高级服务器 V10 SP3 kernel 5.15.71-rt53 麒麟官网下载
达梦 DM8 20231115-arm64-rpm 达梦官网申请试用
TongWeb 7.0.E.F 飞腾版 东方通销售
RT-Tests 2.5 apt 源自带

3. 一键制作实时内核(可复制)

#!/bin/bash
# build_rt_kylin.sh
sudo dnf install -y gcc git ncurses-devel openssl-devel bc
git clone -b v5.15.71-rt53 https://mirrors.phytium.com.cn/linux.git
cd linux
cp /boot/config-$(uname -r) .config
make menuconfig
# 打开 CONFIG_PREEMPT_RT=y
make -j16 bindeb-pkg
sudo dpkg -i ../linux-*.deb
sudo reboot

重启选“Kylin RT”进入,确认:

uname -r   # 5.15.71-rt53-kylin
cyclictest -p99 -i100 -d60s

Max ≤ 80 μs 即达标。


四、应用场景(300 字聚焦)

矿山液压支架电液控制系统

  • 环境:井内 40 ℃、湿度 95%、瓦斯防爆

  • 需求:每 200 ms 完成 32 路压力传感器采集+算法运算+支架推移;单架失稳将连锁倒架。

  • 国产化方案:

    • 飞腾 E2000 四核板卡(本安电源)+ PREEMPT_RT 实时内核

    • 采集线程 SCHED_FIFO:95,周期 10 ms;控制线程 SCHED_FIFO:98,周期 200 ms

    • 历史数据存入达梦 DM8,通过 Modbus TCP 上传地面 SCADA

    • 上位机用麒麟桌面 + 东方通 TongWeb 提供 Web 监控

  • 结果:支架推移精度 ≤ 5 mm,系统通过煤安认证,井下连续运行 18 月零故障,成本较进口 X86 方案下降 30%。


五、实际案例与步骤:30 分钟体验“飞腾+实时+国产数据库”全栈

实验目录统一:~/phytium-lab,所有脚本可一键复制。


5.1 步骤 1 - 基础系统与实时内核

# 已在前节完成,验证实时性
cyclictest -p99 -i100 -d60s -n

5.2 步骤 2 - 安装国产数据库(达梦 DM8)

# 1. 上传 rpm 包
sudo rpm -ivh dm8_20231115_arm64.rpm
# 2. 初始化实例
sudo /opt/dmdbms/bin/dminit path=/opt/dmdata page_size=16
# 3. 注册系统服务
sudo systemctl enable DmServiceDMSERVER
sudo systemctl start DmServiceDMSERVER
# 4. 验证
/opt/dmdbms/bin/disql SYSDBA/SYSDBA@localhost:5236
SQL> select * from v$version;

5.3 步骤 3 - 部署国产中间件(TongWeb)

# 1. 解压授权包
tar -xf TongWeb7.0.E.F-ky10-arm64.tar.gz
cd TongWeb
# 2. 一键安装
./install.sh -s
# 3. 启动
sudo systemctl start tongweb
# 4. 访问
firefox https://localhost:9060  # 默认 admin/Tongweb#123

5.4 步骤 4 - 实时数据采集 Demo

/* rt_data_acq.c  编译:gcc rt_data_acq.c -o rt_data_acq -pthread -ldm */
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include "dm.h"          /* 达梦 C API */

static pthread_mutex_t mux;
static float pressure[32];

void *acq_thread(void *arg) {
    struct sched_param param = { .sched_priority = 95 };
    pthread_setschedparam(pthread_self(), SCHED_FIFO, &param);
    while (1) {
        /* 模拟 ADC 采集 */
        for (int i = 0; i < 32; i++) pressure[i] = 20.0 + i*0.1;
        pthread_mutex_lock(&mux);
        pthread_mutex_unlock(&mux);
        usleep(10000);   /* 10 ms */
    }
    return NULL;
}

void *db_thread(void *arg) {
    DM_CONN *conn = dm_conn_new("localhost", 5236, "SYSDBA", "SYSDBA");
    dm_conn_open(conn);
    struct sched_param param = { .sched_priority = 90 };
    pthread_setschedparam(pthread_self(), SCHED_FIFO, &param);
    while (1) {
        pthread_mutex_lock(&mux);
        dm_insert_pressure(conn, pressure); /* 自定义函数 */
        pthread_mutex_unlock(&mux);
        usleep(200000); /* 200 ms 入库 */
    }
    dm_conn_close(conn);
    return NULL;
}

int main() {
    pthread_t t1, t2;
    pthread_mutex_init(&mux, NULL);
    pthread_create(&t1, NULL, acq_thread, NULL);
    pthread_create(&t2, NULL, db_thread, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    return 0;
}

运行:

sudo ./rt_data_acq &

实时线程 10 ms 采集,200 ms 批量入库,地面 Web 页面实时刷新。


5.5 步骤 5 - 制作国产软件 BOM

类别 软件 版本 来源
OS 银河麒麟 V10 SP3 5.15.71-rt53 麒麟官网
DB 达梦 DM8 20231115 达梦官网
中间件 TongWeb 7.0.E.F 东方通
采集 自研 rt_data_acq v1.0.0 GitLab
监控 麒麟卫士 v3.2 麒麟仓库

BOM 随版本 Git Tag 自动更新,方便审计。


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

问题 现象 解决
DM8 安装报“缺少 libdm.so” 未装 ncurses sudo dnf install ncurses-compat-libs
TongWeb 启动失败 端口被占用 修改 conf/server.xml 9060 → 9061
cyclictest Max > 200 μs BIOS 电源管理未关 关闭 Turbo、C-State,加 nohz_full=2-15
数据库中文乱码 字符集不一致 dminit charset=UTF8
跨平台编译失败 找不到 aarch64 库 用麒麟自带 gcc-9,或在 Dockerfile 里 FROM kylin:v10

七、实践建议与最佳实践

  1. 版本锁定
    内核、数据库、中间件哈希值写入《安全配置清单》,任何升级走 MR → 影响分析 → 回归测试。

  2. 持续集成
    GitLab Runner 跑在飞腾板卡上,每次提交自动跑 cyclictest + db 压力 + web 接口,失败邮件即时通知。

  3. 故障注入
    每月随机拔掉网线 / 断电 / 翻转内存位,验证系统自恢复时间 < 1 s。

  4. 二进制翻译过渡
    少量 X86 ROS2 节点用 qemu-user-staticros2-x86-bridge 容器化运行,CPU 损耗 < 5%,逐步重编译替换。

  5. 认证前置
    按麒麟、达梦、东方通提供的《兼容性证书》提前归档,缩短煤安/等保审计时间 30 天。

  6. 文档自动化
    PlantUML + GitLab Pages 自动生成“部署图-时序图-API 文档”, auditor 可直接在线评审。


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

飞腾实时 Linux 全栈国产化
├─ 硬件:D2000/E2000 工业级 SoC
├─ 系统:Kylin + PREEMPT_RT
├─ 数据:达梦 DM8
├─ 中间件:TongWeb
├─ 场景:矿山/轨交/能源 1 ms 控制
└─ 合规:BOM + 追溯 + 故障注入

“国产芯 + 实时系统”不再是口号,而是可落地的工程方案。
把本文脚本推送到你的 GitLab,下一台飞腾设备到货后,30 分钟完成系统烧录、数据库部署、实时采集上线,让国产化改造从“政治任务”变成“性能与成本双赢”!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐