Opportunity brief
Qualcomm is hiring for the role of Software Engineer!
Responsibilities of the Candidate:
- Programming Fundamentals
- Operating Systems & Embedded Systems
- Computer Architecture & Low-Level Programming
- Development Tools & Engineering Practices
- Problem Solving & Communication
- ARM Architecture & Platform Fundamentals
- Virtualization & Hypervisor Technologies
- RTOS & System Software
- Debugging & System Analysis
- Engineering & Design Skills
Requirements:
- Bachelor's degree in Engineering, Information Systems, Computer Science, or related field.
- Strong programming skills in C, including memory management, pointers, structures, and low-level programming concepts.
- Solid understanding of data structures and algorithms, including linked lists, queues, stacks, trees, and their practical applications.
- Basic scripting skills in Python and Shell scripting for automation and debugging.
- Understanding of secure coding practices, coding standards, and software quality principles.
- Strong understanding of Operating Systems fundamentals, including processes, threads, synchronization, interrupts, memory management, and scheduling.
- Basic understanding of embedded systems development and low-level software interactions with hardware.
- Good understanding of Computer Architecture and Microprocessor Fundamentals, preferably ARM-based architectures.
- Ability to work with hexadecimal representations, bit manipulation, binary arithmetic, and Boolean logic.
- Familiarity with Git version control and collaborative development practices.
- Strong analytical, problem-solving, and communication skills.
Good to Have Skills:
- Knowledge of ARM Architecture (ARMv8/ARMv9), including exception levels, MMU, interrupts, and memory protection mechanisms.
- Understanding of ARM system components such as GIC, SMMU, PSCI, SCMI, and TrustZone.
- Familiarity with ARM Assembly Language and low-level debugging techniques.
- Exposure to memory management, MMU configuration, interrupt controllers (GIC), and system-level debugging.
- Understanding of boot flows, including Bootloader, Trusted Firmware, Hypervisor, and Operating System interactions.
- Understanding of hypervisor and virtualization concepts, including virtual machines, device virtualization, memory virtualization, and privilege separation.
- Exposure to Gunyah, KVM, Xen, pKVM, or other virtualization technologies.
- Understanding of virtualization security concepts and trusted execution environments.
- Knowledge of RTOS-based development and real-time system concepts.
- Understanding of embedded system software architecture and software-hardware interactions.
- Experience using debuggers such as GDB, Lauterbach Trace32 (T32), or equivalent tools for system-level debugging.
- Experience reading and understanding hardware specifications, Technical Reference Manuals (TRMs), and datasheets.
- Ability to analyze requirements, understand system design documents, and contribute to software design discussions.