Key Responsibilities:
- Design, develop, and optimize embedded software components using C/C++ and Java in Linux environments
- Work across both user space and kernel space, including custom kernel modules and device drivers
- Collaborate with hardware engineers to bring up and debug new boards and peripherals
- Integrate and validate hardware platforms with the embedded Linux OS
- Maintain and enhance embedded Linux systems to ensure performance, reliability, and scalability
- Participate in system architecture design and conduct code reviews
- Troubleshoot low-level issues including kernel panics, memory leaks, and hardware/software interactions
- Document software components and contribute to product design discussions
Required Skills and Qualifications:
- Bachelor's or Master's degree in Computer Engineering, Electrical Engineering, Computer Science, or a related field
- Strong proficiency in C++ with modular and maintainable code practices
- Experience in Java programming
- In-depth knowledge of embedded Linux including kernel internals, device tree, bootloaders (e.g., U-Boot), and kernel module development
- Experience with Linux build systems like Yocto or Buildroot
- Understanding of protocols such as I2C, SPI, UART, and USB
- Proficient in debugging tools like GDB, strace, perf, oscilloscopes, and logic analyzers
- Familiarity with cross-compilation toolchains and embedded board bring-up