By Jakob Engblom
Wind River just released the world's first 64-bit RTOS, Wind River VxWorks 6.9 for the 64-bit Intel x86 Architecture. This is a great achievement by the VxWorks team, and I am proud to say that Simics played a role in the development of the 64-bit port of VxWorks. Simics was used throughout the development in a variety of ways. One particular clever technique was used at the very start of the project to kick-start development and overcome the hurdle of getting hardware support in place.
An operating system really consists of two main parts. There is the kernel that manages the processors in the system, tracks the running tasks, deals with memory management, handles device drivers, fields interrupts, and provides services to programs. The kernel depends on the architecture of a system, but is fairly independent of any particular board or system. Then there is the hardware interface layer, or BSP (Board Support Package), that contains the drivers that actually make the OS run on a particular system.
The problem you face when starting to port an OS to a new architecture is that you have neither a kernel nor a BSP. To write the BSP, you need a kernel. To test the kernel, you need a BSP. Catch-22. Simics offered the shortest and cheapest way out of this cycle.
Virtual hardware can be less demanding than physical hardware (it can also be more demanding, as discussed previously). In this case, the OS developers could load a kernel directly into target memory, bypassing the need for any boot loaders.If hardware configuration was needed, it was done from the simulator itself, using its backdoor access to the target. The kernel was equipped with a very basic BSP that did not initially even include interrupts – but that was still sufficient to run on a virtual platform, enough to validate the basic code base. The kernel could then be developed to a point where it was complete enough to get a proper BSP developed that would also run on physical hardware.
Without a BSP the normal debugging of the nascent kernel was impossible, and Simics offered the only debug option. A software-agent-based debugger needs a BSP, since it requires some way to talk to the host. Thus, that would come on line even later in the process. A hardware debugger for 64-bit x86 was also not available, since it was a new architecture for the debugger too.
Using Simics to port operating systems to the world of 64 bits is a classic. As noted in blog post from last year, Simics has been used in the past to get software ecosystems in place for 64-bit x86 as well as 64-bit Power Architecture. In the case of VxWorks for 64-bit x86, we had an established hardware architecture, but Simics still provided huge benefits to the project. This proves that virtual platforms are much more than just pre-silicon access. They have value regardless of how new the hardware being targeted is.