1. BS or greater in Computer Science or equivalent.
2. 5+ years of applicable experience.
3. Excellent C and C++ language programming experience for embedded systems encompassing software design, coding, unit testing and debugging.
4. Strong protocol experience down to the byte level.
5. In-depth knowledge on network protocols such as TCP/IP, UDP, multicast, SNMP, FTP, DHCP and related interface protocols.
6. Experience with embedded Linux user space and kernel space software development – Linux v2.6.x and 3.x.
7. Experience with API and management interfaces.
8. Experience developing custom Linux kernel software.
9. Experience developing firmware for a resource-constrained embedded environment.
10. Experience developing embedded software for the ARM architecture.
11. Experience with 8- or 16-bit microcontrollers.
12. Familiarity with multithreading.
13. Real-time operating systems - semaphore, mutex, interrupt handling, task priority, threads, etc.
14. Experience with TCP/IP socket programming.
15. Team player with good written and verbal communication skills.