1108707_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1108707_ja-JP

1108707_ja-JP

MCUXpresso SDK内のlwIPスタックの簡単な紹介<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

lwIPは、当初Adam Dunkelsによって開発されたTCP/IPプロトコル・スイートの小規模な独立した実装であり、フル・スケールのTCPを維持しつつ、リソース使用量を削減することに主眼を置いています。そのため、数十キロバイトの空きRAMと約40キロバイトのコードROMの容量を持つ組み込みシステムでの使用に適しています。 

現在、lwIP 2.1.2はKinetisおよびMCUXpresso SDK 2.6内のI.MX RTファミリに移植されています。

特長:

lwIPには次のプロトコルが付属します。

IPv4およびIPv6(複数のネットワーク・インタフェースを介したパケット転送を含む)

ネットワークのメンテナンスとデバッグ用のICMP

マルチキャスト・トラフィック管理用のIGMP

MLD(IPv6でマルチキャスト・リスナーを検出)

ND(IPv6のネイバー・ディスカバリとステートレス・アドレス自動設定)

DHCP および DHCPv6。

UDP(ユーザーデータグラムプロトコル)

TCP (トランスミッション制御プロトコル)

パフォーマンス向上のためのRaw/ネイティブAPI

オプションのBerkeley(ソケットAPIなど)

TLS:TCPベースのプロトコルに対してほぼ透過的なTLSを提供するオプションの階層化TCP

PPPoSとPPPoE

DNS(mDNSなどのドメイン名リゾルバを含む)

6LoWPAN

lwIPスタック構成

SDK_2.6.1_EVKB-IMXRT1050を例にしましょう

(SDK_2.6.1_EVKB-IMXRT1050\middleware\lwipにあるlwIPコード)

pastedImage_1.png

port:このフォルダには、lwIPスタックをベア・メタルとFreeRTOS上で実行可能なアダプタ・コードが含まれています。

pastedImage_2.png

Enet_ethernetif.c/h:基礎となるunderlying MCUXpresso SDKイーサネット・ドライバにlwIPスタックを適合させます(phy initとethernetif_inputのように)。

cc.c/h:typedef、およびパッキング用のコンパイラ・ヒントとプラットフォーム固有の診断出力を提供します。

Perf.h:アーキテクチャ固有のパフォーマンス測定。現在、「NULL」に定義されており、今後使用するために留保されています。

Src:安定的な最新のlwIP 2.1.2が格納されています。ソースコードは、こちらのリンクdownload.savannah.gnu.org/releases/lwip/からダウンロードできます。

--api: netconn および socket API ファイル

--core: LwIPコアファイル

--include: LwIP インクルードファイル

--netif: ネットワークインターフェースファイル

LwIP APIs overview

lwIPは、プログラマがTCP/IPコードとの通信用に使用可能な3つのアプリケーション・プログラミング・インターフェース(API)を備えています。

Raw API:スレッドセーフではないAPIで、最大のパフォーマンスと最小限のメモリフットプリントを実現するコールバックスタイル。プログラムの実行はコールバック関数によって駆動され、そのアプリケーションに関連するアクティビティが発生すると lwIP コアによって呼び出されます。特定のアプリケーションは、受信データの利用可能、送信データの送信完了、エラー通知、ポーリングタイマーの期限切れ、接続の切断などのイベントについて、コールバック関数を通じて通知を受け取るように登録できます。アプリケーションは、これらのイベントのいずれかまたはすべての処理を実行するためのコールバック関数を提供できます。

シーケンシャル・スタイルAPI:ブロッキング関数。割高ですが、TCPIP以外のあらゆるスレッドから呼び出すことができます。通常のシーケンシャル・プログラムでlwIPスタックを使用する方法となり、BSDソケットAPIとよく似ています。実行モデルは、ブロック式の「open-read-write-close」に基づきます。TCP/IPスタックは本質的にイベント・ベースであるため、TCP/IPコードとアプリケーション・プログラムは異なる実行コンテキスト(スレッド)に配置する必要があります。

ソケットAPI:BSDスタイルのソケットAPI。ソケットAPIは既存のアプリケーションの互換性APIであり、現在はシーケンシャルAPIの上に構築されています。他のプラットフォームで動作するソケットAPIアプリケーションを実行するために必要なすべての機能を提供することを目的としています。

TCP Raw API

 

API関数

形容

TCP接続のセットアップ

 

tcp_new()

新しいTCP PCBを作成します

tcp_bind()

TCP PCBをローカルIPアドレスとポートにバインドします。

tcp_listen()

TCP PCBでリスニングプロセスを開始します。

tcp_accept()

新しいTCP接続が到達したときに呼び出されるコールバック関数を

割り当てます。

tcp_connect()

リモートTCPホストの接続用です。

TCPデータの送信

tcp_write()

送信データをキューに追加します。

tcp_output()

キューに入れられたデータを強制的に送信します

tcp_sent()

送信データがリモート・ホストに認識されたときに呼び出される

コールバック関数を割り当てます。

TCPデータを受信中

tcp_recv()

新しいデータが届いたときに呼び出されるコールバック関数を設定しま

す。

tcp_recved()

アプリケーションが次パケットを処理時に呼び出す必要があります。

受信データパケット(TCPウィンドウ管理用)。

アプリケーションポーリング

tcp_poll()

定期的に呼び出されるコールバック関数を設定します。

次の状況の有無を確認するためにアプリケーションによって使用されます。

送信する必要があるアプリケーションデータが残っています

または、閉じる必要がある接続がある場合。

接続の終了とアボート

tcp_close()

リモートホストとの TCP 接続を閉じます。

tcp_abort()

TCP接続をアボートします。

tcp_err()

エラーのため、lwIPによってアボートされる接続を処理するために、

コールバック関数を割り当てます(例:メモリ

不足エラー)。

UDP Raw API

API

形容

udp_bind

UDP PCB をローカル IP アドレスとポートにバインドします。

udp_new

新しい UDP PCB を作成します。

udp_send

UDPデータを送信します。

udp_recv

データグラムの受信時に呼び出されるコールバック関数を指定します。

udp_remove

UDP PCBを削除し、割り当てを解除します。

udp_connect

UDP PCBのリモートIPアドレスとポートをセットアップします。

udp_disconnect

UDP PCBのリモート IPとポートを削除します。

Netconn API

netconn_new

新しい接続を作成します。

netconn_listen

TCP 接続をリスニング・モードに設定します。

netconn_write

接続されたTCP netconn上でデータを送信します。

netconn_accept

リスニングTCP接続で着信接続を受け入れます。

netconn_close

TCP 接続を削除せずに閉じます。

netconn_send

現在接続中のリモートIP/ポートにデータを送信します(適用外:

TCP 接続)。

netconn_bind

接続をローカル IP アドレスとポートにバインドします。

netconn_recv

netconnからデータを受信します。

netconn_connect

リモート IP アドレスとポートに接続します。

 

Socket API

マクロ

API

説明

accept

lwip_accept

ソケット上の新しい接続を受け入れます。

bind

 lwip_bind

IPアドレスとポートにソケットをバインドします。

shutdown

 lwip_shutdown

 

getpeername

 lwip_getpeername

 

getsockname

lwip_getsockname

 

setsockopt

lwip_setsockopt

 

クローズソケット

lwip_close

 

connect

lwip_connect

ソケットをリモートホストのIPアドレスとポートに接続します。

listen

 lwip_listen

ソケット接続を待ち受ける

recv

 lwip_recv

 

recvmsg

lwip_recvmsg

 

recvfrom

lwip_recvfrom

 

send

 lwip_send

 

sendmsg

 lwip_sendmsg

 

sendto

lwip_sendto

 

ソケット

 lwip_socket

新しいソケットを作成します。

poll

lwip_poll

 

ioctlsocket

lwip_ioctl

 

inet_ntop

 lwip_inet_ntop

 

inet_pton

 lwip_inet_pton

 

read

lwip_read

ソケットからデータを読み取ります。

readv

lwip_readv

 

write

lwip_write

ソケットにデータを書き込む

writev

lwip_writev

 

close

lwip_close

ソケットを閉じます(ソケットは削除されます)。

fcntl

 lwip_fcntl

 

ioctl

lwip_ioctl

 

 

 

 

LwIP 設定

構成ファイルはアプリケーションのソース・フォルダ「lwipopts.h」に配置されます。

pastedImage_3.png

lwipopts.hは、lwIPとそのすべてのモジュールを完全に構成するために使用可能なユーザーファイルです。lwIPが提供するすべてのオプションを定義する必要はありません。オプションを定義しない場合は、デフォルト値が使用されます。つまり、lwipopts.hによりlwIPの動作の多くを上書きすることができます。

MCUXpresso SDK における LwIP デモ

MCUXpresso SDK には、さまざまな API セットを使用する多くのデモが付属しています。

名称

形容

Lwip_tcpecho

ベア・メタルKSDKまたはFreeRTOSを使用した、lwIP TCP/IPスタック上のTCPエコー・デモ。TCPプロトコルを使用し、エコー・サーバとして機能します。

Lwip_udpecho

ベア・メタルKSDKまたはFreeRTOSを使用した、lwIP TCP/IPスタック上のUDPエコー・デモ。UDPプロトコルを使用し、エコー・サーバとして機能します。

Lwip_ping

ICMPプロトコルを使用したlwIP TCP/IPスタック上のPingデモ。

lwip_nghttp2cli_mbedTLS

FreeRTOSを使用して、lwIP TCP/IPおよびMbedTLSスタック上にセットアップされたNGHTTP2クライアント。

FreeRTOS

lwip_mqtt

セキュアでないソケット経由でMQTTブローカーに接続するMQTTクライアント。

lwip_iperf

PCをクライアントまたはサーバとして、ネットワーク・パフォーマンス測定用のIPerfアプリケーションを使用して帯域幅を確認します。

lwip_httpsrv

ベア・メタルSDKまたはFreeRTOSを使用した、lwIP TCP/IPスタック上のHTTPサーバ。

lwip_httpscli_mbedTLS

FreeRTOSを使用して、lwIP TCP/IPとMbedTLSスタック上にセットアップされたHTTPSクライアント。

FreeRTOS

lwip_dhcp_usb

lwIP TCP/IPおよびUSBスタック上のDHCPとpingのデモ。

lwip_dhcp

DHCPクライアントで、進行中のステータスを出力します。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-05-2026 01:54 AM
更新者: