0

我有一些关于 Linux 内核驱动程序的代码。我使用Bear make来生成 compile_commands.json。

这是我的一些 compile_commands.json:

"directory": "/usr/src/linux-headers-5.4.0-90-generic",
"file": "../../../home/ubuntu/programs/linuxKLearn/2/2.1/PrintingDriver/DriverFileOperations.c"

这是我的 Makefile:

ifneq ($(KERNELRELEASE),)
    obj-m := PrintModule.o
    PrintModule-objs := DriverMain.o DriverFileOperations.o
EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    rm *.order *.symvers *.mod.c *.o .*.o.cmd .*.cmd .tmp_versions -rf
endif

但是当我用vscode和clangd读取它们时,clangd显示包含<linux/mm.h>时出现了一些问题,问题如下:

Unknown argument: '-mno-fp-ret-in-387'
Unknown argument: '-mpreferred-stack-boundary=3'
Unknown argument: '-mskip-rax-setup'
Unknown argument: '-mindirect-branch=thunk-extern'
Unknown argument: '-mindirect-branch-register'
......

而且clangd找不到ssize_t。未知类型名称 'ssize_t'clang(unknown_typename) .inode 也有警告'struct inode' 声明将在此函数之外不可见clang(-Wvisibility)

如何修复包含 <linux/mm.h> 并找到 ssize_t?

欢迎所有帮助,谢谢:)

4

0 回答 0