在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    101

    瀏覽量

    12274
  • LwIP協議棧
    +關注

    關注

    0

    文章

    19

    瀏覽量

    7549
  • BSD
    BSD
    +關注

    關注

    0

    文章

    31

    瀏覽量

    10518
  • RT-Thread
    +關注

    關注

    31

    文章

    1337

    瀏覽量

    41301
  • MQTT
    +關注

    關注

    5

    文章

    661

    瀏覽量

    23290
收藏 人收藏

    評論

    相關推薦

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

    一文帶你深入理解 RT-Thread I/O 設備模型 — UART 設備源碼分析
    的頭像 發表于 07-01 11:24 ?5826次閱讀
    <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 ?3028次閱讀
    <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 ?2591次閱讀
    <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 ?2303次閱讀
    <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 ?1821次閱讀

    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 ?2296次閱讀

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

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

    基于rt-threadsocket通信設計

    最近再研究 rt-thread 的通信 ,想設計出 eps8266(多個) rt-thread(作為中控) 服務器的通信框架,使用的開發板是 潘多拉
    的頭像 發表于 10-13 15:02 ?1505次閱讀
    基于<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 ?999次閱讀
    主站蜘蛛池模板: 狼人久草 | 成人午夜大片免费看爽爽爽 | 一区二区三区免费 | 国产tube| 在线视频观看免费 | 深爱五月激情 | 国产精品亚洲精品日韩动图 | 在线观看www妖精免费福利视频 | 色播影院性播免费看 | 三级网站在线免费观看 | 久久精品2020| 久久久久亚洲香蕉网 | 国产亚洲精品仙踪林在线播放 | 丁香花的视频免费观看 | 真实的国产乱xxxx在线 | 口述他拿舌头进去我下面好爽 | 亚洲国产欧美在线人成aaa | 好男人www社区影视在线 | 久草视频资源在线 | 午夜看片影院在线观看 | 伊人网视频 | 色多多视频官网 | 伊人成人在线观看 | 国产黄色小视频网站 | 色亚洲欧美 | 亚洲第一中文字幕 | 国产香蕉一区二区精品视频 | 免费手机黄色网址 | 手机看片福利久久 | 色婷婷影院在线视频免费播放 | 人人洗澡人人洗澡人人 | 午夜五月天 | 亚洲欧美人成网站综合在线 | 99精品视频免费 | 欧美性黄色 | jizz性欧美12 | 一级毛片无毒不卡直接观看 | 亚洲va中文字幕 | 日韩精品卡4卡5卡6卡7卡 | 影院在线观看免费 | 精品乱人伦一区二区三区 |