现在的位置: 首页 > 综合 > 正文

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

2018年04月17日 ⁄ 综合 ⁄ 共 2620字 ⁄ 字号 评论关闭

在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

抱歉!评论已关闭.