这份整理涵盖了 Linux 系统架构、编译构建、内核原理 以及 嵌入式启动流程

原列表内容非常丰富,但也比较杂乱(例如"启动过程"出现了两次)。我将其重新梳理为五大知识模块,并对冗长的答案进行了提炼,使其更适合面试口述。

搭配下面的播客使用效果更佳

📂 第一板块:系统架构与内核原理 (内功深厚)

这部分考察你对操作系统底层设计的理解,是区分初级和中级工程师的分水岭。

问题 级别 核心考点与精简回答
Linux系统的组成 了解 四大支柱:内核 (核心硬件管理)、Shell (交互接口)、文件系统 (数据存储)、应用程序
用户空间 vs 内核空间 必问 目的:为了安全和稳定,隔离用户程序与核心资源。
用户空间 (User Space):受限模式,不能直接访问硬件。
内核空间 (Kernel Space):特权模式,可以访问所有资源 (内存/IO/外设)。
用户态切换到内核态的三种方式 重点 1. 系统调用 (Syscall):用户程序主动发起(如 open, fork)。
2. 异常 (Exception):程序运行出错(如缺页异常、除零错误)。
3. 外设中断 (Interrupt):硬件信号触发(如键盘输入、网卡数据到达)。
进程与线程的区别 必问 1. 进程:资源分配的最小单位(独立的内存空间)。
2. 线程:CPU调度的最小单位(共享进程的内存,开销小)。
虚拟地址的好处 重点 1. 安全:进程间内存隔离,互不干扰。
2. 节省:共享库代码在物理内存只需存一份,多进程映射使用。
3. 连续性:逻辑上连续的虚拟地址,物理上可以是碎片的。
Linux中断机制 (上半部/下半部) 难点 为什么要分? 为了兼顾响应速度和处理能力。
上半部 (Top Half):关中断执行,只处理最紧急的硬件交互,速度要极快。
下半部 (Bottom Half):开中断执行,处理耗时任务。
下半部实现
1. Tasklet:运行在软中断上下文,不可睡眠
2. Workqueue:运行在进程上下文,可以睡眠
WSL 是什么? 了解 WSL是“Windows Subsystem for Linux”的缩写,顾名思义,WSL就是Windows系统的Linux子系统,其作为Windows组件搭载在Windows10周年更新(1607)后的Windows系统中。
常见的linux系统有哪些 了解 ubuntu,centOS,Red Hat 等

📂 第二板块:编译与构建体系 (工程能力)

这部分是 C/C++ 开发者的必修课,考察对代码如何变成可执行程序的理解。

问题 级别 核心考点与精简回答
动态库(.so)与静态库(.a)的区别 必问 0.静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。
1. 链接时机:静态库在编译时打入程序;动态库在运行时加载。
2. 文件大小:静态编译程序大;动态编译程序小。
3. 依赖性:静态程序可独立运行;动态程序依赖环境中的 .so 文件。
4. 升级:动态库修bug只需替换库文件,无需重新编译程序。
Make与Makefile的区别 重点 Makefile:是一个文件(剧本),写明了编译规则和依赖关系。
Make:是一个命令/工具(导演),它读取 Makefile 并执行编译指令。
核心优势:自动化编译,且利用依赖树只编译修改过的文件(增量编译),效率高。
什么是CMake 必问 定义:高级编译配置工具。
作用:Make 的生成器。它可以根据 CMakeLists.txt 自动生成不同平台所需的 Makefile (Linux) 或 Project文件 (Windows VS)。解决跨平台构建难题。
静态链接 vs 动态链接 重点 (同第一题,强调链接过程)。
链接优化:合理拆分源文件、使用增量链接、去除未用符号 (strip)。
在Linux C中,ls命令怎么被执行的 经典 三步走
1. fork():父进程创建子进程。
2. exec():子进程调用 exec 系列函数加载 /bin/ls 程序替换当前进程镜像。
3. wait():父进程等待子进程结束。

📂 第三板块:常用命令与文件管理 (实操基础)

问题 级别 核心考点与精简回答
Linux文件类型与标志 重点 1. -:普通文件。
2. d:目录。
3. l:符号链接 (软链)。
4. b:块设备 (硬盘)。
5. c:字符设备 (串口/LED)。
6. p:管道。
7. s:套接字 (Socket)。
场景快记:
我桌面的普通文件(-)太多,就建了个目录(d),又怕找不到,就创建了个链接(l)。
电脑连着(b)设备硬盘和字符©设备键盘。上网靠套接字(s),数据传输用管道(p)
修改权限用哪个命令 基础 chmod (Change Mode)。例如 chmod 777 file
32位机器的指针是多少位 了解 32位 = 4字节。指针的位数取决于 CPU 的寻址宽度(地址总线)。
Shell脚本如何定义数组 了解 arr=(1 2 3)arr[0]=1

📂 第四板块:嵌入式Linux特有 (驱动与启动)

这是嵌入式/驱动岗位的核心考区。

问题 级别 核心考点与精简回答
嵌入式Linux启动流程 必问 四个阶段
1. ROM Code:CPU上电,执行固化代码。
2. Bootloader (U-Boot):初始化基础硬件(时钟/内存),加载内核。
3. Kernel:挂载根文件系统,初始化驱动。
4. RootFS (init/systemd):启动用户空间服务和应用。
嵌入式芯片启动过程全解析,彻底理解bootloader
U-Boot的作用 了解 核心任务:从 Flash 读出内核 \to 放入内存 \to 启动内核。
它是一个裸机程序,负责硬件的早期初始化。
字符设备 vs 块设备 重点 字符设备 (Char Device)
1. 按字节流读写 (顺序访问)。
2. 无缓存。
3. 例子:键盘、串口、LED。
块设备 (Block Device)
1. 按块(512B/4K)读写 (随机访问)。
2. 有缓存 (Buffer Cache)。
3. 例子:硬盘、SD卡。
主设备号与次设备号 了解 主设备号:标识驱动程序(我是谁?是硬盘驱动还是网卡驱动)。
次设备号:标识具体设备(是第几个硬盘?sda1还是sda2)。
上电后串口无输出,如何排查 实战 一、硬件层面检查(由表及里)
这是系统运行的生理基础,硬件不行软件必挂。

1. 电源 (Power)
检查核心板和底板的供电电压是否稳定(如 5V/3.3V/1.8V/1.2V 核心电压)。电流是否正常?(电流过大可能有短路,电流过小可能CPU未工作)。

2. 时钟 (Clock)
这是 CPU 的心跳。必须用示波器测量晶振引脚,确认是否起振,频率是否准确。

3. 复位 (Reset)
检查复位电路。测量复位引脚电平,确认 CPU 是否一直处于被复位状态(Reset脚被拉低/拉高)。

4. 串口连接 (Connection)
线序:TX 接 RX,RX 接 TX,不能直连。
共地:板子 GND 和 串口模块 GND 必须连在一起。
电平:确认是 TTL 电平(3.3V)还是 RS232 电平,是否匹配。

5. 启动模式 (Boot Straps)
检查 CPU 的启动引脚(Boot引脚)电平配置。确保 CPU 被配置为从你烧录的介质(如 SD卡、EMMC、NAND Flash)启动,而不是进入了 USB 下载模式或 JTAG 模式。

6. JTAG/SWD 接口
如果以上都无法定位,尝试连接仿真器。如果 JTAG 能读到 CPU ID,说明 CPU 核心电路基本活着;如果连不上,大概率是硬件虚焊或损坏。


二、软件层面检查(由外及内)
硬件没问题后,检查代码逻辑和配置。

1. 镜像匹配
Bootloader 是否专为
当前这块板子
编译的?CPU 型号、DDR 容量/型号、Flash 型号哪怕有一点差异,都可能导致启动失败。

2. 烧录地址
检查烧录工具的配置。Bootloader 必须烧录到存储介质的
特定起始地址
(不同 CPU 要求不同,有的在 0x0,有的在特定偏移量)。

3. 交叉编译器:
使用的编译器架构(ARMv7/ARMv8/MIPS等)和版本是否正确?

4. 源码配置 :
这是最容易出错的地方:
串口配置:代码中初始化的串口(UART0/1/2)引脚,是否与原理图上的调试串口一致?波特率是否对上了?
时钟配置 (PLL):PLL 初始化代码是否正确?如果倍频系数错了,CPU 或总线频率异常,串口无法工作。
DDR 初始化:Bootloader 第一阶段(SPL)通常需要初始化 DDR。如果 DDR 时序或参数配置错误,程序在尝试读写内存时会直接死机,导致没有任何输出。

📂 第五板块:软件开发概念

这是软件开发中两个容易混淆的概念,面试中常用来考察基础认知。

问题 级别 详细解释
API 与 SDK 的区别 基础 1. 定义不同
API (Application Programming Interface):应用程序接口。它是一组定义好的函数、协议或工具,告诉开发者“你可以调用什么功能”。
SDK (Software Development Kit):软件开发工具包。它是一个大礼包,通常包含 API、库文件、文档、示例代码、开发工具(编译器/调试器)等。

2. 包含关系
SDK 通常包含了 API。API 是 SDK 的一部分。

3. 形象比喻
API 就像菜单:告诉你有什么菜(功能)可以点,你只需要照着菜单点,不需要知道厨房怎么做。
SDK 就像“预制菜料理包”+“锅碗瓢盆”:不仅给了你菜单(API),还给了你半成品食材(库)、烹饪说明书(文档)和厨具(工具),让你能做出一顿完整的饭(开发出完整的应用)。

💡 备考建议

  1. 流程图记忆法:对于 “ls怎么执行的”“Linux启动流程”,脑子里要有一张流程图,不要死记硬背文字。
  2. 对比记忆法
    • Make vs CMake
    • 静态库 vs 动态库
    • 上半部 vs 下半部
    • 进程 vs 线程
  3. 实战准备:如果面试嵌入式,“串口无输出怎么调试” 这道题非常加分,它能体现你是否有真实的板卡调试经验。