

嵌入式 Linux 开发会被 AI 取代吗?
BSP 工程师和应用开发者的真实处境
一个朋友最近在面试,面试官直接问他:"你觉得你自己三年后还有没有被雇佣的价值?"
这问题听着像刁难,但我觉得这是 2026 年每一个嵌入式 Linux 工程师都应该认真想一遍的问题。
AI 写代码这件事已经不是新鲜事了——GitHub Copilot 全球超过 2000 万用户,41% 的代码由 AI 参与生成。但嵌入式 Linux 这个圈子有它独特的复杂性:你不只是在写代码,你是在让 Linux 跑在一块可能从没见过 Linux 的板子上。
这里面的水,比你想的深。
先把"嵌入式 Linux 开发"拆开来看
很多人说"嵌入式 Linux 开发",其实在说两件差别很大的事:
嵌入式 Linux 开发├── BSP 层(Board Support Package)│ ├── Bootloader 移植(U-Boot)│ ├── 内核配置与裁剪(Kconfig、DTS)│ ├── 设备驱动开发(字符设备、平台驱动、子系统驱动)│ └── 根文件系统构建(Yocto / Buildroot)│└── 应用层(Application) ├── 系统级应用(守护进程、systemd 服务) ├── 驱动用户态接口(ioctl、sysfs、netlink) ├── 网络与通信(socket、MQTT、OTA 升级) └── 业务逻辑开发这两层被 AI 影响的方式截然不同。搞清楚这个,才能判断自己的饭碗有多稳。
BSP 层:AI 进来之后,踩了多少坑
Linux 内核社区其实已经在用 AI 了,而且用得很务实。
AUTOSEL 是 NVIDIA 工程师 Sasha Levin 写的工具,用多个 LLM 联合投票,每天自动筛选哪些 upstream 补丁值得 backport 到 stable/LTS 内核树。以前维护者每天要人工看 100 个补丁,只有 5~10 个值得 backport——这种重复劳动 AI 干得比人好,速度也快。
Btrfs 的作者、Meta 工程师 Chris Mason 也在搞 AI 辅助的 patch code review,把大段 diff 拆成小块,逐块让 LLM 审查,再汇总报告。
这些都是真实落地的 AI 应用,不是 PPT。
但是——
BSP 最硬核的挑战在于,你的目标平台可能是全球独一份的。
假设你在给一块基于 RK3568 的定制工业板做 BSP,板子上挂了一颗你们硬件团队自研的 FPGA,通过 SPI 连接,中断走的 GPIO 扩展器。
你让 AI 写这个驱动,它会给你一段"看起来很完整"的 spi_driver 代码:
staticintmy_fpga_probe (struct spi_device *spi){struct my_fpga_dev *dev;int ret;dev = devm_kzalloc(&spi->dev, sizeof (*dev), GFP_KERNEL);if (!dev)return -ENOMEM;/* AI 生成的代码在这里会自信地填上 SPI 参数 */spi->max_speed_hz = 10000000;/* 10MHz,AI 猜的,没有根据 */spi->mode = SPI_MODE_0;/* MODE_0,也是猜的 */ret = spi_setup(spi);if (ret < 0)return ret;/* 中断处理?AI 根本不知道你的 GPIO 扩展器型号 */dev->irq = spi->irq;/* spi->irq 在你这块板子上是 0,永远触发不了 */return0;}
这段代码能编译,甚至能 insmod 不报错——但它不工作。spi->irq 是 0,因为 AI 不知道你的中断实际上经过了 GPIO 扩展器(比如 PCA9555),DTS 里需要专门声明 interrupt-parent 和 interrupts。
AI 不读你的原理图,不知道你的硬件拓扑。 这个问题无解,除非你告诉它。
DTS 是 BSP 工程师的日常,也是 AI 最容易翻车的地方。
我测试过让 AI 写一个 I2C 温度传感器(LM75A)的 DTS 节点,以及对应的 Linux 驱动绑定。AI 给的结果:
/* AI 生成 */&i2c1{lm75@48{compatible="national,lm75a";reg=<0x48>;/* AI 忘了加这个,但你的板子需要 *//* vs-supply = <®_3v3>; */};};
漏了电源域声明,在有电源管理的系统上,传感器在 suspend/resume 之后挂掉,i2c_transfer 返回 -EIO,你要花几个小时才能定位到这里。
更糟的是,有时 AI 会编造根本不存在的 compatible 字符串。比如 "myvendor,custom-sensor" 这种,写进 DTS 能过编译,内核启动时找不到匹配驱动,设备静默地不工作,没有任何报错。这比崩溃还难定位。
Linux 内核没有稳定的驱动接口——这是官方立场,不是抱怨。
内核从 v5.10 到 v6.10,API 变化量巨大。AI 训练数据有截止日期,它给你写的 request_irq 参数列表可能对应的是旧内核,你用的是新内核,编译直接报错还算好的,运行时行为异常更麻烦。
有研究团队(DRIVEBENCH / AUTODRIVER)专门研究了这个问题:让 LLM 自动迁移跨内核版本的 out-of-tree 驱动,成功率在 74% 左右——这已经是优化过的结果了。换句话说,1/4 的驱动迁移还是要人来收尾。
/* Linux 5.x 写法 */ret = request_irq(irq, handler, IRQF_SHARED, "mydev", dev);/* Linux 6.x 某些场景推荐用 devm 版本 */ret = devm_request_irq(&pdev->dev, irq, handler,IRQF_SHARED, "mydev", dev);/* AI 可能给你混用,也可能给你一个已废弃的接口 */
Buildroot 还好,Makefile + kconfig,AI 尚能应付。
Yocto 就是另一回事了。
一个 Yocto recipe 的 .bb 文件涉及
RDEPENDS/DEPENDS 的区别;do_install 函数;FILES:${PN} 的 split packaging;BBCLASSEXTEND 的用法……我让 AI 写过一个给 RK3568 平台集成 Qt6 的 Yocto recipe,结果:
DEPENDS 写成了 RDEPENDS,导致编译期找不到 Qt6 头文件do_install 里的安装路径用了 ${prefix} 但没有 inherit autotools,变量未定义SRC_URI 的 branch= 和 rev= 同时写了,BitBake 版本不同行为不一样这些 bug 在 Yocto 的构建日志里会给你看几百行错误,要一条一条定位。
AI 对 Yocto 的理解停留在"能写出语法正确的 .bb 文件",距离"能在真实项目里跑通"还差很远。
应用层:AI 的能力上限在哪里
相比 BSP,嵌入式 Linux 应用层和通用 Linux 应用开发更接近,AI 的帮助力度也更大。
守护进程框架
让 AI 生成一个基于 epoll 的事件驱动守护进程框架,非常稳:
// AI 生成的 epoll 骨架,质量相当不错int epfd = epoll_create1(EPOLL_CLOEXEC);if (epfd == -1) {perror("epoll_create1");return-1;}struct epoll_event ev = {.events = EPOLLIN | EPOLLET, /* 边沿触发,减少唤醒次数 */.data.fd = sockfd,};epoll_ctl(epfd, EPOLL_CTL_ADD, sockfd, &ev);/* 主循环 */while (running) {int nfds = epoll_wait(epfd, events, MAX_EVENTS, -1);for (int i = 0; i < nfds; i++) {handle_event(&events[i]);}}
这种代码 AI 写得比很多初级工程师好,注释也到位。
协议解析
Modbus RTU/TCP、MQTT、自定义串口帧格式——这些有明确规范的协议解析,AI 给出的代码准确率相当高,结构也清晰。
systemd service 文件
# AI 生成,直接能用[Unit]Description=My Embedded ApplicationAfter=network.targetWants=network-online.target[Service]Type=notifyExecStart=/usr/bin/myapp --config /etc/myapp/config.jsonRestart=on-failureRestartSec=5sWatchdogSec=30sStandardOutput=journalStandardError=journal[Install]WantedBy=multi-user.target
OTA 升级逻辑
基于 RAUC 或 SWUpdate 的 A/B 分区更新方案,AI 能给出相当靠谱的框架代码和配置思路。
你写用户态代码去操作一个自研驱动,需要知道内核驱动里具体的 ioctl 命令字定义。AI 不知道你驱动里 #define MY_IOCTL_SET_FREQ _IOW('M', 1, uint32_t) 是什么含义,它会给你写出一段"语法正确但命令字对不上"的代码——在运行时返回 ENOTTY 或者更诡异的行为。
坑二:多线程 + 信号处理的边界情况
/* 这段 AI 生成的代码有隐患,你能看出来吗? */staticvolatilesig_atomic_t g_running = 1;staticpthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER;voidsigint_handler(int sig) {pthread_mutex_lock(&g_mutex);/* ← 信号处理函数里锁 mutex,这是 UB */g_running = 0;pthread_mutex_unlock(&g_mutex);}
在信号处理函数里调用非异步信号安全的函数(pthread_mutex_lock 不是),是未定义行为。AI 经常犯这个错误,表现为偶发的死锁,复现概率极低,排查极难。
坑三:实时性要求(PREEMPT_RT)
如果你的应用跑在打了 PREEMPT_RT 补丁的内核上,优先级继承、中断线程化、spinlock 变 sleeping lock——这些细节 AI 基本不懂。它给你的代码在普通内核上跑得好好的,换到 RT 内核上可能死锁。
综合下来,AI 在嵌入式 Linux 开发里的定位应该是这样:
你的工作流──────────────────────────────────────────阶段 1:需求理解 + 架构设计 → 完全靠你,AI 不了解你的硬件约束阶段 2:样板代码生成 → AI 主导,你提供精确上下文 → 告诉 AI:目标内核版本、SoC 型号、具体外设型号阶段 3:代码 Review(关键!) → 逐行对着数据手册和内核文档验证 → 重点检查:中断号、寄存器偏移、API 版本阶段 4:硬件验证 → 示波器、逻辑分析仪、串口日志 → AI 介入不了,物理世界是你的主场阶段 5:调试定位 → GDB + KGDB、ftrace、perf、dmesg → AI 可以辅助分析 crash log,但诊断要靠你给 AI 的 Prompt 质量,决定了生成代码的可用程度。
烂 Prompt:
"帮我写一个 Linux SPI 驱动"
好 Prompt:
"我在 Linux 6.1(PREEMPT_RT)上为 RK3568 写一个 SPI 字符设备驱动,外接的是 Microchip MCP3204 ADC,SPI0,片选 GPIO3_B5,中断无,只需要支持 read() 系统调用,每次读取 4 字节 ADC 值。请使用 devm 系列 API,参考 drivers/spi/ 目录下的驱动风格。"
后者 AI 给出的代码,可用率能从 30% 提升到 70%+。
行业现实:嵌入式 Linux 岗位在消失吗
完全相反。
看看 2025 年真实的市场需求:
最大的变化是:新增了"嵌入式 Linux + AI 推理加速"这个交叉岗位。
RK3588 上的 NPU、高通 SA8255P 的 Hexagon DSP、地平线 J6 的 BPU——这些 AI 加速器都需要工程师写内核驱动、调用 runtime API、做内存对齐和 DMA 优化。这些工作 AI 干不了,市面上能干的人也不多,薪资水涨船高。
一次真实的踩坑经历
之前在做一个工业网关项目,基于 i.MX8M Mini,需要把一颗 RS-485 工业协议芯片通过 SPI 挂到 Linux 上。
我用 AI 生成了初版驱动,编译通过,insmod 成功,/dev/spi-485 节点也出现了。读写第一次能工作,但在高负载下偶发数据错误。
排查了两天,最后发现:AI 生成的代码在 SPI 传输完成后没有等待 CS(片选)释放的 tHold 时间就立刻发起下一帧传输,这个芯片的 datasheet 里写了需要至少 50ns 的 CS 高电平保持时间,AI 完全不知道。
/* AI 生成的代码(有问题) */spi_sync(spi, &msg);/* 直接返回,没有任何延迟 */return0;/* 正确做法 */spi_sync(spi, &msg);ndelay(50); /* tHold:CS 释放后至少 50ns,来自 datasheet Table 3 */return0;
这个 bug 只在特定 SPI 速率和特定数据模式下出现,AI 永远发现不了——因为它没有读你的 datasheet,更没有用示波器量 CS 波形。
一句话总结
AI 能帮你写嵌入式 Linux 代码,但它不能帮你理解那块板子。
理解板子,是嵌入式 Linux 工程师不可替代的核心价值。
BSP 工程师的护城河是:原理图 + 数据手册 + 内核子系统的深度融合。应用层工程师的护城河是:硬件行为 + 系统资源 + 业务约束的全局理解。
学会用 AI 做你的苦力,而不是让 AI 替代你的判断——这才是 2026 年嵌入式 Linux 工程师应该有的姿势。
你用 AI 写嵌入式 Linux 代码踩过什么坑?DTS 写错了?Yocto recipe 编不过?评论区聊聊,没准能救下一个被坑的同行。


