2

サポートされていない ARM SoC プラットフォームへの Linux カーネルの移植に取り組んでいます。残念ながら、この SoC では、異なるペリフェラルがレジスタを共有したり、メモリの同じ領域内でレジスタを混在させたりすることがあります。これは、同じアドレス空間に混在するレジスタまたはレジスタの同じセットを共有する異なるデバイスの概念をサポートしていないように見えるデバイス ツリー仕様に私を悩ませています。デバイスツリーで読んださまざまなドキュメントは、これを処理する適切な方法を示唆していません。

複数のドライバー内で同じレジスター領域を指定する単純な方法では、別のドライバーと同じレジスター領域をマップしようとする 2 番目のデバイスに対して、「リソースの領域を要求できません」というメッセージがスローされます。私の理解では、これは、カーネルがレジスタ領域に関するデバイス ツリー ルールを強制しているためです。

このジレンマを解決するための好ましい一般的な解決策は何ですか? 共有レジスタ領域へのアクセスをマーシャリングする上位レベルのドライバーが必要ですか? この特定の問題に対処する既存の Linux カーネルの例はありますか?

4

1 に答える 1

0

私はまったく同じ問題に直面しています。私の解決策は、共通リソースを保護する別のモジュールを作成してから、共通モジュールからエクスポートされたシンボルを使用する「クライアント モジュール」を作成することです。

これは安全性の観点からも意味があることに注意してください。そうでなければ、適切なメモリ ロックを実装し、複数の独立したモジュール間で操作の一貫性を確保するにはどうすればよいでしょうか?

于 2015-03-28T21:59:41.773 に答える