




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
技术文档LinksysWRT54G使用指南
v0.01blckstone2009-7-111基本运行环境硬件平台LinksysWRT54GV4CPU200MHzBroadcomBCM5352chiprev0SDRAM:16MFlash:4M具体说明:.broadcom./products/Wireless-LAN/802.11-Wireless-LAN-Solutions/BCM5352ELTheBCM5352ELintegratesahigh-performanceMIPS32processor,IEEE802.11b/gMAC/PHY,SDRAMcontroller,andaconfigurablefive-portFastEthernet(FE)switch.TheBCM5352ELprovideswirelessLANconnectivitysupportingdataratesofupto125Mbpsthatisbackward-compatiblewithstandard802.11b/g.TheBCM5352ELsupportsaWANconnectionviaitsconfigurablemediainterfaces.Theper-portprogrammablefour-levelpriorityqueuesenableQoS(IEEE802.1p)forguaranteedbandwidthapplications,DiffServ/TOS,andL2/L3IGMPsnooping.TheIEEE802.1QVLANallowsflexibleimplementationofVLANgroupingandWANportsegregation.特征200-MHzMIPS32?CPUcorewith16-KBinstructioncache,8-KBdatacache,and256-BprefetchcacheandaMemoryManagementUnit(MMU)forhigh-levelReal-TimeOperatingSystem(RTOS)supportInterfacestoBCM2050,a2.4-GHzdirectconversionradioTheBCM5352ELisalow-cost,highperformancesystem-on-chip(SoC)forresidentialandsmalloffice,homeoffice(SOHO)markets.Time-to-marketissignificantlyreducedthroughstableLinux?andVxWorks?kernels,boardsupportpackages(BSPs),drivers,andtoolchains.软件平台DD-WRT版本号:DD-WRTV24(05/24/08)stdbuild9526登录时默认的用户名密码:root/admin.dd-wrt./dd-wrtv3/dd-wrt/about.htmlDD-WRTisaLinuxbasedalternativeOpenSourcefirmwaresuitableforagreatvarietyofWLANroutersandembeddedsystems.Themainemphasisliesonprovidingtheeasiestpossiblehandlingwhileatthesametimesupportingagreatnumberoffunctionalitieswithintheframeworkoftherespectivehardwareplatformused.Thegraphicaluserinterfaceislogicallystructured,anditisoperatedviaastandardWebbrowser,soevennon-technicianscanconfigurethesysteminonlyafewsimplesteps.Apartfromthesimplehandling,speedandstabilityarealsointhefocusofourdevelopmentwork.ComparedtothesoftwarepreinstalledonmanyWLANrouters,DD-WRTallowsareliableoperationwithaclearlylargerfunctionalitythatalsofulfillsthedemandsofprofessionaldeployment.ThehugeusercommunitygivessupporttoDD-WRTdevelopersandtheusersthemselvesinvariousways.Thankstothis,potentialflawsinthesystemcanbedetectedveryquicklyandcanthusbecorrectedwithoutdelay.DD-WRTuserscanfindhelpandsuggestionsfromotherusersintheuserforums,andtheWikicontainingfurtherinformationandhow-toguidesisbeingexpandedandmaintainedbytheDD-WRTcommunityaswell.Fordevicesmainlyusedforprivatepurposes,DD-WRTsfreelyavailable.Platformsusedforcommercialpurposesrequireapaidlicense.Comparedtothefreelyavailableversion,theprofessionalversionalsoallowsforconfigurationoftheWLANparameters,thusopeninguptheopportunityofcreatinge.g.reliableandpowerfulnetworkinfrastructures.SpecialdemandscanbefulfilledbyspecificallytailoredversionsofDD-WRT.Maincharacteristics:supportsmorethan200differentdevicescomprehensivefunctionalitysupportsallcurrentWLANstandards(802.11a/b/g/n*)supportsoutdoordeployment*supportsenhancedfrequencies*VPNintegrationsupportsvariousHotspotsystemsbandwidthmanagementmultilingualuserinterface*appropriateWLANhardwarerequiredDD-WRTis:SebastianGottschall(BrainSlayer,founder,maindeveloper)ChristianScheele(Chris,CEO)PeterSteinh?user(CEO)AnkushMalhotra(Maksat)AlesMajdic(Eko,Developer)SylvainBothorel(Botho,routerwebdesign)FelixFietkau(nbd/openwrt,madwifi)ElkeScheele(OnlineShop)MarkusQuint(support)...andalotofsupportersaroundtheworld交叉编译:编译器和所用头文件和库文件对此,我写攵?了一个makefile专门用来进行交叉编译。但是目前只能进行静态编译,即将所有的库文件成一个可执行文件,而不能使用动态!原因可能是因为目标机器上的运行的系统中所包含的动态库与交叉编译环境中的动态库版本不同,应该考虑将版本换成同样的动态库后,再次进行编译!此外为了方便调试,可以让目标机器挂载编译环境中的samba服务提供的共享文件,从而方便目标机器与交叉编译机器之间共享文件!在目标机器上,编译的核使用的版本是2.4.35,gcc版本是3.4.6,openwrt-2.0目标机器类型是:mipsel架构(LIL_ENDIAN)假设交叉编译环境安装在/opt/openwrt/目录下CC=/opt/openwrt/bin/mipsel-linux-gccCFLAGS=-I/opt/openwrt/includeLDFLAGS=-L/opt/openwrt/lib--Host=mipsel-linux--prefix=/opt/openwrtOpenWrtOpenWrt是用于嵌入式设备的Linux发行版。比起试图创建单一的、静态固件,OpenWrt则是提供一个包含有包管理功能的全套可写的文件系统。这就可以使用用户从产品选择和配置中解放出来,使得用户自己可以定制其所需的软件。对于开发人员来说,OpenWrt是一种编译程序的框架,其不需要有完整的固件。对用户来说,这就意味着完全的可定制,其可按照自己的想法来随意使用设备。配置路由器通过web界面管理路由器路由器默认的网络参数如下:LanIP:Mask:web管理入口:用户名密码:root/admin通过web界面可进行常规的参数配置。建议所以配置均通过web界面进行,因为其可以自动保存有关参数。通过telnet管理路由器可通过如下命令登录到路由器的telnet服务:telnet用户名密码与web管理界面相同。通过telnet登录到路由器后,就获得了一个shell,通过该shell就可以像使用普通linux系统一样操作该路由器了。特色功能列举挂载samba共享目录要以通过web管理界面或telnetl界面,设定路由器挂载网络中的共享文件目录。从而在路由器中就可以像使用本地目录一样使用远程目录。2编译运行新程序寻找OpenWrt-2.0编译环境为什么要找OpenWrt-2.0通过登录到路由器查看核的版本号发现:cat/proc/version发现当前路由器所使用的固件的编译器版本是gcc-3.4.6,对应openwrt-2.0。为了使新编译的程序可以使用路由器上的动态库。我们需要使用openwrt-2.0这样的编译环境。Vhiterussian系列发现均是OpenWrt-1.0Kamikaze系列找到gcc-3.4.6,即OpenWrt-2.0搭建交叉编译环境搭建可用主机环境安装好可以编译的主机环境,并在上面安装好相应的Apache2服务、samba服务等,方便后继的与路由器的数据交换!获取交叉编译工具链从.获取较新交叉编译工具环境。对于本路由器的一可用的较新版本是:openwrt2.0下载地址为downloads.openwrtorg/kamikaze/7.09/brcm-2.4/OpenWrt-SDK-brcm-2.4-for-Linux-i686.tar.bz2解压后即可获得所需要交流编译工具集。一般可形成如下目录结构:Opt/openwrt2/binOpt/openwrt2/includeOpt/openwrt2/libOpt/openwrt2/etc等等。其中openwrt2目录中包含的就是对应交叉编译工具链(编译工具、标准库等)。交叉编译的标准的Makefile对于将要进行交叉编译的源代码来说,可将对应源代友目录复制到opt目录中,然后修改其Makefile。#指明opt目录的相对位置:ROOT=..指明最后要生成的目标:TARGET=target指明生成最终目标所需的中间文件:OBJS=file1.ofile2.ofile3.o…指定用的交叉编译工具链:CC=$(ROOT)/openwrt2/bin/mipsel-inux-gccLD=$(ROOT)/openwrt2/bin/mipsel-linux-gccCFLAGS=-I$(ROOT)/openwrt2/includeLDFLAGS=-L$(ROOT)/openwrt2/lib指定编译:co:$(CC)$(CFLAGS)co$$A$(TARGET):$(OBJS)$(LD)$(LDFLAGS)o$$a指定常用的依赖:.phoney:allcleaninstallAll:$(TARGET)Clean:Rmrf$(TARGET)$(OBJS)Install:$(TARGET)Sudocp$(TARGET)/var/Sudochmod644/var//$(TARGET)2.2.4编译安装运行在目标路由器上可以使用:#wgethostname/target将编译好的目标下载到路由器上,从而可以在路由器本地上执行!除使用HTTP服务来传递数据外,还可以在主机系统上建立Samba服务,而在路由器上挂载该samba服务的方式来实现数据共享!2.3对认证程序进行交叉编译获取认证程序使用我自己写的HustSupplicant认证程序。该认证程序的认证逻辑非常清晰,主要认证机制全部分析清楚透彻。因此对于将来的维护、修改、扩充等非常有利。C函数。这可以降低程序移另外,本HustSupplicantC函数。这可以降低程序移植的难度和工作量。交叉编译如前一节所提到的,对其Makefile进行交叉编译的改造。运行测试问题一:发送了认证主播包,但是无任何响应。在检查网线、代码基本无问题之后,我大概判断原因是来自于认证交换机所使用的组播模式为非标准的802.1x组播模式。我将认证模式由标准模式更换为Shida私有组播模式后,即可出交换机对认证的响应包。这个问题似乎并没有得到解决!因为我在实验室里可以认证成功,而回到寝室里就又出现同样的情况。我把认证模式进行更改也没有作用!这到底是何原因?昨天我回寝室,使用wireshark来监测数据包的发送。发现只要使用的组播地址是标准的802.1x组播地址,则该组播帧似乎就被交换机给屏蔽了。这可能就是原因吧。但新的问题是交换机是如何屏蔽的?怎么关闭此屏蔽?./forum/archiver/tid-19379.html你要真想上802.1X认证的话,不是所有的机器都支持的。我手上用的是LinksysWRT54GSv1.0手上的另外两个BuffaloWHR-G125和BuffaloWHR-HP-G54都不行说来话长,Broadcom的交换机驱动里面有一个BUG,导致802.1x网络包无法发送。只有使用ADM6996交换芯片的机器才能支持802.1x认证,否则会失败。据我所知目前使用这个芯片的机器只有LinksysWRT54G/GS系列的前两个版本,还有MotoWR850Gv2,DellTrueMobile2300的某一个版本,其它的都不行了。包括BCM5325独立交换芯片或者是像BCM5354这样集成交换芯片的,都不行。问题二:认证的回馈信息中有中文乱码学校的网络中心对认证请求的反馈中,若含有信息,则一般都是中文的,而且其编码似乎是GB2312。若我们想正确显示这些信息,则可以使用putty来登录目标路由器的Telnet服务,并将putty的选项windows中的translation的字符集输入为CP936。然后再次登录到路由器进行认证,此时可以得到正确的反馈信息。问题三:认证客户端版本过低在寝室里一般不会有这相问题,使用较低的2.39版论证程序即可。但是在光电国家实验室这边的网络中,似乎交换机较新,因此其对认证程序的版本就有一定要求。经过测试,发现在实验室里认证的版本至少为3.05可以通过修改hs.conf配置文件,来修改HustSupplicant所模拟的认证版本。问题四:无法从主机系统上下载目标二进制文件有几点需要注意:主机系统的web服务文件中需要检测目标文件的权限,特别是对于其它用户需要有读权限。若某个文件的其它人读权限没有打开,则显然通过web是访问不了的。建议文件命名都使用小写文件名称不宜过长。待改进的地方部分算法是采用计算的方式而不是查表的方式,这对于路由器的CPU来说可能是负担。因此在这方面应该进行减负!认证程序不能在路由器上永远保存,一掉电或重启则认证程序就丢掉了。要想再次使用就必须重新从主机系统中下载。另外认证程序还不能自动获得当前运行环境中的指定网卡的IP信息和掩码信息。3编译配置新固件介绍OpenWrtBuildroot关于OpenWrtBuildrootOpenWrtBuildroot是一组Makefiles和补丁文件,这些文件可以使用用户很容易的生成交叉编译toolchain以及用于WirelessRouter的根文件系统。交叉编译工具链使用的一种小型的C标准库:uClibc,.编译工具链是一组工具集,这些工具集可以使你为你的系统编译代码。其一般包括如下几个部分:编译器,如gcc二进制工具,如汇编器、器C标准库,如GNULibc,uClibc,dietlibc安装在你自己的开发环境中的系统,本身已经带了一组编译工具链,可以编译生成能在你自己的机器架构上运行的二进制文件。如果你使用的是pc,则你的编译工具链是运行在X86处理器,其生成的代码也是基于X86处理器的。在大多数的Linux系统中,编译工具链使用的C标准库是GNUlibc。这样的编译工具链系统称为"hostcompilationtoolchain"。编译工具链所运行的系统,就被称之为"hostsystem"。这样主机编译工具链是由你的发行版提供的,openwrt不会对其做任何事情。就像上面说的,运行在你自己系统上的编译工具链生成的二进制可执行文件是运行在你自己主机系统上处理器上的。而对于具有不同处理器结构的嵌入式系统,你就需要交叉编译工具链:运行在你主机系统上的编译工具链,但是其生成的代码是用于目标系统(目标处理器)。比如,如果你的主机系统使用的是X86,而你的目标系统是MIPS,则通常的运行在你主机上的X86编译工具链编译生成的代码是用于X86,而运行于X86的交叉编译工具链则生成用MIPS的代码。在你可以手运编译出gcc,binutils,uClibc及其它一些具时,你或许会问为什么会需要这样的工具链?当然,这样是可行的,不过,处理这样的编译过程和配置过程是非常消耗时间及枯燥的。OpenWrtBuildroot可以使用Makefiles及各种版本的gcc及binutils的补丁文件来自动处理这个过程,使生成的交叉编译工具链可以在WirelessRouter的MIPS架构上正常工作。获取OpenWrtBuildroot通过svn可以获取相应的OpenWrt:对于各种OpenWrt开发,可以使用如下命令获取最新的版本:$svnco/openwrt/trunk/如果你只需要创建自定义的固件映像及包,我们推荐你使用稳定版本:$svnco/openwrt/branches/whiterussian/使用OpenWrtBuildrootOpenWrt的配置界面和Linux核配置(.)及busybox(.)的配置界面类似。特别提醒是编译配置OpenWrt只需要是通常用户就可以了,不需获取root权限。编译的过程如下:⑴配置$makemenuconfig在配置选项中的每一项,你都可以获得相关的帮助来了解对应条目的作用。当配置完成,将自动生成.config文件,以保存配置参数。随后Makefile将会使用到.config中的配置参数。⑵编译$make该命令将会下载、配置及编译选择的所用的工具,最终生成目标固件以及一些额外的工具包。生成的所有目标文件都可以在bin/子目录中找到。你编译的固件映像可以包含两种不同的文件系统类型。Jffs2。Jffs2包含一个可写的根文件系统,它可以扩展你的flash映像的大小。注意:如果你使用通过的固件映像,你需要为你的flash的大小挑选正确的映像,因为其不同的eraseblock大小。Squashfs。Squashfs包含一个只读的文件系统,其为对使用了LZMA压缩的squashfs文件系统的修改版本。当引导时,你可以创建可写的二级文件系统,它可以保存你对根文件系统的修改,包括你所安装的软件包。定制目标文件系统当前有两种方式可以定制最终的目标文件系统::直接定制目标文件系统,然后重编译映像。目标文件系统所在目录是build_ARCH/root/,这里ARCH1选定的目标板的体系结构,通常是mipsel。你可以在这里做些简单的修改,之后使用maketarget_install来重新构建目标文件系统。该方法可以目标文件系统做任何事情,不过如果你决定重构我的工具链、工具或包,则这些修改会丢掉。定制目标文件系统的纲要,通过package/base-files/default/.。你可以在这里定制配置文件及其它事情。不过整个文件系统的层次结构还不存在,因为其是在编译过程中生成的。因此你不能对这个目标文件系统纲要进行任意修改,不过若你做了修改,则这些修改在重新编译时不会丢掉。定制Busybox配置Busybox是可定制的,你可以根据自己的需要对其进行定制。其配置界面已经集成到了系统的主配置界面中。你可以在"OpenWrtPackageSelection"中的"BusyboxConfiguration”找到定制uClibc配置就像BusyBox一样,uClibc也提供了许多的配置选项。你可以根据自己的需要及条件限制,来选择各种各样的功能。修改uClibc最简单的方式如下:(1)在没有对uClibc进行任何配置的情况下进行一次buildroot编译(2)改变当前目录到toolchain_build_ARCH/uClibc/目录,然后运行makemenuconfig.可以根据配置界面进行配置。(3)将.config文件复制到toolchain/uClibc/uClibc.conf或者toolchain/uClibc/uClibc.conf-locale。当你在busybox的配置选项中未选择locale时使用前者,若选择了则使用后者。(4)重新运行编译当然,你也可以直接修改toolchain/uClibc/uClibc.conf或toolchain/uClibc/uClibc.config-locale,而不需要运行配置助理。CpenWrtBuildroot是如何工作的前面提到,CpenWrt基本上是一组Makefiles,其可下载、配置以及使用正确的选项进行编译。它同样包含了一些软件的补丁,主要是用于交叉编译工具链的补丁。每一个软件都有一个Makefile,一般被命名为“Makefile每个Makefile有三个小节:Package小节(在package/目录):包含用于编译用户空间工具的文件及Makefile,这些工具可以被加入到目标文件系统中。每个子目录代表一种工具。toolchain小节(在toolchain/目录):包含与交叉编译环境相关的Makefiles和文件库target小节(在target目录):包含与目标文件系统的映像和Linux核生成相关的软件和Makefiles。支持两种文件系统:jffs2和squashfs.在每一个目录中,至少包含两个文件:Makefile:下载、配置、编译及安装软件的Makefiles.Config.in:配置工具描述文件的一部分。它描述了与当前软件相关的选项。主Makefile按序做如下工作(当配置完成以后):(1)创建下载目录(默认为dl/)。该目录是压缩包所下载的目录,可以通过将其保存起来以避免再次下载。(2)创建build目录(默认为build_ARCH/,ARCK目标端的架构)。该目录用于编译用户空间的工具。(3)创建toolchain编译目录(默认为toolchain_build_ARCH/)。该目录用于编译交叉工具链。(4)配置staging目录(默认为staging_dir_ARCH/)。交叉编译工具链将要安装在该目录。如果你需要使用同样的交叉编译工具来编译第三方软件,那么你可以将staging_dir_ARCH/添加到你的PATH环境变量中,然后就可以通过arch-linux-gcc来编译程序了。为了正确的配置该staging目录,该目录会首先被删除,然后再创建里面的子目录和文件、符号文件等。(5)创建target目录(默认为build_ARCH/root/)以及目标文件系统的纲要结构。该目录将会包含最终的目标根文件系统。为了建立该目录,其会首先被删除,将后将target/default/target_skeleton位置的纲要复制过去,最后删除无用的SVN/目录。调用toolchain,package,target等子目录中的prepare,compile,install等make目标使用uClibc工具链你可能需要交叉编译自己的程序,这时你可使用Buildroot生成的交叉编译工具链。该工具位于staging_dir_ARCH/目录。使用其最简单的方式是将路径staging_dir_ARCH加入到PATH环境变量中,然后使用arch-linux-gcc,arch-linux-objdump,arch-linux-ld等等即可。比如,你可以将如下语句添加到你的.bashrc文件中(假设用于MIPS架构的Buildroot位于~/openwrt/):exportPATH=$PATH:~/openwrt/staging_dir_mipsel/bin/之后就可以简单的使用如下命令进行交叉编译:$mipsel-linux-uclibc-gcc-ofoofoo.c注意:不要将toolchain中工具移出到其它目录,这会使得编译系统不能正常工作。在其它地方使用uClibc工具链默认情况下交叉编译工具链是生成在目录staging_dir_ARCH/目录中。如果你需要将其转换到其它目录,则不可以直接复制,应该通过对Buildroot进行配置,即在"Buildoptions”选项中的"Toolchainandheaderfilelocation”中指定其位置。下载的软件包的位置默认情况下下载的软件都位于/dl目录中。扩展OpenWrt使用更多的软件本小节主要是考虑你想加入更多的用户空间的软件,以加入软件包foo为例:创建foo目录在package/目录中创建你的软件包所对应的目录。⑵创建foo/config.in文件创建config.in文件。该文件将包含对foo软件的配置选项,而这些选项将会显示在配置工具中。其容应该基本包含:configBR2_PACKAGE_FOOtristate"foo-somenicetool"defaultmifCONFIG_DEVELhelpThisisacommentthatexplainswhatfoois.如果该foo软件还依赖于Buildroot中的其它软件或库,则在config.in中自动选择好这些软件将会非常重要。例如,fool依赖于bar库,则:configBR2_PACKAGE_FOOtristate"foo-somenicetool"defaultmifCONFIG_DEVELselectBR2_PACKAGE_LIBBARhelpThisisacommentthatexplainswhatfoois.当前用户也可以加入其它一些配置参数。(3)修改package/config.in为了使你的软件包能加入到配置工具中,你还需要修改package/config.in文件:comment"Networking"source"package/foo/Config.in"⑷修改package/Makefile要将你的软件包foo添加到编译的过程中,需要对package/Makefile进行修改:package-$(BR2_PACKAGE_FOO)+=foo除了默认的依赖关系外,若你的软件包还依赖于其它软件,则添加:foo-compile:bar-compile⑸ipkg控制文件此外还需要创建一个控制文件用以包含你的软件包的信息,这些信息将被ipkg工具使用。该文件应该以这样的形式:package/foo/ipkg/foo.control文件的容如下:Package:fooPriority:optionalSection:netMaintainer:FooSoftware<foofoosoftware.>Source:foosoftware.Depends:libbarDescription:PackageDescription你可以忽略通常的Version和Architecture域,因为它们的容将会由Makefile调用make-ipkg-dir.sh脚本自动创建。其中Depends域非常重要,这样ipkg工具将会在目标系统上自动获取所有依赖软件。(6)Makefile实例最后是最难的部分,创建Makefile。它包含了Makefile的规则,负责处理下载、配置、编译、安装软件,下面是一个例子:#$Id:buildroot-documentation.html28602006-01-0802:17:18Zwbx$include$(TOPDIR)/rules.mkPKG_NAME:=fooPKG_VERSION:=1.0
7891011121314151617181920212223242526272829303132333435PKG_RELEASE:=1PKG_MD5SUM:=4584f226523776a3cdd2fb6f8212ba8dPKG_SOURCE_URL:=./downloadsPKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gzPKG_CAT:=zcatPKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-installinclude$(TOPDIR)/package/rules.mk$(eval$(callPKG_template,FOO,foo,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))$(PKG_BUILD_DIR)/.configured:$(PKG_BUILD_DIR)/.prepared(cd$(PKG_BUILD_DIR);\$(TARGET_CONFIGURE_OPTS)\CFLAGS="$(TARGET_CFLAGS)”\./configure\--target=$(GNU_TARGET_NAME)\--host=$(GNU_TARGET_NAME)\--build=$(GNU_HOST_NAME)\--prefix=/usr\--sysconfdir=/etc\--with-bar="$(STAGING_DIR)/usr"\);touch$$(PKGBUILDDIR)/.built:36rm-rf$(PKG_INSTALL_DIR)
36mkdir-p$(PKG_INSTALL_DIR)$(MAKE)-C$(PKG_BUILD_DIR)\$(TARGET_CONFIGURE_OPTS)\install_prefix="$(PKG_INSTALL_DIR)”\allinstalltouch$$(IPKG_FOO):46install-d-m0755$(IDIR_FOO)/usr/sbin47cp-fpR$(PKG_INSTALL_DIR)/usr/sbin/foo$(IDIR_FOO)/usr/sbin$(RSTRIP)$(IDIR_FOO)$(IPKG_BUILD)$(IDIR_FOO)$(PACKAGE_DIR)mostlyclean:make-C$(PKG_BUILD_DIR)cleanrm$(PKG_BUILD_DIR)/.built这个Makefile是用于单个二进制软件的相关工作。对于其它的软件如库或复杂软件系统,则应该参照其它软件包的Makefile进行修改。从5〜15行,定义了一组非常有用的变量:PKG_NAM歌件包的名字PKG_VERSION^该下载的软件包的版本号PKG_RELEAS葭行号PKG_MD5SUM:md5验值PKG_SOURCE_URL:载的地址完全路径,可以使用HTTP或FTP。PKG_SOURCE■载的软件包的全名PKG_CAT提取软件包所需要的工具PKG_BUILD_DIR软件将会编译和配置的目录PKG_INSTALL_DIR软件将要安装的目录。InLine3and17weincludecommonvariablesandroutinestosimplifytheprocessofipkgcreation.Itincludesroutinestodownload,verifyandextractthesoftwarepackagearchives.Line19containsthemagiclinewhichautomaticallycreatestheipkgforus.Lines21-33definesatargetandassociatedrulesthatconfiguresthesoftware.Itdependsontheprevioustarget(thehidden.preparedfile)sothatwearesurethesoftwarehasbeenuncompressed.Inordertoconfigureit,itbasicallyrunsthewell-known./configurescript.Aswemaybedoingcross-compilation,target,hostandbuildargumentsaregiven.Theprefixisalsosetto/usr,notbecausethesoftwarewillbeinstalledin/usronyourhostsystem,butinthetargetfilesystem.Finallyitcreatesa.configuredfiletomarkthesoftwareasconfigured.Lines35-42definesatargetandarulethatcompilesthesoftware.Thistargetwillcreatethebinaryfileinthecompilationdirectory,anddependsonthesoftwarebeingalreadyconfigured(hencethereferencetothe.configuredfile).AfterwardsitinstallstheresultingbinaryintothePKG_INSTALL_DIR.Itbasicallyrunsmakeinstallinsidethesourcedirectory.Lines44-50definesatargetandassociatedrulesthatcreatetheipkgpackage,whichcanoptionallybeembeddedintotheresultingfirmwareimage.Itmanuallyinstallsallfilesyouwanttointegrateinyourresultingipkg.RSTRIPwillrecursevilystripallbinariesandlibraries.FinallyIPKG_BUILDiscalledtocreatethepackage.3.1.12OpenWrt核模块创建本小节将主要介绍如何进行OpenWrt的核模块的创建,使其成为安装成为ipkg。(1)启用核选项可以通过修改build_mipsel/linux/.config来启用相应核选项,或者通过如下命令:$cdbuild_mipsel/linux$makemenuconfig之后可以将.config文件进行备份,这样配置的参数就不会在makedirclean后丢失。(2)创建一个buildroot的选项可以通过悠taget/linux/config.in来创建一个buildroot选项:configBR2PACKAGEKMODUSBKEYBOARDtristate"SupportforUSBkeyboards"defaultmdependsBR2_PACKAGE_KMOD_USB_CONTROLLER(3)定义核模块的二进制文件通过修改target/linux/linux-2.4/Makefile来定义二进制文件:$(eval$(callKMOD_template,USB_KEYBOARD,usb-kbd,\$(MODULES_DIR)/kernel/drivers/input/input.o\$(MODULES_DIR)/kernel/drivers/input/keybdev.o\$(MODULES_DIR)/kernel/drivers/usb/usbkbd.o\,CONFIG_USB_KEYB,kmod-usb-core,60,inputkeybdevusbkbd))这里CONFIG_USB_KEYBE核选项,USB_KEYBOARDBR2_PACKAGE_KMOD_USB_KEYBOARD分,而usb-kbd是创建的ipkg的文件名的一部分。⑷指定ipkg控制文件创建target/linux/control/kmod-usb-kbd.control使用如下容:Package:kmod-usb-kbdPriority:optionalSection:sysMaintainer:MarkusBecker<mabcomnets.uni-bremen.de>Source:buildrootinternalDescription:KernelSupportforUSBKeyboards(5)编译核模块使用如下命令配置打开模块支持:$makemenuconfig在顶层目录找到并打开其配置选项,之后使用如下命令编译:$makedirclean&&make下载固件原代码下载buildrootforkamikaze直接去/下载最新版本的openwrtbuildroot下载到虚拟机中,解压tarjxvfkamikaze…解压之后,进入所生成的目录,后先安装如下软件:$sudoapt-getinstallsubversionzlib1g-devflexgawkunzip然后可以执行如下命令:$makemenuconfig进行简要配置之后退出保存$make虚拟机放运行了一个晚上,早上来时发现已经编译完成!生成的目标文件都在bin/目录中!将虚拟机备份一份,方便以后使用!安装OpenWrt至URouterTRXVs.BIN生成的固件通常有两种形式:.trx或者.bin。这两种文件没有特别的差异,只是.bin本身提供的头信息可能会方便特定的厂商的路由器升级。一般来说,当不能直接使用.trx进行升级的话,才使用.bin映像。安装过程可能出现的问题及解决方法,见:/OpenWrtDocs(2f)Troubleshooting.html通过厂商提供的WE界面安装这是最简单的方式,即通过WEBf理界面直接升级映像。需要注意:尽量使用有线连接尽量使用HTTR而不要使用HTTPS通过TFTP安装如果你非常小心,或者要从一次失败的升级中重新更新映像,则可以使用tftp方式来安装固件。具体的方法见:/OpenWrtViaTftp.html通过CF,装如果有串口线,以及知道如何去做,则直接使用CFE方式安装/OpenWrtDocs(2f)Installing(2f)CFE.html通过JTAG安装通过JTAB来刷Flash,很慢,不推荐。若想做的话,参考/OpenWrtDocs(2f)Installing(2f)JTAG.html通过OpenWrt命令行安装在OpenWrt环境下,可以使用如下命令:mtdrwritefirmware.trxlinux若RAM空间较小,则可以使用如下命令(不推荐):wgethost/firmware.trx-O-|mtdelinuxrwritelinux恢复到原来的映像保存原来的映像假设原来的映像是original.trx使用mtd工具使用如下命令:cd/tmp下载原始映像到/tmpwgethost/original.trx更换映像:tdelinuxrwriteoriginal.trxlinux若只有原始的linksys.bin文件,则仅需要去掉其头即可:ddbs=32skip=1if=original.binof=original.trx使用ipk工具本地host的软件镜像目录~/whiterussian/bin/packages安装apache2,在/var/www中建立——个指向~/whiterussian/bin目录的链拉whiterussian注意修改var/www的访问权限,特别是要打开发“其他人”的可读权限。配置router配置ipkg的配置文件:#vi/etc/ipkg.conf加入如下容:srcwhiterussianhost/~yourname/whiterussian//whiterussian/packages/non-freedestroot/destram/tmp运行ipkg升级依赖关系:ipkgupdate安装需要的软件包:ipkginstallfoobar网上的一些问题HowtoincludeIEEE802.1xauthenticationEAP-MD5atWANport问题来源:/viewtopic.php?id=20718IplantosignupwithanewISP,IaminformedthattheISPwillprovidemeaRJ45connectiontomyhome.AllIneedtodoistoplugthiscabletomyPCNICorWANportonarouter.However,IneedtoensurethatdeviceconnectedtothisRJ45cablehastheIEEE802.1xauthenticationEAP-MD5feature,eitherPCNICortherouterWANport.IwonderifIcanmakeuseofOpenwrttohavethisIEEE802.1xauthenticationEAP-MD5onmyWRT54GV2WANport.Muchappreciateanyadvicesandhelps.[HOWTO]Wired802.1X来源:/viewtopic.php?id=19873Itispossibletodowired802.1XauthenticationwithdevicesthathaveaBroadcomswitch.Hereiswhatyouneedtoknow.FirstoffsomedeviceshaveaWANportthatisinternallyseparatedfromtheswitch.IfyouhappentohavesuchadeviceitispreferabletousethisWANportforauthentication.Nospecialactionsoughttobetakenandtheordinarywireddriverofwpa_supplicantshouldsuffice.IfauthenticationthroughaRoboSwitch(thefamilynameofBroadcomswitchchipsets)isdesired,youneedaversionofwpa_supplicantwiththeroboswitchdriverincluded.NotethatKamikaze8.09doesnothavesuchaversionbydefault.Youcanbuildwpa_supplicantfromthetrunksources.IfyouselectedBroadcom/2.4asyourtarget,theroboswitchdriverisincludedperdefault.Forothertargets(i.e.Broadcom/2.6)youneedtomodifypackage/wpa_supplicant/configtocontain"CONFIG_DRIVER_ROBOSWITCH=y".EarlyversionsoftheroboswitchdriverareonlyabletoreceivepacketssenttothePAEgroupaddress.Ifyouneedauthenticationonan"ownMACaddress"basistherearetwothingsyoucando.ONEWhentheinternalswitchportisuntaggedinthevlanusedforauthentication,wpasupplicantwillreceiveallEAPOLframesonthevlan.Thishasthedisadvantagethatframesdirectedatotherclientsaretreatedasiftheyarepartofthelocalauthenticalion.Thisisnoproblemwhentherouteristheonlydeviceauthenticatingtoanauthenticatoronthechosenvlan,butviolatestheIEEE802.1X.Example:supposeyouwishtoauthenticateonport0(internalnumbering)invlan1andtheauthenticatorsendsitspacketstoyourMACaddress.Youcanmaketheinternalportuntagframesinvlan1bygivingthefollowingcommand:echo05u>/proc/switch/eth0/vlan/1/portsNextyourunwpa_supplicantoninterfaceeth0.1,withdriverroboswitchTWOUsearecent(stillunreleasedonApril16,2009)versionoftheroboswitchdriver.NewversionsareabletoreceiveandfilterEAPOLframesinan802.1Xconformway.IMPORTANTNOTEWhenusinganew(post0.6.9)versionofwpa_supplicantandtheroboswitchdriveryoushouldusethemulticast_onlyparameterwheneverpossible:wpa_supplicant-i<interface>.<vlan>-Droboswitch-pmulticast_only=1[etc.]ThisisbecausethenewEAPOLfilterisalittleCPUintensiveandcansufferframedrop.So:ifauthenticationtakesplaceonthePAEgroupaddress,justusetheparameter.IfallEAPOLframesarerelevantforauthentication,usetheparameter,combinedwithmethodONE(above).Else:livewiththeCPUstrain.Precompiledpackagesofwpa_supplicantandwpa_cliforKamikaze8.09areavailableat.liacs.nl/~jwitteve/openwrt/8…/packages/and.liacs.nl/~jwitteve/openwrt/8…/packages/Theyconsistofaversion0.6.9buildwithbackportedroboswitchdriver(thenewrevision)soyoushouldreadtheIMPORTANTNOTEabovebeforeuse.3.6.3Everythingyouneedtoknowaboutbroadcomhardware出处:/viewtopic.php?id=11304Insideprettymuchanyhomerouteroraccesspointyou'llfindthefollowingflashchip(2M,4Morsomewhatrarely8M)ram(4xtheamountofflash)cpu(mips;providedbyabroadcom47xxor5352)6portvlanmanagedswitch(adm6996l,ormorecommonlythebroadcom"roboswitch")wifi(broadcom43xxbased)ChancesarethatalmostallofthatfunctionalitywillcomefromoneortwoBroadcomchips.Theramandflasharetheexception.Dependingonthedeviceyoucouldhaveaslittleas2/8(ram/flash)orasmuchas8/32,butbyfarthemostcommoncombinationis4/16;probablyanintelflashchip.Theflashchipcanberepresentedasalargeblockofcontinuousspace:Code:[startofflashendofflash]ThereisnoROMtobootfrom;atpoweruptheCPUbeginsexecutingthecodeattheverystartofflash.Luckilythisisn'tthefirmwareorwe'dbeinrealdangereverytimewereflashed.Bootisactuallyhandledbyasectionofcodewetendtorefertoasthebootloader.InBroadcomdevicesthisisCFE--"CommonFirmwareEnvironment";thinkofitliketheBIOSinyourcomputer.(note-inwrt54gvl.xhardware,itwasactuallyanotherbootloadercalled"PMON",itwasn'tuntilthewrt54gv2.0thattheyswitchedtoCFE;bothprovidetheexactsamefunctionality)Code:[CFE][firmware.……][NVRAM](there'snoactualpartitions,justhardcodedlocations)Thejobofthebootloaderistoinitializethememoryandotherhardwareandthenbeginbootingthefirmware.Inmostcasesthere'sarecoverymechanismthatallowsyoutoreflashthefirmwaresothatabadflashdoesn'trenderthedeviceuseless.CFEdoesthisthroughtheuseofaTFTPserver;thiscanbetriggeredbythefirmwarenotmatchingthefirmwarechecksum,theboot_waitvariableorviaCFE'sserialconsolecommandline.Ifyoudigintothe"firmware"sectionyou'llfindatrx.Atrxisjustanencapsulation,whichlookssomethinglikethis-Code:[HDR0][length][crc32][flags][pointers][data...]"HDR0"isamagicvaluetoindicateatrxheader,restis4byteunsignedvaluesfollowedbytheactualcontents.Inshort,it'sablockofdatawithalengthandachecksum.So,ourflashusageactuallylookssomethinglikethis:Code:[CFE][trxcontainingfirmware][NVRAM]Exceptthatthefirmwareisgenerallyprettysmallanddoesn'tusetheentirespacebetweenCFEandNVRAM:Code:[CFE][trxfirmware][unused][NVRAM](Note:thatthe<model>.binfilesarenothingmorethanthegenerictrxfilewithanadditionalheaderappendedtothestarttoidentifythemodel.Themodelinformationgetsverifiedbythevendor'supgradeutilitiesandtheremainingdata--thetrx-getswrittentotheflash.Whenupgradingfromwithinopenwrtremembertousethetrxfile.)Sowhatexactlyisthefirmware?Thebootloaderreallyhasnoconceptoffilesystems,itprettymuchassumesthatthestartofthetrxdatasectionisexecutablecode.So,attheverystartofourfirmwareisthekernel.Butjustputtingakerneldirectlyontoflashisquiteboringandconsumesalotofspace,sowecompressthekernelwithaheavycompressionknownasLZMA.NowthestartoffirmwareiscodeforanLZMAdecompress:Code:[lzmadecompress][lzmacompreszsedkernel]Now,thebootloaderbootsintoanLZMAprogramwhichdecompressesthekernelintomemoryandexecutesit.Itaddsasecondtothebootuptime,butitsavesalargechunkofflashspace.(Andifthatwasn'tamusingenough,itturnsoutthebootloaderdoesknowgzipcompression,sowegzipcompressedtheLZMAdecompressionprogram)Immediatelyfollowingthekernelisthefilesystem.Weusesquashfsforthisbecauseit'sahighlycompressedreadonlyfilesystem--rememberthatalteringthecontentsofthetrxinanywaywouldinvalidatethecrc,soweputourwritabledatainajffs2partitionousidethetrx.Thismeansthatourfirmwarelookslikethis:Code:[trx(gzip'dlzmadecompress)(lzma'dkernel)(squashfsfilesystem)]Andtheentireflashusagelookslikethis-Code:[CFE][trx(gz'dlzma)(lzma'dkernel)(squashfs)][jffs2filesystem][NVRAM]That'saboutastightaswecanpossiblypackthingsintoflash.Whysquashfs+jffs2?Systembootupisasfollows--kernelbootsfromsquashfsandruns/etc/preinit-/etc/preinitruns/sbin/mount_root-mount_rootmountsthejffs2partition(/jffs)andcombinesitwiththesquashfspartition(/rom)tocreateanewvirtualrootfilesystem(/)-bootupcontinueswith/sbin/initBothsquashfsandjffs2arecompressedfilesystemsusingLZMAforthecompression.Squashfsisareadonlyfilesystemwhilejffs2isawritablefilesystemwithjournalingandwearleveling.Sincesquashfsisareadonlyfilesystem,itdoesn'tneedtoalignthedata,allowingittopackthefilestighterfor20-30%savingsoverajffs2filesystem.Ourjobwhenwritingthefirmwareistoputasmuchcommonfunctionalityonsquashfswhilenotwastingspacewithunwantedfeatures.Additionalfeaturescanalwaysbeinstalledontojffs2bytheuser.Theuseofmini_fomeansthatthefilesystemispresentedasonelargewritablefilesystemtotheuserwithnovisibleboundarybetweensquashfsandjffs2--filesaresimplycopiedtojffs2whenthey'rewritten.It'snotallwithoutsideeffectshowever-Thefactthatwepackthingssotightlyinflashmeansthatifthefirmwareeverchanges,thesizeandlocationofthejffs2partitionalsochanges,potentiallywipingoutalargechunkofjffs2dataandcorruptingthefilesystem.Todealwiththis,we'veimplementedapolicythataftereachreflashthejffs2dataisreformatted.Thetricktodoingthatisaspecialvalue,0xdeadc0de;whenthisvalueappearsinajffs2partition,everythingfromthatpointtotheendofthepartitioniswiped.So,hiddenattheendofthefirmwareimages,isthevalue0xdeadcode,positionedsuchthatitbecomesthestartofthejffs2parition.Thefactweuseacombinationofcompressedandpartiallyreadonlyfilesystemsalsohasaninterestingeffectonpackagemanagement.Inparticular,youneedtobecarefulwhatpackagesyouupdate.Whiletheipkgutilismorethanhappytoinstallanupdatedpackageonjffs2,it'sunabletoremovetheoriginalpackagefromsquashfs;theendresultisthatyouslowlystartusingmoreandmorespaceuntilthejffs2partitionisfilled.Theipkgutilreallyhasnoideahowmuchspaceisavailableonthejffs2partitionsinceit'scompressed,andsoitwillblindlykeepgoinguntiltheipkgsystemcrashes--atthatpointyouhavesolittlespaceyouprobablycan'tevenuseipkgtoremoveanything.Canweswitchthefilesystemtobeentirelyjffs2?Yes,it'stechnicallypossible,butabitofamesstoactuallypulloff.Thefirmwarehastobeloadedasatrxfile,whichmeansthatyouhavetoputtehjffs2datainsideofthetrx.But,asIsaidabove,thetrxhasachecksum,meaningthatifyoueverchangethatdata,youinvalidatetehchecksum.Thesolutionisthatyouinstallwiththejffs2datacontainedwithinthetrx,andthenchangethetrxbounariesatruntime.Theendresultisasinglejffs2partitionfortherootfilesystem.Whysomeonewouldwanttodoitisbeyondme;ittakesmorespace,andwhileitwouldallowyoutoupgradethecontentsofthefilesystemyouwouldstillbeunabletoreplacethekernel(outsideofthefilesystem),meaningthatit'snotaseemlessupgradebetweenreleases.Havingsquashfsgivesyouafailsafemechanismwhereyoucanalwaysignorethejffs2partitionandbootdirectlyoffsquashfs,orrestorefilestotheiroriginalsquashfsversions.IusedtohaveatrickwhereIcouldconvertasquashfsinstalltoajffs2installatruntimebycopyingallthedataontothesquashfspartitionandchangingthepartitionboundaries.Ineverreallyhadmuchusefortheu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆过户手续办理及产权转移税务筹划合同
- 食品安全仓储租赁服务及质量监管协议
- 车辆租赁公司售后服务合同范本
- 陈纨婚姻解除协议及财产分配合同
- 2025建筑工程合同管理法规详解
- 2025年政府土地使用权收购协议范本
- 2025《家具销售合同范本》
- 2025年1月河南高考适应性测试历史试题及答案
- 2025合同范本酒店合作协议样本
- 死亡边境测试题及答案
- 延保服务合同模板
- 非遗文化走进数字展厅+大数据与互联网系创业计划书
- 第9课++友好相处++学会合作+第2课时 【中职专用】中职思想政治《心理健康与职业生涯》高效课堂 (高教版基础模块)
- DL∕T 2024-2019 大型调相机型式试验导则
- 配电房预试验服务和维保方案
- 安徽省阜阳市太和县2023-2024学年八年级下学期期末英语试题
- 个体诊所备案承诺书模板
- 危险化学品仓库安全检查表
- 2024年咨询工程师继续教育城市轨道交通工程可行性研究报告编制方法考试答案
- 版隧道检验批施工质量验收表格
- 仓储管理职位工作手册完整版
评论
0/150
提交评论