开发板调试DHCP笔记记录

来源:互联网 发布:ios10蜂窝数据快捷开关 编辑:程序博客网 时间:2024/06/06 12:28

测试反映设备DHCP不可用。这可是相当严重的一个问题,对此,我不得不重视起来。本以为是很简单的一个问题,没有想到,来来回回的折腾了半天多。

在我们的设备中采用命令工具udhcpc 自动获取ip 地址,当用户设置动态获取IP后,设备启动时,会调用udhcpc命令。

首先,我从打印分析开始, 以下是执行命令后给出的打印。

udhcpc (v0.9.9-pre) started
Jan  1 00:36:44 udhcpc[694]: udhcpc (v0.9.9-pre) started
m
Jan  1 00:36:44 udhcpc[694]: [truncated] m

从打印上看,在刚开始执行时就得到一个中断错误truncated,在网络上以相关关键字,dhcp + udhcpc + truncated 查找,均得不到有用的信息。但在查找的过程中,对udhcpc命令有了更进一步的认识。


我猜测有问题的地方可能出错地方有三处:1 udhcpc 命令有问题  2 busybox  3 内核。

首先从猜测点1 开始排查,拷贝一朋友可用的udhcpc文件到我们的系统中(开发环境相同),发现还是给出相同的错误提示。此时我估计着可能是busybox 和内核 有问题。

如果是busybox和内核的问题,对我来说,排查起来,更是无从下手。想了想,决定还是从udhcpc着手,udhcpc 是一个开源的软件, 我可以从源码上分析到底是哪一步出错。

于是从网络上下载了udhcp-0.9.9_pre20041216.tar.bz2源码,下载编绎后,生成可执行文件udhcpc ,nfs远程mount后, 执行./udhcpc 同样给出与之前一样的提示错误。

一步步的定位分析, 最终定位到错误处。  

 if ((fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) < 0) 

加上错误打印perror("create socket failed");

最终确认错误原因Address family not supported by protocol.

再次google之, 有人给出捍示可能是内核时编绎选项CONFIG_PACKET没有选上

于是去编绎内核文件,果然,CONFIG_PACKET没有勾选上。

重新编绎内核,设备升级内核,dhcp测试ok,完成。



原创粉丝点击