LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3256|回复: 8

请问如何在ARM上面建立FTP服务器

[复制链接]
发表于 2007-9-24 11:18:25 | 显示全部楼层 |阅读模式
我试过vsftpd,但是有个包libcap.so.1只有i386平台的,wu-ftpd编译了一次,也是交叉编译通不过,不知道有没有达人做过这方面的,希望能够指点一下,搞了好久了,郁闷

我用的linux内核是2.6的,开发板是intel的xscale pxa255

跪求
发表于 2007-9-24 12:08:57 | 显示全部楼层
libcap 怎么会只有 i386 平台呢。下载源码,自己编译,不过它的工程配置不是基于 configure 的,所以弄起来稍微麻烦一点,得自己改,但并不难
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-28 20:10:15 | 显示全部楼层
Post by remote fish
libcap 怎么会只有 i386 平台呢。下载源码,自己编译,不过它的工程配置不是基于 configure 的,所以弄起来稍微麻烦一点,得自己改,但并不难


你好,能不能说清楚一点具体怎么作呢? 我有下载libcap的源码,但是我用交叉编译工具编译它的时候出错了,好象是因为一个用于产生文件名的二进制文件无法执行.

编译这个库还需要其他什么配置吗?不是直接用交叉编译工具编译他就可以用的arm平台上吗?
我用的编译工具是arm-linux-gcc 3.4.1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-28 20:27:01 | 显示全部楼层
还有我看有些ftpd的交叉编译好像没有那么麻烦的样子, 像pure-ftpd. 只要在编译配置的时候:
./configure CC=arm-linux-gcc --host=arm-linux就可以了?不用指定LIBS吗?
可是我这样做在make的时候也出错,说其中一个东西找不到,我晕
回复 支持 反对

使用道具 举报

发表于 2007-9-28 23:16:40 | 显示全部楼层
libcap 的编译过程中会生成一个本地的二进制文件,执行它以生成一个头文件,再利用此头文件完成下面的编译。这个二进制文件也是用 CC 来编译的,但这样生成的文件是无法本地执行的。解决方法就是修改相应的 Makefile 让它不用 CC,而是直接用 gcc 编译。

我不提供具体的修改方法,因为既然楼主做的是 arm 上的东东,那么这种能力是基本功,应该掌握。有问题欢迎随时来论坛上讨论,兄弟们是很热情的。


configure 是 shell 脚本,它会读取环境变量中的某些设定,比如 CC。另一方面,一般的 configure 都支持 --host,--target 等参量的设定,它们会指明是否为交叉编译及目标平台。交叉编译器会利用自身的配置提供一份与 host 上的 cc 不同的 include 与 lib 的默认值。一般还要指定 prefix,除了确保目标被正确安装外,还可以避免 host 被破坏。而且像 glibc 这样的东东对 prefix 也是有依赖性的。

因此一般 CC=arm-linux-gcc ./configure --host=arm-linux 就是让 configure 知道将进行交叉编译,并通过环境变量让 configure 使用相应的交叉编译器进行编译,而默认的查找路径则由交叉编译器指定。一般还可能存在等效的写法 ./configure --host=arm-linux --cc=arm-linux-gcc。注意,configure 的过程中尽管只指定了 CC,但它进而会帮助找到 LD,AR 等相关的工具。

并非全部的 configure 都支持同样的参数,因为有一些是 autoconf 等工具生成的,有一些则是手写的。还有的工程根本没有 configure,直接提供 Makefile

对于一个已经配置好的工程,就是说,已经存在 Makefile,那么可以通过运行时外部修改 Makefile 参量的方法来调整编译,一个简单的例子 make CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib STRIP=arm-linux-strip,这会覆盖 Makefile 中已经存在的关于这几个参量的设定。对于没有强行指定头文件与库文件路径的 Makefile 来说,这种方法足够完成交叉编译了。值得注意的是,CC 等变量出现的位置,configure 的时候它放在命令之前,表明它是环境变量,而 make 的时候它放在命令之后,表明它是参数,这种顺序不是随意的。
回复 支持 反对

使用道具 举报

发表于 2007-9-29 10:31:46 | 显示全部楼层
你的提问真有意思, 有那么多的"好像",  这样的话,好像兄弟们帮不了你.

出错信息都舍不得贴啊.
回复 支持 反对

使用道具 举报

发表于 2007-9-29 16:16:48 | 显示全部楼层
有个叫bftpd的,sourceforge上有. 移植比较方便. 你不妨可以试一下.

good luck.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-6 22:55:04 | 显示全部楼层
非常感谢各位
我现在有了arm平台的ftp服务器,但是有个新的问题,就是那个ftpd是动态链接的,而我之前编译的文件系统是静态链接的所以程序无法运行。现在我想把文件系统编译成动态链接,在busybox的配置里面只改动了一个地方就是把静态编译改成支持动态链接,编译时出错:
...
  CC util-linux/umount.o
  AR cru util-linux/util-linux.a
  LINK busybox_unstripped
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: Warning: gc-sections option ignored
/mnt/d_win/embeded-dev/app/busybox/libbusybox.so: undefined reference to `query_module'
collect2: ld returned 1 exit status
make[1]: *** [busybox_unstripped]错误 1
make: *** [_all] 错误 2

我很久以前曾经配置过动态链接的文件系统,但是这次我怎么改都是这个错,不知道是不是还有什么跟动态链接配套的选项?
回复 支持 反对

使用道具 举报

发表于 2007-11-20 08:22:40 | 显示全部楼层

请问兄台最后选用的是哪个FTP Server?

我最近也在搞这个,非常感谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表