TECH ARTICLE

dSPACE VEOS on Linux:
VMware + Ubuntu 模擬環境建置指南

在 Windows 主機以 VMware Workstation 承載 Ubuntu 24.04 LTS,建立可執行 VEOS Simulator 與 POSIX-based V-ECU 的模擬環境。本文涵蓋硬體與虛擬機需求、安裝包與授權準備、逐步安裝流程,以及 icount 與 idle-detect 兩種時間同步模式各自必須完成的調整與其技術原因。

dSPACE VEOS 自 Release 2026-A 起提供原生 Linux 版本,可在 Ubuntu 24.04 LTS 上執行離線模擬應用(OSA),並透過 VEOS QEMU Coupling 模擬 POSIX-based V-ECU(嵌入式 Linux 受測系統)。對多數以 Windows 為主的開發團隊而言,最務實的導入方式是在既有 Windows 工作站上以 VMware Workstation 建立一台 Ubuntu 虛擬機,讓 VEOS 執行於虛擬機內,而 ControlDesk、SystemDesk、MATLAB/Simulink 等工具仍留在 Windows 端。

這個架構本身可行且已被廣泛採用,但其中有兩個環節特別容易在建置階段被忽略:浮動授權的驗證層次,以及 idle-detect 模式所依賴的巢狀虛擬化授權鏈。兩者的共同特徵是「前段檢查全部通過,卻在真正啟動模擬時才失敗」。本文以逐步操作的形式說明完整流程,並在每個關鍵設定處說明其原因,而非僅列出指令。

本文適用範圍

  • dSPACE Release 2026-A(套件代號 noble,對應 Ubuntu 24.04 LTS,amd64)
  • Hypervisor:VMware Workstation(Windows 主機,Type-2)
  • Guest OS:Ubuntu 24.04 LTS(Server 或 Desktop)
  • 模擬對象:VEOS 離線模擬應用,含 POSIX-based V-ECU(QEMU Coupling)

文中所有網路位址、使用者名稱與伺服器 IP 均以佔位符表示,請依貴司實際環境替換。指令以 dSPACE 官方文件與安裝腳本之行為為準;標註「工程實務」者為實際導入經驗補充。

1. 部署拓撲與三層巢狀執行環境

1.1 先確定拓撲,它決定後續兩項設定

建置前的第一個決策是「ControlDesk 與 VEOS 是否在同一個作業系統內」。這個答案會直接決定是否需要啟用 Simulator 遠端存取,以及虛擬機該用哪種網路模式。

部署拓撲 ControlDesk VEOS 建議 VM 網路 需 --enable-remote-access
A. 同一 OS 內 同機 同機 — ❌ 不需要(localhost)
B. Windows 主機 + VMware Ubuntu Guest
(本文情境)
Windows 主機 Ubuntu Guest NAT ✅ 需要
C. 兩台獨立 VM Windows VM Ubuntu VM Bridged 同子網 ✅ 需要

判斷準則只有一條:只要 ControlDesk 不是以 127.0.0.1 連線至 VEOS,VEOS 對它而言就是「遠端 Simulator」,即需啟用遠端存取。dSPACE Real-Time Testing on Linux 手冊在「How to Register a Platform」一節亦明列,於虛擬機上執行 Linux 時建議將網路設為 NAT——該建議正是針對本文的拓撲 B。

常見誤解:官方使用情境表中「桌機 / 伺服器 / VM 不需要」那條註腳,掛的是 Container Tunnel (CTUN),而非 --enable-remote-access。兩者是不同機制:CTUN 僅用於雲端跨 NAT 穿隧,一般 VM 部署確實不需要;但跨機存取 Simulator 仍必須啟用遠端存取。

1.2 三層巢狀執行環境

若模擬對象包含 POSIX-based V-ECU,實際上會形成三層巢狀結構。理解這張圖,後續 idle-detect 的設定要求就會變得直觀——因為最內層的 guest 需要硬體虛擬化,而它位於一層虛擬機之內。

第 1 層 — Windows 主機(VMware Workstation) 須關閉 Hyper-V / VBS,並於 BIOS 啟用 VT-x / AMD-V Windows 端工具 ControlDesk · SystemDesk MATLAB / Simulink · ETHCP 經 VMnet8 (NAT) 連入 Guest 第 2 層 — Ubuntu 24.04 LTS Guest(VMware VM) VEOS Simulator · CodeMeter · rpcbind · VEOS Service VEOS Simulator(離線模擬應用 OSA) Classic V-ECU · FMU · Bus Simulation Container 模擬時間主控 · 虛擬 Ethernet / CAN Cluster 第 3 層 — veos-qemu(POSIX-based V-ECU) QEMU 9.2.3 基礎,由 VEOS 以 -veos 參數啟動 icount 模式 TCG 指令計數模擬 使用自備 kernel 不需 /dev/kvm 加速比約 0.95 idle-detect 模式 KVM 硬體虛擬化 kernel 由 VEOS 指定 必須 /dev/kvm 加速比約 1.000 授權(CodeMeter) 浮動授權伺服器 · TCP 22350 Guest 與 Windows 端各需授權 VEOS QEMU Coupling 需 VEOS_AAP 虛擬化授權鏈(idle-detect) BIOS VT-x → VBS 關閉 → vhv.enable → 完整 power-cycle → /dev/kvm 存在 → configure.sh 任一環節缺失即無法執行

2. 環境需求:主機、虛擬機與作業系統

2.1 Windows 主機需求

