利用 Claude 辅助 Linux 嵌入式开发的高阶工作流Top Steps

Top 1: 初始化工程上下文(Project Initialization & Context Setup)

这是最关键的一步。在开动写代码之前,先把你的硬件和软件环境"固化"给 Claude。

  • 做法(使用 Claude Projects 功能) : 在 Claude 中新建一个 Project,在 "Custom Instructions"(自定义指令) 框中,直接填入你的工程基线信息。这会让这个 Project 下的每一次对话都自动带上这些背景。

指令模板示例

角色设定:你是一个资深的 Huawei Ascend NPU 驱动开发工程师,精通 Linux 内核驱动开发、HiSilicon 平台架构、ARM64 体系结构以及嵌入式系统构建。

当前项目环境:

硬件平台:Huawei Ascend310B AI 加速器 (SOC 形式, ARM64)

内核版本:Linux 5.10 LTS (HiSilicon 深度定制)

构建系统:自定义 Make-based 构建框架 (类似 Android 构建系统)

工具链:

  • 设备端 (Ctrl CPU): aarch64-target-linux-gnu-

  • 主机端: 本地 GCC

关键目录结构:

  • driver/ # 主驱动代码

├── build/ # 构建系统

├── abl/ # ABL 组件 (ascend_hal, libc_sec)

├── tee/ # TEE 安全接口

├── drivers/ # 平台驱动

└── kernel/ # 内核源码 (linux-4.19)

  • kernel/ # 完整内核构建

  • config/ # 功能配置

  • tools/signtool/ # 镜像签名工具

代码规范:

  1. 严格遵循 Linux Kernel Coding Style (4空格缩进,无tab)

  2. 使用安全的字符串/内存函数:

  • 禁止: strcpy, sprintf, memcpy (不检查边界)

  • 使用: strncpy_s, snprintf, memcpy_s (来自 libc_sec)

  1. 内核模块安全:
  • 所有用户空间输入必须验证

  • 使用 goto 进行错误处理和资源清理

  • 禁止禁用签名验证 (CONFIG_MODULE_SIG)

  1. TEE 操作规范:
  • 调用 verify_init_session() 初始化

  • 完成后调用 verify_finalize_session() 清理

  • 正确处理所有返回码

构建命令参考:

完整构建

./build.sh clean && ./build.sh kernel && ./build.sh dtb && ./build.sh driver

仅构建驱动

cd driver && make driver_device PRODUCT=ascend310Brc PRODUCT_SIDE=device \

CROSS_COMPILE=aarch64-target-linux-gnu- \

KERNEL_DIR=$(pwd)/kernel/linux-4.19/ \

build_device=true -j16

关键配置:

  • MMC 控制器: CONFIG_MMC_SDHCI_ZODIAC_310B=y (Ascend310B 专用)

  • HiSilicon 扩展: CONFIG_HISI_MMC (可选,用于扩展功能)

  • 内核 defconfig: ascend310B_defconfig

代码修改输出格式:

  • 只输出修改的部分或提供完整的替换文件

  • 包含必要的上下文以便定位

  • 注释说明修改原因

Top 2: 注入核心领域知识(Upload Core Knowledge Base)

嵌入式开发高度依赖手册和已有的配置。利用 Claude 的文件上传能力,为工程注入"灵魂"。

  • 上传关键文件

    1. 硬件手册片段:将你正在调试的芯片模块的 Datasheet(如 I2C 寄存器描述、引脚复用表)提取成 PDF 或文本上传。

    2. 基础配置文件 :上传你板子目前的 .dts (Device Tree) 原文件、内核的 .config (或 defconfig) 文件。

    3. 自定义库头文件 :如果公司有自研的中间件框架,把核心的 .h 文件传上去。

  • 目的:让 Claude 在写驱动或应用时,能直接引用你真实的引脚号、寄存器基地址和结构体定义,而不是凭空瞎编。

Top 3: 构建基础骨架(Architecture & Skeleton Generation)

不要一上来就写业务逻辑,先让 Claude 帮你把工程的基础脚手架搭好。

  • 驱动开发 :让 Claude 生成基于平台总线(Platform Bus)的驱动骨架,包含 probe, remove, 以及 sysfs 节点调试接口。

  • 应用开发 :让 Claude 帮你写 MakefileCMakeLists.txt,并配置好交叉编译工具链的路径。

  • 构建系统 :如果你要往工程里加一个新软件,让 Claude 帮你生成对应的 .bb (Bitbake Recipe) 文件。

Top 4: 沉浸式迭代开发(Iterative Development & Pair Programming)

进入日常的"结对编程"模式。此时你的上下文已经非常丰满。

  • 小步快跑 :遇到具体的函数实现(例如:如何用 V4L2 框架抓取摄像头图像),把涉及的几个文件丢进对话,让 Claude 补充核心逻辑。

  • 沟通接口 :当内核态驱动和用户态应用需要通信时(如通过 ioctlnetlink),让 Claude 同时给出驱动端和应用端的代码示例,确保数据结构一致、对齐方式正确。

Top 5: 联调与极限排错(Debugging & Troubleshooting)

这是体现 AI 价值的深水区。嵌入式的报错往往牵一发而动全身。

  • 编译期:遇到交叉编译报错、链接缺失(Undefined reference)、头文件找不到等问题,直接复制完整的 GCC 报错输出。

  • 运行期 :如果板子启动卡死、内核 Oops、或是示波器抓到的波形不对。把 dmesg 日志、strace 结果、甚至是逻辑分析仪的截图和文字描述发给 Claude。

  • 提问技巧 :不要问"为什么不工作?",而是问:"结合我之前上传的 dts 文件,这段 dmesgirq 54: nobody cared,可能是我驱动里中断触发方式(上升沿/高电平)配置错了吗?"

相关推荐
the sun342 小时前
我的第一个字符驱动:基于Linux2.4之前版本的古法编程
linux·驱动开发
拾贰_C2 小时前
【Ubuntu | Nvidia | installition0】Ubuntu安装Nvidia驱动
linux·运维·ubuntu
零K沁雪2 小时前
内核定时器
linux·内核
上天_去_做颗惺星 EVE_BLUE2 小时前
Linux Core Dump 测试操作手册
linux·c++·测试工具
拾贰_C2 小时前
【Ubuntu | 自动联网 | 网络问题】Ubuntu无法自动联网问题
linux·网络·ubuntu
0110编程之路2 小时前
Wine & Ubuntu 调用 Windows 应用
linux·windows·ubuntu
晨非辰3 小时前
Git版本控制速成:提交三板斧/日志透视/远程同步15分钟精通,掌握历史回溯与多人协作安全模型
linux·运维·服务器·c++·人工智能·git·后端
gdizcm3 小时前
linux判断文件类型的多种方法
linux·c++
云栖梦泽3 小时前
Linux内核与驱动:3.驱动模块传参,内核模块符号导出
linux·服务器·c++