Repolode
cakehonolulu

cakehonolulu/pciem

Linuxカーネル向けフレームワーク。ユーザー空間で仮想PCIeデバイスを構築し、実機なしでホストドライバーをテストできます。

スター
375
フォーク
19
未解決の Issue
0
最終コミット
20 日前

これは何?

PCIemは、ホストのLinuxカーネルから正規のPCIデバイスとして認識される、合成PCIeデバイスを作成します。QEMUやvfio-userを通じてエミュレートしたハードウェアをゲストVMに公開する方式とは異なり、このデバイスはホストのPCIeバスに直接現れるため、実際のカーネルドライバーをバインドし、同じマシン上で動作させられます。

デバイスのロジックはユーザー空間で実装し、/dev/pciemデバイスファイルを介してカーネルフレームワークと通信します。フレームワークは、MMIOアクセスのトレースに対応したBARの作成、legacy・MSI・MSI-X割り込みの注入、PCI capabilityフレームワーク、カーネルとユーザー空間デバイス間のIOMMU対応DMAを提供します。ピアツーピアDMAは、ホワイトリストベースのアクセス制御を備えた初期段階の機能として利用できます。

このプロジェクトは、gcc-12でビルドするLinux 6.6以降を対象としており、amd64、i386、aarch64、riscvに対応しています。サンプルデバイスには、Bochs BGAディスプレイカード、NVMeコントローラー、Intel HDAオーディオカード、E1000ネットワークカードがあります。

主な機能

  • 01ユーザー空間からMMIOの読み書きを監視できるPCI BARを作成します。
  • 02ホストにlegacy・MSI・MSI-X割り込みを注入します。
  • 03デバイス構成用のPCI capabilityフレームワークを提供します。
  • 04カーネルとユーザー空間デバイス間で、IOMMU対応DMAを行います。
  • 05すべてユーザー空間で動作し、/dev/pciemを介してデバイスを公開します。

ユースケース

  • 物理ハードウェアなしでPCIeデバイスドライバーを開発・テストする。
  • 新しいPCIデバイスモデルを試作し、実際のカーネルドライバーの動作を確認する。
  • エミュレートしたデバイスを使って、NVMe、オーディオ、ネットワーク、ディスプレイドライバーを試す。

使う前に知っておきたいこと

  • ビルドには Linux カーネル 6.6 以降と gcc-12 が必要です。
  • ピアツーピア DMA のサポートは暫定的なものです。
  • カーネルコンポーネントはコピーレフトライセンスである GPLv2 の下で提供されています。

トピック

よくある質問

pciem とは?
Linuxカーネル向けフレームワーク。ユーザー空間で仮想PCIeデバイスを構築し、実機なしでホストドライバーをテストできます。 PCIemは、ホストのLinuxカーネルから正規のPCIデバイスとして認識される、合成PCIeデバイスを作成します。QEMUやvfio-userを通じてエミュレートしたハードウェアをゲストVMに公開する方式とは異なり、このデバイスはホストのPCIeバスに直接現れるため、実際のカーネルドライバーをバインドし、同じマシン上で動作させられます。
pciem は無料で使えますか?ライセンスは?
pciem は GPL-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
pciem は今もメンテナンスされていますか?
活発にメンテナンス中。pciem の最終コミットは 2026年9月30日 です。
pciem は何に使えますか?
物理ハードウェアなしでPCIeデバイスドライバーを開発・テストする。 新しいPCIデバイスモデルを試作し、実際のカーネルドライバーの動作を確認する。 エミュレートしたデバイスを使って、NVMe、オーディオ、ネットワーク、ディスプレイドライバーを試す。
pciem はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/cakehonolulu/pciem

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト