VxWorks 7 SDK for Raspberry Pi 3
This blog will help to boot VxWorks 7 SDK for Raspberry Pi 3
VxWorks is a Real-Time Operating System (RTOS) developed by Wind River Systems. It is used in embedded systems requiring real-time, deterministic performance and predictable timing. VxWorks is used in industries where safety and security certification’s plays a key role like aerospace, defense, medical devices, industrial equipment, robotics, energy, transportation, network infrastructure, automotive, and consumer electronics.
VxWorks supports a range of target architectures including ARM, Intel, Power architecture, ARM, RISC-V architecture and more. VxWorks can also be explored on Raspberry Pi since it is a compact, affordable, and versatile ARM Cortex based single-board computer widely used for embedded systems prototyping, education, and hobby projects.
This article helps us to setup environment with required firmware files to boot VxWorks on a Raspberry Pi 3b.
Building VxWorks for Raspberry Pi 3b
Building VxWorks for Raspberry Pi 3 from scratch requires:
-
A licensed VxWorks SDK with ARMv8 support.
-
BSP (Board Support Package) configuration.
-
Wind River Workbench or CLI environment.
Pre-built VxWorks images for the Raspberry Pi 3 allow you to get hands-on experience with VxWorks, helping you understand the boot flow, develop and test applications, and explore the RTOS practically-without the need to purchase a full development license.
Follow these steps to build, prepare the required files, and set up your SD card to boot VxWorks on Raspberry Pi 3.
1. Prerequisites: Prepare SD Card for Raspberry Pi 3
For booting VxWorks in Raspberry Pi 3, Below list of partitions needs to be created in the SD Card
-
/dev/sda(SD Card device) -
/dev/sda1(boot, FAT32) -
/dev/sda2(rootfs or data, ext4)
Creating partitions in SDCARD using fdisk
fdisk is a command-line utility available on Linux systems for managing disk partition tables.
To create new partitions on your SD card, run the following command in your Linux terminal.
sudo fdisk /dev/sda
Note: Replace /dev/sda with the actual device name of your SD card on your system to avoid data loss on other drives.
fdisk Partitioning: Interactive prompt
Once you run the fdisk command, it will open an interactive prompt where you can create and manage partitions on your SD card
1. Create a new DOS partition table:
-
Create a new empty DOS partition table using the o command in fdisk
o
2. Create Partition 1 (boot):
-
Create a new boot partition on the SD card to store the VxWorks boot files.
n
p
1
<Enter> # default first sector
+512M # 512 MB boot partition
-
Set partition type to FAT32 LBA
t
c
-
Set the bootable flag on partition 1 using the
acommand infdisk. This marks the partition as bootable for VxWorks.
a
3. Create Partition 2 (rootfs):
-
Create a new partition for rootfs
n
p
2
<Enter> # default first sector
<Enter> # use remaining space
4. Write changes and exit:
-
Once the above partition is created, save the changes using the below command
p # (optional: view partition table)
w
Formatting SD Card partitions
-
Format the SD Card’s boot partition to FAT32 filesystem using mkfs command
sudo mkfs.vfat -F 32 -n "RPI_SDCARD" /dev/sda1
-
Format the SD Card’s rootfs as ext4
sudo mkfs.ext4 -L rootfs /dev/sda2
-
Once the partitioning is completed, we can mount the partitions to our Linux device.
user@linux:[~]$ ls /media/user/
rootfs RPI_SDCARD
2. Raspberry Pi Firmware
The Raspberry Pi requires its firmware to initialize the GPU and memory before loading U-Boot or the operating system.
-
The firmware is available at https://github.com/raspberrypi/firmware/tags
-
Download and Extract Raspberry Pi firmware version - 1.20200212
wget https://github.com/raspberrypi/firmware/archive/1.20200212.tar.gz
tar -xvzf 1.20200212.tar.gz
cd firmware-1.20200212
-
Copy the firmware files to the SD card
cp -r boot/* /media/user/RPI_SDCARD/
3. Generate U-Boot binary for Raspberry Pi 3
-
Initialize the U-Boot repository
git clone https://gitlab.denx.de/u-boot/u-boot.git u-boot-v2020.10
cd u-boot-v2020.10
git checkout u-boot-v2020.10
-
Compile U-Boot for Raspberry Pi 3
CROSS_COMPILE=aarch64-linux-gnu- make rpi_3_b_plus_defconfig
CROSS_COMPILE=aarch64-linux-gnu- make
-
Copy the generated binary
u-boot.binto the SD card askernel8.img
cp u-boot.bin /media/user/RPI_SDCARD/kernel8.img
4. VxWorks Software Development Kit (SDK)
VxWorks pre-built Images
VxWorks pre-built images are available on the following official Wind River sources
-
For VxWorks Image Version >= 21.03 : https://forums.windriver.com/t/vxworks-software-development-kit-sdk/
-
For VxWorks Image Version < 21.03 : https://labs.windriver.com/downloads/wrsdk_prev.html
VxWorks for Raspberry Pi 3b
-
Download the Vxworks pre-built Images for Raspberry Pi 3b
wget https://labs.windriver.com/downloads/wrsdk-vxworks7-raspberrypi3b-1.5.tar.bz2
tar -xf wrsdk-vxworks7-raspberrypi3b-1.5.tar.bz2
cd wrsdk-vxworks7-raspberrypi3b
-
Copy the boot files required for VxWorks
cp -rLu bsps/rpi_3_0_1_1_1/boot/sdcard/* /media/user/RPI_SDCARD/
sync
-
Create a directory for VxWorks Kernel on the SD card and copy the VxWorks kernel
mkdir -p /media/user/RPI_SDCARD/vx
cp bsps/rpi_3_0_1_1_1/uboot/uVxWorks /media/user/RPI_SDCARD/vx/
With the above steps completed, the SD card is now prepared. You can safely unmount the SD card, insert it into the Raspberry Pi 3b, and power it on to start booting VxWorks.
Booting VxWorks in Raspberry Pi 3b
Connect Raspberry Pi 3b to Linux PC using a serial console cable. minicom (or) picocom applications can be used to get the console access and interact with the target board.
Boot Process of Raspberry Pi 3 using VxWorks Kernel
The boot process of the Raspberry Pi 3 involves multiple stages to bring up the VxWorks Kernel on the Target board
[GPU ROM Bootloader]
↓
[bootcode.bin]
↓
[start.elf + config.txt]
↓
[U-Boot]
↓
[VxWorks Kernel]
↓
[VxWorks Shell (->)]
After powering on the Raspberry Pi, you will see the U-Boot logs first, followed by the VxWorks boot logs, and finally the VxWorks shell prompt:
1. u-boot
U-Boot 2020.10 (Jul 18 2025 - 16:48:06 +0530)
DRAM: 948 MiB
RPI 3 Model B (0xa02082)
MMC: mmc@7e202000: 0, sdhci@7e300000: 1
2. Kernel
## Booting kernel from Legacy Image at 08000000 ...
Image Name: vxworks
Image Type: AArch64 VxWorks Kernel Image (uncompressed)
Data Size: 6295956 Bytes = 6 MiB
Load Address: 00100000
Entry Point: 00100000
Verifying Checksum ... OK
Loading Kernel Image
!!! WARNING !!! Using legacy DTB
## Starting vxWorks at 0x00100000, device tree at 0x00000000 ...
Target Naarget
Instantiating /tmp as rawFs, device = 0x1
_________ _________
\77777777\ /77777777/
\77777777\ /77777777/
\77777777\ /77777777/
\77777777\ /77777777/
\77777777\ \7777777/
\77777777\ \77777/ VxWorks 7 SMP 64-bit
\77777777\ \777/
\77777777\ \7/ Release version: SR0650
\77777777\ - Build date: Aug 20 2020 16:09:57
\77777777\
\7777777/ Copyright Wind River Systems, Inc.
\77777/ - 1984-2020
\777/ /7\
\7/ /777\
- -------
Board: Raspberry Pi 3 Model B+ - ARMv8
CPU Count: 4
OS Memory Size: ~947MB
ED&R Policy Mode: Deployed
Debug Agent: Started (al Stop Mod: Not sta BSP Status: *** UNSUPPORTED ***
usrNetDevNameGet: no network device
usrNetDevNameGet: no network device
Adding 12462 symbols for standalone.
3. Default prompt
-> memShow
status bytes blocks avg block max block
-------- -------------- ---------- -------------- --------------
current
free 28039440 30 934648 27762640
alloc 39068304 5500 7103 -
internal 1008 3 336 -
cumulative
alloc 39527936 5818 6794 -
peak
alloc 39308080 - - -
cached
no cached blocks
value = 0 = 0x0
4. VxWorks prompt
-
Enter
cmdto enter in VxWorks prompt
-> cmd
[vxWorks *]#
5. VxWorks - Version details
[vxWorks *]# version
VxWorks 7 SMP 64-bit (for Raspberry Pi 3 Model B+ - ARMv8)
Release version: SR0650
Build date: Aug 20 2020 16:09:57
Boot line:
usb2End(0,0)host:vxWorks h=192.168.0.2 e=192.168.0.3:ffffff00 g=192.168.0.1 u=target pw=vxTarget
Unlocking New Explorations in VxWorks
With VxWorks Kernel running on the Raspberry Pi 3, It creates a practical platform to explore RTOS concepts hands-on, Load and run simple VxWorks modules, experiment with creating and managing tasks directly from the shell, and build minimal VxWorks applications to deepen your understanding of real-time systems.