🔖

カーネルビルド

2022/09/29に公開

カーネルビルド

カーネルコンパイル

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関係全部

・カーネルビルド

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