項目 需求 說明
CPUx86-64,支援 VT-x/EPT 或 AMD-V/RVIidle-detect 模式的硬性前提;BIOS/UEFI 必須啟用
記憶體建議 ≥ 32 GBGuest 配置 8–16 GB 即充裕,其餘留給 Windows 端工具
磁碟≥ 200 GB 可用空間(SSD)VM 磁碟檔加上記憶體交換檔(.vmem 與 memsize 同大小)
VMwareVMware Workstation 17.x 或 VMware ESXidSPACE 官方虛擬化支援聲明列出 ESXi;Workstation 為 Type-2,實務可用但屬支援聲明之外
Hyper-V / VBS必須全部關閉idle-detect 能否運作的關鍵前提,詳見下方

為什麼 Hyper-V / VBS 必須關閉:當 Windows 啟用 Hyper-V、Virtualization-Based Security(記憶體完整性)、Credential Guard、WSL2 或 Windows Sandbox 任何一項時,VMware Workstation 會退回使用 Windows Hypervisor Platform(WHP)執行。在 WHP 模式下無法將 VT-x 透傳給 Guest,巢狀虛擬化即失效,Guest 內不會出現 /dev/kvm,idle-detect 模式無法啟動。

於 Windows 端以 PowerShell 確認(三項皆須符合):

# HypervisorPresent 應為 False;VBS Status 應為 0; # VirtualizationFirmwareEnabled 與 SecondLevelAddressTranslation 應為 True Get-ComputerInfo -Property HyperVisorPresent,HyperVRequirement* Get-CimInstance -Namespace root\Microsoft\Windows\DeviceGuard ` -ClassName Win32_DeviceGuard | Select-Object VirtualizationBasedSecurityStatus,SecurityServicesRunning

2.2 Guest 作業系統需求

dSPACE 對 Release 2026-A 的 Linux 支援聲明極為明確,僅列出一個作業系統版本:

「Ubuntu 24.04 LTS with the General Availability Kernel in the Desktop, Server, and Cloud versions」

項目 要求與說明
發行版本Ubuntu 24.04 LTS 為唯一支援版本。22.04 LTS、26.04 LTS 與各 interim release 均不在清單內(所有 deb 套件皆為 noble)
Kernel 變體必須為 GA kernel(linux-generic),非 HWE(linux-generic-hwe-24.04)。詳見 §4.2
Locale原廠僅在 US English 環境測試過
路徑長度不支援 Linux 的 4,096 字元;超過 260 字元行為未定義,工作目錄請置於淺層路徑
相依元件Microsoft .NET 8(VEOS 為 .NET 應用)、rpcbind 或 dSPACE portmapper
權限安裝過程需可用 sudo;但不可用 sudo 直接執行安裝腳本本身

3. VMware 虛擬機建立與參數設定

3.1 建議規格

裝置 建議值 理由
Processors1 socket × 8 cores實體主機通常為單 socket;配置多個虛擬 socket 會讓 Guest 排程器依不存在的多路拓撲做快取局部性決策
Memory8–16 GB雙 POSIX V-ECU 同時執行的實測峰值約 1.7 GB;過度配置會佔用主機磁碟(.vmem 與設定值同大小)
Hard DiskSCSI,100–128 GB(growable)VEOS 本體約 700 MB;主要空間消耗來自模擬工作目錄 /tmp/veos-*(單次執行可達數百 MB)
Network AdapterNAT(拓撲 B)Windows 主機經 VMnet8 可連入 Guest;Guest 亦可出網。若需外部機器連入 Guest 則須改 Bridged
Virtualization Engine☑ Virtualize Intel VT-x/EPT
或 AMD-V/RVI
idle-detect 模式必須勾選;等同 .vmx 中的 vhv.enable = "TRUE"
Virtualize CPU
performance counters
建議勾選Guest 內可使用 perf 分析效能;使用 dSPACE NMI Profiler 前建議先啟用以排除變數
Virtualize IOMMU預設不需要僅在需要將實體裝置(如 GPU)passthrough 至最內層 POSIX V-ECU 時才啟用
Sound / USB / CD-DVD可移除模擬主機不需要,減少模擬裝置面
快照(Snapshot)建議不使用巢狀虛擬化與快照併用時,還原後 Guest 內的 KVM 狀態可能出現非預期行為;備份請整個目錄複製

3.2 逐步設定

01

主機端前置

於 BIOS/UEFI 啟用 VT-x / AMD-V;於 Windows 關閉 Hyper-V、記憶體完整性、Credential Guard、WSL2 與 Windows Sandbox,並重新開機。

02

建立虛擬機

Guest OS 選 Ubuntu 64-bit,依 §3.1 配置處理器、記憶體、磁碟與網路,並移除不需要的裝置。

03

啟用巢狀虛擬化

VM Settings → Processors → 勾選 Virtualize Intel VT-x/EPT。此區在 VM 執行或暫停時為唯讀,須先完整關機。

關鍵細節:必須完整 power-cycle,Guest 內 reboot 無效。vhv.enable 這類設定只在虛擬機由關機狀態重新開機時才會被重新讀取。若僅在 Guest 內執行 reboot,即使 VMware 介面已顯示勾選、.vmx 也已寫入,Guest 內仍然看不到 vmx 旗標。這是實際導入時最常見的誤判來源之一——設定看起來正確,行為卻不正確。

Guest 內驗證(應大於 0):

grep -c -E ' vmx| svm' /proc/cpuinfo lscpu | grep -i virtual

對應的 .vmx 關鍵欄位

