伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

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

3天內不再提示

rt-thread系統運行期改變網卡配置

冬至子 ? 來源:出出啊 ? 作者:出出啊 ? 2023-11-28 17:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

忘記在哪個論壇問題里回答過這個了,rtt 配置 DHCP 或者靜態 ip 是靜態配置的。它只能在 menuconfig 或者 setting 的時候,或選擇 DHCP 編譯或選擇 靜態 ip編譯,系統運行起來以后如果想開啟或關閉 DHCP 就做不到了。

相信每一個做產品的打工人的需求都是動態配置的,需要在系統啟動以后,運行期開啟或關閉 DHCP。

下面簡單講講怎么做。

第一步,配置 lwip 開啟 DHCP

這一步是一定要的,因為這一步是使能 lwip 的dhcp 功能,只有使能了之后,后面才有開啟/關閉 DHCP 的意義。

第二步,定義網絡配置全局變量

首先,定義如下結構體類型(示意代碼):

typedef struct __network_config{
rt_bool_t dhcp_enable;
char *lan_ip;
char *lan_nm;
char *lan_gw;
}NetworkConfig;

然后,定義一個全局變量 NetworkConfig network;。

第三步,修改 “ethernetif.c” 文件

這個文件修改的地方全部和 DHCP 相關,所以,在這個文件里搜索 “LWIP_DHCP” 這個宏,+凡是使用 “LWIP_DHCP” 宏的地方都需要進行修改+。

聲明 NetworkConfig network; 變量

或者 extern 或者 include 頭文件,首先把前邊定義的全局變量在當前文件里聲明一下。

netdev_flags_sync

修改前,

#if LWIP_DHCP
netdev_low_level_set_dhcp_status(netdev, RT_TRUE);
#else
netdev_low_level_set_dhcp_status(netdev, RT_FALSE);
#endif

修改后,

#if LWIP_DHCP
netdev_low_level_set_dhcp_status(netdev, network.dhcp_enable);
#else
netdev_low_level_set_dhcp_status(netdev, RT_FALSE);
#endif

修改后,我們根據全局變量 network 中的配置來決定設置 DHCP 狀態。

eth_netif_device_init

修改前,

#if LWIP_DHCP
/* if this interface uses DHCP, start the DHCP client */
dhcp_start(ethif->netif);
#endif

修改后,

#if LWIP_DHCP
/* if this interface uses DHCP, start the DHCP client */
if (network.dhcp_enable == RT_TRUE) {
dhcp_start(ethif->netif);
}
#endif

修改后,根據全局變量 network 中的配置來決定是否打開 DHCP。

eth_device_init_with_flag

修改前,

#if !LWIP_DHCP
ipaddr.addr = inet_addr(RT_LWIP_IPADDR);
gw.addr = inet_addr(RT_LWIP_GWADDR);
netmask.addr = inet_addr(RT_LWIP_MSKADDR);
#else
IP4_ADDR(&ipaddr, 0, 0, 0, 0);
IP4_ADDR(&gw, 0, 0, 0, 0);
IP4_ADDR(&netmask, 0, 0, 0, 0);
#endif

修改后,

#if !LWIP_DHCP
ipaddr.addr = inet_addr(RT_LWIP_IPADDR);
gw.addr = inet_addr(RT_LWIP_GWADDR);
netmask.addr = inet_addr(RT_LWIP_MSKADDR);
#else
if (network.dhcp_enable != RT_TRUE) {
ipaddr.addr = inet_addr(network.lan_ip);
gw.addr = inet_addr(network.lan_gw);
netmask.addr = inet_addr(network.lan_nm);
} else {
IP4_ADDR(&ipaddr, 0, 0, 0, 0);
IP4_ADDR(&gw, 0, 0, 0, 0);
IP4_ADDR(&netmask, 0, 0, 0, 0);
}
#endif

修改后,根據全局變量 network 中的配置來選擇初始化網卡的 ip 地址。

eth_device_deinit

修改前,

#if LWIP_DHCP
dhcp_stop(netif);
dhcp_cleanup(netif);
#endif

修改后,

#if LWIP_DHCP
if (network.dhcp_enable == RT_TRUE) {
dhcp_stop(netif);
dhcp_cleanup(netif);
}
#endif

卸載網卡設備時,需要根據當前是否開啟了 DHCP 來決定需不需要停止和清理 DHCP。

第四步,應用程序接口

應用程序里,無論使用哪種解數,千方百計修改前文定義的全局變量。之后就剩下打開/關閉 DHCP、修改本地 ip 地址、修改子網掩碼、修改網關 ip 等等常規操作。

通過如下代碼,在系統運行期打開或者關閉 DHCP:

struct netdev *netdev = RT_NULL;
netdev = netdev_get_by_name("e0");
netdev_dhcp_enabled(netdev, (network.dhcp_enable == RT_TRUE));

