Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
pciem — ユーザー空間で定義された「仮想」PCIeカードシムを可能にし、ホスト内のPCIeカードドライバ開発を可能にするLinuxフレームワーク。 | Kitploit
ツール/GitHubGitHub/cakehonolulu/pciem
組み込みシステムセキュリティセキュリティ仮想化ファジングペネトレーションテストハードウェアセキュリティ
GitHubcakehonolulu/pciem

pciem

ユーザー空間で定義された「仮想」PCIeカードシムを可能にし、ホスト内のPCIeカードドライバ開発を可能にするLinuxフレームワーク。

リポジトリを見る
373181ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

PCIem

Linuxカーネルフレームワークによるユーザースペースでの合成PCIeデバイスエミュレーション。 | ドキュメント

PCIemとは?

PCIemは、いくつかの新しい技術を活用して合成カードを正当なPCIデバイスとしてホストOSに認識させる、Linuxカーネル内で仮想PCIeデバイスを作成するフレームワークです。

簡単に言えば、PCIemは、(必ずしも限定されませんが)実際のハードウェアをホストに必要とせずにPCIeデバイスドライバを開発・テストするためのフレームワークです。

libfvio-userとの比較

PCIem と libfvio-user は、それぞれ異なるニーズに応える異なるソリューションです。両者を比較する際に混乱が生じる可能性があるため、ここでその違いを説明します(詳細は図1を参照)。

主な違いは、libvfio-user は通常、エミュレートされたPCIeデバイスをゲストに公開するために、クライアント(vfio-user プロトコルを実装する)、通常はQEMU(KVM、VM exitを経由)に依存していることです。あなたは vfio サーバ(通常はコールバック機構を使用)を書き、それがクライアントとやり取りします。

一方、PCIem が行うのは、デバイスをホストに直接公開することです。KVMも、ゲストも、仮想マシンも、何も必要ありません。デバイスは物理的に接続されたかのようにホストのPCIeバス上に現れます。

アーキテクチャ

root@kitploit:~
graph LR
    subgraph Kernel ["Host Linux Kernel"]
        direction TB

        RealDriver["Real PCIe Driver"]

        subgraph Framework ["PCIem Framework"]
            direction TB
            Config["PCI Config Space"]
            BARs["BARs"]
            IRQ["Interrupts"]
            DMA["DMA / IOMMU"]
        end

    end

    Interface(("/dev/pciem"))

    subgraph User ["Linux Userspace"]
        direction TB
        Shim["Device Emulation"]
    end

    Framework <==> Interface
    Interface <==> Shim

現在の機能

  • BAR作成: プログラムでBAR領域を作成および監視します。
  • BAR MMIOトレース: MMIO読み取り/書き込みの検出と通知により、ポーリングによるアクセスを回避します。
  • 割り込みサポート: Legacy/MSI/MSI-X割り込みの注入。
  • PCIケイパビリティフレームワーク: PCIケイパビリティシステム(内部ではリンクリスト)。
  • DMAシステム: IOMMU対応のDMAアクセス(ユーザースペースデバイスとの間)。
    • P2Pサポート(予備的!): ホワイトリストベースのアクセス制御によるデバイス間のピアツーピアDMA。
  • ユーザースペース: PCIeデバイスをユーザースペースで完全に実装できます。

最低限のサポート環境

  • Linuxカーネルバージョン: 6.6
  • Cコンパイラ: gcc-12
  • アーキテクチャ: amd64/i386、aarch64、riscv

aarch64注記: Raspberry Pi 4b、デバイスツリー(ACPIなし)でテスト済み

riscv注記: VisionFive 2(デバイスツリー)およびMuse Pi Pro(デバイスツリーとACPI)でテスト済み


CIステータス

例

Bochs BGA (drm) カード

Bochs BGA互換(bochs-drm)カードで、Westonなどのユーザースペースユーティリティから操作可能。SDL3を使用。

https://github.com/user-attachments/assets/d2f7abe4-aef4-4d3a-a30b-ab7ec793faed

NVMEコントローラ

1GBのストレージを備えたNVMEコントローラ。ユーザーはメモリ上のファイルを自由にフォーマット、マウント、作成、削除できます。

https://github.com/user-attachments/assets/29ce370a-7317-4fd4-9d1d-c3e868e1083d

Intel HDAカード

ICH6互換のエミュレーションモデルで、pipewireと連携してサンプルを再生できます。

注: 録音時にのみわずかなオーディオの割れが聞こえますが、通常の使用では問題ありません。

https://github.com/user-attachments/assets/7264a18c-6fcb-46c4-acde-9531b0be7ff6

Intel E1000カード

E1000カードの非常にシンプルな実装。実際のNICとの通信のリダイレクトをサポート。Wi-Fiも使用可能ですが、安定性は劣ります。

https://github.com/user-attachments/assets/b6b9862c-349c-49da-8a79-4769dfa31915

過去の例

ProtoPCIemカード

このカードは完全にQEMU内でプログラムされており(基本的にカードのステートマシン)、QEMUがユーザースペースの初期化と、ホストで実行されている実際のドライバからのコマンド処理をすべて行います。

ソフトウェアレンダリングされたDOOM(DMAで完成したフレームをカードに送信し、QEMUが表示)や、簡単なOpenGL 1.Xゲーム(スクリーンショットではtyr-glquakeとxash3d。QEMUに完全に実装されたカスタムOpenGLステートマシンにより、コマンドリストをソフトウェアレンダリングし、内部状態を適宜更新)を実行できます。

スクリーンショット

画像

画像

画像

ライセンス

  • PCIem カーネルコンポーネント: GPLv2
  • 例: MIT/GPLv2 デュアルライセンス

参考文献

  • ブログ記事: https://cakehonolulu.github.io/introducing-pciem/
  • Hackernews 記事: https://news.ycombinator.com/item?id=46689065
  • PCI Express 仕様: https://pcisig.com/specifications
ツールをダウンロード
機能PCIemlibfvio-user
接続デバイスファイル (/dev/pciem)UNIX ソケット (vfio-user プロトコル)
ターゲットドライバの実行場所ホストゲストOS
エミュレートされたデバイスの実行場所ユーザースペースユーザースペース
デバイスアクセス直接(ホスト内)仮想化(ゲストからホストへ)

図1: フレームワークの比較

ディストリビューション
Ubuntu 最新版 --
Ubuntu 24.04 LTS
Debian 安定版 --
Fedora 最新版 --
openSUSE Tumbleweed --