guestOS = "ubuntu-64" numvcpus = "8" cpuid.coresPerSocket = "8" // 1 socket × 8 cores memsize = "16384" ethernet0.connectionType = "nat" vhv.enable = "TRUE" // 巢狀虛擬化,idle-detect 必要 vpmc.enable = "TRUE" // CPU performance counters(選用)

4. Ubuntu 24.04 安裝要點與 kernel 變體

4.1 Server 版或 Desktop 版

原廠對 Desktop、Server、Cloud 三種版本均明文支援。就 VEOS 模擬主機的用途而言,建議選用 Server 版,理由有三:

  • 自動落在原廠支援的 kernel 組態Server ISO 預設安裝 GA kernel,Desktop ISO 預設安裝 HWE kernel(見 §4.2)。
  • 釋放主機 CPU 資源icount 模式是純 TCG 單執行緒模擬,主機 CPU 被桌面環境與背景服務佔用時會直接反映在模擬加速比上。
  • 整條工作流程不需要 GUIVEOS Simulator / Build / Model Console 均為 CLI;ControlDesk 由 Windows 端連入;XIL API 為網路服務;GDB 與 NMI Profiler 亦皆可經由 CLI 操作。

選 Server 版時必須配套處理一件事:/dev/kvm 的存取權限。Ubuntu 預設是由 systemd 的 uaccess 機制,將 ACL 授予「持有本機 seat session 的使用者」。Server 沒有圖形登入 session,這條 ACL 不會被授予,idle-detect 會以 Permission denied 失敗。解法是執行 dSPACE 隨附的權限腳本,見 §11.3。

4.2 GA kernel 與 HWE kernel

這是一個不會產生任何症狀的偏離,也正因如此特別容易被忽略。

Kernel 變體 套件名稱 版本序列 原廠支援
GA(General Availability)linux-generic6.8.0-x✅ 原廠明文要求;Server ISO 預設
HWE(Hardware Enablement)linux-generic-hwe-24.04較新序列❌ 不在支援聲明內;Desktop ISO 預設

實務上,HWE kernel 通常可正常執行全部功能。真正的風險出現在需要向 dSPACE 開立技術支援案件時——原廠可能要求先換回 GA kernel 重現問題。因此建議在安裝 dSPACE 產品之前先確認:

lsb_release -a uname -r dpkg -l 'linux-generic*' | grep ^ii

若結果出現 linux-generic-hwe-24.04,代表使用的是 HWE。變更 kernel 屬系統層級調整,須一併處理 GRUB 預設開機項,並在變更後確認 kvm_intel 模組仍能正常載入——idle-detect 完全依賴它。

5. 安裝包需求與軟體清單

5.1 產品安裝包

dSPACE Linux 版產品以 tar.gz 形式提供,可自 dSPACE 官方網站的 Products for Linux 頁面下載。每個壓縮包內含 packages.tar(deb 套件集合)與 install-*.sh 安裝腳本;實際安裝邏輯以腳本為準。

產品 安裝包 必要性 用途
VEOSdspace-veos-2026a.tar.gz必要Simulator、Build/Model Console、veos-qemu、VEOS Linux kernel、NMI Profiler
Bus APIdspace-busapi-2026a.tar.gz選用匯流排存取 API;另附 configure-ms-package-server.sh 可自動設定 Microsoft 套件源以取得 .NET 相依
XIL API .NETdspace-xilapi-2026a.tar.gz選用ASAM XIL 標準介面,可程式化讀寫模擬內部變數;含 dSPACE Python 3.12 與 pythonnet
Real-Time Testingdspace-rtt-2026a.tar.gz選用自動化測試腳本執行環境;含 dSPACE Python 3.12

5.2 VEOS 的 deb 套件組成

了解套件組成有助於依需求裁剪安裝範圍——尤其是是否需要 idle-detect 與 POSIX V-ECU 支援。

套件 功能 可省略嗎
dspace-veos-2026a
dspace-veos-2026a-all
VEOS 主體與 meta package否
dspace-veos-simulator-2026aSimulator 執行核心(64-bit)否
dspace-veos-simulator-x86-2026a32-bit 模擬支援可(INSTALL_VEOS_SIMULATOR_x86=0)
dspace-veos-linux-2026aVEOS Linux kernel(idle-detect 模式的 Guest kernel)與 NMI Profiler僅在不需 idle-detect 時(INSTALL_VEOS_LINUX_KERNEL=0)
dspace-veos-qemu-2026aveos-qemu(POSIX-based V-ECU 執行環境,含 x86_64 / i386 / arm / aarch64)僅在不需 POSIX V-ECU 時(INSTALL_VEOS_QEMU=0)
dspace-veos-service
dspace-veos-service-systemd
VEOS Service:讓遠端 dSPACE 產品(ControlDesk)連入的服務本文拓撲請務必保留,切勿設 INSTALL_VEOS_SERVICE=0

共用元件方面,所有 dSPACE Linux 產品皆共用 dspace-base、dspace-installationmanager 與 CodeMeter。這代表授權伺服器只需設定一次,四項產品一體適用。

5.3 安裝結果的目錄配置

路徑 內容
/opt/dspace/veos2026a/binVEOS 執行檔與函式庫(veos、veoskernel)
/opt/dspace/veos2026a/tools/shell環境啟用腳本 veos-env.sh
.../simulator/extensions/qemu/util以非 root 執行 idle-detect 所需的權限設定腳本
.../simulator/extensions/veos-linuxVEOS Linux kernel 與 dSPACE NMI Profiler
/tmp/veos-<xy>/ftp/logs模擬日誌(位於 /opt/dspace 之外,重開機後清除)

6. VEOS 逐步安裝流程

官方提供安裝腳本與手動 apt 兩種方法,建議採用安裝腳本。以下為完整步驟。

步驟 1 — 安裝 .NET 8

VEOS 為 .NET 應用,須先具備 .NET 8 執行環境。

sudo apt-get update sudo apt-get install -y dotnet-runtime-8.0 dotnet --list-runtimes

套件源衝突警告:若系統已安裝 PowerShell 等微軟產品並設定了 Microsoft 官方套件源,可能與 Ubuntu 內建的 .NET 套件產生衝突,導致 VEOS 安裝失敗。dSPACE 官方文件明確指向 Microsoft 的「linux-package-mixup」說明以釐清此問題。Bus API 安裝包內另附 configure-ms-package-server.sh,可在尚未設定 Microsoft 套件源時自動完成設定。

步驟 2 — 解壓安裝包並設定權限

mkdir -p ~/veos-install tar -xzf dspace-veos-2026a.tar.gz -C ~/veos-install cd ~/veos-install chmod +x *.sh chmod +r packages.tar

步驟 3 — 依情境設定環境變數

安裝腳本以環境變數控制安裝範圍與初始設定。在執行腳本前 export,可省去安裝後的補設定作業。

環境變數 作用 本文建議
CONFIG_LICENSE_SERVERS安裝時直接寫入 CodeMeter 的授權伺服器搜尋清單(多台以逗號分隔,可用 IP 或 FQDN)建議設定
ENABLE_VEOS_REMOTE_ACCESS=1安裝時即啟用 Simulator 遠端存取(等同事後執行 veoskernel config --enable-remote-access)拓撲 B 建議設定
CONFIG_CLEAR_SERVER_SEARCHLIST=1清除既有的授權伺服器搜尋清單環境變動時使用
INSTALL_NON_INTERACTIVE=1非互動安裝,所有詢問視為 yes(須先接受 EULA,見步驟 4)自動化部署時
INSTALL_CODEMETER_FULL=1安裝完整 CodeMeter(含圖形設定介面)而非 codemeter-liteServer 版不要設定
INSTALL_DSPACE_PORTMAPPER=1改用 dSPACE portmapper 取代系統的 rpcbindrpcbind 不可用時
INSTALL_VEOS_SERVICE=0不安裝 VEOS Service(僅本機使用)切勿設定,否則 ControlDesk 無法連入
INSTALL_CTUN=1安裝 Container Tunnel(雲端跨 NAT 穿隧)桌機 / VM 環境不需要
# 拓撲 B(Windows 主機 + VMware Ubuntu Guest)的典型組合 export CONFIG_LICENSE_SERVERS=<LICENSE-SERVER-IP> export ENABLE_VEOS_REMOTE_ACCESS=1

步驟 4 —(非互動模式才需要)預先接受 EULA

echo dspace-eula-2026a dspace/all boolean true | sudo debconf-set-selections

步驟 5 — 執行安裝腳本

./install-dspace-veos-2026a.sh

不要用 sudo 執行安裝腳本本身。腳本會在需要時自行要求提權。若以 sudo 整支執行,安裝過程建立的使用者相關設定會歸屬於 root,可能導致其他使用者無法啟動 VEOS Simulator。這是官方文件明列的注意事項。

步驟 6 — 安裝其他選用產品

Bus API、XIL API、RTT 的安裝流程與 VEOS 相同(解壓 → 權限 → 環境變數 → 執行腳本),建議安裝於同一台機器以共用基礎套件與 CodeMeter。

# XIL API .NET(範例;Bus API 與 RTT 流程相同) mkdir -p ~/xilapi tar -xzf dspace-xilapi-2026a.tar.gz -C ~/xilapi cd ~/xilapi && chmod +x *.sh && chmod +r packages.tar export CONFIG_LICENSE_SERVERS=<LICENSE-SERVER-IP> ./install-xilapi.sh

步驟 7 — 啟用 VEOS 環境(選用但建議)

啟用後可在任何目錄直接使用 veos 指令並支援 Tab 補全,提示字元會出現 (dspace-veos) 前綴。

source /opt/dspace/veos2026a/tools/shell/veos-env.sh veos --version # 停用:dspace_veos_deactivate

7. 授權準備:CodeMeter 與浮動授權

dSPACE Linux 產品的授權由 CodeMeter(WIBU-SYSTEMS) 管理。浮動網路授權的運作核心是:讓 VEOS 主機透過網路連到授權伺服器的 TCP 22350 埠,並將該伺服器加入 CodeMeter 的 server search list。

7.1 授權需求盤點

授權項目 用於 說明
VEOS 基本授權Ubuntu Guest載入與執行離線模擬應用
VEOS_AAPUbuntu GuestVEOS QEMU Coupling(POSIX-based V-ECU)的必要模組授權。未授權時,veos sim load 會在啟動 QEMU 擴充階段失敗
ControlDeskWindows 主機Windows 端需自行取得授權,並同樣將授權伺服器加入其 CodeMeter 搜尋清單
Bus API / XIL API / RTTUbuntu Guest依實際使用的產品而定

7.2 設定授權伺服器(三選一)

A

安裝時設定

執行任一 dSPACE 安裝腳本前設定 CONFIG_LICENSE_SERVERS。最省事,適合新機部署。

B

cmu 指令

安裝後以 cmu --add-server 加入。最常用,也適合事後調整。

C

WebAdmin

瀏覽器開啟 http://localhost:22350 → Settings → Server Search List。可視化程度最高。

# 方式 B:安裝後加入授權伺服器 cmu --add-server <LICENSE-SERVER-IP> cmu --show-serversearchlist

