LeavaTailの日記

LeavaTailの日記

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

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カードの読み込み/書き込み性能を fio の測定結果から比較する

概要 はじめに 目的 実行環境 計測方法 実験結果 ファイルシステムによるオーバーヘッド 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、ルートファイル…

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

関連記事 x86_64の場合は こちら ARMの場合は こちら 概要 はじめに 環境構成 クロスコンパイル環境の構築 QEMUでカーネルを起動させる initramfsを用意する おわりに 変更履歴 参考 概要 x86_64の開発PCでARM64用にLinuxカーネルをビルド、busyboxで簡易ini…

Raspberry Pi 3 Model Bとシリアル通信で接続する

概要 はじめに 必要なもの 接続方法 おわりに 変更履歴 参考 概要 FTDI USBシリアル変換ケーブルとRaspberry Pi 3 Model Bを接続し、screenコマンドでコンソールが表示されることが確認できた。 はじめに Raspberry Piを使って何か開発をしようとしたときに…

Travis CIでdotfilesのテストを自動化する

概要 はじめに dotfilesの構成 テスト環境 テスト項目 設定ファイルのデプロイに成功している 設定ファイルが正しい場所に展開されている vimプラグインのインストールが成功している tmuxプラグインのインストールが成功している CIサービスとの連携 おわり…

Vimの導入プラグインを見直す

概要 はじめに 見直し前の環境 プラグインマネージャ カラースキーム LSP 検索 表示 プラグイン削除 Vimの標準コマンドで代用できるプラグインの削除 最近あまり使用していなかったプラグインの削除 見直し後の環境 おわりに 変更履歴 参考 概要 deinプラグ…

trace-cmdでカーネルの関数のコールフローを取得する

概要 はじめに 準備 内部ネットワークの構築 ftraceの設定 trace-cmdのインストール トレースの取得 コマンドのトレースを取得する プロセスのトレースを取得する イベントのトレースを取得する おわりに 変更履歴 参考 概要 trace-cmdは、Linuxカーネルの機…

Linuxカーネルのビルドの一部最適化を無効化する

関連記事 VirtualBox上にカーネルデバッグ環境の構築 Linuxカーネル(一部)の最適化オプションの無効討 概要 はじめに 現状の問題点 ファイル単位で最適化を無効化する 関数単位で最適化を無効化する おわりに 変更履歴 参考 補足 マシン命令に変換してレジス…

VirtualBox上の仮想マシン同士でkgdbを使ってカーネルをデバッグする

関連記事 VirtualBox上にカーネルデバッグ環境の構築 Linuxカーネルの最適化オプションの無効化検討 概要 はじめに 目標 環境の構築 VirtualBoxのインストール Vagrantのインストール(任意) 仮想マシンの作成 シリアルコンソールの設定 kgdbの設定 デバッ…