全志科技嵌入式软件开发二面面经

1. 介绍一下做过的项目,重点讲系统架构、启动链路和承担的核心模块

答案:

  1. 先把整体链路讲清楚,例如 SoC 上电后经过 BootROM、一级/二级 BootLoader、内核、rootfs,最后到业务应用。
  2. 再说明软件分层,比如 Boot 部分、BSP/驱动部分、中间件、应用层分别承担什么职责。
  3. 核心模块要具体,例如负责过启动适配、某个外设驱动、内存搬运、协议栈、板级初始化、异常定位。
  4. 如果项目里有多核、RTOS + Linux、DMA、cache、文件系统、升级链路,也要把模块之间的数据流和控制流讲清楚。
  5. 最后落到难点,说明模块不是“参与了”,而是确实解决过启动失败、性能不足、时序异常、稳定性问题。

2. 启动阶段如果需要把一段代码从非易失存储搬到 DDR 里执行,哪些条件不满足会直接导致程序跑飞?

答案:

  1. 拷贝地址错误,加载地址和运行地址没有按链接脚本约定处理好。
  2. .text/.data/.bss 的初始化流程不完整,比如只搬运了代码段,没有完成数据段复制和 BSS 清零。
  3. cache、MMU、地址映射关系没有同步,CPU 看到的还是旧内容或者访问的不是预期物理地址。
  4. DDR 本身初始化不稳定,代码虽然搬过去了,但执行时取指或访存已经出错。
  5. 跳转前栈指针、异常向量、重定位后的全局符号地址没有准备好,也可能直接导致异常。

3. 为什么有些启动阶段会显式关闭 I-Cache 或 D-Cache?如果不关,典型现象是什么?

答案:

  1. 启动早期地址映射、代码位置、数据位置都可能还在变化,这时 cache 中旧的指令或数据容易和真实内存不一致。
  2. 做代码重定位、自修改代码、DMA 搬运、镜像覆盖时,如果没有 cache 维护,CPU 可能执行的还是旧指令流。
  3. 典型现象包括跳转后跑飞、明明内存内容已经更新但程序行为没变、数据读写异常、偶发性故障。
  4. 关闭 cache 不是目的,目的是保证一致性;很多正式方案里更常见的是分阶段开启,并配合 flush / invalidate。

4. 如果链接脚本里把某个段放错了位置,运行时最容易出现哪些问题?

答案:

  1. 全局变量值异常,因为 .data 没有正确从加载地址复制到运行地址。
  2. 未初始化全局变量不是 0,因为 .bss 所在区域不对或者清零范围错误。
  3. 函数跳转异常,尤其是位置相关代码、向量表、只读数据和代码段布局不正确时。
  4. 栈、堆和静态区相互覆盖,程序可能一开始正常,运行一段时间后才崩。
  5. 某些问题不会立刻暴露,而是在中断触发、任务切换、文件系统挂载后才出现,所以这类问题很隐蔽。

5. 内核早期启动阶段和完成页分配器初始化之后,内存管理方式有什么本质区别?

答案:

  1. 早期启动阶段还没有完整的伙伴系统和 slab/slub,很多内存只能通过 early allocator 或 memblock 这类机制粗粒度管理。
  2. 这个阶段的目标是“先把系统带起来”,重点是给关键子系统保留空间,而不是高效、细粒度地动态分配。
  3. 当页分配器初始化完成后,内核才真正具备按页管理、回收、拆分、合并物理内存的能力。
  4. 再往后 slab/slub 建立起来,才适合高频申请内核对象。
  5. 所以早期内存分配更偏静态和保守,后期才进入常规的动态内存管理模型。

6. kmallocvmalloc、页分配器这几类内核内存申请方式,差异到底在哪里?

答案:

  1. kmalloc 申请的是内核虚拟地址连续、通常也物理连续的小到中等内存,适合普通内核对象和 DMA 友好的场景。
  2. 页分配器更底层,直接按页框申请,可以拿到一个或多个连续物理页,适合更底层的内存需求。
  3. vmalloc 强调虚拟地址连续,但底层物理页可以不连续,适合较大块内存,但不适合所有需要物理连续的硬件。
  4. 性能上 kmalloc 一般更好,因为地址转换简单;vmalloc 需要单独建立页表映射,开销更高。
  5. 真正选型时,不是只看大小,还要看是否要求物理连续、是否给设备 DMA、是否能睡眠、调用上下文是什么。

7. ro

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

04-08 16:35
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务