启动busybox自带的ftp服务器
关于ftp工作原理详解 ,可参考
http://blog.chinaunix.net/uid-12814440-id-2914750.html
为了了解ftp,首先在ubuntu上搭建一个ftp服务器先。
在ubuntu12.04中搭建ftp服务器:
sudo apt-get install vsftpd
完成安装后,就可以用Ubuntu系统的用户名和密码登陆了。
可以在手机上装上个ES文件浏览器,通过添加一个ftp服务器的方式就可以连接到电脑上的ftp服务器了。
(手机和电脑在同一网络中,当然vsftpd还有很多配置选项,这里就不再深究了)
其实busybox中自带ftp服务器,只需开启一下就可以用了。
首先,到busybox的官网上下载源码,make menuconfig(什么都不改,保存一下)一下生成.config文件,然后make一下
就可以生成在X86下运行的程序了,马上验证一下。
如果之前装上了vsftpd,ftpd服务是默认开启的,可先删除该服务sudo apt-get remove vsftpd,然后在生成busybox源码的目录下执行
sudo ./busybox tcpsvd 0 21 ./busybox ftpd -w /home,手机照样可以访问到电脑了的文件。
./system/bin/busybox tcpsvd -vE 192.168.2.9 21 ./system/bin/busybox ftpd -w /sdcard/ftpserver & //指定IP
./system/bin/busybox tcpsvd -vE 0 21 ./system/bin/busybox ftpd -w /sdcard/ftpserver & //所有IP都可以传输
当然,我们也可以将busybox移植到arm上,具体移植过程见
移植好后,将只需将busybox放到环境变量的路径中($PATH查看),然后在终端上运行
sudo ./busybox tcpsvd0 21 ./busybox ftpd
busybox tcpsvd相当于运行busybox这个程序,参数为tcpsvd,实际就是运行tcpsvd,如果不想这么麻烦,只需
ln -s busybox tcpsvd
ln -s busybox ftpd
然后运行./tcpsvd 0 21 ./ftpd -w /home即可。
当然该命令会卡住,在实际运用中要加上&,代表该程序在后台运行
tcpsvd 0 21 ftpd -w /home &
//上面的0表示对所有ip地址都进行侦听
// ftpd -w这里的参数-w表示client可以对目录执行写操作
// 21指定ftp服务器的默认端口
// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,
// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60
移植好的busybox也可以在Android上跑(root过后的手机),只是最新版本的busybox,当client连接上会退出的情况,成功的版本为v1.19.2。
搭建好ftp服务器后,就有很多应用了。比如,电脑上的电影,手机只需接入该服务器,就可以直接访问到电脑的视频文件了,在手机上直接看电影无压力啊。
浅析busybox内置的ftpd服务程序如何配置
server服务器配置
方法1:
# mkdir /gliethttp_ftpd_dir
# cp /bin/busybox /gliethttp_ftpd_dir
# tcpsvd 0 21 ftpd -w /gliethttp_ftpd_dir &
// 上面的0表示对所有ip地址都进行侦听
// 如果设置为127.0.0.1那么只能开发板本地arm可以进行ftp
// 比如开发板eth0的的ip地址设为172.20.0.2,那么就不能通过该ip登录
// 所以上面指定ip等于0,那么无论来自127.0.0.1还是172.20.0.2网络地址的
// 数据都能使用ftpd服务器.
// ftpd -w这里的参数-w表示client可以对目录执行写操作
// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,即:Idle and absolute timeouts
// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60
方法2:
# mkdir /gliethttp_ftpd_dir
# cp /bin/busybox /gliethttp_ftpd_dir
# vi /etc/inetd.conf
21 stream tcp nowait root ftpd ftpd -w /gliethttp_ftpd_dir
# inetd // inetd会执行/etc/inetd.conf脚本中的命令行,这样ftpd就作为daemon运行到起来了
(注意:以上2种方式运行的ftpd都不会在ps中看到ftpd进程的运行)
//========================================================
client客户端测试
在pc机上直接ftp数据
luther@gliethttp:~$ ftp 172.20.0.2
Connected to 172.20.0.2.
220 Operation successful
Name (172.20.0.2:luther):
230 Operation successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 Operation successful
150 Directory listing
-rwxr-xr-x 1 0 0 826724 Jan 1 00:02 busybox
226 Operation successful
ftp> put uda1341ts.tar.bz2 // 将uda1341ts.tar.bz2文件上传到开发板的/gliethttp_ftpd_dir目录下
local: uda1341ts.tar.bz2 remote: uda1341ts.tar.bz2
200 Operation successful
150 Ok to send data
226 Operation successful
485435 bytes sent in 0.12 secs (3809.5 kB/s)
ftp> ls
200 Operation successful
150 Directory listing
-rwxr-xr-x 1 0 0 826724 Jan 1 00:02 busybox
-rw-r--r-- 1 0 0 485435 Jan 1 00:03 uda1341ts.tar.bz2 // 刚刚上传上上去的uda1341ts.tar.bz2文件
226 Operation successful
ftp> get busybox
local: busybox remote: busybox
200 Operation successful
150 Opening BINARY connection for busybox (826724 bytes)
226 Operation successful
826724 bytes received in 0.15 secs (5411.8 kB/s)
ftp> del busybox
250 Operation successful
ftp> ls
200 Operation successful
150 Directory listing
-rw-r--r-- 1 0 0 485435 Jan 1 00:03 uda1341ts.tar.bz2
226 Operation successful
ftp>
//当然也可以用window作为ftp的客户端登录到目标板上
实际使用过程更为简单:直接在/etc/init.d/rcS 这个文件里面加上如下指令即可
/sbin/tcpsvd -vE 0 21 /sbin/ftpd -w 【dir】 &
------------------------------------------------------------------------------------------------------------------------------------------------------
启动方法1:
#tcpsvd 0 21 ftpd -w /root &
// 上面的0表示对所有ip地址都进行侦听
// ftpd -w这里的参数-w表示client可以对目录执行写操作
// 21指定ftp服务器的默认端口
// 可以使用-t和-T参数设置client在没有任何操作的最大时间之后ftpd主动断开client连接,
// 默认-t为2分钟=2 * 60,-T为1小时=1 * 60 * 60
启动方法2:
#vi /etc/inetd.conf //增加以下代码
21 stream tcp nowait root ftpd ftpd -w /root
#inetd
//inetd会执行/etc/inetd.conf脚本中的命令行,这样ftpd就作为daemon运行到起来了