字节跳动社招面经 —— BSP驱动工程师(5)

article/2025/7/5 13:25:59

接前一篇文章:字节跳动社招面经 —— BSP驱动工程师(4)

本文内容参考:

ARM64架构启动流程_arm64 linux kernel 启动流程-CSDN博客

特此致谢!

上一回讲解了“嵌入式充电站”发的一篇文章字节跳动社招面经——BSP驱动工程师中的面试题一面的第2题,本回解析第3题。再次贴出面试题:

3. arm64启动流程

arm64架构的启动流程是一个多阶段、分层次的过程,涉及硬件初始化、权限切换、代码加载和操作系统启动。以下是其核心流程的详细说明:

(1)硬件上电与BootROM执行

1)复位向量(Reset Vector)

CPU上电后,从固定地址(通常为0x00000000或厂商定义的地址)开始执行BootROM代码。

  • BootROM是芯片内部只读固件,负责最底层硬件初始化(如时钟、内存控制器、安全引擎)。
  • 验证下一阶段代码(如Bootloader)的数字签名(Secure Boot)。

2)异常级别(Exception Level,EL)

arm64启动时运行在最高特权模式:

  • EL3(Secure Monitor):负责安全世界(Secure World)与非安全世界(Normal World)的切换。
  • EL2(Hypervisor):可选,支持虚拟化。
  • EL1(OS Kernel):操作系统内核运行级别。
  • EL0(User Space):用户应用程序。

(2)加载并执行Bootloader

1)Primary Bootloader(如ARM Trusted Firmware,ATF)
  • 任务

a. 初始化关键外设(如UART调试串口、DRAM控制器);

b. 设置异常向量表(Exception Vector Table);

c. 加载下一阶段Bootloader(如U-Boot)到内存;

d. 切换异常级别(从EL3 → EL2或EL1)。

  • 示例代码(ATF跳转)
bl31_main() {// 初始化平台硬件plat_initialize();// 跳转到非安全世界(EL2/EL1)enter_normal_world();
}

2)阶段 2:Secondary Bootloader(如U-Boot)

  • 任务

a. 完整内存映射初始化(如DDR配置);

b. 加载设备树(Device Tree Blob,DTB)或ACPI表;

c. 从存储介质(eMMC、NVMe、网络)加载操作系统内核(如Linux);

d. 传递启动参数(内核地址、设备树地址、命令行参数)。

  • U-Boot命令示例

# 从 eMMC 加载内核和设备树到内存
load mmc 0:1 ${kernel_addr_r} Image
load mmc 0:1 ${fdt_addr_r} dtb.dtb
# 启动内核
booti ${kernel_addr_r} - ${fdt_addr_r}

(3)操作系统内核启动

1)内核解压与重定位(如Linux)
  • 任务

a. 自解压(如果内核为压缩格式,如Image.gz);

b. 初始化页表、MMU和缓存;

c. 解析设备树或ACPI,初始化硬件(如中断控制器、PCIe、USB);

d. 挂载根文件系统,启动用户空间初始化进程(如systemdinit)。

  • 内核启动流程
start_kernel() {setup_arch();          // 架构相关初始化(ARM64)init_irq();            // 中断控制器初始化(GIC)time_init();           // 时钟源初始化rest_init();           // 创建 init 进程
}

(4)多核启动(SMP初始化)

  • 主核(Primary Core)

执行完整启动流程。

  • 从核(Secondary Cores)

a. 上电后处于等待状态(通过spin-table或PSCI协议);

b. 主核通过发送中断(SGI)或设置唤醒地址唤醒从核;

c. 从核跳转到内核指定的入口地址(如secondary_startup)。

  • 示例(设备树配置spin-table)
cpu@1 {device_type = "cpu";reg = <0x0 0x1>;enable-method = "spin-table";cpu-release-addr = <0x0 0x8000fff8>;
};

更多内容请看下回。


