SIOCSIFADDR:File exist(2023.3.28)

发布时间 2023-03-28 16:43:22作者: Skyge

通常为以下两种情况:
①ip冲突导致

 

②系统环境配置dhcp且分配ip地址失败

  使用ifconfig命令设置静态ip,有时掩码设置的明明是255.255.0.0,实际却变成255.255.255.0,有时甚至IP会变成169.254.185.253,仔细查看串口打印信息发现有报错:

这个在网上没有搜到相关线索,只是发现169.254.185.253与dhcp有关,于是顺藤摸瓜,发现/etc/init.d目录下有个S41dhcpcd文件。我这个项目是不需要动态获取IP的,于是用find命令搜索这个脚本的来源,发现在buildroot\package\dhcpcd里,对应配置项BR2_PACKAGE_DHCPCD,于是找到buildroot\configs里对应的defconfig文件,将BR2_PACKAGE_DHCPCD关掉,./build.sh rootfs,重新烧写固件,然后发现S41dhcpcd依然存在。一番分析过后发现是buildroot\output目录下生成的根文件系统不是每次都重新生成的,于是将根文件系统里etc/init.d/S41dhcpcd删除,然后再次./build.sh rootfs,重新烧写固件,最终问题得到解决

 

  169.254.0.0/16是链路本地地址是互联网协议地址仅用于本地网络(链接)或主机连接到的点对点连接的段内的通信。路由器不转发与链路本地地址的数据包。链路本地地址可以由管理员手动或由操作系统程序来分配。它们大多使用无状态地址自动分配。在IPv4中,[1],它们通常仅当地址配置的没有外部,状态机制存在,如动态主机配置协议(DHCP失败),或者当另一个初级配置方法未能实现(ip冲突)。网卡ip变成169.254.x.x,一种情况是是pc的网卡启动或者dhcp续租成功时,检测到环境中存在ip冲突,操作系统为保护起见分配的保留ip地址。此地址不是合法的地址,因此无法获取的网关的mac地址,无法实现上网等操作。路由器不响应这类消息的arp请求,这个地址无法通过路由器。另一种情况是dhcp功能打开,发出discover消息,没有得到应答消息,操作系统自动分配给pc网卡一个169.254.xx.xx的ip地址。

 

原文链接:

https://blog.csdn.net/qq_22226857/article/details/121768674

https://blog.csdn.net/wj31932/article/details/97016130