如何在没有错误检测的情况下使用 vscode 开发 Linux 内核模块
How to develop Linux Kernel Module with vscode without incorrect error detection
我正在尝试在 Ubuntu 上使用 vscode 开发一个 Linux 内核模块,但是 vscode 会抛出很多关于 Linux 系统的错误头文件,内核宏等(即使它只是一个几乎空的驱动程序......)
有人可以帮我配置 vscode 以消除这些错误吗?
下面是我的配置和错误截图。
//c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}",
"/usr/src/linux-headers-4.15.0-65/include"
],
"defines": [
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c99",
"cppStandard": "c++14",
"browse": {
"path": [
"${workspaceFolder}",
"/usr/src/linux-headers-4.15.0-65/include"
],
"limitSymbolsToIncludedHeaders": true
},
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
//settings.json
{
"files.associations": {
"init.h": "c",
"module.h": "c",
"workqueue.h": "c",
"list.h": "c",
"types.h": "c",
"posix_types.h": "c"
},
"C_Cpp.errorSquiggles": "Enabled",
"clang.cflags": [
"-std=c99",
"-I/usr/src/linux-headers-4.15.0-65/include",
"-DMODULE",
]
}
我正在使用 Visual Studio 代码在 CentOS 上开发内核模块。这是我的 c_cpp_properties.json
的片段。我知道这是我的内核版本和 linux 发行版的特殊情况,但也许它会为您指明正确的方向。我相信我也下载了完整的内核源代码和调试。
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include",
"/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include",
"/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/include",
"/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/arch/x86/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
这里有一些关于(我的想法)的更多信息:
/usr/include
C 编译器的头文件。
/usr/local/include
第三方程序的头文件。
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include
GCC 的头文件。
/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/include
您正在使用的特定内核版本的头文件。确保安装了内核开发包。
/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/arch/x86/include
我很确定这里是内核的体系结构特定头文件。
这为我的设置提供了一个免费的错误(和波浪线)vscode。
将以下内容添加到您的c_cpp_properties.json
:
"defines": [
"__GNUC__",
"__KERNEL__"
],
一旦我还整理了我的包含路径,这对我来说就成功了。我的看起来如下:
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include",
"/usr/src/linux-headers-4.15.0-88/include",
"/usr/src/linux-headers-4.15.0-88-generic/include",
"/usr/src/linux-headers-4.15.0-88/arch/x86/include",
"/usr/lib/gcc/x86_64-linux-gnu/7.4.0/include"
],
我正在尝试在 Ubuntu 上使用 vscode 开发一个 Linux 内核模块,但是 vscode 会抛出很多关于 Linux 系统的错误头文件,内核宏等(即使它只是一个几乎空的驱动程序......)
有人可以帮我配置 vscode 以消除这些错误吗?
下面是我的配置和错误截图。
//c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}",
"/usr/src/linux-headers-4.15.0-65/include"
],
"defines": [
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c99",
"cppStandard": "c++14",
"browse": {
"path": [
"${workspaceFolder}",
"/usr/src/linux-headers-4.15.0-65/include"
],
"limitSymbolsToIncludedHeaders": true
},
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
//settings.json
{
"files.associations": {
"init.h": "c",
"module.h": "c",
"workqueue.h": "c",
"list.h": "c",
"types.h": "c",
"posix_types.h": "c"
},
"C_Cpp.errorSquiggles": "Enabled",
"clang.cflags": [
"-std=c99",
"-I/usr/src/linux-headers-4.15.0-65/include",
"-DMODULE",
]
}
我正在使用 Visual Studio 代码在 CentOS 上开发内核模块。这是我的 c_cpp_properties.json
的片段。我知道这是我的内核版本和 linux 发行版的特殊情况,但也许它会为您指明正确的方向。我相信我也下载了完整的内核源代码和调试。
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include",
"/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include",
"/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/include",
"/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/arch/x86/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
这里有一些关于(我的想法)的更多信息:
/usr/include
C 编译器的头文件。
/usr/local/include
第三方程序的头文件。
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include
GCC 的头文件。
/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/include
您正在使用的特定内核版本的头文件。确保安装了内核开发包。
/usr/src/kernels/3.10.0-1062.1.1.el7.x86_64/arch/x86/include
我很确定这里是内核的体系结构特定头文件。
这为我的设置提供了一个免费的错误(和波浪线)vscode。
将以下内容添加到您的c_cpp_properties.json
:
"defines": [
"__GNUC__",
"__KERNEL__"
],
一旦我还整理了我的包含路径,这对我来说就成功了。我的看起来如下:
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/local/include",
"/usr/src/linux-headers-4.15.0-88/include",
"/usr/src/linux-headers-4.15.0-88-generic/include",
"/usr/src/linux-headers-4.15.0-88/arch/x86/include",
"/usr/lib/gcc/x86_64-linux-gnu/7.4.0/include"
],