LeavaTailの日記

LeavaTailの日記

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

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

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

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 はじめに 変更履歴 ステータス ファイルシステム: ext2ファイルシステム概略 ファイルシステム…

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

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

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 はじめに 変更履歴 ステータス ファイルシステム: write_begin ページキャッシュを取得する ページキャッシュが存在する場…

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 はじめに 変更履歴 ステータス ファイルシステム: write_iter 書き込み前の正当性チェック write_iterのメイン操作 writeba…

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

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

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 はじめに 変更履歴 VFS アクセスするデータ領域の確認 書き込み先のアドレスを確認する ファイルのロックを確認する ファイ…

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

はじめに 変更履歴 initramfs とは 環境構成 ARM用のLinuxを構築する ARM用のinitramfsを構築する U-Bootからカーネルをロードする 作成ファイル置き場 おわりに FAQ 参考 x86_64の場合は こちら ARM64の場合は こちら はじめに ARMアーキテクチャは、CPUア…

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 はじめに 変更履歴 Application System call Interface ファイルディスクリプタからfd構造体を取得する fd構造体を作成する…

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

概要 はじめに 自動化のための作業 ChangeLogから変更内容を取得するスクリプトの作成 Releases 機能を自動的に設定するworkflowの作成 実行例 おわりに 参考 概要 ソフトウェア開発者 (ユーザ) は、ソフトウェアをリリースする際に幾つかの作業を実施する必…

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

Part 1: 環境セットアップ Part 2: System call Interface Part 3: VFS Part 4: ext2 (1) write_iter Part 5: ext2 (2) write_begin はじめに 変更履歴 背景 環境構成 作成手順 調査方法 まとめ 参考 はじめに 一般的なOSはファイルという形式を通して、ハー…

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

はじめに 準備 help2man とは manページを生成する automakeにhelp2manを組み込む おわりに はじめに Linuxではmanコマンドによる利用者にオンラインマニュアルを提供する機構が設けられている。 ソフトウェアパッケージの開発者は、そのソフトウェアの使い…

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

はじめに 準備 テストスクリプトの作成 GitHub Actionsとの連携 おわりに 参考 はじめに GitHubではパブリックリポジトリであれば GitHub Actions という機能が無料に使用することができる GitHub Actions では、世の中のCI/CDサービスと同様にソフトウェア…

AutotoolsでMakefileを自動生成する

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

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

はじめに 変更履歴 環境構成 クロスコンパイラ環境の構築手順 ルートファイルシステムの構築 カーネルの起動 おわりに 参考 ARMの場合は こちら ARM64の場合は こちら はじめに x86はIntelが開発したマイクロプロセッサの命令セットアーキテクチャであり、x8…

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

概要 はじめに 各手法における特徴 実行環境 構築手順 Raspberry Pi 3Bの設定 システム構成パラメータの更新 U-Bootの構築 ネットワークブートサーバの設定 ブートイメージの作成 実行結果 おわりに 参考 Raspberry Pi 3Bの場合は こちら Raspberry Pi 4Bの…

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

概要 はじめに 実行環境 構築手順 Raspberry Pi 3Bの設定 ネットワークブートサーバの設定 ブートイメージとルートファイルシステムの取得 DHCP/TFTPサーバの構築 NFSサーバの構築 実行結果 おわりに 参考 付録 Raspberry Pi 3B (U-Boot)の場合は こちら Ras…

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

はじめに Yoctoについて 環境構成 準備 最小限のシステムを構築する デスクトップ環境を構築する ツールチェインの生成 おわりに 参考 はじめに 前回の記事で、QEMUでx86_64アーキテクチャ上でARM用にビルドしたLinuxカーネルを起動させることに成功した。 l…

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

はじめに 変更履歴 環境構成 依存パッケージ システム構築の手順 Linuxの起動 ツールチェインの取得 おわりに 参考 はじめに 前回の記事で、QEMUでx86_64アーキテクチャ上でARM64用にビルドしたLinuxカーネルを起動させることに成功した。 leavatail.hatenab…

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

はじめに 変更履歴 環境構成 クロスコンパイル環境の構築 QEMUでカーネルを起動させる initramfsを用意する おわりに 参考 x86_64の場合は こちら ARMの場合は こちら はじめに Linuxのカーネルは様々なアーキテクチャに対応している。 その中でもARMアーキ…

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

はじめに 必要なもの 接続方法 おわりに はじめに Raspberry Piを使って何か開発をしようとしたときに、ネットワーク経由でしかリモート接続ができない状態は危険である。 例えば、ネットワークの設定を誤ってRaspberry Piにリモート接続できなくなることが…

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

CI

はじめに dotfilesの構成 テスト環境 テスト項目 CIサービスとの連携 おわりに 参考 はじめに 皆様は設定ファイルをどのように管理しているだろうか。 外部記憶装置に保存する。ブログにアップする。いろいろな管理方法があるだろう。 私はdotfilesの一つの…

vimで使用するプラグインを断捨離してみた

Vim

はじめに 現状 実施 プラグインマネージャの選定 カラースキームの選定 Vimの標準コマンドで代用できるプラグインの削除 最近あまり使用していなかったプラグインの削除 新しく導入するプラグイン 結果 おわりに 参考 はじめに Vimを使い始めてから4年経ち、…

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

はじめに 準備 内部ネットワークの構築 ftraceの設定 trace-cmdのインストール 実行 コマンドのトレースを取得する プロセスのトレースを取得する イベントのトレースを取得する おわりに 参考 はじめに 前回までで、kgdbでカーネルのソースコードを読むため…

kgdbでカーネルのソースコードを読むための準備

gdb

はじめに 現状の問題点 対処方法 マシン命令に変換してレジスタを表示する ファイル/関数単位で最適化を無効化する ファイル単位で最適化を無効化する 関数単位で最適化を無効化する おわりに 参考 はじめに 前回、VirtualBoxの仮想マシン同士でkgdbでデバッ…

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

gdb

はじめに 準備 VirtualBoxのインストール Vagrantのインストール(任意) 仮想マシンの作成 シリアルコンソールの設定 kgdbの設定 実行 バックトレースの出力 ブレークポイントをセット 値の代入 おわりに 参考 はじめに VitualBox上の仮想マシン同士をシリ…