百万年薪 | 从招聘信息做技术自查

欢迎大家订阅

ARM/Linux嵌入式真题

正文

最近绩效出来了,于是有个老哥带着指标就离职了。去了下家,收入总体小涨了15%,对于他这个收入算是不错了。高级别的专家离职,又只是在非北上广城市,很少有企业能吃的下去。

就和他聊了聊,一些相关的岗位。现在在成都的话,内核相关的工作会比较好找一点,比如SOC、 驱动、BSP、OS、固件等相关的领域。互联网不太知晓,芯片的话你们也知道成都的芯片公司太少了。

整个城市工作类型偏软,怎么感觉这样说的有点奇怪哈哈哈。

下面的工作薪资都是80K*15左右,我想正式面试的时候一般会有期权、签字费之类的东西,所以说个百万不算是过分的。

我这篇文章的目的,就是拉着你咱们一起瞅瞅,在这个底软的领域如果想靠技术实现年薪百万,你要掌握哪些宏观的技术面。虽然我没有,但是我希望你有我对我的读者朋友是真的特么上心啊哈哈哈。

在开始梳理之前,我们先看几个典型的方向的招聘要求,这几则都是底软典型的就业方向,为了避免领域要求的独特性,比如蓝牙通信、ISP等等这种专一领域性比较强的岗位不在本文的考虑范围。

因为能真的在一个方向深耕多年,都是极其努力,且很幸运的靓仔。

下面我们先分别看看几个招聘要求,然后再从中提炼出技术的宏观面,作为以后学习的知识地图。

soc软件工程师

    1. 负责芯片底层软件开发和SoC Bring-up;
    1. 负责BootROM/Server固件(ATF/SCP/Tiano/U-Boot)开发;
    1. 负责PCIe/DDR/PMU/RAS等IP的Firmware/Driver开发。
    1. 计算机相关专业,本科及以上学历,3年以上相关工作经验;
    1. 熟练掌握Linux内核Debug/Trace的工具与技术,具备内核调优能力;
    1. 符合以下要求其中两条或以上:
    • a. 熟悉ARM/RISC-V CPU体系架构,掌握其Privilege Level/Interrupt/MMU的实现原理;
    • b. 熟悉DDR Training 或是PCIe EP驱动的优先;
    • c. 熟悉PCIe,PMU,DDR等相关IP及其验证方法;
    • d. 具有FPGA/ZeBu/Palladium等仿真平台使用经验和芯片验证经验者优先;
    • e. 有RISC-V BootROM开发经验,熟悉RISC-V Bringup流程,熟悉u-boot/opensbi优先;
    • f. 熟悉ARM ATF/SCP的开发人员。

这则招聘针对的是一个在芯片设计和嵌入式系统开发领域具有深厚技术背景和丰富经验的职位。详细来聊聊这个岗位要求:

岗位职责

  1. 芯片底层软件开发和SoC Bring-up

    • 技术要点:这要求候选人具备深厚的嵌入式系统知识,能够深入理解SoC(系统级芯片)的架构,包括其内部模块(如CPU、GPU、外设控制器等)的互联和通信方式。SoC Bring-up是指从裸片到初步运行状态的整个过程,包括硬件初始化、加载启动代码、配置外设等。候选人需要熟悉硬件描述语言(如Verilog/VHDL)和SoC设计流程,以便与硬件团队紧密合作。
  2. BootROM/Server固件(ATF/SCP/Tiano/U-Boot)开发

    • 技术要点:BootROM是系统启动时首先运行的固件,负责加载操作系统或更高级别的引导程序。ATF(ARM Trusted Firmware)、SCP(Secure Copy Protocol,但在此上下文中可能是指Secure Monitor或Secure Processor Context,具体取决于上下文)、Tiano(UEFI的一部分,现已被EDK II取代)和U-Boot都是常见的引导加载程序。候选人需要熟悉这些固件的架构、开发流程和调试方法,能够编写和修改固件代码以满足特定需求。
  3. PCIe/DDR/PMU/RAS等IP的Firmware/Driver开发

    • 技术要点:PCIe(Peripheral Component Interconnect Express)是高速串行计算机扩展总线标准,用于连接CPU和高速外设。DDR(Double Data Rate)是高速动态随机存取内存的标准。PMU(Power Management Unit)负责电源管理。RAS(Reliability, Availability, and Serviceability)关注系统的可靠性、可用性和可维护性。候选人需要深入了解这些IP的工作原理,能够编写高效的驱动程序或固件来管理这些硬件资源,并确保其稳定性和性能。