務必使用明確 IP,不要依賴廣播搜尋。dSPACE 安裝腳本預設會執行 disable_license_broadcast,移除廣播位址——這個方向是正確的:廣播(UDP 22350)無法跨越路由網段或 VPN 通道。若授權伺服器位於 VPN 對端或不同網段,必須以明確 IP 加入。

若授權伺服器需經 VPN 存取,請先確認通道已建立且埠可達;並建議將 VPN 用戶端設為常駐服務,避免長時間測試期間通道中斷導致授權失效。

# 確認網路可達授權伺服器 ping -c 3 <LICENSE-SERVER-IP> nc -vz <LICENSE-SERVER-IP> 22350 # 顯示 succeeded 才代表 22350 通

7.3 授權驗證四層法

授權問題之所以難以定位,是因為前面幾層全部通過,仍然可能借不到授權。建議依下列層次逐層確認,可快速判斷問題落在哪一段。

層 檢查 指令 通過代表
1伺服器在搜尋清單內cmu --show-serversearchlist設定正確(不代表連得到)
2網路可達nc -vz <IP> 22350CodeMeter 埠可通
3看得到網路授權cmu --list-server
cmu --list-network --all-servers --show-expiration
伺服器與授權項目可見
4產品實際借到授權veos sim up 不報授權錯誤✅ 授權真正生效

兩個高頻誤判,值得單獨記住:

  • codemeter.service 顯示 running 不代表有授權。它只代表授權服務程式已啟動、準備好去尋找授權——如同電表通電不等於本月已繳費。
  • cmu --list 顯示 0 CmContainer(s) 是正常的。該指令只列出本機連接的容器(如 USB dongle);浮動網路授權不會出現在這裡。查網路授權請一律使用 --list-server 與 --list-network。

7.4 授權席位的佔用與釋放

浮動授權是「借用制」。實務上有三點需要納入日常作業流程:

  • 被掃描到 ≠ 佔用授權ControlDesk 的「Scan Local Network for Platforms」走的是同子網探測,不需授權;真正借用授權的是載入並執行模擬的那一刻。
  • 測試結束務必執行 veos sim down否則授權席位會持續被佔用。共用授權池時,關閉後建議於 License Monitoring 頁面確認席位已釋放。
  • 以 WebAdmin 的 License Monitoring 判斷可用量顯示每個授權的總數 / 使用中 / 剩餘。即使網路連得到,0 free 時仍然借不到授權。

8. 安裝後驗證與最小啟動測試

8.1 服務狀態

systemctl status codemeter.service # 授權服務 systemctl status rpcbind.service # RPC portmapper,VEOS 對外服務必要

未啟動時以 sudo systemctl start <service> 啟動。若採用 dSPACE portmapper,改以 /opt/dspace/common/portmapper/bin/portmapper -d 執行。

8.2 啟用 Simulator 遠端存取

/opt/dspace/veos2026a/bin/veoskernel config --enable-remote-access

順序很重要:必須在啟動 Simulator「之前」啟用。若 Simulator 已在執行中才變更設定,必須依序執行 sim down → veoskernel config → sim up,設定才會生效。

安全提醒:啟用後,同網段任何電腦皆可存取此 Simulator 且無連線驗證。請僅在受信任網段使用;如需限制,可用防火牆規則僅允許 ControlDesk 主機的來源位址。關閉使用 --disable-remote-access。

8.3 最小啟動測試

這一步同時驗證兩件事:授權是否真正可用,以及 Windows 端能否探測到此 Simulator。

cd /opt/dspace/veos2026a/bin ./veos sim up # 啟動 Simulator;若報 license 錯誤 → 回 §7.3 排查 ./veos sim info # 顯示 host IP、模擬狀態、已載入的 OSA ./veos sim scan # 掃描同子網內的 VEOS Simulator # 測試結束後釋放授權席位 ./veos sim down
檢查點 通過代表
veos sim up 無 license 錯誤授權鏈路可用
veos sim info 正常回覆Simulator 已啟動
veos sim scan 列出本機同子網探測機制正常
ControlDesk 掃描到並可連線 online✅ 授權與遠端存取整體貫通

9. ControlDesk 從 Windows 端連入

用途 協定 / 埠 備註
RPC portmapperTCP 111rpcbind 或 dSPACE portmapper,必須開放
VEOS 模擬服務由 portmapper 動態指派需嚴格防火牆規則時,請向 dSPACE Support 索取該版本的埠清單
CodeMeter 授權TCP 22350Guest 與 Windows 端各自都要能連到授權伺服器

Windows 端操作步驟(實際 UI 以所使用的 ControlDesk 版本為準):

  1. 於 Windows 端 CodeMeter 加入相同的授權伺服器。
  2. 確認網路可達 Guest:Test-NetConnection <GUEST-IP> -Port 111,應回報 TcpTestSucceeded : True。Guest 的 IP 可於 Guest 內以 hostname -I 取得(NAT 模式下取 VMnet8 網段位址)。
  3. ControlDesk → Platform Manager → Register Platforms → Scan Local Network for Platforms,選取該 VEOS 平台並套用。
  4. 若掃描不到,回頭確認:Simulator 遠端存取是否已啟用、rpcbind 是否運作、Guest 防火牆是否放行。

多網卡環境的選擇原則:平台探測是「同子網掃描」,因此應選擇與 ControlDesk 同子網的那個 IP,並將該網卡設為固定 IP——ControlDesk 註冊的是 IP,位址變動後平台即失聯。多網卡回報的 hostname 相同,無法據以區分。

