明白了嵌入式Linux启动时网络参数配置的流程,就会对网络这一部分了然于胸,
以后出现网络不通的情况,就有了解决问题的思路。
1、网络参数配置的入口:
/etc/init.d/rcS,如下两行
# 配置换回lo地址
/sbin/ifconfig lo 127.0.0.1
# 配置以太网eth0地址
/etc/init.d/ifconfig-eth0
2、进入ifconfig-eth0文件:
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttySAC0
# 检查/etc/目录下是否存在eth0-setting文件,存在的话执行if语句
if [ -f /etc/eth0-setting ] ; then
# 读取eth0-setting文件,从而获取IP、Mask、Gateway、DNS、MAC等变量的值
source /etc/eth0-setting
# 判断文件/etc/mtab中是否存在从NFS启动的设置
if grep -q " / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC0
else
# 不是从NFS驱动,配置ip、mask等网络参数
ifconfig eth0 down
ifconfig eth0 hw ether $MAC
ifconfig eth0 $IP netmask $Mask up
route add default gw $Gateway
fi
# 获取DNS的值并写到文件/etc/resolv.conf中
echo nameserver $DNS > /etc/resolv.conf
else
# /etc/目录下不存在eth0-setting文件,那么手动配置网络参数
if grep -q " / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC0
else
/sbin/ifconfig eth0 192.168.1.230 netmask 255.255.255.0 up
fi
fi
echo Done > /dev/ttySAC0
通过以上shell代码,至少获知一下信息:
1、如何设置是从NFS启动还是正常启动
2、在哪个文件里更改IP等网络参数
3、DNS的由来及配置。以后再出现ping通IP却ping不通域名时,就知道在哪里修改参数
以上提到的/etc/eth0-setting文件,进行了一些变量的设置:
IP=192.168.1.230
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90
3、自动获取IP:
以上,针对的是配置固定IP等网络参数,那么如何实现自动分配IP等?
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttySAC0
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC0
else
udhcpc -i eth0
fi
echo Done > /dev/ttySAC0
启动信息如下图示: