どのプラットフォームを使用しているのだろうか: x86 システムで機能するこれに対する回避策 (別名ハック) は、基本的に、FPGA が通常着陸するバス、デバイス、機能に PCI デバイスを静的に構成する BIOS を持たせることです。デバイスを列挙し、そのために PCI スペースを予約します (デバイスが実際には存在しない場合でも)。次に、デバイス ドライバーで、fpga がプログラムされた後に BAR と int ラインを手動でセットアップするなど、いくつかの追加作業を行う必要があります。もちろん、これには BIOS の変更が必要です。BIOS ベンダーと協力している場合は、BIOS ベンダーと契約してこの変更を行うことができますが、BIOS ベンダーと協力していない場合は、はるかに困難になります... また、覚えておいてください私は x86 で VxWorks に取り組んでおり、AMI にボード用のカスタム BIOS を作成してもらいました...
BIOS を持っていない場合は、ブートローダーでプログラミングすることを検討してください。すでにディスクから読み取る機能があり、GPIO 機能を追加することはおそらくそれほど難しくありません (jtag と GPIO を使用していると仮定しますか?)。実際、使用するブートローダーによっては、すでに GPIO を実行できる可能性があります。
これを行うためにカーネルを変更する際の問題は、PCI列挙の前にビットファイルを読み取ることができるスイートスポットを見つける必要があることです...たとえば、ディスクデバイスドライバーがPCI後に初期化される場合、明らかにいくつかのことを行う必要がありますPCI列挙の前にビットファイルを読み取るためだけにカーネルを根本的に変更すると、他の厄介な問題が発生する可能性があります...
すでに発見されている可能性があり、実際には開発時にのみ使用できるもう 1 つのオプション: システムの電源を入れ、fpga ボードをプログラムし、リセットを行います (たとえば、電源を入れ直さずに、今すぐ sudo を再起動します)。その構成を保持し、Linuxはそれを列挙する必要があります...