色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

rt-thread源碼分析之socket抽象層和網卡注冊

冬至子 ? 來源:happycode999 ? 作者:happycode999 ? 2023-11-13 12:43 ? 次閱讀

rt-thread網絡架構

如圖所示,rt-thread的網絡分為應用層、sal_socket、netdev、協議簇(at、lwip、wiznet)、網卡驅動五層。

應用層:調用BSD Socket API實現的網絡應用,如前面介紹的paho-mqtt。

sal_socket:對socket的抽象,通過網卡(netdev)的pf(sal_proto_family)調用具體的協議簇。

netdev:netdev的私有數據保存協議簇pf(sal_proto_family),pf中的family用于匹配socket需要的協議簇。

協議簇:當socekt匹配上協議簇后,pf的skt_ops調用具體的協議簇。協議簇的實現在sal_socket文件夾下的impl文件夾下,在每一類協議簇的實現中,都有一個向netdev設置協議簇的接口,如lwip中的sal_lwip_netdev_set_pf_info。這樣就可以通過netdev訪問到具體的協議簇。

網卡驅動:底層硬件。

二 sal_socket

2.1 BSD socket

當我們在調用BSD socket寫代碼時,實際上是調用sal_xxx(如sal_socket),在sys/socket.h文件中,通過#define將socket轉換成sal_socket的接口。

2.2 sal_init

sal_init從堆中分配出一個socket表sal_socket_table。sal_socket_table用于保存所有的sockets的信息,當需要創建一個sal_socket時,會從表中取出一個未使用的sal_socket,表的索引(數組下標)是sal_socket的描述符。

2.3 socket函數

2.3.1 socket_new

socket_new從sal_socket_table中獲取一個未使用的socket,并返回描述符。

2.3.2 socket_init

socket_init根據domain在netdev_get_by_family函數中匹配netdev。socket原型為
int socket(int domain, int type, int protocol);

不同協議簇的domain值如下:

lwIP 協議棧: family = AF_INET、sec_family = AF_INET

AT Socket 協議棧: family = AF_AT、sec_family = AF_INET

WIZnet 硬件 TCP/IP 協議棧: family = AF_WIZ、sec_family = AF_INET

與之相應的,netdev私有數據所保存的協議簇sal_proto_family中有一個family字段,用于與socket進行匹配,這樣socket函數通過doamin參數就可以指定使用lwip、at、wiznet三種協議簇的一種。

2.3.3 pf->skt_ops->socket

通過pf->skt_ops->socket調用具體協議簇的socket函數,如lwip的lwip_socket。

三 網卡的匹配和注冊

3.1 網卡的匹配-netdev_get_by_family

for (node = &(netdev_list->list); node; node = rt_slist_next(node))
{
netdev = rt_slist_entry(node, struct netdev, list);
pf = (struct sal_proto_family *) netdev->sal_user_data;
if (pf && pf->skt_ops && pf->family == family && netdev_is_up(netdev))
{
rt_hw_interrupt_enable(level);
return netdev;
}
}

遍歷netdev_list,查找與socket函數傳入的domain(family)參數一致netdev。

3.2 網卡的注冊-netdev_add

在component文件夾的driver文件夾下,不同網卡驅動最終會調用到netdev_add向netdev_list添加netdev,向內核注冊一個網卡,以rw009為例。

