Oculus is the world leader in the design of virtual and augmented reality systems. Come work alongside expert engineers and research scientists to create the technology that makes VR and AR pervasive and universal. Join the adventure of a lifetime as we make science fiction real and change the world. We are seeking a Firmware Engineer to develop boot-loaders, board support packages, and application code to life to use low power and high performance SoCs to create bleeding-edge sensing and interaction applications.
- Architect, design, and implement firmware for mixed signal, low power micro-controllers for implementing real-time sensing and control systems on bare-metal and using RTOS.
- Creation of BSPs for Application Processors for their optimized SoC based systems with both custom and standard devices and peripheral interfaces.
- Configuration of standard boot loaders to allow deployment of standardized embedded software distributions with multiple memory devices or board configurations.
- Creation of Target and Application optimized embedded Linux distributions.
- Development and customization of Linux Kernel drivers to support customized peripheral or on board devices, or highly optimized use of standard peripherals.
- Specification of user-driver APIs that include standard peripherals such as UART, SPI, MIPI DSI/CSI, I2C, SDIO, RTC, PWM, DMA, NVIC, I2S, and 802.3.s.
- Development of userland application code in embedded Linux systems, specifically code for testing driver interfaces and for enabling the use of standard software environments.
- Work with hardware designers to optimize new system architectures and hardware designs to be optimized for the need of embedded software and firmware for given SoCs or micro-controllers.
- Work with application software engineers to optimize the interfaces between high level software and drivers and their corresponding userland library support.
- B.S. degree in Computer Science or Electrical Engineering or equivalent experience
- 5+ years of experience in low-power embedded systems
- Experience in embedded Linux user software development
- Experience in Linux driver development, particularly for block devices
- Experience in the use of DMA on both embedded Linux and bare metal systems
- Experience in real-time userland access to memory mapped hardware, shared memory
- Experience in creating custom BSPs and DeviceTree
- Experience in Linux Distribution development, such as the use of OpenEmbedded or Yocto Project tools
- Experience in the use of ARM Cortex A and M class chips, with a focus on peripheral application/IO
- 5+ years experience in the C programming language
- Experience in the C++ programming language
- Experience in debugging using JTAG, SWD and similar tools
- Experience with standard debuggers and toolchains
- Experience in the use of test equipment such as oscilloscopes and logic analyzers to debug embedded software's hardware interfaces
- Protocol implementations experience such as USB Device Classes, or BLE GATT Services
- Digital Signal Processing experience and experience in the application of hardware acceleration for vector or DSP math
- RTL design skills and use of FPGA SoCs for prototyping
- Experience in microcontroller-application processor hybrid systems, specifically offloading real-time IO to microcontrollers with low latency interfaces to application processors