問題タブ [device-tree]
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.
linux-kernel - Linux: U-Boot および Flat Image Tree (FIT) を使用したブート引数
Jetson TK1 ボードで Linux を起動する U-Boot の独自のビルドを取得しようとしています。検証済みの起動を推進しているため、フラット イメージ ツリー (カーネル イメージの統合、デバイス ツリーのブロブなど) を使用してシステムを説明しています。U-Boot は ITB ファイルをロードしてカーネルを起動しようとしますが、このメッセージの後にシステムがハングします。
これは、ブート引数がカーネルに渡されていないためだと思います (元の起動では引数の負荷が追加されます) が、引数をカーネルに渡す方法については少し唖然としています。bootargs 環境変数を設定してみましたが、状況は変わりませんでした。
ITB ファイルを使用する場合、カーネル引数をカーネルに渡すにはどうすればよいですか?
コマンドライン引数 (サンプル extlinux.conf の APPEND コマンドから取得):
ITS ファイルの内容:
U-Boot 出力:
linux-kernel - 割り込みプロパティを使用してデバイス ツリー ノードを読み取る
2 つの異なるデバイス ツリー ソースからの次のスニペットがあります。
何が割り込みを行うのか知りたいです = <1 4>; 割り込み = <42 2>; 支持する?
<1 4> 、 <42 2> の値はどこから取得しますか?
linux-device-driver - max732x.c I2C IO エクスパンダ + Linux デバイス ツリーを使用した GPIO キーが機能しない
Freescale MX6 と 3.10.31 Freescale 修正カーネルを使用しています。私はマキシム MAX7325 を IO エクスパンダとして使用しています。これには、P0-P2 にプッシュボタンが接続されています。7325 からの割り込みラインは GPIO_3 パッドに接続されています (これは GPIO1_3 だと思います...)
次のように、デバイス ツリーに 7325 と gpio キーを設定します。
と
MAX7325 ドライバのプローブが呼び出されると、client->dev.platform_data が NULL になるように見えます。このため、後で max732x_irq_setup が呼び出されたときに、chip->gpio_chip.to_irq ポインターが max732x_gpio_to_irq 関数を指すようにセットアップされません (おそらく、これが機能するための適切な情報がないためです)。最初の入力を設定しようとすると、割り込みを設定しようとすると失敗し、他のキーは設定されません。
/sys インターフェイスを使用して、P0 が GPIO 240 にマップされることを確認したので、GPIO 242 は、セットアップしようとしていた sw2 GPIO-KEY です。
このドライバはデバイス ツリーで動作しないのでしょうか? デバイス ツリーのプロパティを取得しようとしている様子は見られませんが、私が調べた他の IO エキスパンダー ドライバーも同様でした。そのため、I2C コアがデバイス ツリーを読み取っており、そこから platform_data を入力する必要があるのではないかと考えました。ドライバーのプローブ関数を呼び出します (?)
私はこれにかなり慣れていないので、助けていただければ幸いです。=) デバイス ツリーのドキュメントをオンラインでいくつか読みましたが、これはかなり具体的なことであり、正しく行っていないため、カバーされていないと思います... (?)
カーネルで CONFIG_GPIO_MAX732X_IRQ を構成しています...そして、ある時点で max7325 I2c1 ノードの interrupt-controller プロパティを設定しようとしましたが、それが必要かどうか確信が持てませんでした (?)
linux-kernel - さまざまな Linux デバイス ツリー ドライバーが共通のレジスタを共有するにはどうすればよいですか?
サポートされていない ARM SoC プラットフォームへの Linux カーネルの移植に取り組んでいます。残念ながら、この SoC では、異なるペリフェラルがレジスタを共有したり、メモリの同じ領域内でレジスタを混在させたりすることがあります。これは、同じアドレス空間に混在するレジスタまたはレジスタの同じセットを共有する異なるデバイスの概念をサポートしていないように見えるデバイス ツリー仕様に私を悩ませています。デバイスツリーで読んださまざまなドキュメントは、これを処理する適切な方法を示唆していません。
複数のドライバー内で同じレジスター領域を指定する単純な方法では、別のドライバーと同じレジスター領域をマップしようとする 2 番目のデバイスに対して、「リソースの領域を要求できません」というメッセージがスローされます。私の理解では、これは、カーネルがレジスタ領域に関するデバイス ツリー ルールを強制しているためです。
このジレンマを解決するための好ましい一般的な解決策は何ですか? 共有レジスタ領域へのアクセスをマーシャリングする上位レベルのドライバーが必要ですか? この特定の問題に対処する既存の Linux カーネルの例はありますか?
linux-kernel - プラットフォーム デバイスを作成せずにデバイス ツリー項目をクエリできますか?
ARM+FPGA SOC システム用のデバイス ドライバー カーネル モジュールの機能をテストするためのカーネル モジュールを作成しています。私のアプローチでは、デバイス ツリーを照会して、デバイス ドライバーが使用している割り込みを見つけます。デバイス ドライバー自体では、プラットフォーム ドライバーを使用して登録platform_driver_register
し、.probe
関数では、platform_device*
ポインターを含むポインターを渡しdevice
ます。of_match_device
これで、およびを呼び出してirq_of_parse_and_map
、irq 番号を取得できます。
テスト モジュールでこの方法でデバイス ツリーを照会するためだけに、2 番目のプラットフォーム ドライバーを登録したくありません。デバイスツリーを照会できる他の方法はありますか (おそらく、より直接的に、おそらく名前で?)
linux-kernel - カーネルモジュールのドライバーコードが実行されませんか?
このカーネルモジュールをロードしても何もしないのはなぜですか?
モジュールがロードされているように見えるHello, world\n
場合は、印刷する必要があります。lsmod
しかし、コンソールにも にも何も出力されませんdmesg
。
使用module_init
してmodule_exit
すべて動作するが、デバイスへのポインターが必要な場合platform_device *pdev
、どうすればよいですか?
編集:
元のモジュールは次のようになります。
私のデバイス ツリー blob には、次のエントリが存在します。
linux-kernel - デバイス ツリーを使用してクロックを構成する方法を教えてください。
カーネルに含まれる新しいデバイスのクロックを構成しようとしていました。デバイスが既に含まれている古いバージョンのカーネルがあります。
そこで、クロックのカーネルに同様の変更を加えようとしました。しかし、古いバージョンのカーネルには、ほぼすべてのデバイスのクロックを設定するための C ファイルがありましたが、新しいカーネルには同様のファイルが見つかりませんでした。
調査の結果、新しいバージョンのカーネルでは、クロックを構成するためのパラメーターがデバイス ツリーを介してカーネルに渡されることがわかりました。そこで、新しいデバイスのクロックを含めるように DT を変更しようとしましたが、完全には成功しませんでした。だから私の質問は:
1) カーネルが特定のデバイスのクロックを構成するためのパラメーターとレジスタ アドレスを取得する方法
2) カーネルまたはドライバーでこの情報 (レジスター加算器など) にアクセスできますか?
3)ドライバまたはカーネルで直接レジスタを使用してクロックを設定する方法はありますか(周波数など)