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/ # 镜像签名工具
代码规范:
-
严格遵循 Linux Kernel Coding Style (4空格缩进,无tab)
-
使用安全的字符串/内存函数:
-
禁止: strcpy, sprintf, memcpy (不检查边界)
-
使用: strncpy_s, snprintf, memcpy_s (来自 libc_sec)
- 内核模块安全:
-
所有用户空间输入必须验证
-
使用 goto 进行错误处理和资源清理
-
禁止禁用签名验证 (CONFIG_MODULE_SIG)
- 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 的文件上传能力,为工程注入"灵魂"。
-
上传关键文件:
-
硬件手册片段:将你正在调试的芯片模块的 Datasheet(如 I2C 寄存器描述、引脚复用表)提取成 PDF 或文本上传。
-
基础配置文件 :上传你板子目前的
.dts(Device Tree) 原文件、内核的.config(或defconfig) 文件。 -
自定义库头文件 :如果公司有自研的中间件框架,把核心的
.h文件传上去。
-
-
目的:让 Claude 在写驱动或应用时,能直接引用你真实的引脚号、寄存器基地址和结构体定义,而不是凭空瞎编。
Top 3: 构建基础骨架(Architecture & Skeleton Generation)
不要一上来就写业务逻辑,先让 Claude 帮你把工程的基础脚手架搭好。
-
驱动开发 :让 Claude 生成基于平台总线(Platform Bus)的驱动骨架,包含
probe,remove, 以及sysfs节点调试接口。 -
应用开发 :让 Claude 帮你写
Makefile或CMakeLists.txt,并配置好交叉编译工具链的路径。 -
构建系统 :如果你要往工程里加一个新软件,让 Claude 帮你生成对应的
.bb(Bitbake Recipe) 文件。
Top 4: 沉浸式迭代开发(Iterative Development & Pair Programming)
进入日常的"结对编程"模式。此时你的上下文已经非常丰满。
-
小步快跑 :遇到具体的函数实现(例如:如何用
V4L2框架抓取摄像头图像),把涉及的几个文件丢进对话,让 Claude 补充核心逻辑。 -
沟通接口 :当内核态驱动和用户态应用需要通信时(如通过
ioctl或netlink),让 Claude 同时给出驱动端和应用端的代码示例,确保数据结构一致、对齐方式正确。
Top 5: 联调与极限排错(Debugging & Troubleshooting)
这是体现 AI 价值的深水区。嵌入式的报错往往牵一发而动全身。
-
编译期:遇到交叉编译报错、链接缺失(Undefined reference)、头文件找不到等问题,直接复制完整的 GCC 报错输出。
-
运行期 :如果板子启动卡死、内核 Oops、或是示波器抓到的波形不对。把
dmesg日志、strace结果、甚至是逻辑分析仪的截图和文字描述发给 Claude。 -
提问技巧 :不要问"为什么不工作?",而是问:"结合我之前上传的 dts 文件,这段
dmesg报irq 54: nobody cared,可能是我驱动里中断触发方式(上升沿/高电平)配置错了吗?"