💌 所属专栏:【嵌入式面试】
😀 作 者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘
🐧 嵌入式 Linux 面试通关指南:从驱动开发到系统移植,一文掌握高频考点!
随着智能设备、工业控制、车载系统和物联网的快速发展,嵌入式 Linux 已成为主流的嵌入式操作系统之一。相比裸机或 RTOS,它具备多任务、文件系统、网络协议栈、设备驱动等完整功能,广泛应用于路由器、摄像头、工控机、智能终端等设备中。
本文专为准备嵌入式 Linux 开发岗位面试的工程师打造,系统梳理 高频面试题 + 核心知识点 + 项目经验技巧,助你轻松应对技术面,斩获 Offer!
🧩 一、嵌入式 Linux 面试考察方向
考察方向 | 主要内容 |
---|---|
Linux 基础命令 | 文件操作、进程管理、权限设置等 |
C语言与指针 | 内存管理、结构体、函数指针、位操作 |
Makefile 与编译 | 编译流程、交叉编译、Makefile 编写 |
Shell 脚本 | 自动化脚本编写 |
内核机制 | 进程/线程、调度、同步、内存管理 |
设备驱动开发 | 字符设备、platform、I2C、SPI、中断处理 |
系统移植 | Bootloader(U-Boot)、内核裁剪、根文件系统构建 |
网络编程 | Socket 编程、TCP/UDP、多线程服务器 |
调试工具 | GDB、strace、gdbserver、printk、logcat |
🔍 二、Linux 基础命令高频问题
1. 常见命令有哪些?
ls / ps / top / cat / grep / find / chmod / chown / df / free / ifconfig / ping
2. grep "error" log.txt
是什么意思?
在
log.txt
文件中查找包含 “error” 的行。
3. 如何查看当前运行的进程?
ps aux # 查看所有进程
top # 实时监控进程状态
4. 如何修改文件权限?
chmod 755 start.sh # rwxr-xr-x
⚙️ 三、Makefile 与交叉编译
1. 什么是 Makefile?写一个简单的例子
CC = arm-linux-gnueabi-gcc
CFLAGS = -Wall -O2
TARGET = app
SRC = main.c driver.c
$(TARGET): $(SRC)
$(CC) $(CFLAGS) -o $(TARGET) $(SRC)
clean:
rm -f $(TARGET)
2. 什么是交叉编译?为什么要用?
- 交叉编译:在 PC(x86)上编译出能在目标平台(如 ARM)上运行的程序。
- 因为目标设备资源有限,无法本地编译。
3. 常见的交叉编译工具链有哪些?
arm-linux-gnueabi-gcc
(通用 ARM)arm-none-linux-gnueabihf-gcc
(带硬浮点)
🧠 四、Shell 脚本编程
写一个脚本:检测某个进程是否运行,如果没有则启动它
#!/bin/sh
PROCESS_NAME="myapp"
if pgrep -x "$PROCESS_NAME" > /dev/null; then
echo "$PROCESS_NAME is running."
else
echo "$PROCESS_NAME is not running. Starting..."
/home/app/myapp &
fi
🔌 五、设备驱动开发(重中之重!)
1. 字符设备驱动的基本结构
一个典型的字符设备驱动包含:
file_operations
结构体open
,read
,write
,ioctl
,release
等接口register_chrdev()
/cdev_add()
注册设备- 设备节点
/dev/xxx
2. 主设备号和次设备号的作用?
- 主设备号:标识设备类型(如硬盘、串口)
- 次设备号:区分同一类型的不同设备(如
/dev/sda1
,/dev/sda2
)
3. platform 总线的作用是什么?
- 实现驱动与设备的分离,便于代码复用。
- 匹配
platform_device
和platform_driver
。
4. 中断处理中的上半部和下半部
类型 | 特点 | 使用方式 |
---|---|---|
上半部(Top Half) | 快速响应,不能休眠 | request_irq() 中执行 |
下半部(Bottom Half) | 延迟处理,可休眠 | 使用 tasklet、工作队列(workqueue) |
示例:使用工作队列处理耗时操作
static struct work_struct my_work;
void work_handler(struct work_struct *work) {
printk("Work queue is running\n");
}
irq_handler_t my_irq_handler(int irq, void *dev_id) {
schedule_work(&my_work);
return IRQ_HANDLED;
}
🖥️ 六、系统移植三大件
1. U-Boot(Bootloader)
- 功能:初始化硬件、加载内核、传递参数
- 常见命令:
printenv # 查看环境变量 setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2' saveenv # 保存环境变量 bootm # 启动内核
2. Linux 内核
- 配置:
make menuconfig
- 编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage
- 裁剪:去掉不需要的驱动和模块,减小体积
3. 根文件系统(rootfs)
- 常见构建方式:
- BusyBox(最小化系统)
- Buildroot / Yocto(自动化构建)
- 包含:
/bin
,/sbin
,/etc
,/lib
,/dev
,/proc
,/sys
🌐 七、网络编程与 Socket
写一个简单的 TCP 服务器(多线程版本)
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>
void *client_handler(void *arg) {
int client_fd = *(int*)arg;
char buf[1024];
read(client_fd, buf, sizeof(buf));
write(client_fd, "Hello from server", 17);
close(client_fd);
return NULL;
}
int main() {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr = { .sin_family = AF_INET, .sin_port = htons(8080), .sin_addr.s_addr = INADDR_ANY };
bind(server_fd, (struct sockaddr*)&addr, sizeof(addr));
listen(server_fd, 5);
while (1) {
int client_fd = accept(server_fd, NULL, NULL);
pthread_t tid;
pthread_create(&tid, NULL, client_handler, &client_fd);
pthread_detach(tid);
}
}
🛠️ 八、调试技巧与工具
工具 | 用途 |
---|---|
printk() | 内核日志输出,配合 dmesg 查看 |
strace | 跟踪系统调用 |
gdb / gdbserver | 用户态程序调试 |
insmod / rmmod / lsmod | 驱动模块加载与卸载 |
cat /proc/interrupts | 查看中断使用情况 |
mount / umount | 挂载文件系统 |
💼 九、项目经验怎么讲?(嵌入式 Linux 专用)
使用 STAR 法则 + 技术细节:
“我参与了一个基于 IMX6ULL 的工业网关开发项目(S)。负责 Linux 内核移植和串口驱动开发(T)。使用 U-Boot 移植引导程序,裁剪内核以适配硬件资源,并编写了支持 485 通信的字符设备驱动,通过 workqueue 处理接收数据(A)。最终设备稳定运行在高温工业环境中,连续工作超过 1 年无故障(R)。”
✅ 十、面试准备建议
- 动手实践:自己搭建开发环境,烧写系统、写驱动、跑应用
- 掌握全流程:从 U-Boot → Kernel → Rootfs → 应用开发
- 熟悉简历项目:每一个技术点都要能深入讲解
- 了解行业趋势:如 Yocto、Docker in Embedded、RT Linux
- 模拟面试:找人模拟“请你写一个字符设备驱动”这类问题
📚 结语
嵌入式 Linux 面试不仅考察你的编码能力,更看重你是否具备系统级思维、底层理解能力和工程落地经验。掌握以上内容,再结合 1~2 个完整项目,你已经具备了冲击岗位的实力!
🔔 福利:关注我,回复“嵌入式Linux面试PDF”,可领取本文整理的高清PDF版 + 高频题库打包下载!
版权声明:
本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。