10. icount 模式所需的調整與原因

icount 是 VEOS QEMU Coupling 的預設時間同步模式。它以 QEMU 的 TCG(Tiny Code Generator)進行純軟體指令模擬,並依指令計數推進模擬時間:VEOS 每個同步步長內,讓 Guest 執行完該區間應執行的指令數。

10.1 環境層面:幾乎不需要調整

icount 模式不需要 KVM,也不需要巢狀虛擬化。這是它最重要的實務價值——在無法開啟巢狀虛擬化的環境(例如受管制的公司筆電、雲端執行個體、或啟用了 VBS 的 Windows 主機)中,icount 是唯一可用的模式。因此,本文 §3 中與虛擬化相關的設定對 icount 而言均非必要。

項目 icount 是否需要 原因
巢狀虛擬化 vhv.enable❌ 不需要全程軟體模擬,不觸及 KVM
/dev/kvm 權限❌ 不需要同上
dspace-veos-linux-2026a❌ 可省略icount 使用自備的 Guest kernel,不使用 VEOS Linux kernel
虛擬機 CPU 配置⚠ 影響效能TCG 為單執行緒,模擬速度取決於單核效能。主機 CPU 被其他負載搶佔會直接反映在加速比上

10.2 Guest 映像層面:必須完成的調整

雖然 icount 對主機環境要求寬鬆,但對 Guest 映像(bzImage + rootfs)仍有明確要求。這些調整的共同原因是:VEOS 會接管命令列的一部分參數,且模擬時間由 VEOS 控制。

調整項目 做法 原因
網卡型號明確指定 model=virtio-net-pci半虛擬化網卡效率較高;且若日後要切換至 idle-detect,VEOS Linux kernel 不含 e1000 驅動,屆時 Guest 將看不到網卡
磁碟介面if=virtio,format=raw與網卡同理,並確保 rootfs 以 /dev/vda 掛載
Consolekernel cmdline 只保留 console=ttyS0,移除 tty1VEOS 會自動附加 -nographic;保留 tty1 無實際輸出,且可能造成 getty 卡住
使用者網路移除原生的 -net user虛擬 Ethernet 由 VEOS 接上其 Bus Cluster,不應與 QEMU 預設網路設定衝突
靜態 IPGuest 內設定固定位址,停用 DHCPVEOS 的虛擬 Ethernet cluster 內沒有 DHCP 伺服器;DHCP 會一路等到 timeout,在 icount 下這段等待特別漫長
時間同步服務全部停用(NTP、chrony、systemd-timesyncd、hwclock --hctosys)模擬時間由 VEOS 注入。任何校時動作都會破壞時間同步的一致性
CPU 數建議 -smp 1TCG 單執行緒,多核心對模擬速度助益有限,反而增加同步複雜度
省電與看門狗關閉 watchdog、CPU governor 等機制會干擾時間推進與 idle 行為判定

10.3 VEOS 自動接管的參數

撰寫 POSIX-based V-ECU 的 JSON 設定檔時,需要知道哪些參數由 VEOS 控制。重複設定會造成衝突並被拒絕。

類別 icount 模式下的參數
未指定時自動加入-nographic(除非自行提供 -display)、網路裝置參數
由 VEOS 控制-icount、-rtc clock=vm、-accel tcg,thread=single
禁止自訂-veos

11. idle-detect 模式所需的調整與原因

idle-detect 以 KVM 硬體虛擬化執行 Guest,並透過偵測 Guest 進入 idle 狀態來推進模擬時間。其結果是完整的時間同步:Guest 時間與 VEOS 模擬時間一致,多個 Guest 之間處於 lockstep。代價是它對執行環境有一連串硬性要求。

11.1 虛擬化授權鏈:五個環節缺一不可

在 VMware 上執行 idle-detect,本質上是在虛擬機內再執行一層 hypervisor。VT-x 必須從實體 CPU 一路透傳到 Guest 內的 KVM。任一環節斷裂,結果都是 idle-detect 無法啟動——但錯誤訊息會因斷點位置不同而不同,這正是快速定位的關鍵。

01

BIOS / UEFI 啟用 VT-x

實體 CPU 的虛擬化功能必須在韌體層啟用。

驗證(Windows):HyperVRequirementVirtualizationFirmwareEnabled = True

02

關閉 Hyper-V 與 VBS

否則 VMware 退回 WHP 模式,無法透傳 VT-x。

驗證:HypervisorPresent = False、VirtualizationBasedSecurityStatus = 0

03

VM 啟用巢狀虛擬化

勾選 Virtualize Intel VT-x/EPT(vhv.enable = "TRUE"),並執行完整 power-cycle。

驗證(Guest):grep -c ' vmx' /proc/cpuinfo > 0

04

KVM 模組載入

Guest 內 kvm 與 kvm_intel(或 kvm_amd)須成功載入,並產生 /dev/kvm。

驗證:lsmod | grep kvm、ls -l /dev/kvm

05

使用者對 /dev/kvm 的存取權限

最容易被忽略的一環。/dev/kvm 存在,不代表執行 VEOS 的使用者開得起來——詳見 §11.3。

11.2 安裝層面的要求

項目 要求與原因
dspace-veos-linux-2026a必須安裝。idle-detect 模式下,Guest kernel 由 VEOS 指定為其內附的 VEOS Linux kernel,而非使用者自備的 kernel。切勿設定 INSTALL_VEOS_LINUX_KERNEL=0
dspace-veos-qemu-2026a必須安裝。提供 veos-qemu 執行檔
VEOS_AAP 授權必要。缺少時 veos sim load 會在啟動 QEMU 擴充階段失敗

11.3 /dev/kvm 權限:本模式最常見的失敗點

Ubuntu 預設情況下,/dev/kvm 帶有 uaccess 標籤,其存取權是由 systemd-logind 以 ACL 的形式授予「持有本機 seat 上 active session 的使用者」。這代表:在有圖形登入的桌面環境下,一切正常;但一旦離開該情境,權限就會消失。

以下情境會導致權限失效:

  • 真正的 headless 執行(無本機登入 session)
  • 以另一個使用者身分執行 VEOS
  • 由 systemd service、cron 或 CI 排程啟動模擬
  • 本機 session 登出之後
  • 安裝 Ubuntu Server 版(無圖形 session)

正確且與 session 無關的做法,是執行 dSPACE 隨附的權限設定腳本:

sudo /opt/dspace/veos2026a/simulator/extensions/qemu/util/configure.sh <使用者名稱> # 執行後必須「登出再登入」,重開終端機不足以讓群組變更生效 # 驗證 id | grep kvm getent group kvm ls -l /dev/kvm

該腳本會依序呼叫三個子腳本,其作用如下:

子腳本 作用 必要性
configureKvm.sh建立 kvm 群組、將使用者加入、安裝 udev 規則並觸發生效必要
configureLoop.sh建立 loop-control 群組與對應 udev 規則(掛載磁碟映像用)建議
configureLimits.sh於 /etc/security/limits.d 解除 locked RAM 限制僅 GPU passthrough 需要,會互動詢問

上述腳本會變更系統設定(群組成員與 udev 規則),請依貴司的系統變更管理程序執行。

11.4 Guest 映像層面的額外要求

idle-detect 對 Guest 映像的要求比 icount 更嚴格,根本原因只有一個:Guest kernel 被替換成 VEOS Linux kernel。使用者自備 rootfs 內的 /lib/modules 版本與之不符,因此無法載入任何核心模組。

要求 原因
virtio 驅動必須為 built-in,不可為模組Guest kernel 已被替換,rootfs 內的模組版本不符而無法 insmod。若 virtio-blk / virtio-net 為模組,Guest 將無磁碟、無網卡
網卡必須是 virtio-net-pciVEOS Linux kernel 不含 e1000 / e1000e 驅動,指定 e1000 時 Guest 內看不到任何網卡
rootfs 須為單一 ext2/ext4 raw 磁碟映像VEOS Linux kernel 未啟用 SquashFS 與 OverlayFS
init 系統建議採 BusyBox init 或 sysvinitVEOS Linux kernel 未啟用 CONFIG_MEMCG,systemd 的 cgroup 記憶體控制器不可用,可能導致啟動異常
sysfs 必須掛載VEOS 的時鐘介面經由 sysfs 提供;pre-start initialization 亦依賴它
確認 /dev 已被填充依 rootfs 的建置方式,開機早期可能尚未掛載 devtmpfs,導致無法開啟 /dev/null 與 /dev/console。建議在 init 的第一個動作即掛載 devtmpfs,或於映像內建立靜態裝置節點

11.5 VEOS 自動接管的參數

idle-detect 下 VEOS 接管的參數比 icount 更多,撰寫 JSON 設定時不應自行指定 -kernel、-cpu、-smp、-enable-kvm 與 -rtc。

類別 idle-detect 模式下的參數
未指定時自動加入-nographic、-no-reboot、-nodefaults
由 VEOS 控制-kernel <VEOS Linux kernel>、-cpu host、-rtc base=epoch,clock=vm,以及 hpet=disable tsc=reliable nohz=off 等 kernel cmdline
禁止自訂-veos、-S、-enable-kvm、-smp 1

實務提醒:由於 idle-detect 會加入 -nodefaults,QEMU 的預設序列裝置會被取消。若需要在日誌中觀察 Guest 的開機訊息與應用輸出,必須自行於設定中補上序列裝置(例如 -serial stdio),否則 Guest console 將完全沒有輸出——而模擬本身仍會正常執行,容易誤判為 Guest 未開機。

12. 兩種模式的對照與選用建議

面向 icount idle-detect
執行方式TCG 軟體模擬(單執行緒)KVM 硬體虛擬化
Guest kernel使用者自備由 VEOS 指定(VEOS Linux kernel)
是否需要 KVM❌ 不需要✅ 必須(含巢狀虛擬化)
時間同步程度部分同步(依指令數截斷)完全同步(偵測 idle 才推進)
多節點時間一致性各節點時間各自獨立lockstep,各節點時間相同
典型加速比約 0.95(模擬時間略慢於實時)約 1.000
Guest 開機速度較慢(純軟體模擬)顯著較快(原生執行)
Guest 核心模組可正常使用❌ 版本不符,無法載入
GDB 中斷點凍結模擬時間❌ 不支援✅ 支援
NMI Profiler❌ 不支援✅ 支援
Pre-start initialization❌✅

選擇 icount 的情境

  • 環境無法開啟巢狀虛擬化(受管制主機、部分雲端執行個體、Windows 已啟用 VBS)
  • 需要使用自備的 Guest kernel驗證特定 kernel 設定或驅動
  • Guest 內需要載入自行編譯的核心模組
  • 建置與導入階段:先以 icount 打通完整流程,再評估是否升級至 idle-detect

選擇 idle-detect 的情境

  • 需要多節點之間嚴格的時間一致性(lockstep)
  • 需要接近實時的模擬速度與較短的迭代週期
  • 需要 GDB 除錯且要求中斷點凍結模擬時間
  • 需要使用 dSPACE NMI Profiler 分析 Guest 內的執行熱點

