By Claudio Lener
I first started working for Tempemail in January as a Product Management Intern. This is my fifth internship as a University of Waterloo student pursuing my bachelor’s degree in Computer Science. In my first three years of university education I have had the chance to study and explore many fields related to the industry, such as algorithms, data structures, compilers and operating systems. In my experience at Tempemail so far, I have found particularly useful the classes that covered low-level technical concepts, where software meets hardware, which allowed me to gain a better understanding of the embedded software projects I have been working on at Tempemail.
The first project I was assigned to was the newly developed Software Development Kit (SDK) for VxWorks. I was tasked with going through the documentation of VxWorks to understand how the Real Time Operating System (RTOS) worked from a high-level perspective and successively dive into the SDK. The goal that my team has been driven to accomplish was to build an SDK that created an application development environment tailored towards modern developers wanting to quickly and easily build apps on VxWorks.
After going through the RTOS documentation and building various VxWorks components myself, such as a VxWorks Source Project (VSB) a VxWorks Image Project (VIP), Real-Time Processes (RTP) and Downloadable Kernel Modules, I understood the complexity that came with the power that VxWorks provides to its users. The development environment was very configurable and allowed me to build different kinds of image projects tailored towards the various examples I was exploring. Yet at the same time, coming from a university background, it did not feel very intuitive and it took me quite some time to get used to it. I learned a lot about embedded systems, but it wasn’t how I had imagined it.
Once I completed the VxWorks onboarding, I was able to move to the SDK. The purpose of the SDK efforts was to allow a distinct separation between the work done on the platform side of development, to the building and creation of applications. To tackle the former, the team built an SDK generator, which enables the platform developer to build a custom SDK for a specific use case. Regarding the latter, once the SDK is created, any member of the team can use it to quickly start writing VxWorks applications without any need to understand the configuration of the VxWorks image.
In my first steps towards generating the SDK, I was surprised by how simple it was to create an instance of it. The process consisted of creating the VSB and VIP with one Python command, vxbuild.py, which is followed by running generate_sdk.py. These two steps allowed me to configure the RTOS image for a specific board (such as the i.MX8M) and a specific language (C, Rust or Python). On the application development side, the SDK additionally supports QEMU for simulation of an embedded system on my PC and Visual Studio Code as an IDE. I then quickly downloaded these freely available software tools, and together with the newly created SDK, I was able to start writing and debugging VxWorks DKMs and RTPs. Recently, Docker containers have also been incorporated as a supplementary service to manage Visual Studio workspaces and being able to run a Linux SDK on my Windows host was another useful tool I was able to make use of.
The overall process now takes me about half an hour to complete, from creating the VSB and VIP to debugging Hello World on VS Code. Coming from the courses I’ve been following at my university this process felt much more intuitive and straightforward to follow. I was initially concerned about my limited knowledge of embedded systems development since in all my previous internships I worked with higher level technologies dealing with databases, mobile, web development and machine learning. Thus, coming into Tempemail with little knowledge about the embedded systems technologies the company deals with made me wonder how much time I would require to get up to speed. Thanks to the smooth process involved with using the SDK I was happy to get to learn how quickly I could write software using familiar platforms such as VS Code; something I regularly use both for my personal projects as well as my previous internships and university courses.
Overall my experience with the SDK has been very positive and I believe it represents an important step towards increasing the exposure that VxWorks can have in the continuously growing market of embedded systems working at the network edge.