嵌入式linux设备一般通过 udhcpc 去动态分配 ip 地址,正常情况下,动态分配完 ip 地址,就可以去连通外网。
当然也存在一些异常情况,尤其是在开发阶段刚开始构建根文件系统时。
1、ping通网关,无法ping通外网
ping通网关,如下图
无法ping通外网(14.215.177.38是百度的ip地址),如下图
这种问题主要是没有设置网关造成的。
添加网关:route add default gw 192.168.0.1
造成这种原因的操作可能有:
1、静态分配了一个ip地址,但是没有添加网关。
2、使用udhcpc动态分配了ip地址,但是udhcpc设置ip地址,以及添加网关需要依赖default.script文件。如果这个脚本不存在,或是脚本某些命令嵌入式板子的环境没有,就有可能导致出错而没有分配到网关。
补充:default.script脚本不存在,或是不存在默认的目录下,udhcpc只会分配ip地址,不会设置ip地址,添加网关,具体参考:https://blog.csdn.net/twk121109281/article/details/107457499
2、ping通外网,无法ping通域名
ping通百度的ip,如下图:
无法ping通www.baidu.com
这说明嵌入式板子是可以连接外网的,但是dns的解析出现问题。
原因可能如下:
1、缺少 /etc/resolve.conf 文件,或文件内容为空。这个文件会存放提供dns服务器功能的ip。
-
静态分配ip地址的,需要创建这个文件,并且按如下格式添加内容
-
udhcpc 动态分配的情况,default.script脚本会帮你创建 resolve.conf 文件,并添加dns。
(1)要确保嵌入式板子的/etc目录是可读写的,否则是会创建失败的。如果 /etc目录是属于只读分区,在构建根文件系统时,可以通过软链接,指向/tmp目录的resolv.conf文件,设备开机时创建一个/tmp/resolv.conf,这样/etc/resolv.conf就可以读写。
(2)default.script 脚本指定的resolv.conf目录不在/etc下。这样是会生成的 /wifi/resolve.conf 文件(前提/wifi目录可读写),并添加dns,但是ping www.baidu.com还是会默认去找/etc/resolv.conf,所以最终会失败。这里需要将 “/wifi/resolv.conf” 修改为 “/etc/resolv.conf” 。
2、缺少 libresolv库,和 libnss_dns库。sdk包没提供,或是busybox没有编译出来,则要自己去编译,放入嵌入式板子里。