http://www.hkcw.cn/article/jPCXaXsFuZ.shtml

相关文章

超越与沉浸:关于意识觉醒的量子化生存艺术

一、现象世界的认知架构&#xff1a;从AR渲染到神经编译 人类意识系统犹如搭载生物算法的增强现实&#xff08;AR&#xff09;设备&#xff0c;每秒将4000万比特的原始感官数据&#xff0c;通过神经编译引擎压缩成40比特的认知全息图。在这个过程中&#xff1a; 海马体材质库自…

自主设计一个DDS信号发生器

DDS发生器 DDS信号发生器是直接数字频率合成技术&#xff0c;采用直接数字频率合成(Direct Digital Synthesis&#xff0c;简称DDS)技术&#xff0c;把信号发生器的频率稳定度、准确度提高到与基准频率相同的水平&#xff0c;并且可以在很宽的频率范围内进行精细的频率调节。采…

浏览器网站禁止黏贴,但是要交作业怎么快速黏贴

出现的问题&#xff1a; 写这篇博客的原因&#xff1a;学校最近要求使用 iwrite 写英语作文&#xff0c;但是浏览器禁止黏贴&#xff0c;我们自己只能手动输入&#xff0c;但是作为程序猿的我想到了一个很好的解决方案。 解决思路&#xff1a; 我们直接在浏览器的控制台的源代码…

CAN通讯协议中各种参数解析

1.各种参数缩写 2.多帧传输时间参数解析 - Sender&#xff08;左侧&#xff09; 指的是 多帧数据的发送者&#xff0c;也就是&#xff1a; ECU&#xff08;被测系统 / 响应方&#xff09; - Receiver&#xff08;右侧&#xff09; 指的是 多帧数据的接收者&#xff0c;也就是…

第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理

Set系列集合特点 哈希值 HashSet集合的底层原理 HashSet集合去重复 代码 代码一&#xff1a;整体了解一下Set系列集合的特点 package com.itheima.day20_Collection_set;import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.…

deepseek原理和项目实战笔记2 -- deepseek核心架构

混合专家&#xff08;MoE&#xff09; ​​混合专家&#xff08;Mixture of Experts, MoE&#xff09;​​ 是一种机器学习模型架构&#xff0c;其核心思想是通过组合多个“专家”子模型&#xff08;通常为小型神经网络&#xff09;来处理不同输入&#xff0c;从而提高模型的容…

迈向分布式智能:解析MCP到A2A的通信范式迁移

智能体与外部世界的桥梁之言&#xff1a; 在深入探讨智能体之间的协作机制之前&#xff0c;我们有必要先厘清一个更基础的问题&#xff1a;**单个智能体如何与外部世界建立连接&#xff1f;** 这就引出了我们此前介绍过的 **MCP&#xff08;Model Context Protocol&…

TCP/IP协议精华总结pdf分享

hi &#xff0c;大家好&#xff0c;应小伙伴们的要求&#xff0c;上次分享了个人的一些学习和职场经验&#xff0c;其中网络协议PDF文档是我之前学习协议的时候总结一些精华知识&#xff0c;网络属于基本功&#xff0c;是互联网必备知识&#xff0c;我深信掌握好核心20%知识&am…

齐次变换矩阵与运动旋量的指数映射

在三维空间中&#xff0c;刚体的位姿&#xff08;位置和姿态&#xff09;可以通过齐次变换矩阵进行描述。齐次变换矩阵是一种 44 的矩阵&#xff0c;其一般形式为&#xff1a; T [ R p 0 1 ] T\begin{bmatrix}R&p\\0&1\end{bmatrix} T[R0​p1​] 其中&#xff0c; R …

MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析

目录 一、DDL 基础概述 1.1 DDL 定义与作用 1.2 DDL 语句分类 1.3 数据类型与存储引擎 1.3.1 数据类型 1.3.2 存储引擎差异 二、基础 DDL 语句详解 2.1 创建数据库与表 2.1.1 创建数据库 2.1.2 创建表 2.2 修改表结构 2.2.1 添加列 2.2.2 修改列属性 2.2.3 删除列…

