임베디드 개발/리눅스 디바이스 드라이버

VSCode에서 리눅스 커널 모듈 개발시 Intellisense Error 없애기

eteo 2024. 12. 29. 22:18

 

 

Workspace에서 .vscode/c_cpp_properties.json 추가 (Ctrl + Shift + P > Edit Configuration)

 

그리고 커널 모듈 코드 작성시 필요한 매크로와 헤더 경로를 추가해주면 된다.

 

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include",
                "/usr/local/include",
                "/usr/src/linux-headers-5.4.0-150-generic/include",
                "/usr/src/linux-headers-5.4.0-150-generic/include/uapi",
                "/usr/src/linux-headers-5.4.0-150-generic/include/generated/uapi",
                "/usr/src/linux-headers-5.4.0-150-generic/ubuntu/include",
                "/usr/src/linux-headers-5.4.0-150-generic/arch/x86/include",
                "/usr/src/linux-headers-5.4.0-150-generic/arch/x86/include/uapi",
                "/usr/src/linux-headers-5.4.0-150-generic/arch/x86/include/generated",
                "/usr/src/linux-headers-5.4.0-150-generic/arch/x86/include/generated/uapi",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include"
            ],
            "defines": [
                "__KERNEL__",
                "MODULE"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

 

 

 

 

어떤 것을 추가할 지 모르겠다면 커널 빌드 시스템(커널 소스 트리의 최상위 Makefile)이 실제로 사용하는 컴파일 명령어에서 -I(include path)와 -D(define) 옵션을 확인하고 이를 c_cpp_properties.json에 추가하면 된다.

 

 

make 명령에 V=1 옵션을 사용하면 자세한 컴파일 명령어를 출력할 수 있다.

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules V=1

 

-I, -D 옵션만 추출하기

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules V=1 | grep -oE "(-I|-D)[^ ]+"

 

 

 

 

 

 

 

참고 : https://github.com/microsoft/vscode-cpptools/issues/5588#issuecomment-662116156