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