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 in kind of three roles at once — that sounded very demanding, aside from the fact they were very remote. But iteratively we agreed to terms. It ended up being 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 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 influenced changes in many of the company's engineering practices in the long term for improved 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 have a fork of plugin which does cross-platform filesystem images.

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 a 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 moved our efforts to create an interface software bridging the V4L2 video stream with ROS2, which required 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 the 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, long long-term development planning. I conducted feasibility dialogues with prospective customers. I did performance and cost analysis of various SoCs (on 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 that challenge.

I was promoted to Principal Embedded Software Engineer in February 2025.