我有一些关于 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?
欢迎所有帮助,谢谢:)