今天,在使用内核模块的方法给内核添加一个系统调用时,发现在#include<linux/init.h>和其他一些头文件时报错,显示着无法打开源文件。

在网上搜索了许多教程,但感觉教的都很乱,于是我自己按照IDE(也就是VSCode)上的报错提示来尝试改错,发现终于不报错了。

解决方法如下:

1.我先举个例子,假如我们要#include<linux/init.h>,发现了没,文件名字就是init.h,而且是在linux文件夹里面的。

2.然后,我们去终端里面查找这个文件的路径,输入下面的命令:

sudo find / -name init.h

你们要找什么源文件,就把init.h替换成目标源文件,我这里只是举个例子。sudo的意思是用管理员身份,/即指在根目录下查找,即在整个linux系统上查找这个文件,有关这个Shell的命令使用,你们可以去搜其他博客的教程。

3.按下enter键,终端上会列出一系列的init.h,不要以为只有一个文件夹有init.h。那我们该如何选择呢?很简单,既然不知道我们到底要使用哪个init.h,那我们就全都导入。该怎么全部导入呢?我们已经知道,init.h是在linux文件夹下面的,所以我们找到在linux下的init.h,找出它们大多数的共同点,发现大多数都是在/usr/src/linux-headers-5.19.0-21/include目录下的,所以我们要复制这个目录。(选择路径,然后右键复制)

4.然后在c_cpp_properties.json文件下的includePath下面加上 "/usr/src/linux-headers-5.19.0-21/include/**",这就代表着导入这个目录下的全部内容。

 5.按照上面的做后,发现不报错了。当然也有可能会继续报错,因为导入的源文件可能会依赖其它源文件,所以我们继续重复上面的过程就好了。(提示会告诉我们需要哪个源文件的)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