Software Engineer - Drivers, Operating Systems
Software Engineer - Drivers, Operating Systems Job Description:
InHand Electronics is an original equipment manufacturer (OEM) of mobile single-board computers. InHand is seeking experienced software developers who have a strong background in operating systems and device drivers, to customize and troubleshoot operating systems such as Linux, Android, and Windows Embedded for its computer systems.
Technical Responsibilities and Expectations:
As a small company, a position at InHand is dynamic and usually involves participating on multiple projects simultaneously. The software engineer will participate in all phases of product development, starting from customer requirements, through prototyping, design, implementation, and testing. Kernel-level experience with at least one of the following operating systems is required: Windows Embedded Standard, Android, Windows CE 6.0, or Linux 2.6 (any distribution). Experience with multiple operating systems is a definite advantage.
In addition, working knowledge in at least ten of the following areas is desired:
- Build, configure, and install operating system installations for various hardware platforms.
- Configure, integrate, and troubleshoot standard drivers (such as USB, Bluetooth, WiFi, Ethernet, Displays, SDIO, PCIe, LVDS, GPS).
- Prototype, design, implement, test, and debug device drivers and operating system services for custom hardware devices.
- Program the low-level of ARM or x86 architectures:
- On x86 architectures, modify and update BIOS, Embedded Controllers, or driver assembly language.
- On ARM architectures, develop and modify hardware dependent layers and bootloader software.
- Define, design, and implement Application Programmer Interfaces (APIs) to allow user access to custom devices.
- Produce scripts to automate building, publishing, and testing of software, including creating BSPs and SDKs.
- Use integrated development environments (IDEs) such as Visual Studio or Eclipse to develop and debug code.
- Program at the operating system level in C or C++
- Understand ISRs, ISTs, threads, mutexes, virtual memory, and user/kernel space separation.
- Write test software to interface to hardware devices at the lowest level, including via register mappings, I2C, or SPI.
- Understand Memory Management, including concepts such as MMU, DMA, cache, Flash, EEPROM, or other unique memory requirements.
- Develop applications in C++, C# (.NET) or Java to produce control panels, test modules, or sample code for customers
- Install and use real-time services to support multimedia applications, such as video streaming and storage (e.g. RTSP, MP4, H.264, NTSC) and Audio (e.g. VOIP, MP3)
- Experience creating code for in-circuit programming of flash, CPLD, and microcontrollers.
- Review customer requirements and estimate software effort to meet the requirements.
- Evaluate technical risks and design trade-offs of multiple approaches to meeting requirements.
- Review hardware schematics to ensure hardware/software interfaces meet the needs of standard device drivers.
- Work closely with hardware engineers to troubleshoot hardware design and manufacturing problems.
- Program smart devices that have embedded microcontrollers, then interface to the device via serial communication.
- Use logic analyzers and oscilloscopes to troubleshoot issues that could be either hardware or software.
- Familiar with multiple processor families, including x86 (e.g. Pentium, Atom), ARM (e.g. OMAP, XSCALE, PXA), microcontrollers (e.g. MSP430, Renessas H8), and DSPs (e.g. TMS320, OMAP).
- Create, modify, or configure CPLD or FPGA code using Verilog or VHDL.
- Develop unit test software to validate drivers and operating system services.
- Develop application software that utilizes or demonstrates functionality of custom hardware features.
- Follow established software engineering processes for version control, configuration management, and design documentation.
- Participate in design and code reviews, and be able to both give and receive constructive criticism.
- Provide feedback towards improving processes to meet deadline and budget constraints.
Requirements & Qualifications:
Candidates ranging from Entry-Level to Senior Software will be considered. Salary is commensurate with experience. Minimum requirements for employment are the following:
- Must have US Citizenship or Permanent Residency
- Bachelor’s Degree in Computer Engineering or Computer Science is required.
- Master’s degree with specialty in operating systems is highly desirable.
- Must be able to communicate clearly with customers and colleagues, and be fluent in both written and spoken English.
- Must be capable of succeeding in both independent and team environments.
- Must be able to work against the pressures of deadlines and ensure systems are delivered on schedule.
Please send resume and cover letter to: This e-mail address is being protected from spambots, you need JavaScript enabled to view it


