(Raspberry Pi Zero W、カーネル4.14y)ワイヤレスアダプタチップは、/ dev fsのデバイスではなく、ifconfigが知っているものの名前のようです。私が知る限り、これはBerkley Socketsのアーティファクトです。
これはハードウェアなので、デバイスツリーで言及する必要があるとします。一部のドライバをロードしますが、/ dev(devfs)にエントリを作成することはできません。
ソケットはデバイスではなく、このデバイスをどこで/どのように探しますか?
ベストアンサー1
/dev
Linuxでは、ネットワークインターフェイスにデバイスノードがまったくありません。
使用可能なネットワークインターフェイスのリスト(スクリプトなど)が必要な場合は、ディレクトリを表示すると/sys/class/net/
各インターフェイスのシンボリックリンクが表示されます。ロードされたドライバを含む各ネットワークインターフェイスが一覧表示されます。
if_nameindex()
プログラムでシステムコールを使用できます。Stack Overflowでこの回答を参照してください。
さらに、/dev
これはデバイスファイルシステム。
これデバイスツリー具体的には異なる意味を持ちます。言い換えれば、システムのハードウェアコンポーネントの機械可読説明である。プラグアンドプレイ機能を持たないハードウェアバス、または自動検出できないハードウェアがあるシステムで使用されます。たとえば、Raspberry PiなどのARM SoCのLinuxでは、デバイスツリーを使用します。
RasPiの開始順序は非常に興味深いです。RasPi.SEでこの質問を参照してください。
つまり、起動時にファイルが制御される/boot/start.elf
と、GPUはデフォルトの/boot/*.dtb
ARM CPUが起動する前にそのファイルと/boot/overlay/*.dtboファイルをロードします。ファイル*.dtb
はコンパイルされたデバイスツリーバイナリ形式で。各特定のRasPiモデルで見つけることができるハードウェアについて説明し、次のように表示されます。デバイスツリーのソースコードファイル(.dts`)は特定の方法でフォーマットされたテキストにすぎません。
デバイスツリーのカーネルライブイメージは /sys/firmware/devicetree/base で見ることができます。 パシロサンティリ、次のように.dts形式で表示できます。
sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base
デバイスツリーファイル形式の仕様はここで確認できます。この仕様はオペレーティングシステムに依存しないように書かれています。また必要があるかもしれませんデバイスツリー参照いくつかの詳細について説明します。
したがって、元の質問に対する答えは次のようになります。
- Berkeley Sockets APIカーネルからネットワークインタフェースを取得する
- カーネルは、デバイスツリーファイルから必要なハードウェア情報を取得します。
- デバイスツリーファイルは設定に従ってGPUによって
/boot/start.elf
ロードされます。/boot/config.txt
- デバイスツリーファイルは、最初に各RasPiモデルのハードウェア仕様に基づいて生成され、適切なバイナリ形式にコンパイルされます。
デバイスツリー検索コードは、主に各ハードウェアの有効なドライバを見つけることに関連しています。各デバイスについてあまり気にしません。目的:これがドライバーの仕事です。
ドライバは適切な*_register_driver()
カーネル機能を使用して自分の存在を記録し、デバイスツリー情報の適切な部分を使用して実際のハードウェアを見つけ、他の機能を使用してそのハードウェアを制御できるように登録します。ドライバがハードウェアを初期化すると、register_netdev()
カーネル機能を使用して自分自身を新しいハードウェアとして登録します。ネットワークインターフェース何よりも、これはソケットAPI(別のエンティティではなくカーネルへの別のインターフェイスです)がネットワークインターフェイスの存在を認識するようにします。
ethtool
ドライバは他の仕事のために自分自身を登録することもできます。リンク状態の監視、トラフィック統計、およびその他の下位レベルの機能をサポートする多くのタスクを一覧表示し、ワイヤレスカードドライバはregister_wiphy()
これを使用して次のように宣言します。ワイヤレス電話特定のWi-Fi機能を備えたネットワークインターフェースです。
Linux TCP/IP スタックには多くのインターフェースがあります。 Berkeley Sockets APIは、アプリケーションプログラマーに最もよく知られています。 netdev APIは、本質的にドライバにとって同じコインの反対側です。