Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Network
请教一下网卡注册的问题
发布于 2019-08-14 11:18:33 浏览:3070
订阅该版
``` \ | / - RT - Thread Operating System / | \ 3.1.3 build Aug 13 2019 2006 - 2019 Copyright by rt-thread team found part[0], begin: 4194304, size: 3.652GB SD Card init OK File System initialized! ETH FullDuplex ETH speed 100M BIST pass lwIP-2.0.2 initialized! TCP/IP initialized! rtc is not configured please configure with set_date and set_time msh />ifconfig ifconfig: network interface device list error. msh /> msh /> ``` 硬件平台是STM32F207,工程使用Env生成的,初始化都通过,也能ping通板子,但是网卡列表是空的呢? 是不是哪里少了注册的步骤?
查看更多
6
个回答
默认排序
按发布时间排序
wuhanstudio
2019-08-14
这家伙很懒,什么也没写!
这里有网卡注册的介绍 [https://www.rt-thread.org/document/site/programming-manual/netdev/netdev/](https://www.rt-thread.org/document/site/programming-manual/netdev/netdev/)
k_server
2019-08-15
这家伙很懒,什么也没写!
说明文档里面是这么说的: --- 每一个网卡在初始化完成之后,需要调用网卡注册函数注册网卡到网卡列表中,注册网卡的接口如下所示:int netdev_register(struct netdev *netdev, const char *name, void *user_data);[table=98%,rgb(252, 252, 252)] [td][tr][td]**参数**[/td][td]**描述**[/td][/tr] [tr][td]netdev[/td][td]网卡对象[/td][/tr] [tr][td]name[/td][td]网卡名称[/td][/tr] [tr][td]user_data[/td][td]用户使用数据[/td][/tr] [tr][td]**返回**[/td][td]**——**[/td][/tr] [tr][td]0[/td][td]网卡注册成功[/td][/tr] [tr][td]-1[/td][td]网卡注册失败[/td][/tr] [/table]该函数不需要在用户层调用,一般为网卡驱动初始化完成之后自动调用,如 esp8266 网卡的注册在 esp8266 设备网络初始化之后自动完成。 --- 开始以为系统会自动注册的,结果发现没有;后面我在以下代码添加了一句,网卡就注册上了,不知道这样添加有潜在的问题没: ```c /* Keep old drivers compatible in RT-Thread */ rt_err_t eth_device_init_with_flag(struct eth_device *dev, const char *name, rt_uint16_t flags) { struct netif* netif; netif = (struct netif*) rt_malloc (sizeof(struct netif)); if (netif == RT_NULL) { rt_kprintf("malloc netif failed\n"); return -RT_ERROR; } rt_memset(netif, 0, sizeof(struct netif)); /* set netif */ dev->netif = netif; /* device flags, which will be set to netif flags when initializing */ dev->flags = flags; /* link changed status of device */ dev->link_changed = 0x00; dev->parent.type = RT_Device_Class_NetIf; /* register to RT-Thread device manager */ rt_device_register(&(dev->parent), name, RT_DEVICE_FLAG_RDWR); rt_sem_init(&(dev->tx_ack), name, 0, RT_IPC_FLAG_FIFO); /* set name */ netif->name[0] = name[0]; netif->name[1] = name[1]; /* set hw address to 6 */ netif->hwaddr_len = 6; /* maximum transfer unit */ netif->mtu = ETHERNET_MTU; /* get hardware MAC address */ rt_device_control(&(dev->parent), NIOCTL_GADDR, netif->hwaddr); /* set output */ netif->output = etharp_output; netif->linkoutput = ethernetif_linkoutput; #if LWIP_NETIF_HOSTNAME /* Initialize interface hostname */ netif->hostname = "rtthread"; #endif /* LWIP_NETIF_HOSTNAME */ /* if tcp thread has been started up, we add this netif to the system */ if (rt_thread_find("tcpip") != RT_NULL) { ip4_addr_t ipaddr, netmask, gw; #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 netifapi_netif_add(netif, &ipaddr, &netmask, &gw, dev, eth_netif_device_init, tcpip_input); } #ifdef RT_USING_NETDEV /* network interface device flags synchronize */ netdev_flags_sync(netif); eth_netif_device_init(netif); #endif /* RT_USING_NETDEV */ return RT_EOK; } ``` `“eth_netif_device_init”`这个函数,我看没有调用到,里面就有注册的部分,我就直接在这里加上了。 麻烦看看这样合适不?
Cheney_Chen
2019-08-15
这家伙很懒,什么也没写!
你看看是不是你设备网卡驱动自动初始化等级高于 lwip 自动初始化等级,导致 eth_netif_device_init 函数未被调用,我之前好像遇到过这个问题。
k_server
2019-08-15
这家伙很懒,什么也没写!
>你看看是不是你设备网卡驱动自动初始化等级高于 lwip 自动初始化等级,导致 eth_netif_device_init 函数未 ... 之前没有开组件自动初始化的宏,今天看了下组件的自动初始化里面好像也没有把网卡驱动给加上去,所以就不敢确定自己加的对不对。 而且STM32F207的默认工程,是没开组件自动初始话,自己即使打开了相关宏定义,发现也有其它问题:components里面rtthread_startup()里面没有对heap的初始化。后面找了个默认开启了组件自动初始化的工程(不是207的工程),对比发现开了组件自动初始话的工程里面heap的初始化被移到了rt_hw_board_init()里面。 所以目前还是暂时采用默认的(未开启组件自动初始话),用的我上面的方式注册了网卡,然后自己添加下面几个组件的初始话: ```c #ifdef RT_USING_FINSH /* init finsh */ finsh_system_init(); #endif #ifdef RT_USING_ULOG ulog_console_backend_init(); #endif #ifdef RT_USING_SAL sal_init(); #endif rt_work_sys_workqueue_initial(); ``` 添加了examples里面的tcpserver到工程,通过msh启动TCP server,log记录如下,但是TCP server却怎么都连不上。是不是还是漏了什么初始化? ``` \ | / - RT - Thread Operating System \ | / - RT - Thread Operating System / | \ 3.1.3 build Aug 15 2019 2006 - 2019 Copyright by rt-thread team found part[0], begin: 4194304, size: 3.652GB SD Card init OK File System initialized! ETH FullDuplex ETH speed 100M BIST pass lwIP-2.0.2 initialized! TCP/IP initialized! rtc is not configured please configure with set_date and set_time 01-01 00:00:00 I/sal.skt init: Socket Abstraction Layer initialize success. msh />tcpserver -p 10011 01-01 00:00:17 I/TCP tcp_serv: TCPServer Waiting for client on port 10011... ``` 后面有添加了mqtt组件测试(都是通过Env生成的工程),但是也总是过不去,log如下: ``` 01-01 00:00:51 D/mqtt.sample mqtt0: inter mqtt_connect_callback! 01-01 00:00:51 D/mqtt mqtt0: ipv4 address port: 1883 01-01 00:00:51 D/mqtt mqtt0: HOST = 'pq6ytz5.mqtt.iot.gz.baidubce.com' msh /> msh /> 01-01 00:00:58 E/mqtt mqtt0: getaddrinfo err: 202 'pq6ytz5.mqtt.iot.gz.baidubce.com' 01-01 00:00:58 E/mqtt mqtt0: resolve uri err 01-01 00:00:58 E/mqtt mqtt0: Net connect error(-1). 01-01 00:00:58 D/mqtt.sample mqtt0: inter mqtt_offline_callback! ``` 这个HOST是我自己注册的百度云的,肯定是可以用的
学长啊啊啊
2019-09-04
这家伙很懒,什么也没写!
楼主,我也遇到这个问题。而且我发现 eth_device_init_with_flag 这个函数都没有被执行到。不知这个函数应该添加在哪里执行?
Lee_Z
2020-06-10
这家伙很懒,什么也没写!
楼主问题解决了么
撰写答案
登录
注册新账号
关注者
0
被浏览
3.1k
关于作者
k_server
这家伙很懒,什么也没写!
提问
10
回答
31
被采纳
0
关注TA
发私信
相关问题
1
lwip1.4.1连接经常会断开无法连接上,可以ping通
2
LPC1768:RTT+LWIP+webserver用IE刷网页出现硬件中断错误(已经解决)
3
求一些LWIP开发的经验,目前ping一直不稳定。
4
stm32f207+dp83848无法ping通
5
RTT下的LWIP传递机制
6
rtt内lwip的socket是否是线程安全?
7
Lwip+enc28j60无法ping通
8
坑爹的rtconfig.h lwip关掉了checksum
9
花了一个晚上,把RT2.0的LWIP、网卡驱动、文件系统整合起来了,发现一点小问题
10
lwip例程中udp发送时如何指定源端口发送到指定目的地端口
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread Nano 上线ST CubeMX
2
Nordic移植笔记: RT_Thread v5.1.0(基于Nordic nRF52840的ble_app_hids_mouse工程)
3
RT-Thread PWM设备无输出解决办法
4
关于studio文件构建及宏控制
5
cubemx RTThread Nano + vscode + cortex + EIDE 环境配置
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
flash
packages_软件包
cubemx
PWM
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
socket
flashDB
中断
GD32
Debug
编译报错
msh
keil_MDK
rt_mq_消息队列_msg_queue
C++_cpp
at_device
MicroPython
ulog
本月问答贡献
rv666
13
个答案
2
次被采纳
踩姑娘的小蘑菇
9
个答案
2
次被采纳
xiaorui
7
个答案
2
次被采纳
道友
6
个答案
2
次被采纳
三世执戟
5
个答案
2
次被采纳
本月文章贡献
Licy
3
篇文章
1
次点赞
rv666
1
篇文章
7
次点赞
王依依
1
篇文章
5
次点赞
rtt_dmx
1
篇文章
5
次点赞
jaffer
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部