任职要求

  1. 教育背景与工作经验

    • 计算机相关专业本科及以上学历,3年以上相关工作经验。这表明公司期望候选人具备扎实的理论基础和丰富的实战经验。
  2. Linux内核Debug/Trace的工具与技术

    • 候选人需要熟练掌握Linux内核的调试和跟踪工具,如GDB、strace、perf等,以及内核调优技术,如调整内核参数、优化内存管理等。这对于解决复杂的系统问题至关重要。
  3. 专业技能要求

    • a. ARM/RISC-V CPU体系架构:熟悉这两种主流CPU架构的特权级别、中断处理、内存管理单元(MMU)等核心机制,有助于深入理解系统底层工作原理。
    • b. DDR Training 或 PCIe EP驱动:DDR Training是确保DDR内存正确初始化和稳定运行的关键步骤;PCIe EP驱动则涉及与PCIe设备的通信和数据传输。熟悉这些领域将有助于提高系统性能和稳定性。
    • c. PCIe, PMU, DDR等相关IP及其验证方法:了解这些IP的工作原理和验证方法,有助于在开发过程中及时发现和解决问题。
    • d. FPGA/ZeBu/Palladium等仿真平台:使用这些仿真平台进行芯片验证可以加速开发过程并降低风险。候选人如果具备相关经验,将更受青睐。
    • e. RISC-V BootROM开发与Bringup流程:熟悉RISC-V架构的BootROM开发和Bringup流程,以及u-boot/opensbi等引导加载程序,将有助于快速启动和调试基于RISC-V的SoC。
    • f. ARM ATF/SCP开发:对于基于ARM架构的SoC,熟悉ATF和SCP的开发将有助于实现安全启动和监控功能。

这个职位需要候选人具备全面的嵌入式系统、SoC设计、固件开发和调试技能,以及对Linux内核、CPU架构、硬件IP等深入的理解。

咱们继续。

固件工程师

    1. 负责 SoC 芯片 firmware 的设计,开发和维护工作;
    1. 独立开发 firmware 中某个功能模块并开发相应的测试用例;
    1. 负责 STM32/GD32 等 MCU 的程序开发工作;
    1. 分析产品及系统的需求, 完成固件设计需求分析;
    1. 编写相应设计文档和软件开发说明文档等。

任职要求:

    1. 计算机、电子、通信、自动化相关专业硕士及以上;
    1. 精通 C 语言、ARM 汇编, 熟悉 linux,python 脚本等;
    1. 熟悉 ARM Cortex-M/A 或其他嵌入式平台的开发, 熟悉嵌入式操作系统;
    1. 能熟练使用相关编程、编译环境,并能熟练使用相关调试工具;
    1. 具有团队合作精神和良好的沟通技能;
    1. 有 SoC 硅前测试和硅后验证经验者优先;
    1. 熟悉系统功耗管理,有芯片功耗控制、DVFS 开发经验者优先;
    1. 熟悉 SLT 和量产治具开发者经验者优先

这则我们从技术细节、行业背景、以及岗位期望的多个维度进行剖析一下这几条文字之后隐藏的要求。

固件工程师岗位深度解读

岗位职责

  1. SoC 芯片 firmware 的设计、开发和维护

    • 技术深度:这要求固件工程师深入理解SoC(系统级芯片)的硬件架构、接口协议及内部机制。设计firmware时,需考虑性能优化、功耗管理、安全性等多方面因素。开发过程中,需熟练掌握C语言、ARM汇编等编程语言,以及嵌入式系统开发工具链。
    • 行业背景:随着物联网、汽车电子、智能设备等领域的快速发展,SoC芯片的应用越来越广泛。固件工程师需紧跟行业动态,了解最新技术趋势,如AI加速、物联网安全等。
  2. 功能模块开发与测试

    • 技术深度:独立开发firmware中的功能模块,需具备良好的模块化设计思想,能够高效实现功能需求。同时,开发相应的测试用例,确保功能模块的正确性和稳定性,这要求工程师熟悉软件测试方法和工具。
    • 实践经验:有实际项目经验的候选人将更受青睐,因为他们能够更快地适应工作环境,解决实际问题。
  3. MCU 程序开发

    • 技术细节:STM32/GD32等MCU具有不同的特性和资源,固件工程师需根据具体需求选择合适的MCU,并熟练掌握其编程接口和开发环境。此外,还需考虑MCU与SoC或其他外设之间的通信协议和接口设计。
  4. 需求分析与设计文档

    • 沟通能力:固件工程师需与客户、产品经理等角色紧密合作,准确理解需求并转化为固件设计需求。编写设计文档和软件开发说明文档时,需注重文档的清晰性、准确性和可读性。

任职要求

  1. 教育背景与专业知识

    • 硕士及以上学历,确保候选人具备扎实的理论基础和较强的学习能力。计算机、电子、通信、自动化等相关专业背景,为候选人提供了必要的专业知识储备。
  2. 编程语言与工具

    • 精通C语言、ARM汇编,这是嵌入式系统开发的基石。熟悉Linux操作系统和Python脚本,有助于提升开发效率和自动化水平。同时,熟练使用Keil、IAR、GCC等编程和编译环境,以及JTAG、SWD、GDB等调试工具,是固件工程师必备的技能。
  3. 嵌入式平台与操作系统

    • 熟悉ARM Cortex-M/A或其他嵌入式平台的开发,表明候选人具备广泛的嵌入式系统开发经验。熟悉嵌入式操作系统(如FreeRTOS、RTOS等)的运作机制和开发方法,有助于实现更高效、更可靠的固件设计。
  4. 团队协作与沟通能力

    • 固件开发往往是一个团队协作的过程,因此具备良好的团队合作精神和沟通技能至关重要。候选人应能够积极参与团队讨论,与团队成员保持良好的合作关系,共同解决问题。
  5. 特殊技能与经验

    • 有SoC硅前测试和硅后验证经验者、熟悉系统功耗管理、有芯片功耗控制和DVFS开发经验者、以及熟悉SLT和量产治具开发者等,这些特殊技能和经验将使候选人在竞争中脱颖而出。这些经验不仅展示了候选人的专业技能和实践能力,还体现了他们对行业动态和技术发展的敏感度。

AI-linux arm开发

工作职责

  • 1、承接芯片BSP对外版本的优化和重构工作,完成对外版本发布工作。
  • 2、负责芯片摄像头、音视频多媒体功能模块的功能示例的开发和用户手册撰写。
  • 3、承接芯片开发板的驱动开发工作及量产维护工作。
  • 4、承接客户侧BSP定制化需求开发,关键问题的跟踪和解决。

工作要求

  • 1、研究生以上学历,电子信息、计算机、自动化等相关专业
  • 2、1~3年年嵌入式驱动开发经验,熟悉C/C++、Python、Shell等编程语言;
  • 3、熟悉Linux操作系统,熟练掌握Linux内核、文件系统、外设驱动的原理和开发流程。
  • 4、有过嵌入式平台的开发经验,参与过音视频、多媒体、网络、存储等功能模块的开发工作。
  • 5、有团队项目配合经验,具备较好的沟通、表达、协调和推动能力;
  • 6、有高通、MTK、海思、瑞芯微、全志等芯片平台开发经验者优先;

工作职责深入解析

  1. 承接芯片BSP对外版本的优化和重构工作

    • 深入理解硬件与软件的交互:这不仅仅是对代码的优化和重构,还需要深入理解芯片的设计、硬件特性以及它们如何与BSP进行交互。候选人需要能够识别并解决因硬件更新或软件需求变更而引入的兼容性问题。
    • 版本管理与发布:除了技术工作外,还需要掌握版本控制工具(如Git),确保代码的可追溯性和可管理性。同时,了解软件发布流程,包括测试、验证、文档编写等环节,以确保对外发布的版本质量。
  2. 负责芯片摄像头、音视频多媒体功能模块的开发

    • 音视频技术深度:这要求候选人不仅了解基本的音视频处理原理,如编码、解码、流媒体传输等,还需要熟悉相关的算法和技术标准(如H.264、H.265、AAC等)。此外,对于实时音视频处理、同步、降噪等高级技术也可能有所涉及。
    • 跨平台开发:由于嵌入式系统的多样性,候选人可能需要为不同的硬件平台(如ARM、x86等)编写和优化音视频处理代码。
  3. 驱动开发工作及量产维护

    • 深入理解Linux驱动模型:包括字符设备、块设备、网络设备等不同类型的驱动开发。候选人需要熟悉Linux内核的驱动架构,如设备树(Device Tree)的使用、驱动模块的加载与卸载等。
    • 量产测试与调试:在量产前,需要对驱动进行严格的测试,包括压力测试、稳定性测试等。候选人需要具备快速定位和解决驱动相关问题的能力,确保产品能够稳定运行。
  4. 客户定制化需求开发

    • 客户沟通:与客户的沟通是定制化开发的关键。候选人需要能够准确理解客户需求,并将其转化为可行的技术方案。同时,还需要与客户保持密切沟通,及时反馈开发进度和遇到的问题。
    • 项目管理:在定制化开发过程中,可能需要管理多个任务和团队成员。候选人需要具备一定的项目管理能力,确保项目按时按质完成。

