您的位置:首页 > 编程语言 > PHP开发

嵌入式 在arm平台运行ftpd服务器实现文件下载以及上传以及ftp下载url小结

2014-09-04 16:03 1096 查看
在linux下我使用wget下载我板子上的文件:
板子上实际位置为:/opt/joseph/av_server/av_server

wget ftp://10.10.1.216:21/joseph/av_server/av_server

{

    --2014-09-04 16:11:59-- ftp://10.10.1.216/joseph/av_server/av_server
=> `av_server' 

Connecting to 10.10.1.216:21... connected. 

Logging in as anonymous ... Logged in! 

==> SYST ... done. ==> PWD ... done. 

==> TYPE I ... done. ==> CWD (1) /joseph/av_server ... done. 

==> SIZE av_server ... 2546188 

==> PASV ... done. ==> RETR av_server ... done. 

Length: 2546188 (2.4M) (unauthoritative) 

100%[==================================================================================================================>] 2,546,188 3.37M/s in 0.7s 

2014-09-04 16:12:00 (3.37 MB/s) - `av_server' saved [2546188]

}

解析一下ftp下载url格式:
ftp://admin:123456@qycam.com:50005/hi3518c_tmp/av_server.708.wifi ftp://用户名:密码@主机地址:端口号/文件位置以及文件名称
1、我的平台是hi3518x,我使用的busybox1.6.1:

首先,我们运行ftpd,出现下面的提示:

BusyBox v1.6.1 (2014-09-04 14:45:17 CST) multi-call binary.

Usage: ftpd [-wvS] [-t N] [-T N] [DIR]

Anonymous FTP server

ftpd should be used as an inetd service.

ftpd's line for inetd.conf:

        21 stream tcp nowait root ftpd ftpd /files/to/serve

It also can be ran from tcpsvd:

        tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve

        -w      Allow upload

        -v      Log errors to stderr. -vv: verbose log

        -S      Log errors to syslog. -SS: verbose log

        -t,-T   Idle and absolute timeouts

        DIR     Change root to this directory

上面加颜色的两行都是可以运行起ftpd服务器的,但是建议使用第二种 ,第一种,需要一个配置文件,利用inetd进行运行

在busybox1.6.1上我使用flashfxp进行访问的ftpd板子的时候,不能显示文件列表,最后发现是busybox的bug,此bug如下:



具体原因是把“LIST -al”,把这个命令的al看成一个目录了,那么我们可以进行修改,也可以直接使用busybox最新稳定版本:

busybox官网:
http://www.busybox.net/
我的效果如下图:

[root@njqy]#cat /etc/init.d/rcS 

#! /bin/sh

/bin/mount -a

echo "

            _ _ _ _ _ _ _ _ _ _ _ _

            \  _  _   _  _ _ ___

            / /__/ \ |_/

           / __   /  -  _ ___

          / /  / /  / /

  _ _ _ _/ /  /  \_/  \_ ______

___________\___\__________________

"

for initscript in /etc/init.d/S[0-9][0-9]*

do

        if [ -x $initscript ] ;

        then

                echo "[RCS]: $initscript"

                $initscript

        fi

done

/bin/hostname -F /etc/sysconfig/HOSTNAME

cd /opt/joseph

./start.sh &

cd -

tcpsvd -vE 0.0.0.0 21 ftpd -wvS /opt/ &

flashfxp的效果如下图:



2、我们借鉴一下:

首先,在开发板建立一个目录用于传输文件的存放:

mkdir /ftpdir

修改inetd.conf并启动inetd服务:

# vi /etc/inetd.conf

21 stream tcp nowait root ftpd ftpd -w /ftpdir

# inetd // inetd会执行/etc/inetd.conf脚本中

此时ftpd服务可以运行了。我们来验证一下:

在ubuntu中使用ftp命令连接开发板:

root@ubuntu:/home/yj423# ftp 192.168.0.200

Connected to 192.168.0.200.

220 Operation successful

Name (192.168.0.200:yj423): root

230 Operation successful

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

这时候,通过ps命令可以在开发板中看到如下进程:

917 root 3144 S ftpd -w /ftpdir

可以看到ftpd自动运行起来了。

我们通过PC上传文件试一试:

ftp> put /home/yj423/nfswork/home/bgm/bcs bcs

local: /home/yj423/nfswork/home/bgm/bcs remote: bcs

200 Operation successful

150 Ok to send data

到开发板中检查一下,我们看到了bcs的身影。

[root@BGM /ftpdir]#ls

addcmd bcs fdsafdsfsa mount.sh test
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: