Boa设计主要出于速度和安全,是指不被恶意用户暗中破坏,而不是指它有很好的访问控制和通信加密。可以添加SSL来保证数据传输中的保密和安全。
2.操作系统
3.版本
从0.90到现在的最新发布版本0.94。最新发布版本0.94:boa-0.94.13.tar大小为120k,解压后为436k,编译之后的可执行代码在60k左右。最近开发版本:boa-0.94.14rc21
4.可执行程序的大小、内存需求情况
Boa有最少的资源需求。非常少的内存需求,能耗很小。特别适合于嵌入式市场。含有gcc2.95.3和GNUlibc2.2.5的boa的二进制文件大小为61K(495Kstaticallylinked)。使用库uClibc,boa变得更小(92Kstaticallylinked)。
有人曾做过测试:所用环境AMDDuron700,384MBRAM,RealTek8139,SiS900chipset-basedNICs,LinkSys10/100hub,Linux2.4,结果是:Boa的虚拟内存(VmSize)大小是1696kB,85%是库文件。虚拟内存数据(VmDatasize)大小是108kB。Boa每次连个并发连接消耗掉20kB的内存。
参考比较表:
Server
StrippedBinarySize
VmSize
ExternalLibraries
Boa0.94.13
61kB
1700kB
0
Apache1.3.26
277kB
11,000kB
9
64kB
1800kB
5.功能、特点
l支持HTTP/1.0(实验性的、有条件的支持HTTP/1.1)
l支持CGI/1.1,编程语言除了C语言外,还支持Python,Perl,PHP,但对PHP没有直接支持,没有mod_perl,mod_snake/mod_python等。
lBoa支持HTTP认证,但不支持多用户认证。
l它可以配置成SSL/HTTPS和IPv6。
l支持虚拟主机功能。
Boa服务器与其它服务器的不同:
为了追求速度和简单性,boa服务器在一些方面不同于一些流行的web服务器。
CGI程序的REMOTE_HOST环境变量没有设置
TheREMOTE_HOSTenvironmentvariableisnotsetforCGIprograms,forreasonsalreadydescribed.ThisiseasilyworkedaroundbecausetheIPaddressisprovidedintheREMOTE_ADDRvariable,so(iftheCGIprogramactuallycares)gethostbyaddroravariantcanbeused.
Boa不具有ssi(serversideincludes)。
Wedon'tlikethem,andtheyaretooslowtoparse.Wewillconsidermoreefficientalternatives.
Boa不具有访问控制。
Boawillfollowsymboliclinks,andserveanyfilethatitcanread.TheexpectationisthatyouwillconfigureBoatorunasuser"nobody",andonlyfilesconfiguredworldreadablewillcomeout.
没有chroot选项。
Thereisnooptiontorunchrooted.Ifanybodywantsthis,andiswillingtotryoutexperimentalcode,contactthemaintainers.
编译后的可执行的二进制文件为60kB左右,与boa差不多。版本已从1.90a发展到2.25b,
使用内存很少,没查到具体的数据。
5.特点、功能
特点:
的分配内存
便携:它能够在大部分的类Unix系统上运行,包括FreeBSD,SunOS4,Solaris2,BSD/OS,Linux,OSF等等快速:它的速度要超过主流的Web服务器(Apache,NCSA,Netscape),在高负载情况下,它要快的多。安全:它努力的保护主机不受到攻击,不中断服务器
功能:
l支持CGI1.1。
l支持基本的认证功能。
l支持Chroot功能
l支持Throttling。
l支持IPv6。
l支持多虚拟主机功能。
l支持自定义错误页。
l支持标准日志记录。
l通过扩展它也可以支持HTTPS、SSL和TLS安全协议。
·Software–哪种web服务器
oName
oVersion
oReleased–什么时候发布的
oActivedevel-是否当前还在开发中。
·Features–一些关键服务器的特点
oModel-whatkindofserveritis.Themodelsare:
§fork-startanewprocessforeachrequest.
§pre-fork-pre-startapoolofprocesseswhicheachhandlemultiplerequests.
§threads-usethreadsinsteadofprocesses.
§Javathreads-thisversionoftheJavaruntimeuses"Greenthreads"insteadofnativethreads,soitactsmoreliketheselect-basedservers.
§select-usenon-blockingI/Oandtheselect()systemcalltohandlemultiplerequestsinasingleprocess,singlethread.
oAuto-conf(自动配置)-whetherthere'sascripttoautomaticallyconfigurethebuildprocessforyourOS.
oBasicauth(基本认证)-whethertheserversupportsBasicAuthentication,forpassword-protectedwebpages.
oChroot-whethertheserverletsyouusethechroot()systemcalltoenhancesecurity.
oThrottling-theabilitytosetbandwidthlimitsoncertainpages,sotheydon'tusemorethantheirfairshareoftheserver'sresources.
·Size–各种服务器的大小
oTarbytes-theuncompressedsourcetarchivesize.
oSourcefiles-howmanysourceandheaderfiles.
oSourcelines-howmanylinesinthesourceandheaderfiles.
oExe-theexecutablesize.Forthecompiledprogramthisissizeofthemainexecutablefile,stripped.FortheJavaserversit'sthetotalsizeofthe.classfilesor.zipfiles.ForRoxenit'sthesizeofthePikeinterpreter.
·基础测试系统。Thebenchmarktestsystemisa297MHzUltraSparcwith256MBRAM/512MBswaprunningSolaris2.6,otherwisetotallyquiescent.RLIMIT_NOFILEis256soft/1024hard,andv.v_maxupis3941.
·RPS–每秒响应请求次数。maximumrequestspersecond.Thisisdeterminedbyrunningthetestloadatvariousparallel-requestratesandfindingthemaximumresponserate.Seethegraphbelowforthefulldata.
oSmallfiles-thesmall-filetestloadconsistsof1000files,each1KBlong,requestedrandomly.
·Maxusers–最大处理的用户数。Thisisdeterminedbyrunningthetestloadatvariousparallel-requestratesandseeingwhenitstartsscrewingup.Typicalscrewupsarerunningoutofmemoryorprocesses,sothatrequestsstarttimingoutorgettingrefused.
oLargefiles-thelarge-filetestloadconsistsof100files,each1MBlong,requestedrandomly.Also,eachconnectionisthrottledtosimulatea33.6Kbpsmodem.Notethat100033.6Kbpsconnectionsis3/4ofaT3.
发布的版本从1.00到1.19。最新发布的版本是version1.19.tar41kB,解压后为140kB。
4.功能、特点
它实现了HTTP服务器的所有的基本功能,包括:
·支持CGI功能
·支持基本的验证功能
·支持安全..上级目录功能
·支持通用的MIME类型
·支持目录列表功能
·支持使用index.html,index.htm,index.cgi作为首页
·支持多个根目录的虚拟主机
·支持标准日志记录
·支持自定义错误页
·Trailing-slashredirection
·它可以配置成SSL/HTTPS和IPv6.
5.可执行文件大小、内存使用情况
Windows,QNX,RTEMS,UNIX(*BSD,Solaris,Linux)。
l小巧、快速、不膨胀、无需安装、简单的40KB的exe文件,随意运行
l支持GET,POST,HEAD,PUT,DELETE等方法
l支持CGI,SSL,SSI,MD5验证,resumeddownload,aliases,inetd模式运行
l标准日志格式
l非常简单整洁的嵌入式API
l对库dietlibc支持友好,对uClibc(*)不友好。
l容易定制运行在任意平台:Windows,QNX,RTEMS,UNIX(*BSD,Solaris,Linux)
不具有的功能:
virtualhosts,userhomedirectorires,ACL(accesscontrollists),trafficshaping,keep-aliveconnections,FCGI(FastCGI)support.
编译后的可执行的二进制文件为40kB左右.
Unix、linux、Solaris、FreeBSD
lvirtualhosts
lvirtualdirectorylistings
lURL-Rewriting,HTTP-Redirects
lautomaticexpirationoffiles
lLargeFileSupport(64bitfileoffsets)
lRanges(start-end,start-,-end,multipleranges)
lon-the-flyoutput-compressionwithtransparentcaching
ldeflate,gzip,bzip2
lauthentication
lbasic,digest
lbackends:plainfiles,htpasswd,htdigest,ldap
lfastandsecureapplicationcontrolleddownloads
lServerSideIncludes
lUserTracking
lFastCGI,CGI,SSI
lPHP-Support:
lsamespeedasorfasterthanapache+mod_php4
lincludesautilitytospawnFastCGIprocesses(neccesaryforPHP4.3.x)
lviaFastCGIandCGIinterface
lsupportCodeCacheslikeTurckmm,APCoreaccelarator
lload-balancedFastCGI
l(onewebserverdistibutesrequesttomultiplePHP-serversviaFastCGI)
lSecurityfeatures:
lchroot(),setUID,setGID
lprotectingdocroot
lstrictHTTP-headerparsing
没有查到具体数据。
GoAheadWebserver是为嵌入式实时操作系统(RTOS)量身定制的Web服务器。它的目标也许不在于目前的WEB服务器市场,而是面向当嵌入式系统深入我们的工作与生活的明天,那时,它也许会成为使用最广泛的WEB服务器。GoAheadWebserver构建在设备管理框架(DeviceManagementFramework)之上,用户可以像标准的WebServices一样来部署自己的应用,不需要额外的编程。GoAheadWebserver支持SOAP客户端(SimpleObjectAccessProtocol,简单对象访问协议),XML-RPC客户端,各种Web浏览器和单独的Flash客户端。GoAheadWebserver支持一种类ASP的服务器端脚本语言,其语法形式和微软的ASP语法基本相同(ActiveServerPage)。GoAheadWebserver是跨平台的服务器软件,可以稳定地运行在Windows,Linux和MacOSX操作系统之上。GoAheadWebserver是开放源代码的,这意味着你可以随意修改Web服务器的功能。这款WEB服务器非常小巧,它的WINCE版本编译后的大小还不到60k,它的输出通常也是面向一些小屏幕设备。在性能方面,使用一颗24MHz的68040处理器,它的响应速度为20次/秒,使用266MHz的Pentium处理器可以达到50次/秒的响应速度。
WindowsCE,WindRiverVxWorks,Linux,Lynx,QNX,与Windows95/98/NT
3版本
Goahead从2003年开始发布,最新的版本:webs218.tar,827kB,解压后为2.28MB4.功能、特点
·很小的内存消耗
·支持认证功能DigestAccessAuthentication(DAA)
·支持安全的通信,例如SSL(安全的套接字层)
·支持动态Web页面,如ASP页面
·可以使用传统的C语言编程定制Web页面里的HTML标签
·支持CGI(公共网关编程接口)
·嵌入式的JavaScript脚本翻译器
·独特的URL分析器
·它基本上属于一个HTTP1.0标准的WEB服务器,对一些HTTP1.1的特性如(持久连接)也提供了支持。每秒65次connections
内存需求60K,它的WINCE版本编译后的大小还不到60k。
Linux,Windows,MacOSX,Solaris
Appweb最新版本是appweb-src-2.2.2,大小1.195MB,解压后6.22MB
AppWeb提供的一些关键好处:
l低开发成本。支持cgi/1.1、javastript、esp、php(4and5),加快开发进度。
l最小的资源需求。一秒能响应3500个请求,非常迅速,并且紧凑(110KB)。
l灵活的开发环境。Appweb高度模块化,可以根据需要取舍。
l可靠性
具有的功能:
·支持嵌入式JavaScript,esp,egi,cgi和php。.
·容易使用。大量的例子文档可用。
·安全。支持SSL、认证。SecureSocketLayer(SSL)includingbothclientandservercertificates.DigestandBasicAuthentication.Sandboxdirectivestolimitdenialofserviceattacks.
·模块化.Selectonlythefeaturesyouneedviadynamicallyloadablemodules.Alsosupportsgranularsourcecodecompilationdirectives.
·性能突出。.Fastestperformanceinitsclass.Over3500requestspersecondonaPCclassdevice.Memoryfootprintfrom110K.CodeandwebpagesarefullyROMable.
·符合标准.AppWebsupportsHTTP/1.0,HTTP/1.1,CGI/1.1,SSLRFC2246,HTTPRFC2617
·方便.AppWebhasbeenportedtoLinux,Windows,MacOSXandSolarisandsupportthefollowingCPUarchitectures:ARM7,MIPS32,i386/X86,PowerPCandSparc
FeatureOverview
DynamicContent
·PHP(4and5)
EmbeddedServerPages
·Server-sideJavaScripting
·Integratedsessionstatemanagement
·ScriptedgenerationofHTML
·Extensiblevianewfunctions
·Manageclientstate-dataviasessions
·Post-backparadigm.Samepageforformandpostlogic
Security
·SecureSocketsLayer(SSL)
·BasicandDigestAuthentication
·DirectoryandURLlocationbasedauthorization
·Sandboxlimits
·Accessandaccessviolationlogging
Modularity
·Dynamicloadingofmodules
·ExtensibleURLhandlers
·Extensible/replaceableauthorization,SSLandscript
EaseofUse
·Apache-styleconfigurationfile
·Debuggingandtracelogging
·PackagedinstallationsforLinuxandWindows
·Runasaservice/daemon
OtherFeatures
·HTTPserverandclientaccessprogram
·NamedandIPbasedvirtualhosts
·Listenonmultipleports
·CompilewebpagesandfilesintoCcodeforexecutionfromROM
Standards
·HTTP/1.1
·CGI/1.1
·Apacheconfigurationfilecompatibility
Performance
·Multithreadedwithhighperformancethreadpool
·Requestthroughput(>3,500requestspersecond)
·Scalesonmulti-cpusystems
·Smallmemoryfootprintevenunderheavyload(from400K)
DeveloperFeatures
·HTTPserverandclientlibraries
·Sharedandstaticlibrariessupplied
·CandC++APIs
·Operatesingle-threadedormultithreaded(Compileorrun-timeselectable)
·Easy,intuitiveprogrammingmodel
·Integratewithcommoneventmechanism:WindowsMessages,Unixselect,dedicatedthread
·Codingminimizedasmostfeaturescanbespecifiedviatheconfigurationfile
·Cookbookofsamples(cutandpastetogetgoing)
·SMPsafe
·Extensivedebugtracelogging
内存使用110KB,Smallmemoryfootprintevenunderheavyload(from400K)。
现在的嵌入式linux中CGI程序主要使用C语言。对于编写C语言的CGI程序,可以编写好程序之后,在linux操作系统下编译,用针对硬件平台的linux的交叉编译工具编译就可以,写的html网页界面在记事本写即可。我以前写的CGI程序就是在此环境下写的。这也是最普遍的开发方法。
对于用C语言编写CGI程序还可以使用CSP/eybuild提供的平台库及其开发套件,它可以将CGI程序嵌入式到网页中,可以提高开发效率。传统用C做CGI的方法是直接使用printf()等标准I/O函数输出HTML代码,这样不但使得C程序和HTML程序交织的混乱不堪,还使得页面输出的流程控制变得非常复杂。CSP与之不同,它充分吸取了ASP/JSP/PHP等以HTML/XML为模板嵌入脚本语言优点,并充分融合C语言的语言特性。使得CSP的开发更快速、更高效,同时还大大提了最终代码的可读性和维护性。CSP设计的最原始的初衷,就是要为嵌入式开发定制的一套类似ASP/JSP/PHP的C语言开发工具。针对设备WEB开发CSP提供了丰富的平台库和开发工具,它们为设备系统的WEB交叉开发和移植提供了有力的支持。通过交叉开发,可以在其它硬功件平台完全未准完毕的情况下进行高层软件的开发。这不仅能为产品开发有效地节约软硬件资源,还为WEB程序提供简单有效地调试工具。
用C语言编写CGI与其它语言编写CGI的比较:
C语言简洁紧凑,使用方便、灵活,对程序的语法结构要求不是很严,这就使得编程
人员在编程时具有很大的灵活性,可以设计出自己风格的程序。不像UNIXSHELL、Perl和TCL,C语言是一种编译语言,源程序代码要被系统的续译器翻译成机器能直接执行的二进制代码,因此用C语言编写的CGI程序的运行速度要比用解释性语言编写的程序快。使用编泽语言的另一个好处是即使CGI执行程序陷入黑客之手,他们也无法像分析用解释性语言编写的CGI程序那样找到程序中的漏洞。由于C语言最初是针对系统设计的,这使得C语言的字符串处理能力比较差,如果CGI程序需要对字符串进行一些复杂的操作,用C诺言实现起来将比较麻烦,代码量也较多。现在网上用C语言编写的CGI程序仅次于Perl(Perl编写程序简单方便)。
CGI与JSP的比较:
Servlet是Java技术对CGI编程的回答。Servlet程序在服务器端运行,动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,JavaServlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。详细内容见备注。JSP是强于CGI,这也是现在CGI技术的使用没有JSP使用多的原因。但现在嵌入式web服务器端程序开发,还是CGI较多。由于使用JSP技术,在嵌入式web服务器开发中很少使用,在网上没有查到关于在嵌入式web服务器上应用的有关内容。
要实现阅读器的lmt,所需的CGI代码量估计不会很多,关键在于调试。
一个网友的个人意见:
CGI,mod_perl,PHP,JSP性能比较
测试结果很大程度上依赖于机器的硬件/软件配置,并随配置变化而产生差异,因此:本测试结果*仅供参考*测试用硬件:CPU:IntelPII300(66x4.5)RAM:192MHD:IBM20G(2Mcache)测试用软件:OS:Slackware7(自行编译的2.2.14核心)Web:Apache1.3.12(标准模块按缺省配置,所有模块静态编译)PHP4.0RC1(加入了MySQL支持)mod_perl1.23(缺省配置,未加EVERYTHING=1)ApacheJServ1.1(缺省配置)JDK:JDK1.2.2JSDK:JSDK2JSP:GNUJSP1.0.0JSP:GNUJSP1.0.0本测试是用Apache自带的ApacheBench(ab)进行的,命令为:/www/bin/ab-c20-n1000CGI/脚本URL此命令表示使用20个并发连接,进行1000次请求。所有测试均在本机进行,各种测试均反复进行5次,去掉最大最小值后取平均值。我分别测试了C写的CGI、Perl写的CGI、用mod_perl执行的PerlCGI、PHP和JSP。各种CGI/脚本均输出内容相似的简单页面,内容如下:htmlbodyh1ThexxxxHelloProgram/h1pHelloxxxxWorld!/body/html测试结果(只取了最具代表性的Requestspersecond即每秒处理请求数这一项)CGI/脚本类型每秒处理请求数CCGI128PerlCGI69mod_perl223PHP237JSP21测试结论:
JavaServlet和JSP的技术概述以及比较
JavaServlet及其特点
Servlet是Java技术对CGI编程的回答。Servlet程序在服务器端运行,动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,JavaServlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资(更重要的是,Servlet程序员收入要比Perl程序员高:-):
高效:
在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择,比如缓冲以前的计算结果,保持数据库连接的活动,等等。
方便:
Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
功能强大:
在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
可移植性好:
Servlet用Java编写,ServletAPI具有完善的标准。因此,为I-PlanetEnterpriseServer写的Servlet无需任何实质上的改动即可移植到Apache、MicrosoftIIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。
节省投资:
不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
JSP及其特点
JavaServerPages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,有关JSP基础概念的说明请参见《JSP技术简介》。
许多由CGI程序生成的页面大部分仍旧是静态HTML,动态内容只在页面中有限的几个部分出现。但是包括Servlet在内的大多数CGI技术及其变种,总是通过程序生成整个页面。JSP使得我们可以分别创建这两个部分。例如,下面就是一个简单的JSP页面:
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD>
<BODY>
<H1>欢迎</H1>
<SMALL>欢迎,
<!--首次访问的用户名字为"NewUser"-->
<%out.println(Utils.getUserNameFromCookie(request));%>
要设置帐号信息,请点击
<P>
页面的其余内容。.
</BODY></HTML>
JSP和ActiveServerPages(ASP)相比
Microsoft的ASP是一种和JSP类似的技术。JSP和ASP相比具有两方面的优点。首先,动态部分用Java编写,而不是VBScript或其他Microsoft语言,不仅功能更强大而且更易于使用。第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。
JSP和纯Servlet相比
JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
JSP和服务器端包含(Server-SideInclude,SSI)相比
SSI是一种受到广泛支持的在静态HTML中引入外部代码的技术。JSP在这方面的支持更为完善,因为它可以用Servlet而不是独立的程序来生成动态内容。另外,SSI实际上只用于简单的包含,而不是面向那些能够处理表单数据、访问数据库的“真正的”程序。
JSP和JavaScript相比
JavaScript能够在客户端动态地生成HTML。虽然JavaScript很有用,但它只能处理以客户端环境为基础的动态信息。除了Cookie之外,HTTP状态和表单提交数据对JavaScript来说都是不可用的。另外,由于是在客户端运行,JavaScript不能访问服务器端资源,比如数据库、目录信息等等。
Java很占内存吗?
使用Java平台进行嵌入式设备开发时,其对内在的使用量,会不会比使用原始语言如C/C++更大些呢?这取决于软件的复杂性。Java由于虚拟机和内库的原因,有可能会导致内存开销的增大。下面比较一下Java平台内存的占用情况(基于Sun的实现):
CLDC(ConnectedLimitedDeviceConfiguration,运算功能有限、电力有限的嵌入式装置,如PDA、手机等):可工作于100K(RAM),JIT(JustInTime,即时编译技术)需要最大些。典型的部署要求500K-16M(RAM)。
CDC(ConnectedDeviceConfiguration,运算能力相对较佳、并请在电力供应上相对比较充足的嵌入式装置,如冷气机、电冰箱等):VM约为250K,JIT小于300K,VM+JIT+基础类库约占2-2.5M。典型的部署要求:4M-32M。
当然,内存的占用量还取决于应用的大小及内在的使用情况。可以看出,其实Java平台不会占用太大的内存。但是,这只是问题的一半。另一半是,Java代码最后部署时是以类文件来部署的,它主要是包括字节码和元数据。通过对CVM数据的分析,可以看出,字节码占据着大概30%的数据量。而采用JIT编译的代码相对于字节码而言,可以发现,内存的占有量增加了,并有一个7-8倍的ARM指令集。由于,可以估计:
Java类转成字节码的速度≈1/30%≈3.3x;
原始语言转成字节码的速度≈7x。
这意味着,Java代码的内存使用量约为原始语言代码的一半。当然这只是非常粗略的估算,但却是合理的估算。
使用Java的JIT后,只有那些使用频率高的代码才会被编译。而在系统中只是偶然被执行的代码则采用解释来编译。同时,JIT尽量使被编译的代码其内存占有量保持在一较小的范围内。对CVM(CDC所使用虚拟机),默认值为512K。而在一些较优秀的程序中,可以发现,其值为100K-300K。
这也就是说,使用Java编写的程序,只有使用频率比较高的代码才导致内存占用的增加。相反,使用C/C++编写的程序,整个代码都需要进行编译。因此,不能说使用Java语言编写的程序占用的内存就会比使用C/C++编写的程序大。这决定于软件相对于平台代码的复杂度及大小。如果软件规模比较大,Java平台所消耗的内存远小于Java类文件简洁性节约的内存,这种情况下,使用Java平台将有利于节约内存。如果软件的规模比较小,则Java平台消耗的内存就比较明显了,可以考虑使用C/C++来开发,以节约内存。
---------------------------------------------------------------------
一:移植Boa(web服务器)到嵌入式Linux系统
一、Boa程序的移植
注意:若从boa上下载的是boa-0.94.13.tar.tar,解压方式一样解压:
2、生成Makefile文件进入boa-0.94.13,直接运行src/configure文件
[tekkamanninja@Tekkaman-Ninjasrc]$./configure
3、修改Makefile文件(注意:必须用cross-2.95.3,如使用3.4.1、4.1.1等等会出错)4、交叉编译
[tekkamanninja@Tekkaman-Ninjasrc]$make
5、去除调试信息,减小体积。(可选)
[tekkamanninja@Tekkaman-Ninjasrc]$/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-stripboa
6、将编译好的程序放入根文件系统的/bin目录下。
[tekkamanninja@Tekkaman-Ninjasrc]$cpboa/home/tekkamanninja/working/nfs/rootfs/bin/
二、配置Boa
Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
1、Group的修改
[root@~]#adduser-guserboaChangingpasswordforboaEnterthenewpassword(minimumof5,maximumof8characters)Pleaseuseacombinationofupperandlowercaselettersandnumbers.Enternewpassword:Badpassword:tooshort.Warning:weakpassword(continuing).Re-enternewpassword:passwd[820]:passwordfor`boa'changedbyuser`root'Passwordchanged.[root@~]#
2、ScriptAlias的修改
修改ScriptAlias/cgi-bin//usr/lib/cgi-bin/为ScriptAlias/cgi-bin//var/www/cgi-bin/
这是在设置CGI的目录,你也可以设置成别的目录。比如用户文件夹下的某个目录。
3、ServerName的设置
注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::Nosuchfileordirectory”,所以必须打开。其它默认设置即可。你也可以设置为你自己想要的名字。比如我设置为:ServerNametekkaman2440
此外,还需要:
将mime.types文件复制/etc目录下,通常可以从linux主机的/etc目录下直接复制即可。
(以下配置和boa.conf的配置有关)
创建日志文件所在目录/var/log/boa
创建HTML文档的主目录/var/www
创建CGI脚本所在录/var/www/cgi-bin
[tekkamanninja@Tekkaman-Ninjalog]$mkdir-m777boa[tekkamanninja@Tekkaman-Ninjalog]$cd..[tekkamanninja@Tekkaman-Ninjavar]$mkdir-m777www[tekkamanninja@Tekkaman-Ninjavar]$mkdir-m777www/cgi-bin[tekkamanninja@Tekkaman-Ninjavar]$cd..[tekkamanninja@Tekkaman-Ninjarootfs]$cp/etc/mime.typesetc/
三、运行Boa
开发板操作:
[root@~]#boa
如果发现boa没有运行,则可以在开发板的/var/log/boa/error_log文件中找原因。
比如端口已被其他程序占用:
[root@~]#cat/var/log/boa/error_log[20/Feb/2008:21:21:57+0000]boa.c:194-unabletobind:Addressalreadyinuse
或是用户设置错误等等,都可以查到。
四、功能测试
静态网页测试
将静态网页存入根文件系统的/var/www目录下(可以将主机/usr/share/doc/HTML/目录下的index.html、homepage.css和img、stylesheet-images目录复制到/var/www目录下)
我参考《嵌入式Web服务器移植》的做法如下:
在根文件系统的/var目录下
[tekkamanninja@Tekkaman-Ninjavar]$cp/usr/share/doc/HTML/index.htmlwww/[tekkamanninja@Tekkaman-Ninjavar]$cp-r/usr/share/doc/HTML/imgwww/[tekkamanninja@Tekkaman-Ninjavar]$cp/usr/share/doc/HTML/homepage.csswww/[tekkamanninja@Tekkaman-Ninjavar]$cp-r/usr/share/doc/HTML/stylesheet-imageswww/
CGI功能测试
1、编写HelloworldCGI.c程序
[tekkamanninja@Tekkaman-Ninjasource]$vihelloworldCGI.c
(主程序的程序开头一定要用Tab,而不是空格,不然编译可能不通过)
#includeHello,world.
\n");printf("\n");printf("\n");exit(0);}
[tekkamanninja@Tekkaman-Ninjasource]$/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc-ohelloworldCGIhelloworldCGI.c
将helloworldCGI拷贝至根文件系统的/var/www/cgi-bin/下
[tekkamanninja@Tekkaman-Ninjasource]$cphelloworldCGI../nfs/rootfs/var/www/cgi-bin/
3.测试
网页出现Hello,world.调试成功!
[tekkamanninja@Tekkaman-Ninjasrc]$cd../..[tekkamanninja@Tekkaman-Ninjasource]$cd../nfs/rootfs/etc/[tekkamanninja@Tekkaman-Ninjaetc]$mkdirboa[tekkamanninja@Tekkaman-Ninjaetc]$chmod777boa/[tekkamanninja@Tekkaman-Ninjaetc]$cdboa[tekkamanninja@Tekkaman-Ninjaboa]$kwriteboa.conf
CC=/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gccCPP=/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gcc-E
[tekkamanninja@Tekkaman-Ninjasource]$tarxzfboa-0.94.13.tar.gz
--disable-FEUTARE-disable-ipv6-disable-lfs可以不加。
必需修改的地方有:
你可以自己定义,这里就是设置web服务的根目录。
屏蔽一下语句,不然嵌入式这样的小系统下可能无法启动#$HTTP["url"]=~"\.pdf$"{#server.range-requests="disable"#}
Dynamicsectionatoffset0x20790contains21entries:TagTypeName/Value0x00000001(NEEDED)Sharedlibrary:[libdl.so.2]0x00000001(NEEDED)Sharedlibrary:[libc.so.6]0x0000000c(INIT)0xc2000x0000000d(FINI)0x231c00x00000004(HASH)0x81280x00000005(STRTAB)0xa3380x00000006(SYMTAB)0x8b480x0000000a(STRSZ)5946(bytes)0x0000000b(SYMENT)16(bytes)0x00000015(DEBUG)0x00x00000003(PLTGOT)0x308600x00000002(PLTRELSZ)960(bytes)0x00000014(PLTREL)REL0x00000017(JMPREL)0xbe400x00000011(REL)0xbe000x00000012(RELSZ)64(bytes)0x00000013(RELENT)8(bytes)0x6ffffffe(VERNEED)0xbd700x6fffffff(VERNEEDNUM)20x6ffffff0(VERSYM)0xba720x00000000(NULL)0x0
在开发板为此程序新建一个用户及存储网页的根目录以及一个log目录: