求助,busybox udhcpc的udhcpc命令问题

2159人阅读
Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置
转自:http://blog.csdn.net/tqyou85/article/details/6240975
Tftpd,ftpd可以由inetd来管理,telnetd理论上也可以由inetd来管理,但是目前开发板上我还没调通,只能telnetd独立运行。
1.&&& Tftpd
配置步骤:
#mkdir /tftp_ftp_dir& //创建tftp server的根目录
#vi /etc/inetd.conf& //配置inetd.conf文件,用inetd来管理tftpd,加入如下一行:
69 dgram udp nowait root tftpd tftpd -c /tftp_ftp_dir
#inetd& //启动inetd
这样tftpd就作为daemon运行起来了。
注:这种方式运行的tftpd在ps中看不到tftpd进程的运行。
检查下配置结果:
# netstat -alp
Active Internet connections (servers and established)
Proto& Recv-Q& Send-Q& Local Address&&&&& Foreign Address&&&& State& PID/Program name&&&&
udp&&& 0&&&&&&& 0&&&&& 0.0.0.0:69&&&&&&&&&&& 0.0.0.0:*&&&&&&&&&&&&&&& 789/inetd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags&&&&&& Type&&&&&& State&&&&&&&& I-Node PID/Program name&&& Path
接下来就是在客户端测试了。
我尝试了以下三种测试方式:
a)&&& 在linux pc机上,直接运行tftp命令,连接到开发板上。可以连接上,但是get file会提示Error Code 0: malformed packet。网上有人说是ubuntu 8.10上默认的tftp因为封包协议问题不能工作,但是我用的是fedora 9的系统,我抓包看了下,tftp
server回复的数据包有个tftp code的字段,确实有问题。目前还未想到解决的方法。
b)&&& 将开发板tftpd根目录下的文件test(如果没有test文件,可以自己手动创建一个)拷贝到pc上,在开发板上输入如下命令:
#busybox tftp –l test –r test –p 192.168.0.22
测试pc上可以成功接收文件,文件内容正确。
c)&&& 在windows pc上,采用3com tftp软件作为tftp client,测试从开发板下载文件成功。
2.&&& Ftpd
配置步骤:
#mkdir /tftp_ftp_dir& //创建ftp server的根目录
#vi /etc/inetd.conf& //配置inetd.conf文件,用inetd来管理tftpd,加入如下一行:
21 stream tcp nowait root ftpd ftpd -w /tftp_ftp_dir
#inetd& //启动inetd
这样ftpd就作为daemon运行起来了。
注:这种方式运行的ftpd在ps中看不到ftpd进程的运行。
检查下配置结果:
# netstat -alp
Active Internet connections (servers and established)
Proto& Recv-Q& Send-Q& Local Address&&&&& Foreign Address&&&& State& PID/Program name&&&&
tcp&&&&&& 0&&&&& 0&&&&& 0.0.0.0:21&&&&&&&& 0.0.0.0:*&&&&&&&& LISTEN&&& 789/inetd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags&&&&&& Type&&&&&& State&&&&&&&& I-Node PID/Program name&&& Path
接下来就是在客户端测试了。
在linux pc机上直接ftp数据:
[root@fedora9 ~]# ftp 192.168.0.1
可通过匿名用户anonymous登录
ftp&put test //将test文件上传到开发板的ftpd根目录下
ftp&get test
测试下载文件成功。
3.&&& Telnetd
Telnetd配置其实很简单,内核选项:
Device Drivers ---&
Character devices
[*] Unix98 PTY support&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[*] Legacy (BSD) PTY support
(256) Maximum number of&
Busybox选项:
# BusyBox -& Networking Utilities -& telnetd
# BusyBox -& Networking Utilities -& Support standalone telnetd (not inetd only)
应该就可以了。但是我这样配置完毕,在开发板上启动telnetd:
telnetd -l /bin/login
然后ps查看进程telnetd存在,netstat –alp查看23端口已被监听。
在客户端telnet开发板,老是出现“Connection closed by foreign host”的提示信息,而且客户端一telnet连接,开发板上的telnetd进程就自动退出了。抓包发现tcp三次握手连接已经建立,就这个问题调试了一天,最后才知道没有挂在devpts文件系统。
需要在开发板上mount一下就ok了。在开发板上输入如下命令:
#mount –t devpts devpts /dev/pts
但是目前如果采用inetd来管理telnetd,还是会出现“Connection closed by foreign host”的提示信息,原因现在还不清楚。
4.&&& Udhcpd
参考busybox中的examples,配置好udhcpd.conf,主要配置地址池(start, end, option subnet)、默认网关(opt router), dns(option dns)即可。然后执行:
#udhcpd –fS /etc/udhcpd.conf
就可以启动dhcp服务器了。Udhcpd在执行的时候可能会提示没有一个叫做udhcpd.release的文件,这个只要在相应的文件夹下创建即可。执行下面两条命令:
#mkdir -p /var/lib/misc/
#touch /var/lib/misc/udhcpd.leases
注:要启dhcp服务,还必须保证对应的网口处于up的状态,并且已配置IP地址,否则执行udhcpd –fS /etc/udhcpd.conf会报错。
5.&&& Udhcpc
参看busybox的example/udhcp/下的simple.script脚本,将其改名为default.script(不改也无所谓),主要是因为busybox里面默认的目录文件是/usr/share/udhcpc/default.script
注:一定要保证这个default.script的可执行权限。我之前就是因为这个问题调试了很久。
可查看下default.script的内容:
[javascript]&
udhcpc的操作都在这个脚本里面。
测试的时候,可以自己准备一台dhcp server,然后在开发板上运行如下命令:
#udhcpc –i eth0 –s /usr/share/udhcpc/default.script
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:271940次
积分:3780
积分:3780
排名:第6789名
原创:41篇
转载:72篇
评论:80条
文章:21篇
阅读:85618
(1)(1)(1)(3)(2)(2)(7)(1)(8)(3)(1)(10)(7)(9)(5)(6)(4)(9)(23)(13)BusyBox 應用 – udhcpc | Focus5511人阅读
linux(19)
前提:系统已经实现(即使用测试时能通)。
在内核中添加以下选项:
添加,后面子选项可不选,配置
说明:若没选选项,在执行命令时出现如下错误:
Busybox中添加以下选项:
在此不作服务端,故不选。生成命令
若没编译相应选项,也可从网上下载相应文件,用交叉编译得到命令到下就可以了。
我从下的文件
解压后修改文件
注释行的,否则不生成命令。
建相关配置文件
从的下文件到开发板下,并重命名为,中也有这样的文件。
[root@localhost root]# vi usr/share/udhcpc/default.script
# udhcpc script edited by Tim Riker &Tim@Rikers.org&
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
RESOLV_CONF="/etc/resolv.conf"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"
case "$1" in
&&&&&&& deconfig)
&&&&&&&&&&&&&&& /sbin/ifconfig $interface 0.0.0.0
&&&&&&&&&&&&&&& ;;
&&&&&&& renew|bound)
&&&&&&&&&&&&&&& /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
&&&&&&&&&&&&&&& if [ -n "$router" ] ; then
&&&&&&&&&&&&&&&&&&&&&&& echo "deleting routers"
&&&&&&&&&&&&&&&&&&&&&&& while route del default gw 0.0.0.0 dev $ do
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :
&&&&&&&&&&&&&&&&&&&&&&& done
&&&&&&&&&&&&&&&&&&&&&&& for i in $ do
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& route add default gw $i dev $interface
&&&&&&&&&&&&&&&&&&&&&&& done
&&&&&&&&&&&&&&& fi
&&&&&&&&&&&&&&& echo -n & $RESOLV_CONF
&&&&&&&&&&&&&&& [ -n "$domain" ] && echo search $domain && $RESOLV_CONF
&&&&&&&&&&&&&&& for i in $ do
&&&&&&&&&&&&&&&&&&&&&&& echo adding dns $i
&&&&&&&&&&&&&&&&&&&&&&& echo nameserver $i && $RESOLV_CONF
&&&&&&&&&&&&&&& done
&&&&&&& &&&&&&&&;;
重启开发板,执行就可自动获取地址了,以下是执行的输出信息:
www. (220.181.38.4): 56 data bytes
如果是双网卡必须用参数指明
例:udhcpc& -i &eth1
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:292084次
积分:2839
积分:2839
排名:第10114名
原创:30篇
转载:80篇
评论:26条
(1)(2)(1)(18)(23)(58)(4)(3)Linux C(49)
内核版本:2.6.30.9
busybox版本:1.15.2
PC Linux和开发板Linux的工作用户:root
1. 配置内核:
[*] Networking support& ---&&
&Networking options& ---&&
&&&*& Packet socket&
&&&*& Unix domain sockets&
&&[*] TCP/IP networking
&&[*]&& IP: kernel level autoconfiguration&
&&[*]&&&& IP: DHCP support
&&[*] Network packet filtering framework (Netfilter)& ---&
2. 配置busybox:
Networking Utilities& ---&
&[*] udhcp client (udhcpc)
3.建立配置文件:
从busybox的examples/udhcp/下copy& simple.script文件到开发板/usr/share/udhcpc/下,并重命名为default.script
在命令台执行udhcpc,注意:必须确保局域网内存在DHCP服务器,否则udhcp执行失败。
在easy2440上面执行结果如下:
udhcpc (v1.15.2) started
Setting IP address 0.0.0.0 on eth0
Sending discover...
Sending select for 192.168.1.101...
Lease of 192.168.1.101 obtained, lease time 7200
Setting IP address 192.168.1.101 on eth0
Deleting routers
route: SIOCDELRT: No such process
Adding router 192.168.1.1
Recreating /etc/resolv.conf
&Adding DNS server 211.148.192.141
&Adding DNS server 210.21.196.6
5. 修改系统初始化配置文件,让开发板开机后自动获取IP地址:
修改/etc/init.d/rcS文件在适当位置添加命令: /sbin/udhcpc &
6. Enjoy it!
使用DHCP,为开发板自动分配IP地址
由于要使用网络通讯,所以不可避免的要用到dhcp。理想的网络通讯方式是下面3种都要支持:
1,接入已有网络。这便要求可以作为dhcp客户端,自动获取Ip。
2,作为DHCP服务器,动态分配IP。
3,指定固定IP
第3种情况没有什么好说的,简单说下前2种情况。
使用步骤:
(1)在内核的网络项里面把DHCP配置上,
&&&&Networking ---&
&&&&Networking support&&&
&&&&Networking options ---&&
&&&&&&&&&&&Packet socket&&&&&&&&&&&&&&&&&//添加.配置CONFIG_PACKET
&&&&&&&&&&[ * ]&&&&&IP: DHCP support&&&&&&&&&//添加
&&&&&&&&&&[ * ] Network packet filtering (replaces ipchains) ---&&&//添加,后面子选项可不选,配置CONFIG_NETFILTER
说明:若没选 Packet socket, [ * ] Network packet filtering (replaces ipchains) ---&选项,在执行udhcpc命令时出现如下错误:
&&&[root@(none) /]# udhcpc -f&
&&&udhcpc (v1.13.2) started
&&&eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
&&&udhcpc:&socket: Address family not supported by protocol&
(2)在busybox里面把[*]udhcp server(udhcpd)
&&&&&&&&&&&&&&&&&&&&&&&&&&[*]udhcp client(udhcpc)都选上。
&&&&udhcpd就是终端设备作为DHCP服务器&;udhcpc就是终端设备作为DHCP客户端
&&&&若busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copy到usr/sbin下就可以了。
1&编译Busybox,使make menuconfig,添加以下选项:
Networking Utilities ---&
udhcp Server/Client ---&
&&&&&&&[ ] udhcp Server (udhcpd)&&&&&&&//在此不作服务端,故不选。生成udhcpd命令
udhcp Client (udhcpc)&&&&&&&//生成udhcpc命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&[ ] Lease display utility (dumpleases)&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&[ ] Log udhcp messages to syslog (instead of stdout)&&&&&&&&&
&&&&&&&[ ] Compile udhcp with noisy debugging messages
若busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copy到usr/sbin下就可以了。
说明:有种方法说是从网上下的udhcp_0.9.8cvs.orig.tar.gz文件,解压后修改Makefile文件,
在19行添加CROSS_COMPILE=arm-linux-&&&
注释12行的COMBINED_BINARY=1,
否则不生成udhcpc命令。
注:使用0.9.8版本的udhcp貌似也不行,重新编译Busybox1.9.2版本。
2&使用Busybox下的simple.script,/usr/share/udhcpc/下,并重命名为default.script,修改default.script中RESOLV_CONF=&/etc/resolv.conf&为RESOLV_CONF=&/tmp/resolv.conf&
说明:从网上下了几个default.script貌似无法使用,提示无法找到default.script文件,使用上面的方法较好。由于 使用Cramfs文件系统,etc目录不可写,运行udhcp.c时会提示无法创建resolv.conf
3&将生成的udhcpc复制到开发板/sbin下,在控制台下运行udhcpc即可,很快就可以从DHCP SERVER获得IP地址。但是有个问题,开发板可以获得IP地址,在路由器里也可以看到分配地址了,问题是一使用PING命令,不管是PC 机PING 开发板,还是开发板PING PC 机,就会造成开发板死机。试了好多方法,检查ROUTE,检查ARP,修改Default.script
,始终无法解决。
1&使用udhcpc时&,就可以直接把simple.script拿来使用,busybox里面默认的目录文件是/usr/share/udhcpc/default.script(改下名)
可以查看下帮助
# udhcpc --help
#udhcpc -f
udhcpc 之后需要关闭网卡,之后需要送重开网卡使用命令
ifconfig eth0 down
ifconfig eht0 up
之后就能正常工作了,
如果无法PING本机,设置回环地址就可以了
ifconfig lo 127.0.0.1
2&&使用udhcpd,同样可以直接把busybox自带的udhcpd.conf作为参考,按要求配置一下udhcpd.config文件。
&&&&可以查看下帮助
&&&&# udhcpd --help
运行的时候直接#udhcpd -fs /etc/udhcpd.conf&
还有一个租约文件(udhcpd.leases)要简要说说,使用udhcpd时会要求建立一个租约文件,按照提示创建一个就行了,它起什么作用呢?就是为了记录客户端所获得的IP,如果没有租约文件,则会重新给客户端分配一个新IP,如果有,则使用原先分配的IP。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
另外,摘抄ifconfig用法文章
ifconfig 命令由超级用户使用,用来配置所有的网络接口参数。也可以被用来重新定义一个接口的IP地址或其它的操作参数。
一、检查网络接口&
*检查所有网络接口的状态:
# ifconfig –a
lo0: flags=849&UP,LOOPBACK,RUNNING,MULTICAST&; mtu 8232
inet 127.0.0.1 netmask ff000000
le0: flags=863&UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST&;
mtu 1500 inet 128.50.1.2 netmask ffff0000 broadcast 128.50.255.255
ether 8:0:20:75:6e:6f
*检查一个接口的状态:
# ifconfig le0
le0: flags=863&UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST&;
mtu 1500 inet 128.50.1.2 netmask ffff0000 broadcast 128.50.255.255
ether 8:0:20:75:6e:6f
各字段含义:
lo0,le0——网络接口的设备名
Flags——网络接口状态的数字表示方式,状态变量已经在包中定义,将在后来讨论。
MTU——MTU用来定义包的存储片
Inet——接口的Internet 地址
netmask——掩码应用于网络层包的输入和输出。掩码被用来定义哪些值是用来表示网络地址的位。
Broadcast——广播地址,用来发送信息到所有主机。
Ether——由ARP使用的以太网地址(MAC)
UP——这个标志指出这个接口是开放的,可以发送和接收数据。
DOWN——相反的,这个标志指出这个接口是关闭的,也就是说,此时不能为主机发送和转发包。
NOTRAILERS——这个标志指出了一个报文尾不包括以太帧的尾部。报文尾是在Berkerley Unix系统中使用的把信息头加到包尾的一种方式。在Solaris2.x系统中已经不支持。
RUNNING——这个标志指出,该接口已经被系统识别。
MULTICAST——这表示接口支持多路传送地址。
BROADCAST——这表示接口支持广播地址。
二、网络地址配置&
——解决网络接口故障
丢失,不完整,或不正确的配置网络接口参数,将会引起连接失败。如:一个主机可能拒绝挂接(mount)远程文件系统,拒绝发送和接收邮件,拒绝执行打印任务,如果一个主机的接口配置错误的话。
为了确保主机接口配置的正确,要检查如下几项:
所有的接口状态是否为UP
IP地址是否正确
子网掩码是否正确
广播地址是否正确
——重新配置网络接口参数
* 允许一个网络接口(Enable):
# ifconfig le0 up
# ifconfig le0
le0: flags=863&UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST&;
mtu 1500 inet 128.50.1.2 netmask ffff0000 broadcast 128.50.255.255
ether 8:0:20:75:6e:6f
*开放一个网络接口(Disable):
# ifconfig le0 down
# ifconfig le0
le0: flags=863&BROADCAST,NOTRAILERS,RUNNING,MULTICAST&; mtu 1500&
inet 128.50.1.2 netmask ffff0000 broadcast 128.50.255.255
ether 8:0:20:75:6e:6f
*关闭一个网络接口(Close):
# ifconfig le0 unplumb
# ifconfig le0
ifconfig : SIOCGIFFLAGS:le0:no such interface
*打开一个网络接口(Open):
# ifconfig le0 plumb
# ifconfig le0
le0:flags=842&BROADCAST,RUNNING,MULTICAST&; mtu 1500
inet 0.0.0.0 netmask 0
ether 8:0:20:75:6e:6f
*设置一个IP地址,允许接口但不允许 trailers:
# ifconfig le0 inet 128.50.1.2 –trailers up
# ifconfig le0
le0: flags=842&UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST&;
mtu 1500 inet 128.50.1.2 netmask ffff0000 broadcast 128.50.255.255
ether 8:0:20:75:6e:6f
*改变掩码值和广播值来正确的反映新的掩码:
# ifconfig le0 netmask 255.255.255.0 broadcast +
# ifconfig le0
le0: flags=843&UP,BROADCAST,RUNNING,MULTICAST&; mtu 1500&
inet 128.50.1.2 netmask ffffff00 broadcast 128.50.1.255
ether 8:0:20:75:6e:6f
*在正确的设置子网掩码后改变所有的广播地址:
# ifconfig –a
lo0: flags=849&UP,LOOPBACK,RUNNING,MULTICAST&; mtu 8232
inet 127.0.0.1 netmask ff000000
le0: flags=863&UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST&; mtu 1500
inet 128.50.1.5 netmask ffffff00 broadcast 128.50.255.255
ether 8:0:20:75:8b:59
le1: flags=842&BROADCAST,NOTRAILERS,RUNNING,MULTICAST&; mtu 1500
inet 128.50.3.6 netmask ffffff00 broadcast 128.50.255.255
ether 8:0:20:75:8b:59
# ifconfig –a broadcast +
# ifconfig –a
lo0: flags=849&UP,LOOPBACK,RUNNING,MULTICAST&; mtu 8232
inet 127.0.0.1 netmask ff000000
le0: flags=863&UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST&; mtu 1500
inet 128.50.1.5 netmask ffffff00 broadcast 128.50.1.255
ether 8:0:20:75:8b:59
le1: flags=842&BROADCAST,NOTRAILERS,RUNNING,MULTICAST&; mtu 1500
inet 128.50.3.6 netmask ffffff00 broadcast 128.50.3.255
ether 8:0:20:75:8b:59&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10672次
排名:千里之外
转载:53篇
(14)(4)(28)(7) 在运行时创建命令链接 $ ./busybox --install -s $ -s 选项强制创建这些符号链接(否则就创建硬链接)。这个选项要求系统中存在 /proc 文件系统。 BusyBox 编译...  #ln -s busybox ls #ln -s busybox rm #ln -s busybox mkdir 然后分别...图 2 给出了 ps-aux 命令详解。大部分信息都可以通过执行该命 令得到。最...  (完整版) 引、概述 BUSYBOX 工具集 一、安装和登录命令---安装和登录命令 二...图 2 给出了 ps-aux 命令详解。大部分信息都可以通过执行该命令得到。最常用...  系统在超级终端下必会的命令大全( Android 系统在超级终端下必会的命令大全(一) busybox 工具的一个单个可执行实现。 包含了一些简单的工具, BusyBox 是标准 ...  系统在超级终端下必会的 命令大全(一) busybox BusyBox 是标准 Linux 工具的一...图 2 给出了 ps-aux 命令详解。大部分信息都可以通过执行该命 令得到。最...  该项,BusyBox 将默认安装到原系统的/usr 目录下面,这将覆盖掉系统原有的命令...编译并配置busybox 6页 免费
busybox配置 7页 免费
busybox 详解(一篇讲bus...  (1)输入 su 然后按软键盘的“回车”,su 命令指 获得 root 权限 (2)输入 busybox ifconfig ,回车 这个命令可以查看手机的 ip、网卡硬地址,显示如下,HWaddr ...  详解制作根文件系统单击,返回主页,查看更多内容 一、FHS(Filesystem Hierarchy ...57 busybox 而普通 PC 机上的 ls 命令就有差不多 80K 的大小: dennis@...  基于busybox的根文件系统... 3页 免费 busybox详解制作根文件系... 13页 1下载...在这个菜单界面中除了可以对最终编译到可执行文 件中的命令进行选择外, 件中...}

我要回帖

更多关于 busybox 命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信