工作要求深入解析

  1. 学历及专业背景

    • 研究生以上学历反映了公司对候选人专业深度和研究能力的期望。相关专业背景(电子信息、计算机、自动化等)则确保了候选人具备扎实的理论基础和实践经验。
  2. 工作经验及技能

    • 嵌入式开发经验:1~3年的嵌入式开发经验要求候选人具备解决实际问题的能力,包括硬件调试、软件编程、系统集成等。
    • 编程语言掌握:C/C++是嵌入式开发的主流语言,Python和Shell则常用于脚本编写和自动化测试。候选人需要熟练掌握这些语言,并能够根据实际需求灵活应用。
    • Linux内核与驱动:深入掌握Linux内核及其驱动开发流程是嵌入式Linux开发岗位的核心要求。候选人需要了解内核架构、设备驱动模型、中断处理、内存管理等关键概念。
  3. 团队协作及沟通能力

    • 团队合作:嵌入式开发往往需要多个领域的专家共同参与,如硬件工程师、软件工程师、测试工程师等。候选人需要具备良好的团队合作精神,能够与不同背景的团队成员有效协作。
    • 沟通与表达:清晰、准确的表达是沟通的关键。候选人需要能够将自己的想法和技术方案清晰地传达给团队成员和客户,同时也需要能够倾听他人的意见和建议。
  4. 芯片平台开发经验

    • 特定平台知识:熟悉高通、MTK、海思等主流芯片平台的开发环境和工具链,可以缩短项目启动时间,提高开发效率。此外,了解这些平台的特性和限制也有助于更好地进行BSP优化和重构。

ARM服务器固件(BIOS)

岗位描述

负责开发和维护服务器固件的安全功能,引导芯片安全架构和硬件设计,提升我们的芯片产品在安全方面的性能和可靠性。

    1. 负责ARM架构服务器固件(BIOS)安全功能的设计与实现。
    1. 分析和跟踪最新的安全技术和标准,例如安全启动,TPM,ARM TrustZone,ARM CCA,PFR PRoT,DICE,内存加密,可信计算等,引导芯片的安全架构和硬件设计。
    1. 对现有的芯片设计和服务器固件进行持续的安全性评估与改进,识别潜在安全风险并制定相应的补救措施。
    1. 编写相关技术规范和文档,跟进质量验证和调试工作。
    1. 与硬件、BMC、操作系统和QA团队紧密合作,确保安全特性得到正确实现及端到端测试。
    1. 参与代码审查,确保遵循安全编码标准和最佳实践。 岗位要求
    1. 拥有计算机科学、电子工程或相关领域的本科或以上学历。
    1. 3年以上x86/ARM/RISC-V服务器固件或Linux Kernel开发经验。
    1. 具备出色的C语言和汇编语言编程、开发、调试技能,对底层软件开发有浓厚兴趣。 至少掌握以下能力中的2-3项:
    1. 熟悉服务器启动流程,UEFI/SCP/TF-A代码框架,具有独立开发相关模块的能力。
    1. 熟悉主流密码学算法,国密标准,x509证书,签名验证等安全机制,熟悉MbedTLS/OpenSSL的使用。
    1. 熟悉可信计算相关标准,如DMTF, SPDM, MCTP, PLDM等。
    1. 对固件安全有深入理解,具有威胁模型、安全漏洞分析和攻击测试的相关经验。
    1. 具有pre-silicon验证相关工作经验,熟悉FPGA和Emulation等平台的使用。
    1. 具备相关硬件背景,能与硬件团队沟通,并实现软硬件协同工作。

对于“ARM服务器固件(BIOS)”的招聘要求,我们分析一下要求:

岗位描述深度解读

1. ARM架构服务器固件(BIOS)安全功能的设计与实现

  • 技术要求
    • 熟悉ARM架构及其特性,了解ARM服务器固件的架构和运行机制。
    • 具备固件安全功能设计的能力,如安全启动、固件签名验证、硬件安全特性(如TrustZone)的集成等。
    • 需要掌握C语言和汇编语言编程,用于实现安全功能的具体代码。

