サポートされていない ARM SoC プラットフォームへの Linux カーネルの移植に取り組んでいます。残念ながら、この SoC では、異なるペリフェラルがレジスタを共有したり、メモリの同じ領域内でレジスタを混在させたりすることがあります。これは、同じアドレス空間に混在するレジスタまたはレジスタの同じセットを共有する異なるデバイスの概念をサポートしていないように見えるデバイス ツリー仕様に私を悩ませています。デバイスツリーで読んださまざまなドキュメントは、これを処理する適切な方法を示唆していません。
複数のドライバー内で同じレジスター領域を指定する単純な方法では、別のドライバーと同じレジスター領域をマップしようとする 2 番目のデバイスに対して、「リソースの領域を要求できません」というメッセージがスローされます。私の理解では、これは、カーネルがレジスタ領域に関するデバイス ツリー ルールを強制しているためです。
このジレンマを解決するための好ましい一般的な解決策は何ですか? 共有レジスタ領域へのアクセスをマーシャリングする上位レベルのドライバーが必要ですか? この特定の問題に対処する既存の Linux カーネルの例はありますか?