注:如果關閉 DHCP 之后,想修改 ip 地址為靜態 ip 。需要另行設置。
注:如上代碼只是示意性代碼,并不保證實際使用中包含漏洞。

在系統運行期修改 ip 地址的主要代碼如下:

struct netdev *netdev = RT_NULL;
ip_addr_t addr;
netdev = netdev_get_by_name("e0");
inet_aton(network.lan_ip, &addr);
netdev_set_ipaddr(netdev, &addr);

注:如上代碼只是示意性代碼,并不保證實際使用中包含漏洞。

運行期修改子網掩碼和網關 ip 的過程同上,不同的是調用的函數不一樣。

總結

以上操作已經在項目中得到驗證,目前運行良好。

請自行解決輸入的 ip 地址字符串是否符合格式問題。

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

    關注

    2

    文章

    41

    瀏覽量

    11355
  • DHCP
    +關注

    關注

    0

    文章

    109

    瀏覽量

    20896
  • LwIP協議
    +關注

    關注

    0

    文章

    11

    瀏覽量

    9308
  • RT-Thread
    +關注

    關注

    32

    文章

    1630

    瀏覽量

    45079
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RT-Thread NUC97x 移植 LVGL

    不涉及 rt-thread 驅動,但是它是 LVGL 和 rt-thread 的接口。LVGL 在 rt-thread運行的基石。
    發表于 07-08 09:37 ?2161次閱讀

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本文是RT
    發表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導在RT-Thread實時操作系統環境下如何進行編 程。
    發表于 11-26 16:16 ?0次下載

    RT-Thread軟件包定義和使用

    RT-Thread軟件包是運行RT-Thread物聯網操作系統平臺上,面向不同應用領域的通用軟件組件 。RT-Thread 同時提供了開放
    的頭像 發表于 05-21 11:29 ?1.2w次閱讀
    <b class='flag-5'>RT-Thread</b>軟件包定義和使用

    RT-thread】如何將RT-thread系統移植到stm32

    設備,RT-Thread 又能使用在線的軟件包管理工具,配合系統配置工具實現直觀快速的模塊化裁剪,無縫地
    發表于 12-08 11:06 ?21次下載
    【<b class='flag-5'>RT-thread</b>】如何將<b class='flag-5'>RT-thread</b><b class='flag-5'>系統</b>移植到stm32

    RT-Thread STM32 配置系統時鐘(使用外部晶振)

    RT-Thread STM32 配置系統時鐘開發環境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現在已經更新到1.1.3,由于本人使用RTT開發已
    發表于 12-14 18:45 ?15次下載
    <b class='flag-5'>RT-Thread</b> STM32 <b class='flag-5'>配置</b><b class='flag-5'>系統</b>時鐘(使用外部晶振)

    RT-Thread Studio驅動SD卡

    RT-Thread Studio驅動SD卡前言一、創建基本工程1、創建Bootloader2、創建項目工程二、配置RT-Thread Settings三、代碼分析1.引入庫2.讀入數據四、效果驗證
    發表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio驅動SD卡

    RT-Thread開源作品秀】基于RT-Thread的星務平臺研究

    本作品為了驗證星務軟件在RT-Thread系統運行的可行性,底層是否能夠驅動星務軟件,同時擴展RT-Thread應用范圍。ART-Pi作為衛星下位機,...
    發表于 01-25 18:26 ?6次下載
    【<b class='flag-5'>RT-Thread</b>開源作品秀】基于<b class='flag-5'>RT-Thread</b>的星務平臺研究

    RT-Thread全球技術大會:RT-Thread構建配置系統

    RT-Thread全球技術大會:RT-Thread構建配置系統,構建系統也稱為組件自動化,通常需要通過腳本聲明構建行為。 ? ? ? ? 審
    的頭像 發表于 05-27 14:39 ?1938次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>構建<b class='flag-5'>配置</b><b class='flag-5'>系統</b>

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例

    RT-Thread全球技術大會:RT-Thread上的單元測試框架與運行測試用例 ? ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:21 ?2351次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>上的單元測試框架與<b class='flag-5'>運行</b>測試用例

    RT-Thread學習筆記 RT-Thread的架構概述

    的種種優越之處。RT-Thread 是一款完全由國內團隊開發維護的嵌入式實時操作系統(RTOS),具有完全的自主知識產權。經過 16 個年頭的沉淀,伴隨著物聯網的興起,它正演變成一個功能強大、組件豐富的物
    的頭像 發表于 07-09 11:27 ?6064次閱讀
    <b class='flag-5'>RT-Thread</b>學習筆記 <b class='flag-5'>RT-Thread</b>的架構概述

    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 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發表于 02-22 18:23 ?10次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    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 Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?6532次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學習