2. 分析和跟踪最新的安全技术和标准

  • 技术更新
    • 跟踪和研究最新的安全技术和标准,如安全启动(Secure Boot)、TPM(Trusted Platform Module)、ARM TrustZone、ARM CCA(Content Creation and Consumption Architecture)、PFR PRoT(Platform Firmware Resilience and Protection)、DICE(Device Identifier Composition Engine)、内存加密、可信计算等。
    • 理解这些技术的原理和实现方式,以及如何将其应用到ARM服务器固件中。

3. 安全性评估与改进

  • 风险评估
    • 对现有的芯片设计和服务器固件进行安全性评估,识别潜在的安全风险。
    • 根据评估结果制定补救措施,提升固件的安全性。

4. 编写技术规范和文档

  • 文档编写
    • 编写相关技术规范和文档,确保团队成员能够理解和遵循安全开发的最佳实践。
    • 跟进质量验证和调试工作,确保固件的质量和稳定性。

5. 与团队紧密合作

  • 团队协作
    • 与硬件、BMC(Baseboard Management Controller)、操作系统和QA(Quality Assurance)团队紧密合作,确保安全特性得到正确实现和端到端测试。
    • 协调各方资源,共同解决开发和测试过程中遇到的问题。

6. 参与代码审查

  • 代码质量
    • 参与代码审查,确保代码遵循安全编码标准和最佳实践。
    • 提出改进建议,提升代码的安全性和可维护性。

岗位要求深度解读

1. 教育背景

  • 学历要求
    • 拥有计算机科学、电子工程或相关领域的本科或以上学历。

2. 工作经验

  • 开发经验
    • 具有3年以上x86/ARM/RISC-V服务器固件或Linux Kernel开发经验。
    • 这表明应聘者需要具备一定的固件或内核开发经验,熟悉固件或内核的架构和运行机制。

3. 编程与调试技能

  • 技能要求
    • 具备出色的C语言和汇编语言编程、开发、调试技能。
    • 对底层软件开发有浓厚兴趣,这有助于应聘者更好地理解固件的工作原理和实现方式。

4. 特定技能需求

  • 技能列表
    • 至少掌握以下能力中的2-3项:
      • 熟悉服务器启动流程,UEFI/SCP/TF-A(Trusted Firmware-A)代码框架,具有独立开发相关模块的能力。
      • 熟悉主流密码学算法、国密标准、x509证书、签名验证等安全机制,熟悉MbedTLS/OpenSSL的使用。
      • 熟悉可信计算相关标准,如DMTF(Distributed Management Task Force)、SPDM(Secure Protocol and Data Model)、MCTP(Management Component Transport Protocol)、PLDM(Platform Level Data Model)等。
      • 对固件安全有深入理解,具有威胁模型、安全漏洞分析和攻击测试的相关经验。
      • 具有pre-silicon验证相关工作经验,熟悉FPGA(Field-Programmable Gate Array)和Emulation等平台的使用。
      • 具备相关硬件背景,能与硬件团队沟通,并实现软硬件协同工作。

这些特定技能需求体现了对应聘者专业技能的深入要求,包括固件开发、安全机制、可信计算、安全测试、硬件验证等多个方面。

那对于这几则招聘抽出来的共性技术点,就可以称之为业界通用,或者说与业务绑定没有那么强烈,我想那就是我们年轻技术人员需要重点去积累关注以及深入的。

以上就是对于这几个岗位的解析,其实我们可以看出来这100w是不好挣的,因为涉及的知识面太广了。

尤其是像这种底层的东西,任何一个方面,你都是需要项目去积累知识和经验的,而且懂得知识是一方面,解决问题是更重要的一方面。把你怼到客户现场,背后坐着一堆人看着你,你要快速的解决掉这个问题。

所以如果你对技术真的蛮感兴趣,沉住气,时间会给你答案。

周末愉快!!!

欢迎大家订阅

ARM/Linux嵌入式真题

名词说明

  1. BootROM

    • BootROM(引导只读存储器)是一种非易失性存储器,通常包含系统启动时最初执行的代码。这段代码负责初始化硬件、加载操作系统引导加载程序(如BIOS、UEFI或特定的引导加载器)等。BootROM中的代码是固件的一部分,对于确保系统能够顺利启动至关重要。
  2. Server固件

    • Server固件指的是运行在服务器硬件上的固件代码,这些代码负责初始化服务器硬件、管理硬件资源、提供系统安全功能等。服务器固件通常比消费级计算机更复杂,因为它们需要处理更多的并发任务、更高的可靠性和安全性要求。
  3. ATF (Arm Trusted Firmware)

    • ATF 是专为基于ARM架构的设备设计的固件框架,它支持从安全启动到操作系统启动的整个过程。ATF 提供了必要的信任根(Root of Trust)和安全性机制,确保系统启动过程的安全性。它通常包括安全监视器(Secure Monitor)、固件框架(如BL1、BL2、BL3-1等)等组件。
  4. SCP (System Control Processor Firmware)

    • SCP 固件通常指的是系统控制处理器(System Control Processor)的固件。SCP 是一个独立的处理器,用于管理服务器中的硬件子系统,如电源管理、风扇控制、温度监控等。SCP 固件负责这些子系统的初始化和运行时的管理。
  5. Tiano (现通常指EDK II或UEFI)

    • Tiano 是早期UEFI(统一可扩展固件接口)实现的一部分,但现在通常指的是EDK II(EFI Development Kit II),它是UEFI规范的一个开源实现。UEFI是BIOS的现代替代品,提供了更为丰富的功能和更好的安全性。EDK II提供了构建UEFI固件所需的工具、库和文档。
  6. U-Boot

    • U-Boot 是一个开源的引导加载程序,广泛用于嵌入式系统。它提供了丰富的功能,如设备树支持、网络启动、文件系统支持等,使得系统可以从多种不同的媒介(如硬盘、USB设备、网络等)启动。U-Boot是许多嵌入式设备和服务器系统引导过程中的关键组件。
  7. PCIe (Peripheral Component Interconnect Express):

    • PCIe 是一种高速串行计算机扩展总线标准,用于连接计算机中的高速外围设备。它提供了比传统PCI(并行计算机扩展总线)更高的带宽和更低的延迟。在Firmware/Driver开发中,PCIe的驱动负责处理CPU与PCIe设备之间的通信,包括数据传输、中断管理、设备发现与配置等。
  8. DDR (Double Data Rate):

    • DDR 通常指的是双数据率同步动态随机存取存储器(Double Data Rate Synchronous Dynamic Random Access Memory),它是一种用于存储数据的电子设备,广泛应用于计算机和电子设备中。DDR驱动或固件负责管理DDR内存的访问,包括内存初始化、数据读写、错误检测和纠正等。然而,在大多数情况下,DDR的底层管理(如初始化)通常是由系统的BIOS或UEFI固件来处理的,而操作系统级别的驱动程序则主要负责内存管理策略和用户空间的内存访问。
  9. PMU (Power Management Unit):

    • PMU 是电源管理单元,负责监控和管理系统的电源使用情况。在嵌入式系统和服务器中,PMU固件或驱动负责实现各种电源管理策略,如动态电压和频率缩放(DVFS)、电源门控(Power Gating)、睡眠状态管理等,以优化系统的功耗和性能。
  10. RAS (Reliability, Availability, and Serviceability):

    • RAS 是指系统的可靠性、可用性和可服务性。在服务器和关键任务系统中,RAS特性至关重要。RAS固件或驱动负责实现各种机制来确保系统的稳定运行,包括错误检测与恢复(如ECC内存错误纠正)、冗余硬件支持(如双电源供应)、热插拔支持等。此外,RAS还涉及到系统日志记录、故障预测和诊断等功能,以便在系统出现问题时能够快速定位并解决问题。
  11. Firmware/Driver 开发:

    • Firmware 是嵌入在硬件设备中的软件,它负责硬件设备的初始化和低层次操作。Driver(驱动程序)则是运行在操作系统之上的软件,它提供了操作系统与硬件设备之间的接口,使得操作系统能够控制和管理硬件设备。在PCIe/DDR/PMU/RAS等IP的Firmware/Driver开发中,开发者需要编写和测试这些固件和驱动程序,以确保它们能够正确地与硬件交互,并满足系统的性能和可靠性要求。
  12. FPGA (Field-Programmable Gate Array):

    • FPGA是一种可编程逻辑器件,它允许用户在硬件层面上通过编程来配置其内部的逻辑电路。FPGA在芯片设计和验证阶段被广泛使用,因为它们可以模拟实际芯片的部分或全部功能,而无需等待实际的芯片制造出来。FPGA具有高度的灵活性和可重配置性,是芯片设计和验证流程中不可或缺的工具。
  13. ZeBu:

    • ‌ZeBu是新思科技推出的一款高性能硬件仿真系统,旨在提供比传统硬件仿真解决方案高出两倍的性能。‌ ZeBu Server 4利用其独特的快速仿真架构、最先进的商用FPGA以及基于FPGA的仿真软件创新,为用户提供了强大的硬件仿真能力。这款系统不仅支持各种高附加值的Use Case,如IP/SOC级的OS Boot和固件、驱动开发、全芯片RTL验证、性能和功耗分析、验证加速、软硬件混合仿真以及系统级Validation,而且还加速了验证收敛和项目开发。ZeBu Server 4的设计旨在通过提供高效的解决方案来改善验证流程,并缩短复杂片上系统设计的上市时间,特别是在高性能计算、边缘计算、物联网和存储芯片等领域的高速发展中,其重要性愈发凸显。

    • ‌Veloce通过定制的可编程单元(非常类似FPGA)、不同的内部连接网络结构以及透明的可调试电路实现其模拟器功能。平台上的每一块模拟器芯片都可以用来模拟一部分的设计逻辑,而整个芯片的功能则通过集成各个模拟器芯片实现片间快速通信。

  14. Palladium:

    • Palladium是美国Cadence公司生产的一种前端仿真器,基于FPGA芯片的快速验证平台。与传统的ASIC验证方式相比,Palladium可以有效减少验证时间和成本,提高整体开发效率。Palladium通过快速原型验证(FPV)技术,将RTL级代码编译成硬件行为模型(HBM),并在FPGA芯片上直接执行。同时,通过其易于使用的集成环境,用户可以进行多种验证、调试和分析工作,大大提高了验证效率和质量。
  15. 仿真平台:

    • 在这里,“仿真平台”指的是用于模拟和验证芯片设计的硬件和软件环境。它可能包括FPGA、ZeBu、Palladium等硬件仿真系统,以及与之配套的软件工具、库和接口。仿真平台允许设计团队在芯片制造之前对设计进行全面的测试和验证,以确保其满足所有预期的性能和功能要求。
  16. 芯片验证经验:

  • “芯片验证经验”指的是在芯片设计和制造过程中,通过仿真、测试和其他方法验证芯片设计正确性和可靠性的经验。芯片验证是芯片开发流程中的一个关键环节,它确保芯片在制造完成后能够按照设计要求正常工作。具有芯片验证经验的人才通常对芯片设计的复杂性、潜在的缺陷和验证方法有着深入的理解。
  1. opensbi
  • opensbi(Open Source Secure-Boot Implementation)是一个开源的固件项目,旨在为基于RISC-V架构的处理器提供安全启动的解决方案。RISC-V是一种开放标准的指令集架构(ISA),正逐渐成为嵌入式系统和数据中心等领域的重要力量。opensbi实现了RISC-V规范中定义的安全启动流程,包括加载和验证固件镜像、管理设备树等。它提供了一个安全、可靠的启动环境,有助于保护基于RISC-V的系统免受恶意软件的攻击。
  1. PCIe (Peripheral Component Interconnect Express):
  • PCIe 是一种高速串行计算机扩展总线标准,用于连接计算机中的主板和外围设备(如显卡、网络接口卡、固态硬盘等)。PCIe 提供了比传统并行总线(如PCI、AGP)更高的数据传输速率和更低的延迟。它是当前计算机系统中广泛使用的一种高速接口标准。
  • PCIe 采用点到点串行连接,支持热插拔和电源管理功能,并且可以通过多个通道(lanes)并行传输数据来扩展带宽。PCIe 的版本不断更新,如 PCIe 2.0、PCIe 3.0、PCIe 4.0 等,每个新版本都提供了更高的数据传输速率和更丰富的功能。
  1. EP (Endpoint):
  • 在 PCIe 的上下文中,EP 代表“Endpoint”(端点)。端点是 PCIe 架构中的一个基本元素,它是数据通信的发起者或接收者。在 PCIe 系统中,端点可以是各种类型的外围设备,如显卡、网卡、RAID 控制器等。
  • 端点通过 PCIe 链路与根复合体(Root Complex,RC)或其他端点进行通信。根复合体是 PCIe 架构中的另一个关键组件,它管理 PCIe 总线上的所有事务,并作为 CPU 和内存子系统与 PCIe 设备之间的接口。
  • 端点可以是“Legacy Endpoint”(传统端点),也可以是“Root Complex Integrated Endpoint”(根复合体集成端点)。传统端点是指那些直接连接到 PCIe 总线上的设备,而根复合体集成端点则是指那些通过某种方式(如集成在芯片组中)与根复合体集成的设备。
  1. ARM架构

定义: ARM架构是一种广泛使用的精简指令集(RISC)处理器架构,由ARM公司(现为ARM Limited的一部分,后被软银收购,现归英伟达所有)设计。该架构以其低功耗、高性能和可扩展性而闻名,特别适用于移动设备、嵌入式系统和服务器。

特点

  • 低功耗:ARM指令集经过优化,以较低的电压和电流运行,从而降低功耗。
  • 高性能:尽管功耗较低,但ARM架构能够提供足够的性能,满足各种应用需求。
  • 可扩展性:从低端微控制器到高性能多核处理器,ARM架构都具有高度的可扩展性。
  1. 服务器固件(BIOS/UEFI)

定义: 传统上,服务器固件指的是BIOS(基本输入输出系统),但在现代服务器中,UEFI(统一可扩展固件接口)已成为主流。UEFI是BIOS的继任者,提供了更丰富的功能和更高的安全性。

功能

  • 硬件初始化:在系统启动时初始化硬件组件。
  • 加载操作系统:从存储设备加载并启动操作系统。
  • 安全性:通过安全启动等功能保护系统免受恶意软件攻击。
  1. 安全启动(Secure Boot)

定义: 安全启动是一种安全功能,用于在系统启动时验证所有启动组件(包括固件、驱动程序和操作系统)的签名。只有签名有效的组件才会被加载和执行。