rt_hw_wifi_init -> eth_device_init -> eth_device_init_with_flag -> eth_netif_device_init -> netdev_add。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP協議
    +關注

    關注

    1

    文章

    91

    瀏覽量

    12090
  • LwIP協議棧
    +關注

    關注

    0

    文章

    19

    瀏覽量

    7396
  • BSD
    BSD
    +關注

    關注

    0

    文章

    31

    瀏覽量

    10424
  • RT-Thread
    +關注

    關注

    31

    文章

    1293

    瀏覽量

    40228
  • MQTT
    +關注

    關注

    5

    文章

    651

    瀏覽量

    22551
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(十一、UART設備—源碼解析)

    一文帶你深入理解 RT-Thread I/O 設備模型 — UART 設備源碼分析
    的頭像 發表于 07-01 11:24 ?5535次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十一、UART設備—<b class='flag-5'>源碼</b>解析)

    RT-thread源碼移植到STM32F10x和STM32F4xx

    RT-thread源碼移植到STM32F10x和STM32F4xx: 一、源碼下載 點擊入門->下載 ? 在歷史版本里邊隨便選取一個 ? 會進入百度云盤的下載地址,里邊有全部版本的源碼
    的頭像 發表于 11-15 09:38 ?2630次閱讀
    <b class='flag-5'>RT-thread</b><b class='flag-5'>源碼</b>移植到STM32F10x和STM32F4xx

    一文讀懂RT-Thread的SAL套接字抽象

    SAL 簡介為了適配更多的網絡協議棧類型,避免系統對單一網絡協議棧的依賴,RT-Thread 系統提供了一套 SAL(套接字抽象)組件,該組件完成對不同網絡協議棧或網絡實現接口的抽象
    發表于 04-08 15:44

    WIZnet軟件包對接RT-Thread SAL套接字抽象實現對BSD Socket APIs的支持

    RT-Thread SAL 套接字抽象,實現對標準 BSD Socket APIs 的支持,完美的兼容多種軟件包和網絡功能實現,提高 WIZnet 設備兼容性。1.1 目錄結構WI
    發表于 05-17 17:00

    RTT網絡框架及SAL套接字抽象介紹

    RTT 中提供了標準的 BSD Socket 接口,同時也完成上面所說的兩大工作。為了解決協議棧與標準 Socket 的對接,RT-Thread 提供了一套 SAL(套接字抽象
    發表于 07-28 11:40

    基于RT-Thread的FM1702源碼

    RT-Thread是一款來自中國的開源嵌入式實時操作系統,包括一系列應用組件和驅動框架,如TCP/IP協議棧,虛擬文件系統,POSIX接口,圖形用戶界面。---(轉自RTT官網)。 FM1702是無線射頻的一種,現將其移植到RT-Thread操作系統中。
    發表于 12-28 10:54 ?15次下載

    RT-Thread發布SAL套接字抽象,帶來全新物聯網軟件開發模式

    Socket CAN 作為Linux上CAN編程的一種方式,它簡易易用,編程順手。很多用戶也想在 RT-Thread 上實現 Socket CAN 編程,這個時候就需要 SAL 上場了。只需要我們在底層使用
    發表于 07-22 12:37 ?2504次閱讀
    <b class='flag-5'>RT-Thread</b>發布SAL套接字<b class='flag-5'>抽象</b><b class='flag-5'>層</b>,帶來全新物聯網軟件開發模式

    RT-Thread設備模型框架及創建注冊設備的實現

    RT-Thread設備模型框架及創建注冊設備的實現方式介紹如下:
    的頭像 發表于 05-28 10:38 ?2198次閱讀
    <b class='flag-5'>RT-Thread</b>設備模型框架及創建<b class='flag-5'>注冊</b>設備的實現

    RT-Thread操作系統的FreeRTOS兼容

    Github地址 https://github.com/RT-Thread-packages/FreeRTOS-Wrapper 期待您的 Star 本項目是2022年開源夏,RT-Thread社區
    的頭像 發表于 01-14 00:55 ?1664次閱讀

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    淺析RT-Thread設備驅動框架

    RT-Thread 設備框架屬于組件和服務,是基于 RT-Thread 內核之上的上層軟件。設備框架是針對某一類外設,抽象出來的一套統一的操作方法及接入標準,可以屏蔽硬件差異,為應用
    的頭像 發表于 08-07 15:39 ?2002次閱讀

    RT-Thread源碼分析網卡數據的接收和發送

    ethernetif.c是lwip的網卡接口,在該接口中處理網卡的數據接收和發送,rt-thread在該接口文件中抽象了一個eth_device,管理網絡數據的收發和向內核的netde
    的頭像 發表于 08-11 16:49 ?1808次閱讀

    基于rt-threadsocket通信設計

    最近再研究 rt-thread 的通信 ,想設計出 eps8266(多個) rt-thread(作為中控) 服務器的通信框架,使用的開發板是 潘多拉
    的頭像 發表于 10-13 15:02 ?1376次閱讀
    基于<b class='flag-5'>rt-thread</b>的<b class='flag-5'>socket</b>通信設計

    RT-Thread成為恩智浦注冊合作伙伴,共同賦能工業與物聯網應用開發!

    前不久,恩智浦半導體加入RT-Thread全球合作伙伴計劃,成為RT-Thread高級會員合作伙伴。同時,RT-Thread現已成為恩智浦注冊合作伙伴。
    的頭像 發表于 03-15 09:15 ?877次閱讀
    主站蜘蛛池模板: 影音先锋2017av天堂| 国产69精品久久久熟女| 91九色精品国产免费| 97公开超碰在线视频| 精品一产品大全| 亚洲欧美色综合影院| 国产又色又爽又刺激在线播放| 日本亚洲电影| 成人小视频在线观看免费| 欧美日韩无套内射另类| 99re久久热在线播放8| 空姐厕所啪啪啪| 少妇内射视频播放舔大片| xxxx88| 欧洲vs美洲完整视频| xxnx日本| 入禽太深视频免费视频| 公和我做好爽添厨房中文字幕 | 中文字幕无码乱人伦蜜桃| 久久久中日AB精品综合| 重口味av| 欧美兽交YOYO| 国产99久久久国产精品免费看| 帅哥操帅哥| 韩国女人高潮嗷嗷叫视频| 人妻满熟妇AV无码区国产| 啊…嗯啊好深男男高h文总受| 日本视频中文字幕一区二区| 岛国片在线看| 性欧美xxxxporn| 久久re热在线视频精99| 97夜夜澡人人爽人人模人人喊| 碰超成人在线公开免费视频| 国产AV综合手机在线观看| 亚洲精品天堂在线观看| 老头xxx| 大香伊人久久| 亚洲人成网站在线播放| 嫩草影院久久99| 国产精品亚洲专一区二区三区| 一区二区三区高清视频|