Ensure the kernel is built (at least, all *.cmd files should be generated):
$ make defconfig
$ make
Clone this repository as ".vscode":
$ git clone [email protected]:amezin/vscode-linux-kernel.git .vscode
Generate compile_commands.json:
$ python .vscode/generate_compdb.py
If you are not compiling kernel for x64, change intelliSenseMode in
c_cpp_properties.json. Possible values as of vscode-cpptools 1.0.1:
gcc-x86gcc-x64gcc-armgcc-arm64
Open the project:
$ code .
Kernel can be built with separate output directory:
$ make O=../linux-build defconfig
$ make O=../linux-build
In this case, you should pass the directory to generate_compdb.py:
$ python .vscode/generate_compdb.py -O ../linux-build
compile_commands.json will still be generated in the current directory (root of the linux repository).
Unfortunately, tasks.json will not work out of the box in this configuration (TODO).
If you build your module with this command:
$ make -C $KDIR M=$PWD modules
You could generate compile_commands.json with:
$ python .vscode/generate_compdb.py -O $KDIR $PWD
Example: https://github.com/amezin/nzxt-rgb-fan-controller-dkms