LeavaTailの日記

LeavaTailの日記

Linuxエンジニアを目指した技術者の備忘録

KUnitフレームワークによるLinuxカーネルのテスト実施方法

概要 はじめに 実験環境 準備 コンフィグファイルの生成 カーネルのビルド テスト実行 おわりに 変更履歴 参考文献 概要 本記事では、kunit_toolを使用して、既存のKUnitテストをQEMU(armアーキテクチャ)で実行する手順について確認する。 はじめに KUnitは…

Linuxカーネルのファイルアクセスの処理を追いかける (11) ext2: write_inode

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

kcovによるカーネルのソースコードカバレッジの分析

概要 はじめに 実験環境 使用方法 kcovによるコードカバレッジの確認 syzkallerによるコードカバレッジの確認 Go実行環境のインストール buildrootによるrootfsの生成 Linux Kernelのビルド rootfsのカスタマイズ syzkallerのビルド syzkallerを実行する お…

Linuxカーネルのファイルアクセスの処理を追いかける (10) ext2: writepages

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

xfstests-bld で ファイルシステムのテストを実行する

概要 はじめに 実験環境 準備 Qemu/kvmのインストール 使用するファイルのダウンロード 仮想マシン用のLinuxカーネルの準備 xfstests-bldのセットアップ xfstests-bldのインストール xfstests-bldの実行 スモークテストの実行 シェルの起動 実施するテストの…

Linuxカーネルのファイルアクセスの処理を追いかける (9) writeback

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

Visual Studio Code で Linuxカーネルのコードリーディング

概要 はじめに 環境 VSCode のインストール Remote Development のインストール リモートマシンに公開鍵を追加する リモートマシンのVSCodeに拡張機能をインストールする インテリセンスを設定する VSCode でソースコードを確認する 関数定義を参照する 関数…

Linuxカーネルのファイルアクセスの処理を追いかける (8) work Queue

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

Ubuntu-base-20.04 を QEMU から NFSRootで起動する

概要 はじめに 実行環境 手順 起動確認 補足 おわりに 変更履歴 参考 概要 QEMUでエミュレートした armhfプロセッサ に Linuxを起動させ 、Ubuntu-base-20.04イメージをNFS mountする。 はじめに Ubuntu baseは、最低限のUbuntuのrootfsである。 そのため、L…

Linuxカーネルのファイルアクセスの処理を追いかける (7) write_end

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

様々なSDカードの読み込み/書き込み性能の実測値を計測する

概要 はじめに 目的 実行環境 計測方法 実験結果 ファイルシステムによるオーバーヘッド SDカードの違い ブロックサイズの違い UHS-II 非対応によるオーバーヘッド 並列処理によるオーバーヘッド 結論 おわりに 変更履歴 参考 補足 概要 SDカードには規格が…

Linuxカーネルのファイルアクセスの処理を追いかける (6) get_block

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

Raspberry Pi 4 Model B (64-bit版 Raspberry Pi OS) で dm-integrity のオーバーヘッドを計測する

概要 はじめに 目的 dm-integrity とは なぜ64-bit版 のOSで試すのか 実行環境 測定方法 性能計測 おわりに 変更履歴 参考 付録 カーネルコンフィグ 環境構築 Device mapperを使用しない場合 dm-verityを使用する場合 dm-integrityのみ使用する場合 dm-integ…

Linuxカーネルのファイルアクセスの処理を追いかける (5) write_begin

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

Raspberry Pi 4 Model B で fs-verity と dm-verity のオーバーヘッドを計測する

概要 はじめに fs-verity とは dm-verity とは 実行環境 実験 fs-verityの準備 dm-verityの準備 性能計測 fs-verityの計測 dm-verityの計測 おわりに 付録: fs-verity有効化でファイルを更新してみる 付録: dm-verityで署名機能を利用してみる 変更履歴 参考…

Linuxカーネルのファイルアクセスの処理を追いかける (4) write_iter

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

Raspberry Pi 4 Model B をネットワークブートで起動させる

関連記事 Raspberry Pi 3Bの場合は こちら Raspberry Pi 3B (U-Boot)の場合は こちら 概要 はじめに 実行環境 構築手順 ネットワークブートへの対応 カーネルをビルド ルートファイルシステムの更新 実行結果 おわりに 変更履歴 参考 概要 Raspberry Pi 4 Mo…

Linuxカーネルのファイルアクセスの処理を追いかける (3) VFS

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

QEMUでARM用Linuxカーネルを起動する

関連記事 x86_64の場合は こちら ARM64の場合は こちら 概要 はじめに initramfs とは 環境構成 ARM用のLinuxを構築する ARM用のinitramfsを構築する U-Bootからカーネルをロードする 作成ファイル置き場 おわりに FAQ 変更履歴 参考 概要 x86_64の開発PCで…

Linuxカーネルのファイルアクセスの処理を追いかける (2) System call

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

GitHub ActionsでChangeLogからReleasesを自動化する

概要 はじめに 自動化のための作業 ChangeLogから変更内容を取得するスクリプトの作成 Releases 機能を自動的に設定するworkflowの作成 実行例 おわりに 変更履歴 参考 概要 本記事では、GitHub ActionsでReleasesを生成する手順を確認した。 Repositoryにあ…

Linuxカーネルのファイルアクセスの処理を追いかける (1) 環境セットアップ

関連記事 Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin Part 6: ext2 (3) get_block Part 7: ext2 (4) write_end Part 8: writeback (1) work Queue Part 9: writeback (…

help2man でmanページを自動生成する

概要 はじめに 準備 help2man とは manページを生成する automakeにhelp2manを組み込む おわりに 変更履歴 概要 automakeから、help2manによるmanページを生成する手順を確認した。 はじめに Linuxではmanコマンドによる利用者にオンラインマニュアルを提供…

GitHub Actionsで既存リポジトリのテストを自動化する

概要 はじめに 準備 テストスクリプトの作成 GitHub Actionsとの連携 おわりに 変更履歴 参考 概要 既存のソフトウェアに対して、GitHub Actionによるテストの自動化を導入する。 はじめに GitHubではパブリックリポジトリであれば GitHub Actions という機…

AutotoolsでMakefileを自動生成する

概要 はじめに 準備 手順 CプログラムのソースコードをビルドできるMakefileの生成 マニュアルページをインストールできるMakefileを生成 gettextでローカライズが可能なMakefileを生成 補足 手順の効率化 OSSライセンスについて おわりに 変更履歴 参考 概…

QEMUでx86_64用Linuxカーネルを起動する

関連記事 ARMの場合は こちら ARM64の場合は こちら 概要 はじめに 環境構成 クロスコンパイラ環境の構築手順 ルートファイルシステムの構築 カーネルの起動 おわりに 変更履歴 参考 概要 x86_64用にLinuxカーネルをビルド、BuildRootで構築したルートファイ…

Raspberry Pi 3 Model B をネットワークブートで起動させる (U-Boot編)

関連記事 Raspberry Pi 3Bの場合は こちら Raspberry Pi 4Bの場合は こちら 概要 はじめに 各手法における特徴 実行環境 目標とする環境 Raspberry Pi 3Bの設定 システム構成パラメータの更新 U-Bootの構築 ネットワークブートサーバの設定 ブートイメージの…

Raspberry Pi 3 Model B をネットワークブートで起動させる

関連記事 Raspberry Pi 3B (U-Boot)の場合は こちら Raspberry Pi 4Bの場合は こちら 概要 はじめに Raspberry Pi 3Bについて 実行環境 Raspberry Pi 3Bの初期セットアップ ネットワークブートサーバの設定 ブートイメージとルートファイルシステムの取得 DH…

組込みLinuxディストリビューションを構築する(Yocto編)

関連記事 BuildRootの場合は こちら 概要 はじめに Yoctoについて 環境構成 実行環境の準備 システム構築のためのセットアップ Yoctoによるビルド実行 最小システムのビルドと起動 デスクトップ環境を構築する ツールチェインの生成 ツールチェインの利用 お…

組込みLinuxディストリビューションを構築する(BuildRoot編)

関連記事 Yoctoの場合は こちら 概要 はじめに 環境構成 依存パッケージ システム構築の手順 Linuxの起動 ツールチェインの取得 おわりに 変更履歴 参考 概要 BuildRootでARM64用のLinuxディストリビューション一式 (Linuxカーネル、U-Boot、ルートファイル…