嵌入式 Linux 驱动开发项目创建与Vscode环境配置小白指南_适配韦东山老师课程
1. 准备工作:创建项目文件
废话篇(可以略过~):韦东山老师课程当中惯用了Souceinsight来进行查看代码,这里提供使用vscode来进行查看代码的功能,因为vscode功能扩展强大,不仅可以自己看还可以让身边的好朋友一起看,哈哈哈哈我说的是可以用codex,或者其它强大的ai辅助,这一点是vscode优势。
开始正题(韦东山老师的教程也给在后面了),然而本博客教程更简单操作😊👌
首先,在你的 Ubuntu 工作目录下创建一个新的驱动项目文件夹(例如char)。



-
编写源代码:这里创建 chardevbase.c,编写基础的字符设备驱动代码,在vscode当中打开文件夹

-
这里需要保存工作空间

-
编写 Makefile:这是 bear 工具生成索引的前提。内容示例如下(注意修改 KERN_DIR 为你的 SDK 路径):

创建一个可编译的Makefile文件,记录路径:
# 路径修改为你的内核源码绝对路径
KERN_DIR = /home/book/100ask_imx6ull-sdk/Linux-4.9.88
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
obj-m += chardevbase.o
# 这里无比需要修改成和自己.c文件的名字一样,这里是编译出来对应.c文件的.o文件
2. 生成并修正编译数据库 (compile_commands.json)
这是实现 VS Code 代码自动补全和跳转的核心文件。
-
生成文件:在项目目录下打开终端,执行以下命令:
codeBashmake clean bear make此时目录下会生成 compile_commands.json。这里根据Makefile执行好了bear make指令

-
回到Vscode可以看到这个compile_commands.json
-
修正编译器 (CC) 路径:
使用 VS Code 打开该文件,按下 Ctrl + H:-
查找:"cc"
-
替换为:"arm-buildroot-linux-gnueabihf-gcc"
-
点击“全部替换”,这一步很关键我自己之前就漏了这个cc是Ubuntu 自带的 x86 编译器这里需要改成arm架构的linux环境下的编译器

-
-
修正头文件相对路径:
继续按下 Ctrl + H(这是解决跳转失败的关键):-
查找:"-I./
-
替换为:"-I/home/book/100ask_imx6ull-sdk/Linux-4.9.88/(填入内核源码绝对路径)

-
点击“全部替换”。
-
3. 消除插件报错:配置 .clangd 文件
这一步需要先下载插件ctrl +shift+x可以快捷键打开扩展
这是一个非常好用的工具可以连接当前的工作环境和Linux源码下的文件
由于内核包含很多 clangd 无法识别的 GCC 参数,会导致大量标红。
-
在项目目录下新建一个名为 .clangd 的文件(注意点开头)。

-
输入以下配置:
codeYaml
CompileFlags:
Remove: [
-mapcs,
-mno-sched-prolog,
-fno-ipa-sra,
-mno-thumb-interwork,
-fno-var-tracking-assignments,
-fconserve-stack,
-mabi=*,
-marm,
-fno-if-conversion,
-mthumb-interwork
]
4. VS Code 工作区配置
为了能跨文件夹跳转到内核源码,必须将内核文件夹加入工作区。
-
添加文件夹:点击 VS Code 菜单 文件 (File) -> 将文件夹添加到工作区 (Add Folder to Workspace...)。
-
选择内核:选择你的内核源码根目录(Linux-4.9.88)。

5. 配置 clangd 插件设置
告诉 clangd 交叉编译器的位置,以获取标准头文件。
-
进入 VS Code 设置 (Ctrl + ,)。
-
搜索 clangd.arguments。
-
添加一项内容(根据你的交叉编译器实际路径填写):
--query-driver=/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc -

6. 重启服务与验证
完成上述步骤后,必须重启语言服务。
-
重启命令:按下 Ctrl + Shift + P,输入并选择 clangd: Restart language server。
-
观察状态栏:
-
底部显示 clangd: indexing... 说明正在扫描代码。
-
显示 clangd: idle 说明索引完成。

-
-
跳转验证:
-
打开 chardevbase.c。
-
#include <linux/module.h> 不再标红。
-
按住 Ctrl 点击 module_init,应能瞬间跳转到内核源码的 include/linux/module.h 文件中。
到这一步就恭喜你成功了!夸一夸自己吧!我真棒!哈哈哈哈哈哈哈
-
韦东山老师教程原网站:在Ubuntu中搭建嵌入式Linux开发环境_悦己之作,方能悦人的技术博客_51CTO博客
💡 总结一下常见报错
| 现象 | 原因 | 解决方法 |
| include 标红 | 编译器路径或头文件路径不对 | 检查 json 文件中 cc 是否换成交叉编译器,-I./ 是否换成绝对路径 |
| 跳转没反应 | 内核没加入工作区 | Add Folder to Workspace 加入内核源码目录 |
| 大量 Unknown argument 报错 | .clangd 文件未生效 | 确保文件名为 .clangd(不能有后缀),且在驱动项目根目录 |
| 状态栏无 clangd 显示 | 插件没装在远程 | 在扩展商店点击“在 SSH 中安装” |
更多推荐
所有评论(0)