torch.randn vs torch.rand

1 分布类型&#xff1a; randn&#xff1a;生成标准正态分布&#xff08;均值 0&#xff0c;标准差 1&#xff09; rand&#xff1a;生成 [0, 1) 区间的均匀分布 2 数值范围&#xff1a; randn&#xff1a;可能产生负数&#xff08;范围 (-∞, ∞)&#xff09; rand&#xff…

NLP学习路线图(十九):GloVe

自然语言处理&#xff08;NLP&#xff09;的核心挑战在于让机器理解人类语言的丰富含义。词向量&#xff08;Word Embeddings&#xff09;技术通过将词语映射到高维实数空间&#xff0c;将离散的符号转化为连续的向量&#xff0c;为NLP任务奠定了坚实基础。在众多词向量模型中&…

极客时间:用 FAISS、LangChain 和 Google Colab 模拟 LLM 的短期与长期记忆

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

dify应用探索

一个典型的 Agent Multi-Agent 系统 智能导购会根据用户意图分类并传递给相应商品导购Agent&#xff0c;返回商品信息。采用Multi-Agent架构&#xff0c;其中Router Agent负责对用户问题进行意图 分析&#xff0c;并路由到其它商品导购Agent,商品导购Agent负责向厥客收 集商品…

py爬虫的话,selenium是不是能完全取代requests?

selenium适合动态网页抓取&#xff0c;因为它可以控制浏览器去点击、加载网页&#xff0c;requests则比较适合静态网页采集&#xff0c;它非常轻量化速度快&#xff0c;没有浏览器开销&#xff0c;占用资源少。当然如果不考虑资源占用和速度&#xff0c;selenium是可以替代requ…

c++类和对象-继承

参考链接&#xff1a;46 类和对象-继承-继承方式_哔哩哔哩_bilibili 1.概述 作用&#xff1a;提高代码复用率&#xff0c;多个子类和父类有相同之处&#xff0c;又有自己各自的特点。例如基类人有四肢、会走路、说话&#xff0c;不同子类中国人是黑头发&#xff0c;说汉语&am…

MySQL中的锁

MySQL中有哪些锁? 全局锁(FTWRL) 含义&#xff1a;Flush Table with Read Lock的缩写&#xff0c;它会锁定整个数据库实例&#xff0c;让所有表都处于只读状态。 使用全局锁&#xff0c;要执行的命令: flush tables with read lock 之后&#xff0c;整个数据库就处于只读…

探索 Dify 的工作流:构建智能应用的新范式

目录 前言1. 什么是 Dify 的工作流2. 工作流的核心组成2.1 节点&#xff08;Node&#xff09;2.2 连接线&#xff08;Edge&#xff09;2.3 上下文与变量系统 3. 工作流的典型使用场景3.1 多轮对话与智能客服3.2 文档问答系统3.3 多语言营销文案生成3.4 多模型对比与评估&#x…

分词算法BBPE详解和Qwen的应用

一、TL&#xff1b;DR BPE有什么问题&#xff1a;依旧会遇到OOV问题&#xff0c;并且中文、日文这些大词汇表模型容易出现训练中未出现过的字符Byte-level BPE怎么解决&#xff1a;与BPE一样是高频字节进行合并&#xff0c;但BBPE是以UTF-8编码UTF-8编码字节序列而非字符序列B…

小云天气APP:精准预报,贴心服务

在快节奏的现代生活中&#xff0c;天气变化对我们的日常生活、出行安排以及健康状况都有着重要影响。一款精准、便捷且功能丰富的天气预报应用&#xff0c;无疑是提升生活品质的必备工具。小云天气APP正是这样一款为安卓用户量身定制的天气预报应用&#xff0c;凭借其精准的天气…