完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在板子使用ipv4没有问题,想增加ipv6的支持。 根据《RT-Thread编程指南》里面关于ipv6的部分配置过但是不能使用,2019-01-01版本。文档里面的lwIP还是在 1.5.0-Beta发布之前的?? 从menuconfig里面,选中Components->Network->light weight TCP/IP stack->IPV6 protocol后编译。 #define LWIP_IPV6_ADDRESS_LIFETIMES 180
此处还是会报内存错误。 请教下该怎么配置来支持IPV6呢??在此谢过!! |
|
相关推荐
17个回答
|
|
报的什么错误?
|
|
|
|
可以把调用栈打出来,看看死在哪里
|
|
|
|
addr2line 对应显示如下:
PS E:rt-thread-4.0.5-d16-20220615bspstm32stm32f407-evc-d16cmake-build-debug> addr2line -e rtthread.elf -a -f 0804d36e 0804eeac 0807959e 0806bea2 0806dc68 08066c48 0806ad44 0806b132 0806ade8 0806dd90 0806ddda 080418be 0804e99e 0804e9a4 0804e9f6 0x0804d36e rt_malloc E:rt-thread-4.0.5-d16-20220615src/mem.c:349 0x0804eeac rt_sem_take E:rt-thread-4.0.5-d16-20220615src/ipc.c:489 0x0807959e mem_malloc E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcarch/sys_arch.c:735 0x0806bea2 dhcp_start E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srccoreipv4/dhcp.c:757 0x0806dc68 eth_netif_device_init E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcnetif/ethernetif.c:485 0x08066c48 netif_add E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srccore/netif.c:378 0x0806ad44 netifapi_do_netif_add E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcapi/netifapi.c:67 0x0806b132 tcpip_api_call E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcapi/tcpip.c:478 0x0806ade8 netifapi_netif_add E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcapi/netifapi.c:253 0x0806dd90 eth_device_init_with_flag E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcnetif/ethernetif.c:567 0x0806ddda eth_device_init E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcnetif/ethernetif.c:582 0x080418be rt_hw_stm32_eth_init E:rt-thread-4.0.5-d16-20220615bspstm32librariesHAL_Drivers/drv_eth.c:616 0x0804e99e rt_components_init E:rt-thread-4.0.5-d16-20220615src/components.c:119 (discriminator 3) 0x0804e9a4 rt_components_init E:rt-thread-4.0.5-d16-20220615src/components.c:119 (discriminator 3) 0x0804e9f6 main_thread_entry E:rt-thread-4.0.5-d16-20220615src/components.c:198 PS E:rt-thread-4.0.5-d16-20220615bspstm32stm32f407-evc-d16cmake-build-debug> |
|
|
|
软件调试,看看死机的位置,像是内存引起的。
|
|
|
|
单不执行的时候到dhcp.c文件的757行
dhcp_ptr = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); 这出错的,再往下就到mem.c的406行 rt_sem_release(&heap_sem);处出错。 |
|
|
|
这时线程调度起来了吗?
|
|
|
|
要怎么确定线程调度是否起来呢?
我尝试在不同的地方申请内存,发现在ethernetif.c的351行 netdev_low_level_set_dhcp_status(netdev, RT_TRUE);之前执行内存申请是正常的,在这之后申请都会报错。 |
|
|
|
主要是确认是否初始化的过早,正常申请内存不会出现死机。尝试把网卡驱动的初始化,放到后面试试
|
|
|
|
drv_eth.c中初始化的宏从INIT_DEVICE_EXPORT改成INIT_COMPONENT_EXPORT延迟了还是报错。
印象中调度线程是在跑用户线程main后起来的吧??调度线程应该还没起来。 |
|
|
|
请问我这样配置是正确的吗?如问题描述里面所说,我是在ipv4可正常使用的基础上,从menuconfig里面选中Components->Network->light weight TCP/IP stack->IPV6 protocol,然后在rtconfig.h中增加#define LWIP_IPV6_ADDRESS_LIFETIMES 180这行,改了这两个地方。现在出错不确定是我配置的问题还是其他什么地方的问题。
lwip2.0.3版本只改munuconfig里面,在rtconfig.h里面不加那行就可以编译运行,但是板子连接到两pc之间可以ipv6通讯的路由器上面,板子获取不到路由器分配的ipv6地址,用link-local地址也不能相互通讯。 |
|
|
|
drv_eth.c 的初始化先放到 main 函数中试试,主要是为了【定位】问题。
如果是初始化次序引起的,比如在调度前申请内存,可能要调整内存的算法之类,如申请内存中有【互斥量】,但没调度前不允许【互斥量】 自动初始化时方便的,可以先注释掉,main中加个延时调用, |
|
|
|
谢谢关注此问题!!!
放到main里面初始化了,并且延迟了10秒,问题还是存在,一下是堆栈信息: 0x0804fc4e rt_malloc E:rt-thread-4.0.5-d16-20220615src/mem.c:349 0x0804de90 rt_sem_take E:rt-thread-4.0.5-d16-20220615src/ipc.c:489 0x08079542 mem_malloc E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcarch/sys_arch.c:735 0x0806be46 dhcp_start E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srccoreipv4/dhcp.c:757 0x0806dc0c eth_netif_device_init E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcnetif/ethernetif.c:488 0x08066c08 netif_add E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srccore/netif.c:378 0x0806ace8 netifapi_do_netif_add E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcapi/netifapi.c:67 0x0806b0d6 tcpip_api_call E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcapi/tcpip.c:478 0x0806ad8c netifapi_netif_add E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcapi/netifapi.c:253 0x0806dd34 eth_device_init_with_flag E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcnetif/ethernetif.c:570 0x0806dd7e eth_device_init E:rt-thread-4.0.5-d16-20220615componentsnetlwip-2.1.2srcnetif/ethernetif.c:585 0x08040e12 rt_hw_stm32_eth_init E:rt-thread-4.0.5-d16-20220615bspstm32librariesHAL_Drivers/drv_eth.c:616 0x08040f1c rt_eth_init E:rt-thread-4.0.5-d16-20220615bspstm32librariesHAL_Drivers/drv_eth.c:675 0x08040f20 rt_eth_init E:rt-thread-4.0.5-d16-20220615bspstm32librariesHAL_Drivers/drv_eth.c:675 0x08028332 main E:rt-thread-4.0.5-d16-20220615bspstm32stm32f407-evc-d16applications/main.c:200 0x0804f8a2 main_thread_entry E:rt-thread-4.0.5-d16-20220615src/components.c:200 我又检查了我做的修改,在at_socket.c文件的1298行 sa4->type = IPADDR_TYPE_V4; 被我注释了,这行编译不通过,对应结构体里面也没有这个字段。不知道您那边是否也这样? |
|
|
|
lwip 改个版本试试,如2.0.3
|
|
|
|
如问题描述里面所说,2.0.3版本可以编译运行,进系统后可以看到生成了link-local地址。但是在两pc可以相互通讯的环境下面,板子获取不到路由器分配的ipv6地址(可以获取ipv4地址),板子与pc也不能通过link-local互拼。
|
|
|
|
通过路由器连接板子主要是想验证板子上ipv6的有效性,实际使用场景是两板子通过网下直连,可以通过link-local通讯即可。
|
|
|
|
lwip ipv6 没用过,是不是初始化网卡驱动时要设置什么?或者DHCP 需要设置什么才能支持呢
|
|
|
|
之前也没搞过这块,rt-thread上ipv6的配置说明文档也没有找着,痛苦呀。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
快速部署!米尔全志T527开发板的OpenCV行人检测方案指南
4214 浏览 0 评论
3020 浏览 0 评论
边缘设备的奇妙之旅:在小凌派-RK2206上部署AI模型来实现视觉巡线
1412 浏览 0 评论
4714 浏览 0 评论
超强算力+实时响应!米尔发布基于STM32MP25x核心板Debian系统
9117 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-25 12:33 , Processed in 1.076694 second(s), Total 103, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191