前几天鼓捣了一个统计网络流量的软件,叫Bandwidthd。用起来之后发现这个软件很好,界面比较友好。就想把这个东西弄到开发板上玩玩,如果移植成 功的话,那开发板不就变成一个网络流量统计器了么。不过这个软件的分析报告是通过Web方式给出的。那么就必须得在运行Bandwidthd的机器上开一 个Web服务器,在普通的环境下可以使用httpd,但是在板子上就不好用了,太庞大。于是我就找了一个小型的嵌入式Web Server,也就是今天这篇文章的主角——appWeb
appWeb有两种许可,一种是GPL,免费的,另外一种是商业许可,有30天的试用期。免费的版本在 www.appwebserver.org 下载,appWeb的商业版本由Mbedthis公司发布和维护,网址是 www.mbedthis.com 一般情况下使用免费的版本就可以了,appWeb的性能非常的优秀,其特点可以到网站上查阅,这里不多说。下面切入正题,如何移植appWeb到ARM开发板。 appWeb的源码包中有个很关键的工具,就是configure。如果configure配置好了,那么无需手动修改Makefile就可以正确的交叉 编译出ARM格式的可执行文件。在configure之前需要设置几个关键的环境变量,这些环境变量的值将被configure程序读取然后应用到编译里 去,变量如下: CC,AR,LD,RANLIB,STRIP //此5个须设置成交叉编译工具的所在位置 CC_FOR_BUILD //这个设置成主机上的gcc 我用的是handhelds.org的toolchain,因此进行如下设置: #export CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc #export AR=/usr/local/arm/3.4.1/bin/arm-linux-ar #export LD=/usr/local/arm/3.4.1/bin/arm-linux-ld #export RANLIB=/usr/local/arm/3.4.1/bin/arm-linux-ranlib #export STRIP=/usr/local/arm/3.4.1/bin/arm-linux-strip #export CC_FOR_BUILD=gcc 设置好后进行configure。configure提供了很多的参数,具体的可以参考appWeb网站上的安装说明,地址是 http://www.appwebserver.org/prod ... /product/index.html 下面给出我的configure参数: #./configure --host=arm-s3c2410-linux --build=i686-pc-linux --disable-shared --disable-shared-libc --enable-static --port=80 --disable-multi-thread --type=RELEASE --prefix=/usr/appWeb --webDir=/var/web --disable-test --disable-samples 这里的参数在appWeb的网站上都有说明。需要指出的是,--host参数设定目标板的类型,这里用的是arm-s3c2410-linux,就是说在 ARM平台上的Linux系统。而--build才是说明宿主机的平台,这里是i686-pc-linux,就是说在一台装有Linux的PC上进行交叉 编译。我把appWeb编译成了一个静态的版本,这样会省去很多加载动态库的麻烦。--disable-test --disable-samples两个参数是说编译的时候取消测试和例子,不知为什么,在我的环境中如果不取消这两个东西,编译这两个东西的时候会产生 错误。 然后就make吧 #make 成功之后make install #make install 程序会被安装到3个位置,一个是可执行程序的位置,一个是--prefix指定的程序主目录,我这里是/usr/sbin和/usr/appWeb,还有 一个就是放html的WebDir了。在/usr/sbin中的是编译出的正常版本,appWeb。但是这个不是我需要的全静态版本,于是到 /appWeb源代码目录/bin下找到一个叫做appWebStatic的程序,把它cp出来。 接下来就是建立一个nfs的共享目录了,就起名叫/share吧。关于NFS的配置和使用不是本文的内容,所以不多说。然后把/usr/appWeb里的 所有东西都cp到share下,把appWebStatic也cp过来,最后在share中建立一个web目录,这是appWeb读取html的默认位 置,在web中随便写个test.html做测试用。 测试appWeb。还是老一套,把开发板用网线连上hub,直接连主机也行。接上串口,在Linux下开minicom连开发板,连上之后在开发板的shell下mount主机的nfs目录。 #mount -t nfs 主机IP:/share /tmp/nfs #cd /tmp/nfs #./appWebStatic 如果一切正常的话web server就起来了,然后在主机上用elinks或者别的什么浏览器来浏览一下网页, #elinks 开发板IP/test.html 应该可以看见网页了,到此所有主要步骤完成。 接下来就是修改cramfs,把appWebStatic加到文件系统中,然后把cramfs烧到板子上就Ok了。这些步骤也不赘述了。 结语: 1)appWeb天生是给嵌入式设备用的,支持ARM平台,所以移植起来很方便,只要正确的进行configure基本就行了 2)appWeb源码目录下有两个文件,config.h和config.make。这两个文件其实就是configure的结果,Makefile就是用他们来编译程序的。如果感觉使用configure不方便,直接手动修改也行,虽然官方不推荐这样做 2)移植appWeb的目的是为了用Bandwidthd,但是Bandwidthd比较难移植,这个目前正在尝试中。 3)开发板上必须要有功能比较完整的Linux系统,这样方便测试,比如使用U盘或者NFS来测试应用程序。 5)还是那句话,嵌入式不是一开始就非做底层不可,做做应用,移植移植程序在板子上跑跑即好玩,还能很好的入门。 |