一、简介:为什么要做“全栈国产化”?
政策驱动:能源、轨交、矿山等行业招标出现“国产化加分/必须”条款,不通过即出局。
供应链安全: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 -d60sMax ≤ 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 -n5.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#1235.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, ¶m); 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, ¶m); 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.xml9060 → 9061 |
| cyclictest Max > 200 μs | BIOS 电源管理未关 | 关闭 Turbo、C-State,加nohz_full=2-15 |
| 数据库中文乱码 | 字符集不一致 | dminit charset=UTF8 |
| 跨平台编译失败 | 找不到 aarch64 库 | 用麒麟自带 gcc-9,或在 Dockerfile 里FROM kylin:v10 |
七、实践建议与最佳实践
版本锁定
内核、数据库、中间件哈希值写入《安全配置清单》,任何升级走 MR → 影响分析 → 回归测试。持续集成
GitLab Runner 跑在飞腾板卡上,每次提交自动跑cyclictest + db 压力 + web 接口,失败邮件即时通知。故障注入
每月随机拔掉网线 / 断电 / 翻转内存位,验证系统自恢复时间 < 1 s。二进制翻译过渡
少量 X86 ROS2 节点用qemu-user-static或ros2-x86-bridge容器化运行,CPU 损耗 < 5%,逐步重编译替换。认证前置
按麒麟、达梦、东方通提供的《兼容性证书》提前归档,缩短煤安/等保审计时间 30 天。文档自动化
PlantUML + GitLab Pages 自动生成“部署图-时序图-API 文档”, auditor 可直接在线评审。
八、总结:一张脑图带走全部要点
飞腾实时 Linux 全栈国产化 ├─ 硬件:D2000/E2000 工业级 SoC ├─ 系统:Kylin + PREEMPT_RT ├─ 数据:达梦 DM8 ├─ 中间件:TongWeb ├─ 场景:矿山/轨交/能源 1 ms 控制 └─ 合规:BOM + 追溯 + 故障注入“国产芯 + 实时系统”不再是口号,而是可落地的工程方案。
把本文脚本推送到你的 GitLab,下一台飞腾设备到货后,30 分钟完成系统烧录、数据库部署、实时采集上线,让国产化改造从“政治任务”变成“性能与成本双赢”!