{"id":49073556,"url":"https://github.com/yilerler/linux-industrial-safety-gateway","last_synced_at":"2026-04-20T08:34:22.343Z","repository":{"id":340964047,"uuid":"1157834297","full_name":"yilerler/linux-industrial-safety-gateway","owner":"yilerler","description":"A software-defined industrial edge gateway featuring Linux kernel-space DSP filtering and dual-track IT/OT protocol translation for fail-safe environments.軟體定義工業閘道器，實作核心層濾波與 IT/OT 雙軌通訊","archived":false,"fork":false,"pushed_at":"2026-03-27T12:53:00.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-27T23:38:07.609Z","etag":null,"topics":["dsp","edge-computing","fail-safe","industrial-automation","industry-4-0","iot-gateway","linux-kernel","nodejs","protocol-translation"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yilerler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-14T11:23:08.000Z","updated_at":"2026-03-27T12:53:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yilerler/linux-industrial-safety-gateway","commit_stats":null,"previous_names":["yilerler/linux-industrial-safety-gateway"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yilerler/linux-industrial-safety-gateway","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilerler%2Flinux-industrial-safety-gateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilerler%2Flinux-industrial-safety-gateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilerler%2Flinux-industrial-safety-gateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilerler%2Flinux-industrial-safety-gateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yilerler","download_url":"https://codeload.github.com/yilerler/linux-industrial-safety-gateway/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilerler%2Flinux-industrial-safety-gateway/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32040336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dsp","edge-computing","fail-safe","industrial-automation","industry-4-0","iot-gateway","linux-kernel","nodejs","protocol-translation"],"created_at":"2026-04-20T08:34:21.182Z","updated_at":"2026-04-20T08:34:22.322Z","avatar_url":"https://github.com/yilerler.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [!WARNING]\n\u003e ## 🛑 [DEPRECATED] 專案已正式遷移與重構\n\u003e 本專案 (V1.0 - V4.3) 探討了基於 Node.js 的工業感測器閘道器實作。但在極限壓測下，我們發現將硬體防禦與業務邏輯混雜於 User Space 的「軟即時 (Soft Real-Time)」架構，無法滿足工業級微秒級的防禦需求。\n\u003e \n\u003e **本專案已停止維護，並重構升級為全新的 Linux Kernel 基礎設施堆疊：**\n\u003e 👉 **請前往新專案：[hard-realtime-edge-stack](https://github.com/yilerler/hard-realtime-edge-stack)** \u003e *(新專案展示了 IT/OT 解耦、O(1) 深拷貝、Spinlock 鎖競爭防禦與 72 小時 SRE 燒機驗證)*\n\n---\n# 🏭 Industrial IT/OT Safety Gateway (基於 Linux Kernel 之工業級安全閘道器)\n\n\u003e **一句話簡介：** 專為 **工業人機協作 (HRC)** 與 **高可靠度邊緣運算 (Edge Computing)** 設計的軟體定義閘道器 (Software-Defined Gateway) 與 **邊緣邏輯控制器 (Edge Logic Controller, ELC)**。\n\u003e 透過分離 Linux Kernel Space (硬即時控制、Modbus 輪詢與統一暫存器) 與 User Space (純粹通訊協議轉換與戰略 UI)，解決傳統單一架構無法兼顧「IT 雲端大數據聚合」、「OT 底層極低延遲防護 (Fail-Safe)」以及「斷線時的人機防呆」的業界痛點。\n\n## 🏗️ 系統架構 (System Architecture)\n\n本專案採用三層式異質運算架構，展示「軟體定義硬體」、「IT/OT 解耦」與「邊緣自洽」的設計哲學：\n\n```mermaid\nflowchart TD\n    %% Define Styles\n    classDef hardware fill:#e0e0e0,stroke:#333,stroke-width:2px,color:#000\n    classDef kernel fill:#f9d0c4,stroke:#e06666,stroke-width:2px,color:#000\n    classDef user fill:#cfe2f3,stroke:#6fa8dc,stroke-width:2px,color:#000\n    classDef external fill:#d9ead3,stroke:#93c47d,stroke-width:2px,color:#000\n    classDef boundary fill:#fff2cc,stroke:#d6b656,stroke-width:2px,stroke-dasharray: 5 5,color:#000\n\n    subgraph Physical[\"⚙️ 實體物理層 (Hardware / Environment)\"]\n        Sensors[實體感測器 / PLC\u003cbr\u003e原始物理訊號]:::hardware\n        Motor[馬達控制器\u003cbr\u003e實體致動器]:::hardware\n    end\n\n    subgraph Kernel[\"🛡️ Linux 核心層 (Kernel Space - Hard Real-Time ELC)\"]\n        HAL[南向硬體抽象層\u003cbr\u003eHardware Abstraction Layer]:::kernel\n        ELC[Modbus 輪詢引擎 \u0026 DSP\u003cbr\u003e工安急停狀態機]:::kernel\n        RegMap[(統一暫存器地圖\u003cbr\u003ePacked Register Map)]:::kernel\n        \n        Sensors -- \"實體 I/O\" --\u003e HAL\n        HAL -- \"原始數據\" --\u003e ELC\n        ELC -- \"乾淨數據\" --\u003e RegMap\n        ELC -. \"絕對優先權: 強制斷電\" .-\u003e Motor\n    end\n\n    subgraph Contract[\"⚖️ 系統邊界 (System Boundary)\"]\n        IOCTL((ioctl 合約\u003cbr\u003esensor_ioctl.h)):::boundary\n    end\n\n    subgraph User[\"🧠 應用業務層 (User Space - Node.js)\"]\n        Adapter[純粹中介層\u003cbr\u003eMiddleware Adapter]:::user\n        Translator[通訊協議翻譯官\u003cbr\u003eProtocol Translator]:::user\n        WSServer[本地伺服器\u003cbr\u003eExpress + WebSocket]:::user\n\n        RegMap -- \"O(1) 深拷貝\" --\u003e IOCTL\n        IOCTL -- \"24 Bytes 記憶體映射\" --\u003e Adapter\n        Adapter --\u003e Translator\n        Adapter --\u003e WSServer\n    end\n\n    subgraph External[\"🌍 外部系統與人機介面 (External \u0026 HMI)\"]\n        IT[☁️ 雲端系統\u003cbr\u003eIT System]:::external\n        OT[📠 傳統控制器\u003cbr\u003eOT System / PLC]:::external\n        UI[💻 戰情室 UI\u003cbr\u003eGraceful Degradation]:::external\n\n        Translator -- \"JSON 大數據\" --\u003e IT\n        Translator -- \"Hex + Checksum\" --\u003e OT\n        WSServer \u003c--\u003e UI\n    end\n```\n\n## ✨ 核心工程價值 (Key Features)\n* 🗄️ **邊緣邏輯控制器 (Edge Logic Controller):** 捨棄 User Space 的資料造假，將 Linux Kernel 轉化為底層輪詢大腦。在 Kernel 建立統一的「暫存器映射表 (Register Map)」，達成感測器 Input Register 與馬達 Coil 的硬體級聯鎖 (Hardware Interlock)。\n* 🔒 **中斷上下文防禦 (Interrupt Context Safety):** 洞察 mod_timer 軟中斷無法睡眠的底層限制，將互斥鎖全面重構為 自旋鎖 (spin_lock_irqsave)，徹底消滅 Kernel Panic 隱患，確保硬即時狀態機的記憶體一致性。\n* 🛡️ **跨層 ABI 記憶體防禦 (Cross-Language ABI Stability):** 透過在 C 結構體導入 __attribute__((packed))，強制剝奪編譯器的記憶體對齊填充 (Padding)，確保底層核心與上層 Node.js 依靠 Fixed Offset 讀取 Buffer 時的絕對一致性。\n* 🌐 **邊緣自洽戰情室 (Edge-Autonomous Dashboard):** 內建 Express 與 WebSocket 伺服器，達成零 WAN 依賴的區域網路即時可視化。\n\n* 🚨 **優雅降級與心理防呆 (Graceful Degradation):** 前端實作 Watchdog 看門狗，斷線時自動凍結畫面並切換為「SOP 指揮官模式」，防止人員恐慌誤操作 (Human-in-the-Loop 安全設計)。\n* 🔀 **IT/OT 雙軌通訊 (Dual-Track Telemetry):** 閘道器向上發布雲端友善的 JSON 負載，向下則針對傳統控制器壓制出僅 6 Bytes 且含校驗碼 (Checksum) 的工業級 Hex 封包。\n\n## 📂 專案結構 (Directory Structure)\n\n```text\n.\n├── decisions/          # 架構決策與事後剖析 (ADR \u0026 Postmortem)\n├── kernel/             # Linux LKM 驅動原始碼\n│   ├── include/        # 跨層共享的 IOCTL 暫存器合約定義\n│   └── src/            # mock_elc_core.c (HAL、保命機制、自旋鎖與狀態機)\n├── tests/              # 系統診斷與壓力測試工具\n│   └── elc_diag.c      # Pthreads 多核心併發壓測程式\n└── user/               # Node.js 邊緣運算層\n    ├── public/         # Vanilla JS/CSS 打造之高對比工業戰情室 UI\n    └── adapter.js      # 純粹中介層：記憶體映射解析、API 轉發與 Web 伺服器\n```\n\n## 🚀 系統輸出展示 (IT/OT 解耦架構)\n\n本閘道器無縫橋接了雲端 (IT) 與工廠現場 (OT) 的通訊鴻溝，於終端機即時展示兩種截然不同的資料流聚合結果：\n\n```text\n======================================================\n☁️  [IT-Layer] Cloud JSON Payload (190 Bytes)\n{\n  timestamp: '2026-02-21T18:15:43.770Z',\n  safety_subsystem: { distance_mm: 193, status: 'NORMAL' },\n  environment_subsystem: { pm25: 32, noise_db: 85 },\n  access_subsystem: { last_scan: 'NO_CARD' }\n}\n⚙️  [OT-Layer] Industrial Hex Payload (6 Bytes)\n🚨 [ALARM] MOTOR OFFLINE! OT-UART TX -\u003e [ 0xAA 0x01 0x00 0xC1 0x01 0x6D ]\n======================================================\n```\n\n## 🚀 快速啟動 (Getting Started)\n\n**1. 編譯與載入核心模組 (Kernel Space)**\n```bash\ncd kernel\nmake\nsudo insmod src/mock_elc_core.ko\ndmesg | tail # 驗證驅動與 ELC 輪詢引擎是否存活\n```\n\n**2. 啟動邊緣聚合器 (User Space)**\n```bash\ncd user\nnpm install\nsudo node adapter.js # 備註：此處需 sudo 權限以存取 /dev/mock_elc 字元設備。量產環境將透過 udev rules 配置權限以符合最小權限原則。\n```\n**3. 執行極限壓力測試 (Stress Test)**\n```bash\ncd tests\ngcc elc_diag.c -o elc_diag -pthread\nsudo ./elc_diag # 驗證 SMP 併發下的 O(1) 深拷貝效能與零死鎖防禦\n```\n\n## 📜 架構決策紀錄 (ADRs)\n詳細的系統設計與技術選型考量，請參閱：\n* [ADR-001: 針對安全關鍵邊緣系統的混合架構](decisions/ADR-001-hybrid-architecture.md)\n* [ADR-002: 閘道器中的 IT/OT 雙軌通訊協定轉換](./decisions/ADR-002-it-ot-protocol-translation.md)\n* [ADR-003: 邊緣自洽的戰情室與人機防呆機制](decisions/ADR-003-edge-autonomous-dashboard.md)\n* [ADR-004: 統一 OT 資料聚合於 Kernel 層](decisions/ADR-004-unified-ot-aggregation.md)\n* [ADR-005: 實作深拷貝O(1)與 SMP 併發壓力測試標準](decisions/ADR-005-smp-stress-test-and-o1-deepcopy.md)\n* [POSTMORTEM-001: 系統規模對齊與 Kernel Deadlock 事件](decisions/POSTMORTEM-001-kernel-deadlock.md)\n* [POSTMORTEM-002: 物理 I/O 阻塞盲點與 Kernel Thread 遷移藍圖](decisions/POSTMORTEM-002-io-blocking-and-kthread-migration.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyilerler%2Flinux-industrial-safety-gateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyilerler%2Flinux-industrial-safety-gateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyilerler%2Flinux-industrial-safety-gateway/lists"}