本文约2300字,考察是否学会了最好的方法就是做题和考试,无论是否需要参加面试,定期自我考察一下。本文整理了嵌入式SDK与文件系统移植方向的面试题与学习计划,后续对部分知识细分梳理。
关注公众号, 即可获得与Linux相关的电子书籍以及常用开发工具,文末有文档清单。
面向岗位:嵌入式软件工程师(SDK / 文件系统 / BSP 移植方向)
难度预估:中高级(1-5年经验)
目标:从基础补全到高频面试题实战,系统性拿下Offer
一 岗位核心能力拆解
在准备之前,先明确这个岗位到底要我们会什么。
面试官最看重的三个能力层级:
✅ 能看懂并裁剪现有 SDK(芯片厂商提供的 Software Development Kit) ✅ 能移植文件系统到不同存储介质(NAND、eMMC、Nor Flash、SD 卡) ✅ 能调试底层启动 / 存储相关 Bug(UBoot、内核、驱动、根文件系统)
一句话总结:
需要懂芯片启动流程 + 存储介质特性 + 文件系统原理 + 实际移植踩坑经验。
二 必学知识清单(按优先级排序)
🔹 第一梯队:基础且必问
🔹 第二梯队:移植实战技能
SDK 结构理解:Makefile / Kconfig / 交叉编译工具链 / 目录划分 UBoot 移植:板级配置文件修改、设备树(DTS)、存储驱动(MMC/NAND) Linux 内核配置:MTD 子系统、块设备驱动、文件系统类型编译进内核或模块 文件系统生成工具: mkfs.ubifs、ubinize、mkyaffs2image、mkfs.ext4、dd根文件系统构建:BusyBox、Buildroot基本概念
🔹 第三梯队:进阶与调试能力
Flash 特有机制:磨损均衡、垃圾回收、断电恢复、写放大 性能分析:读写速度测试、mount 时间、随机写入抖动 异常调试:Magic Number 错误、CRC 校验失败、UBI volume 损坏修复 其他 RTOS 文件系统:littlefs(用于 Zephyr/RT-Thread)、FatFs(裸机)
三 10道高频面试真题(带答题要点)
1. NAND Flash 和 NOR Flash 的区别?选型时怎么考虑?
答要点:
NOR 支持 XIP(片上执行),读快、擦写慢、容量小 NAND 容量大、擦写快、有坏块 选型:代码存储用 NOR(UBoot、小内核),大容量数据用 NAND / eMMC
2. 为什么要引入 UBIFS 而不是继续用 YAFFS2?
答要点:
YAFFS2 专为 NAND 设计,但 mount 慢、内存占用高 UBIFS 通过 UBI 层处理坏块和磨损均衡,对大页 NAND、多核、高并发更友好
3. 文件系统移植后,kernel 启动报 VFS: Unable to mount root fs,你会怎么排查?
答要点(三步走):
检查内核是否编译进该文件系统驱动 uboot 传递的 root=参数是否正确(设备节点或分区名)确认镜像烧录位置与分区表一致
4. 简述一下从 SDK 到能跑起一个自定义根文件系统的完整步骤。
答要点(以 Linux 为例):
配置交叉工具链 → 配置 Uboot 支持板载 MMC/NAND → 配置 Kernel 开启所需驱动 → 用 Buildroot 或手动制作 rootfs → 烧录 → 启动调试
5. 什么是坏块管理?文件系统层还是驱动层做?
答要点:
物理坏块由驱动 / FTL 层标记跳过 逻辑坏块由文件系统(如 UBIFS)处理 二者配合
6. 硬链接与软链接在嵌入式文件系统中的应用区别?
答要点:
硬链接:不能跨设备、不能链接目录 软链接:可跨分区,但目标删除后失效 嵌入式常用软链接减少冗余(如 /bin指向busybox)
7. 如果要把一个 SD 卡文件系统从 FAT32 换成 ext4,需要改哪些地方?
答要点:
内核配置添加 ext4 修改 UBoot 中 load 命令的分区类型 根文件系统中的 fstab或mount命令应用程序中的路径权限
8. 你如何处理文件系统意外断电后的数据一致性问题?
答要点:
使用日志型文件系统(ext4、UBIFS) 硬件上加掉电检测与电容保护 关键文件用 sync或fsync
9. 交叉编译文件系统工具(如 mkfs.ubifs)时,需要注意什么?
答要点:
注意 mtd-utils依赖库(zlib、lzo、uuid)与目标系统的页大小、擦除块大小、LEB 大小匹配
10. 给定一块新的 ARM 板子和 SDK,你预估移植文件系统要多久?
答要点(按经验拆解,不同芯片以及是否有经验时间不同):
从下面几个点来预估:
编译环境搭建 sdk编译 内核配置 rootfs 制作 - 第三方库编译
四 系统性学习计划(每天2-3小时)
第 1 周:夯实存储与文件系统理论
阅读《Linux 设备驱动》的 MTD 章节 对比 NAND/NOR/eMMC 资料整理成表格 学习 YAFFS2 vs UBIFS 设计思想 练习:用 qemu 模拟 vexpress 板,跑通裸 kernel + initramfs
第 2 周:UBoot 与内核启动流程
实际编译 UBoot 到一块真实板 分析 uboot 阶段存储驱动初始化流程( mmc rescan、nand init)练习:修改 uboot 环境变量从不同分区启动 kernel
第 3 周:根文件系统制作(手工 + Buildroot)
用 BusyBox 制作最小根文件系统 对比 initramfs 与磁盘根文件系统的差异 构建一个完整的 Buildroot 工程,加入 ssh、ntp 等工具
第 4 周:真实环境移植(建议购置 Linux 开发板)
完全重做:SDK → Uboot → Kernel → Rootfs 尝试更换文件系统类型(ext4 → UBIFS) 调试一次 kernel panic - not syncing: VFS类错误
第 5 周:源码级调试与性能测试
学习使用 iozone、dd进行文件系统性能测试模拟掉电测试(突然拔电,观察文件系统是否损坏) 阅读 MTD/UBIFS 内核关键函数( ubifs_mount、ubi_attach)
第 6 周:刷题 + 模拟面试
反复练习前面 10 道真题 整理移植过程中的踩坑文档(写在简历中会加分) 参与一次模拟面试(同行或 AI 扮演面试官)
五 额外加分项(面试实战tips)
务必准备一个完整的移植项目
从拿到 SDK 到系统跑起来,梳理 5-8 个关键 commit 级步骤
现场可以说出:改了哪个 dts、加了什么 config、烧录命令是什么学会“带书面试”
准备好关键截图(bootlog、分区表、mount 输出),展示远比空讲有力主动展示调试思维
被问到不会的问题时:“以我的经验,我会先从 xxxx 日志分析,再用 xxxx 工具定位”
了解行业热门趋势
很多公司在转 SPI NAND + littlefs,或关注 RUST 在文件系统层的应用
准备 2 句观点就能拉开差距
六 最后一句提醒
嵌入式文件系统移植面试不考花哨算法,
考的是踩过坑后的真判断。
建议至少在真实板子上成功移植并跑坏过一次文件系统,
那种经历比任何八股文都值钱。
祝你早日拿下嵌入式 Offer! 💪
如果有帮助,欢迎转发给正在准备嵌入式面试的朋友。
往期文章(欢迎订阅技术分享栏目全部文章):

这里是女程序员的笔记本
15年+嵌入式软件工程师兼二胎宝妈
分享读书心得、工作经验,自我成长和生活方式。
希望我的文字能对你有所帮助
夜雨聆风