Senior Embedded Linux Platform Engineer at Opteran Technologies

This is another case when the job found me. But I was very reluctant to accept it as they wanted one person wearing kind of three hats at once — that sounded very demanding, aside from the fact that they were very remote. Iteratively, we agreed to the terms. It ended up doing very interesting work with a lot of hard and unique heavy lifting in the areas of Linux and FPGAs.

During my first year, except for solving a painful misaligned memory copying problem, the work was mostly heavy scripting and improving DevOps/CI to deploy platform system images for the ZynqMP UltraScale+ chip. As a result of my efforts, we reduced more than a day of manual chiselling to get the working OS into a fully automated system delivering a new image in a matter of hours with configuration options, extensibility and support for hardware variants. This included understanding PetaLinux, Yocto, and specific quirks of Debian on SoCs. I practically had to invent a method of delivering encrypted FPGA bitstreams as Debian packages, which enabled the running system for updates instead of reflashing an SD card for each FPGA release. I influenced changes in many of the company’s engineering practices in the long term to improve maintainability and product deployment readiness.

Then, work on a new product started. I convinced a fellow engineer to write embedded software with Zephyr, and I was tasked with writing the Linux Device Driver for it (I²C Camera Sensor). I reviewed his code, he reviewed mine; when I got stuck, I arranged cooperation with an external contractor experienced in V4L2. While we aimed to run the product on various SBCs, we faced a problem of missing drivers for CSI-2 receivers for the chips these boards were equipped with. Finally, we had to focus on making it run on Raspberry Pi 5. That required tailoring Armbian Jammy images to be preconfigured for our system setup; I used Packer for that, and even ended up having a fork of a plugin that produces cross-platform filesystem images.

The working device driver required smooth, customer-friendly installation on the target; as we relied heavily on Armbian and Ubuntu, we decided to exercise DKMS. Originally, the tool had an mkdeb command dealing with the process, but this had been decommissioned by DKMS maintainers (what’s good), and it’s unavailable in Ubuntu Noble. I had to do it by trial&error and looking for decent examples to figure out what’s the best way to build the package using the DKMS debhelper; that route helped us solve some other problems of extra scripts that we needed to install alongside the working driver and propagating device tree overlays.

After making the driver operable, we’ve moved our efforts to create an interface software bridging the V4L2 video stream with ROS2, which required a deep understanding of V4L2 and Media Controller API. The rest of the company’s robotic vision stack was founded on ROS2. I’ve learned some parts of ROS2 on the job.

Aside from the above, I did some product engineering, including BOM & other cost estimation for computing platforms used by our new product, and long-term development planning. I conducted feasibility dialogues with prospective customers. I prepared a performance and cost analysis of various SoCs (on some example SBCs).

Finally, after a long process, we hired a new team member. I was a technical recruiter responsible for programming challenges for candidates and assessing their skills and potential based on these challenges.

In recognition of my input and efforts, I was formally promoted to Principal Embedded Software Engineer in January 2025, after approval of the new job ladder.

Redundancy cut my role in August 2025 as a consequence of funding difficulties related to multiple factors, including the political situation and tensions, which spiked risk aversion among investors.