Computer Setup#
WMX ROS2 needs a real-time Linux kernel, ROS 2, and the WMX Runtime on the target computer before you install the ROS2 packages. The target can be a standard desktop (x86), an Intel IPC such as the Advantech UNO-258 (x86), or an Advantech MIC edge platform (NVIDIA Jetson, arm64). This page covers installing the operating system, getting a PREEMPT_RT kernel in place, verifying latency, installing ROS 2, and configuring the WMX Runtime.
Supported targets#
Target |
Arch |
Ubuntu |
RT kernel |
OS install |
|---|---|---|---|---|
Desktop |
x86_64 |
22.04 / 24.04 |
PREEMPT_RT |
Standard installer |
Intel IPC (Advantech UNO-258) |
x86_64 |
22.04 / 24.04 |
PREEMPT_RT |
Standard installer |
Advantech MIC-713 |
arm64 |
22.04 |
|
Flash (Jetson) |
Advantech MIC-733ao |
arm64 |
22.04 |
|
Flash (Jetson) |
Advantech MIC-743 |
arm64 |
24.04 (JetPack 7.0) |
|
Flash (Jetson) |
Install the operating system#
Desktop / Intel IPC (Advantech UNO-258, x86): install Ubuntu 22.04 or 24.04 the usual way with the standard Ubuntu installer (including its real-time kernel).
Advantech MIC (Jetson, arm64): the MIC boards ship without a real-time kernel, so you build and flash a prebuilt PREEMPT_RT image using the steps below.
1. Connect the IPC (Advantech MIC)#
On a desktop machine, prepare the board’s setup bundle and put the board into recovery mode. Pick your target:
Not applicable — x86 targets do not flash a kernel. Install Ubuntu the usual way (including its real-time kernel), then continue to the verification step:
Prepare the setup files [Desktop] — make a workspace and place the board’s setup bundle (kernel-build/flash scripts) inside it:
mkdir ~/mic713_ubuntu2204_setup
cd mic713_ubuntu2204_setup
Enter recovery mode [IPC] — push and hold REC, push RST and release, wait ~8 s, then release REC. Confirm the desktop sees it:
lsusb # expect a line containing: NVIDIA Corp. APX
Note
Install an additional M.2 NVMe SSD in the board before starting due to limited storage capacity.
Prepare the setup files [Desktop] — make a workspace and place the board’s setup bundle (kernel-build/flash scripts) inside it:
mkdir ~/mic733_ubuntu2204_setup
cd mic733_ubuntu2204_setup
Enter recovery mode [IPC] — with power off, hold REC (SW_REC1);
apply power and press RST (SW_RST1) once while holding SW_REC1
for 5–10 s, then release. Use a USB type-A to Micro-USB cable. Confirm:
lsusb # expect a line containing: NVIDIA Corp. APX
Prepare the setup files [Desktop] — make a workspace and place the board’s setup bundle (kernel-build/flash scripts) inside it:
mkdir ~/mic743_ubuntu2404_setup
cd mic743_ubuntu2404_setup
Enter recovery mode [IPC] — push and hold REC, push RST and release, wait ~8 s, then release REC. Confirm the desktop sees it:
lsusb # expect a line containing: NVIDIA Corp. APX
2. Build the RT kernel [Desktop]#
Make the bundle scripts executable and build the kernel. Pick your target:
Not applicable — x86 targets use the kernel from the standard Ubuntu install. Continue to the verification step.
Download the setup material (including the kernel-build/flash .sh
scripts) into the workspace created in step 1:
Then make the scripts executable and build the kernel:
sudo chmod +x *.sh
./code_MIC713.sh
./build_eval_713.sh
In the kernel menuconfig that opens, set:
General setup → Timer subsystem → Timer tick handling → Full dynticks system (tickless)
General setup → Preemption Model: Fully Preemptible Kernel (RT)
Kernel Features → Timer frequency: 1000 HZ
Device Drivers → Network device support → Ethernet driver support → Realtek devices →
<M>Realtek 8169/8168/8101/8125 ethernet support (toggle with the space key)then save and exit
Download the setup material (including the kernel-build/flash .sh
scripts) into the workspace created in step 1:
Then make the scripts executable and build the kernel:
sudo chmod +x *.sh
./code_MIC733.sh
./build_eval_733.sh
In the kernel menuconfig that opens, set:
General setup → Timer subsystem → Timer tick handling → Full dynticks system (tickless)
General setup → Preemption Model: Fully Preemptible Kernel (RT)
Kernel Features → Timer frequency: 1000 HZ
Device Drivers → Network device support → Ethernet driver support → Realtek devices →
<M>Realtek 8169/8168/8101/8125 ethernet support (toggle with the space key)then save and exit
Download the setup material (including the kernel-build/flash .sh
scripts) into the workspace created in step 1:
Then make the scripts executable and build the kernel:
sudo chmod +x *.sh
./code_MIC743.sh
./build_eval_743.sh
In the kernel menuconfig that opens, set:
General setup → Timer subsystem → Timer tick handling → Full dynticks system (tickless)
General setup → Configure standard kernel features (expert users)
General setup → Preemption Model: Fully Preemptible Kernel (RT)
Kernel Features → Timer frequency: 1000 HZ
PCI support
Device Drivers → Network device support → Ethernet driver support → Realtek devices →
<M>Realtek 8169/8168/8101/8125 ethernet support (toggle with the space key)then save and exit
3. Flash the RT kernel to the IPC [Desktop]#
Not applicable — x86 targets are not flashed. Continue to the verification step.
./flash_713.sh
./flash_733.sh
./flash_743.sh
Then remove the build artifacts:
sudo rm -rf eval-rt-713
sudo rm -rf arm64--glibc--stable-2022.08-1
sudo rm -rf eval-rt-743
4. Verify the real-time install [IPC]#
Confirm the RT kernel is running, then build and run cyclictest:
uname -r # MIC-713/733ao: 5.15.148-rt MIC-743: 6.8.12-rt
cat /sys/kernel/realtime # 1
lsb_release -a # Ubuntu 22.04 or 24.04
sudo apt update && sudo apt install -y build-essential git # MIC-743: also libnuma-dev
git clone https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
cd rt-tests
make -j
sudo make install
sudo taskset -c 2 cyclictest -D 60s -i 1000 p99 -m -q -h 1000 --latency=0 --priority=99 --thread --histfile=hist_cpu2.txt
Tip
For a soak test, run stress across all cores in one terminal and
sudo cyclictest -t -p 95 in another for several hours, watching the max
latency stay bounded.
5. Set the hostname [IPC]#
sudo hostnamectl set-hostname <new-host-name>
sudo reboot
6. Jetson clocks and power [IPC]#
Lock the Jetson to maximum performance:
sudo /usr/bin/jetson_clocks
sudo /usr/sbin/nvpmodel -m 0
7. NIC driver config [IPC]#
Find the EtherCAT NIC’s PCI address and record it as Location in
/opt/wmx3/platform/ethercat/PrtTcpip.ini:
lspci # e.g. x86: 02:00.0 Ethernet controller arm64: 0008:01:00.0 Ethernet controller
x86 example:
Location=2;1;0arm64 example:
Location=8;1;0;0
8. Modify the NIC driver [IPC]#
WMX needs a patched Realtek NIC driver for EtherCAT. Use one of:
Option 1 — use the prebuilt module(s) from the setup material and make them executable:
sudo chmod 755 wmx_r8168.ko # MIC-733ao also: wmx_igb.ko
Option 2 — rebuild it from the MOVENSYS NIC-driver source with
build_nic.sh.
9. Isolate the core for WMX [IPC]#
Isolate CPU cores for the WMX real-time threads using the Linux core-isolation
method. On MIC-743, run the provided linux_scripts.zip scripts, using the
same Location configured in /opt/wmx3/platform/ethercat/PrtTcpip.ini.
10. Install ROS 2 [IPC]#
Install ROS 2 on the target, matching the Ubuntu version — Jazzy on Ubuntu 24.04, Humble on Ubuntu 22.04. Follow the official installation guide, then add the CycloneDDS RMW that WMX ROS2 uses:
Follow the ROS 2 Jazzy installation guide, then:
Follow the ROS 2 Humble installation guide, then: