問題タブ [pci]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory - 32b PCI デバイスを搭載した x86_64 システムで DMA メモリを使用する方法
レガシー NIC などの 32 ビット デバイスを使用する x86_64 システムの場合: NIC と DRAM の間で DMA を実行する場合、メモリ アドレスは下位メモリ (4GB 未満) にある必要がありますか?
ところで、OS は、PCI デバイス用に予約されたメモリ アドレス空間リソース、つまり BAR に格納されているアドレスをどのように認識するのですか?
bios - PCIパラレルポートのベースアドレスの特定
DOS用のアプリケーションを開発しています。パラレルポート経由で通信する必要があります。
現在、どの PCI 関数の BAR (ベース アドレス レジスタ) にそのパラレル ポートのベース アドレス (つまり、データ ポート アドレス) が含まれているかを判断する方法に行き詰まっています。:?
正確には、特定の BAR にそのパラレル ポートのベース アドレスが常に含まれるという業界の慣習、標準、またはデファクト スタンダードはありますか?
そうでない場合、その PCI パラレル ポートのベース アドレスを特定するにはどうすればよいですか (PCI 拡張カードまたは mobo に統合されているかどうか)。
実は、私はPCI 拡張カードのパラレル ポートに関心があります。私の知る限り、BIOSはこれらについて知りません。BIOS はリソースを PCI カードにのみ割り当てます。それだけです。そのため、BDA にそのようなパラレル ポートのエントリがない可能性があります。BIOS の製造元は、モボが持つすべてのデバイスについてしか知らないからです。
たとえば、PC では、pci 拡張カードに 4 つのパラレル ポートをインストールしましたが、mobo には 1 つのパラレル ポートが統合されています。他の 2 つのパラレル ポートのエントリはどこに行くのでしょうか?
そのため、BIOS には、チップセットまたはマザーボードに統合された3 つのパラレル ポートのみのエントリがあるようです。したがって、mobo にインストールされている PCI 拡張カードのパラレル ポートのベース アドレスを取得するには、PCI BAR を読み取る必要があると思います。
ありがとう
linux-kernel - pci構成スペースへのアクセスについて、マクロPCI_CONF1_ADDRESSが私を混乱させます
pciの部分について、Linuxカーネルコードを学んでいて、ファイルを読んでいます/arch/x86/pci/Direct.c
.いくつかのコードは私を混乱させます:
カーネルのバージョンは 2.6.18 なので、マクロ PCI_CONF1_ADDRESS は私を混乱させます。ご存知のように、IO ポート CF8/CFC を使用する場合、PCI 構成スペースの最初の 256 バイトにしかアクセスできません。256 ~ 4095 バイトの間のスペースにアクセスする場合は、ECAM (Enhanced Configuration Accessメカニズム) ですが、上記の注釈には次のように記載されています。
タイプ 1 アクセスによる拡張 (PCI 機能ごとに 4096 バイト) 構成空間。
これは、IO ポート CF8/CFC を使用すると、pci 構成スペースの 4096 バイトすべてにアクセスできるということですか? しかし、なぜ PCI LOCAL BUS SPECIFICATION はこれについて言及していないのでしょうか?
一方、次の表現にも戸惑いを覚えます。
((reg & 0xF00) << 16)
この方法を使用して pci 構成アドレスを生成しますが、この表現は本や仕様で見たことがありません。
linux - 古いスタイルの PCI プロービング
Linux カーネル 3.0 以降、pci プローブは次のように自動化されます。pci_register_driver(&pci_driver);
Linux カーネル 2.6 以前では、プログラマーはキャラクター デバイスを作成し、PCI リストを調べて、適切な PCI を選択し、それを操作する必要がありました。この手順の手順、PCI ドライバを使用する前にキャラクタ デバイスの初期化が必要な理由、およびキャラクタ ドライバを登録する必要がなくなった理由を教えてください。
linux - Linux PCIe ドライバーをテストするには?
シンプルな PCIe ドライバーを作成しましたが、それが機能するかどうかをテストしたいと思います。例えば、デバイスからも使用しているメモリへの読み書きができれば。
どうやってやるの?
また、どのようなものも証明する必要がありますか?
linux - Linux PCI ドライバーと通信する方法
私はドライバープログラミングの初心者です。だから私はいくつかの「問題」に直面しています。
PCIドライバーを書きました。問題は、アプリがこのドライバーとどのように通信できるかです。
私の目的は、ドライバー用のテスト アプリを作成することです。ドライバのプログラミングを学ぶのは一種の「基礎研究」です。
通常、私は/dev
. しかし、このディレクトリにある私のファイルには、ルート以外の読み取りまたは書き込みのアクセス許可がありません。では、どのように通信するのですか?属性ファイル経由?
linux - デバイス・ドライバーのトレーニング用の DMA 機能を備えた PCI/PCIe カード
PCI/PCIe デバイスを使用するデバイス ドライバーの DMA を学習しようとしています。私のプラットフォームは linux/bsd です。トレーニング用の単純な PCI ボード (単純なデジタル I/O ボードなど) をかなり見つけましたが、DMA を処理できるほど複雑なハードウェアを備えたものはありません。Stackoverflow で、gcc などのオープンソース ツール (例: PowerPC、68HC11、Atmel、8051 など) でプログラムできる何らかのマイクロプロセッサまたは mcirocontroller を搭載した PCI/PCIe カードを知っている人はいますか??
もちろん、キッカーは低コストです...可能であればサブUSD 300.00.
FPGA ベースのボードは必要ありません。なぜなら、FPGA をプログラミングするための Windows ワークステーション (通常) と、FPGA で PCI/PCIe IP コアを作成して操作するために必要なすべての時間が必要だからです。基本的に、私は FPGA の作業に時間を費やしたくありません。デバイスドライバーの仕事がしたい!これは私の唯一のオプションかもしれませんが...
c - デバイスを接続せずにLinuxPCIドライバーをインストールする
デバイスを接続せずにLinuxデバイスドライバーをインストールする方法はありますか?
ドライバーコードに完全にアクセスできます。Linuxカーネル2.6.35を使用しています。
私はinsmodとmodprobeを試しましたが無駄になりました。私はカスタムドライバーに取り組んでいます(私はそれを書きませんでした)が、ドキュメントはありません。
linux - Linux PCIドライバー、mmapプリフェッチ
PCIデバイス、そのLinuxドライバー、およびユーザースペースアプリケーションがあります。アプリケーションmmapは、ドライバーを介したPCIデバイスの最初のBARです。すべてのアクセスは32ビット整数を介して行われます。レジスタへの読み取り/書き込みには副作用(操作の開始など)がある可能性があるため、これは重要です。
x86プラットフォームでは、これは非常にうまく機能します。ただし、ARMプラットフォームに移行したばかりで、奇妙な動作があります。
- ドライバからの読み取り/書き込みは正しく動作します
- ユーザースペースからの読み取りにより、64バイトのPCI読み取り要求がトリガーされます。これは、32ビットアクセスのみを受け入れるため、デバイスでは実行できません(+副作用のため、これは望ましくありません)。
問題は、mmapが一部のデータをプリフェッチして、この64バイトの読み取りを発行することだと思います。ある種のmmapプリフェッチを無効にする可能性のあるフラグなどがありませんか?
ドライバー側での現在のmmapの実装は単純です