Job Title Variations: C++ Linux Developer
Job Summary/Overview:
Design, develop, test, and debug embedded software applications for Linux-based systems.
Work on the full software development lifecycle for various embedded devices and hardware platforms.
Collaborate with cross-functional teams (hardware, QA, product management) to deliver integrated solutions.
Ensure the reliability, performance, and scalability of embedded software.
Key Responsibilities:
Software Development:
o Design, develop, and maintain embedded software in C++ (often C++11/14/17 or newer) for Linux-based embedded systems. o Write efficient, robust, and optimized code for resource-constrained environments. o Implement and optimize low-level drivers, communication protocols (e.g., I2C, SPI, UART, CAN, Ethernet, USB), and system software.
o Work on user-space applications, daemons, and shared libraries. o Develop firmware for various hardware platforms, including microcontrollers, microprocessors, and SoCs (System-on-Chips).
Linux Specifics:
o Strong experience with Linux operating systems, including kernel and device driver development.
o Hands-on experience with building, configuring, and customizing the Linux kernel.
o Familiarity with Linux OS internals, memory management, inter-process communication (IPC), and thread programming.
o Experience with tools like the Yocto Project (for building custom Linux distributions), BusyBox, Buildroot, etc. o Knowledge of device trees and hardware abstraction layers.
o Experience with command-line tools and scripting (Bash).
Debugging and Testing:
o Perform system-level debugging and troubleshooting on target hardware platforms. o Utilize debugging tools such as GDB, JTAG, oscilloscopes, logic analyzers, and hardware-in-the-loop (HIL) testing. o Conduct unit testing, integration testing, and system validation.
o Participate in code reviews to ensure code quality, maintainability, and adherence to coding standards (e.g., MISRA for safety-critical systems).
Architecture and Design:
o Contribute to system-level design decisions and participate in requirement analysis, architecture definition, and software implementation.
o Apply object-oriented analysis and design (OOAD) principles and software design patterns.
Keyskills: Embedded C++ Linux C++