導入建議:兩種模式並非二選一。實務上建議先以 icount 打通「映像 → JSON 設定 → 匯入 OSA → 執行 → 觀測」的完整鏈路,此時環境變數最少、失敗點最容易定位;待流程穩定後,再處理巢狀虛擬化與 /dev/kvm 權限,切換至 idle-detect 取得時間同步精度。由於兩者對 Guest 映像的要求高度重疊(virtio、靜態 IP、停用校時、單一 raw rootfs),依本文 §10.2 建置的映像通常可直接沿用於 idle-detect。

13. 錯誤訊息判讀對照表

建置階段最耗時的往往不是修正本身,而是定位。下表整理實務上高頻出現的訊息與其對應斷點。

訊息 / 現象 斷點位置 處理方向
Could not access KVM kernel module:
No such file or directory
/dev/kvm 不存在巢狀虛擬化未生效。檢查 §11.1 的環節 1–3,特別是是否已完整 power-cycle
Could not access KVM kernel module:
Permission denied
/dev/kvm 存在但無權存取執行 §11.3 的 configure.sh 並登出再登入
CodeMeter License Server not found授權伺服器不可達確認網路 / VPN 通道與 TCP 22350;依 §7.3 逐層驗證
user maximum ... reached授權席位已被佔用不是伺服器故障。多為前一次模擬未關閉,執行 veos sim down 釋放
找不到 VEOS_AAP 授權模組授權未涵蓋QEMU Coupling 需獨立的模組授權,請確認授權範圍
ControlDesk 掃描不到平台遠端存取或 RPC確認遠端存取已於 sim up 之前啟用、rpcbind 運作中、防火牆放行 TCP 111
Guest console 完全沒有輸出,
但模擬正常執行
序列裝置未設定idle-detect 會加入 -nodefaults,須自行補上序列裝置(§11.5)
Guest 開機後看不到網卡網卡型號不相容idle-detect 下必須使用 virtio-net-pci;VEOS Linux kernel 不含 e1000 驅動
Guest 開機停滯數十秒後才繼續DHCP 逾時虛擬 Ethernet cluster 內無 DHCP 伺服器,請改為靜態 IP(§10.2)
VEOS 指令透過 SSH 或腳本呼叫時無回應CLI 等待標準輸入veos model 系列指令會讀取 stdin,非互動呼叫時請附加 < /dev/null

14. 上線前檢查清單

主機與虛擬機

  • ☐ BIOS/UEFI 已啟用 VT-x / AMD-V
  • ☐ Hyper-V、VBS、Credential Guard、WSL2 均已關閉
  • ☐ VM 已勾選 Virtualize VT-x/EPT 並完整 power-cycle
  • ☐ CPU 拓撲為 1 socket × N cores
  • ☐ 網路模式符合部署拓撲(拓撲 B 用 NAT)
  • ☐ 未建立快照

作業系統

  • ☐ Ubuntu 24.04 LTS
  • ☐ Kernel 為 GA(linux-generic)
  • ☐ Locale 為 US English
  • ☐ .NET 8 已安裝且無套件源衝突
  • ☐ codemeter 與 rpcbind 服務運作中
  • ☐ Guest 內 grep -c ' vmx' /proc/cpuinfo > 0(idle-detect)

授權

  • ☐ 授權伺服器已在搜尋清單內
  • ☐ TCP 22350 可達
  • ☐ cmu --list-server 看得到伺服器
  • ☐ License Monitoring 顯示有可借席位
  • ☐ VEOS_AAP 已涵蓋(QEMU Coupling)
  • ☐ Windows 端 ControlDesk 授權已設定

功能驗證

  • ☐ veos sim up 無授權錯誤
  • ☐ veos sim info / scan 正常
  • ☐ ControlDesk 掃描並連線成功
  • ☐ idle-detect:id | grep kvm 有結果
  • ☐ idle-detect:模擬加速比接近 1.000
  • ☐ 測試結束執行 veos sim down

結語

以 VMware 搭配 Ubuntu 24.04 建置 dSPACE VEOS 模擬環境,技術上並不困難,但其中幾個環節具有「設定看似正確、行為卻不正確」的特性——巢狀虛擬化需要完整 power-cycle 才生效、/dev/kvm 的權限可能綁定於登入 session、codemeter.service 運作不等於已取得授權、遠端存取必須在啟動 Simulator 之前啟用。這些環節無法透過單一檢查涵蓋,需要依層次逐一驗證。

建議的導入路徑是:先以 icount 模式打通完整鏈路,此時環境依賴最少、問題最容易定位;待流程穩定後再處理虛擬化授權鏈,切換至 idle-detect 以取得完整的時間同步與除錯能力。由於兩種模式對 Guest 映像的要求高度重疊,這條路徑不會造成重工。

關於本文

本文依據 dSPACE Release 2026-A 官方文件(VEOS Manual、How to Install VEOS 2026-A on Ubuntu Linux、Basics on VEOS QEMU Coupling、Real-Time Testing on Linux)與安裝腳本之實際行為整理,並補充 Jotactic 捷策動能於實際導入專案中累積的工程實務經驗。文中所有網路位址與使用者名稱均為佔位符,請依實際環境替換。

若貴司正在評估或導入 VEOS on Linux、POSIX-based V-ECU 模擬,或需要將既有 Buildroot / Yocto 映像整合至 VEOS 模擬環境,歡迎與我們聯繫,我們可提供環境建置、映像調整與整合測試的完整技術協助。