原理

  • 链式验证:使用链式验证方法,从最低级别的固件开始,逐级验证后续组件的签名。
  • 公钥/私钥加密:使用公钥/私钥加密技术来验证签名,确保组件的完整性和来源可靠性。
  1. TPM(Trusted Platform Module)

定义: TPM是一个安全的加密处理器,它提供了一系列的安全功能,如密钥存储、加密和解密、哈希计算等。

功能

  • 密钥管理:存储和管理加密密钥。
  • 平台完整性验证:通过存储和验证平台配置寄存器(PCR)的值来确保平台未被篡改。
  • 远程证明:向远程实体证明平台的完整性和可信度。
  1. ARM TrustZone

定义: ARM TrustZone是ARM公司推出的一种基于硬件的安全解决方案,它通过将处理器的执行环境分为安全区域和非安全区域来提供隔离和保护。

特点

  • 硬件隔离:安全区域和非安全区域在硬件级别上完全隔离。
  • 权限控制:非安全区域中的代码无法直接访问安全区域中的资源,除非通过特定的安全接口。
  • TEE(Trusted Execution Environment):在安全区域内运行的代码可以在TEE中执行,以提供额外的安全性和隔离性。
  1. UEFI/SCP/TF-A
  • UEFI(统一可扩展固件接口):现代计算机中BIOS的替代品,提供更丰富的功能和更高的安全性。
  • SCP(Secure Core Processor):可能指的是与安全相关的特定处理器或模块,具体取决于上下文。在某些情况下,它可能指的是负责安全功能的核心处理器。
  • TF-A(Trusted Firmware-A):ARM架构下的一种开源固件实现,支持ARM TrustZone等安全特性。TF-A为ARM服务器的启动过程提供了安全的框架和机制。
  1. 密码学算法

定义: 密码学算法是用于加密和解密数据的数学函数和过程。它们包括对称加密算法(如AES)、非对称加密算法(如RSA)和哈希算法(如SHA-256)等。

应用

  • 数据加密:保护数据的机密性,防止未经授权的访问。
  • 数字签名:验证数据的完整性和来源的可靠性。
  1. 国密标准

定义: 国密标准是指中国国家制定的密码学标准和规范。这些标准旨在保障国家信息安全和数据的机密性、完整性和可用性。

内容: 国密标准通常包括加密算法、密钥管理、数字签名、密码协议等方面的规定和要求。

  1. x509证书

定义: x509证书是一种数字证书,用于在互联网上安全地交换信息。它遵循X.509标准,由证书颁发机构(CA)签发。

内容: x509证书通常包含公钥、证书持有者的身份信息、证书颁发机构的签名以及证书的有效期等信息。

  1. 签名验证

定义: 签名验证是一种验证数字签名真实性的过程。它使用公钥来验证数字签名是否由相应的私钥生成,从而确保数据的完整

欢迎大家订阅

ARM/Linux嵌入式真题

#嵌入式##面经#
全部评论

相关推荐

11-04 20:18
已编辑
蚌埠坦克学院 机器学习
极氪 GPU算法优化 25k*(13-15) 硕士985
点赞 评论 收藏
分享
2 7 评论
分享
牛客网
牛客企业服务