How to use udhcpc to obtain ip address automatically

来自百问网嵌入式Linux wiki

udhcpc是一个动态分配IP的指令,使用这个指令我们可以为开发板动态的获得一个IP。

1. 正确的进行硬件连接

首先要明确一个概念,路由器和交换机,能动态分配IP的是路由器,而交换机是不能进行动态IP的分配的,所以如果想使用动态分配IP的功能,请确保开发板已经连接到一个路由器而不是交换机(或者开发板连接到交换机之后,交换机的某一个端口连接到了路由器的lan口)如果是使用单独的交换机的话 则需要设置固定的IP。

2 .使用串口登录到开发板

正确的连接串口线和开发板,确保能使用串口登录到开发板并且输入命令。

3.打开网卡

如果需要某个网口获得动态IP,则需要将这个网口使能(默认情况下网卡0已经使能,网卡1 为使能) 可以使用以下指令查看网卡的使能状态。

[root@ebf6ull:/etc]# ifconfig
eth0      Link encap:Ethernet  HWaddr B6:74:53:97:D3:32
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::b474:53ff:fe97:d332/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1380 errors:0 dropped:0 overruns:0 frame:0
          TX packets:468 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:296205 (289.2 KiB)  TX bytes:37792 (36.9 KiB)
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

如上图所示 显示的是只有一个网卡使能。如果需要使能网卡1

[root@ebf6ull:/etc]# ifconfig eth1 up
[23220.804681] Micrel KSZ8081 or KSZ8091 20b4000.ethernet-1:02: attached PHY driver [Micrel KSZ8081 or   KSZ8091] (mii_bus:phy_addr=20b4000.ethernet-1:02, irq=-1)
[23220.819375] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[root@ebf6ull:/etc]# ifconfig
eth0      Link encap:Ethernet  HWaddr B6:74:53:97:D3:32
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::b474:53ff:fe97:d332/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1451 errors:0 dropped:0 overruns:0 frame:0
          TX packets:485 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:305108 (297.9 KiB)  TX bytes:38506 (37.6 KiB)
eth1      Link encap:Ethernet  HWaddr C6:80:EA:BE:35:7F
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
lo        Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:65536  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
[root@ebf6ull:/etc]#

此时两个网卡都已经使能,如果此时接上网线并且连接到路由器,指定网口的灯应该是黄色常亮的状态。

4.获取动态IP

[root@ebf6ull:/etc]# udhcpc
udhcpc: started, v1.29.3
udhcpc: sending discover
udhcpc: sending select for 192.168.1.101
udhcpc: lease of 192.168.1.101 obtained, lease time 7200
deleting routers
adding dns 202.96.134.33
adding dns 202.96.128.166
[root@ebf6ull:/etc]#

至此开发板已经获得了动态的IP地址。 此处不建议将获得动态IP的指令加入到开机启动项中,笔者曾加入过但是 因为没接网线,导致整个系统一直卡在获取动态IP的代码段!建议使用配置路由器的IP 段的方式将某一段IP 隔离(动态分配永远不会分配到这一段的IP,例如将动态分配的起始地址设置为192.168.1.10) 然后在开发板的启动脚本中加入设置固定IP 的代码段,去给开发板设置一个固定的IP。 此处不细说。

[root@ebf6ull:/etc]# ifconfig eth0 192.168.1.111
[root@ebf6ull:/etc]# ifconfig
eth0      Link encap:Ethernet  HWaddr B6:74:53:97:D3:32
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::b474:53ff:fe97:d332/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1574 errors:0 dropped:0 overruns:0 frame:0
          TX packets:519 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:314286 (306.9 KiB)  TX bytes:40534 (39.5 KiB)
eth1      Link encap:Ethernet  HWaddr C6:80:EA:BE:35:7F
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

设置固定的开发板IP可以将下面代码段加入到/etc/init.d/rcS中去

ifconfig eth0 192.168.1.111