VS Code でカーネルのコードを書くときの設定
code:c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/include",
"${workspaceFolder}/arch/arm/include",
"${workspaceFolder}/arch/arm/include/generated"
],
"defines": [
"__GNUC__",
"__KERNEL__",
"KBUILD_MODNAME=\"foo\""
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-arm64",
"forcedInclude": [
"${workspaceFolder}/include/generated/autoconf.h",
]
}
],
"version": 4
}
画面右下の鐘の左にある構成名をクリックすると設定が開ける
includePath でアーキテクチャ依存/非依存両方のヘッダを include
ISA 依存マクロが入ると writel などの機械語に近いマクロの定義ジャンプが正確になる
forcedInclude で、config の設定値から生成された autoconf.h を include
defines で、autoconf.h にない必須の define を設定
KBUILD_MODNAME はモジュールのコンパイル時に make が動的に設定していて静的に知ることができないので適当な値を指定
includePath, defines, forcedInclude 以外は標準設定
Kernelのソースは1ライン80文字までなので、下記設定をワークスペースフォルダの.vscodeにsettings.jsonを作成して設定する
code: settings.json
{
"editor.rulers": [
80
]
}
clang-formatの設定ファイル(.clang-format)が用意されているため、ショートカット(デフォルトCtrl + Shift + I)または、コマンドパレット(Ctrl + Shift + P)からFormat Documentでフォーマッターを実行できる (要 clang-formatインストール)