🔖
カーネルビルド
カーネルビルド
カーネルコンパイル
sudo apt install gcc make flex bison libncurses5-dev libelf-dev pkg-config libssl-dev
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.10.6.tar.gz
tar xzvf linux-6.10.6.tar.gz
・.config作成 さまざまな方法があるが、これがおすすめ
現在のディストリビューションを引き継いで、コンフィグをコンパクトにする
lsmod > /tmp/lsmod.now
make LSMOD=/tmp/lsmod.now localmodconfig
・.configカスタマイズ
sudo make menuconfig config設定
.config無効にしている設定
CONFIG_FTRACE=n
CONFIG_IA32_EMULATION=n
CONFIG_RELOCATABLE=n
CONFIG_MODVERSIONS=n
CONFIG_AUDIT=n
CONFIG_SECURITY_DMESG_RESTRICT=n
CONFIG_SYSTEM_REVOCATION_KEYS=""
KEYRING関係全部
CONFIG_PERSISTENT_KEYRINGS=n
CONFIG_TRUSTED_KEYS=n
CONFIG_SYSTEM_TRUSTED_KEYRING=n
CONFIG_SECONDARY_TRUSTED_KEYRING=n
・カーネルビルド
sudo make -j `nproc`
sudo make modules_install
sudo make install
必ずsudo make moduels_installすること!
/lib/modules/バージョン/kernel/以下にドライバインストールされる。
modulesのバージョンが合っていないとUUID dose not existになる。
・ログを残す
sudo make -j `nproc` V=1 2>&1 |tee make.log
・有効なコンフィグ数確認
egrep -v "(^#|^$)" .config | wc -l
・デバッグ情報追加 マクロ展開(info macro)を可能にする
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
KBUILD_CFLAGS += -O2 -g3
KBUILD_RUSTFLAGS += -Copt-level=2
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os
KBUILD_RUSTFLAGS += -Copt-level=s
endif
・プリプロセッサ出力を残す。 source.iファイルが作成される。
KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
-Werror=implicit-function-declaration -Werror=implicit-int \
-Werror=return-type -Wno-format-security \
-std=gnu11
KBUILD_CFLAGS += -save-temps=obj
・インストールしたカーネルを削除する
sudo rm /boot/{config-,initrd.img-,System.map-,vmlinuz-}`uname -r`
sudo rm -rf /lib/modules/`uname -r`
sudo update-grub
reboot
*make installでSSL errorが表示されたとき、.configを元に戻す。
CONFIG_MODULE_SIG_KEYは削除してはダメだった。
.config
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_SYSTEM_REVOCATION_KEYS=""
CONFIG_DEBUG_INFO_BTF=n
Discussion