欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    从Cfgdemo项目来分析协议栈的启动14290.docx

    • 资源ID:62687558       资源大小:597.86KB        全文页数:16页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    从Cfgdemo项目来分析协议栈的启动14290.docx

    从Cfgdemo项目来分析协议栈的启动项目中静态创建的任务有两个:一个是空闲任务,一个是StackTest任务,main函数是空的。任务StackTest的优先级(5)比空闲任务高。整个程序的初始化部分执行完之后,就会执行StackTest任务,从而执行StackTest()函数。StackkTesst()函函数首先先调用了了NC_SysstemmOpeen()函函数,来来完成协协议栈系系统的初初始化工工作。必必须注意意的是:在使用用协议栈栈之前必必须最先先调用该该函数。接接下来调调用函数数CfggNeww()来来创建一一个配置置(Coonfiigurratiion)并并获得该该配置的的句柄,接接下来的的工作就就是在配配置中增增添配置置项(CConffiguurattionn Enntryy),增增添配置置选项是是通过调调用CffgAdddEnntryy()函函数实现现的。该该项目中中首先增增添的配配置项为为Hosst nnamee:从CFGDDEMOO项目来来分析协协议栈的的启动接着增添的的配置项项为Teelneet服务务,那么么协议栈栈系统在在启动之之后会启启动Teelneet服务务(创建建了一个个名为ttelnnetdd的任务务):  接着通过过调用eefs_creeateefille()创创建5个个文件,其其名字分分别为:inddex.htmml、ttibuug.ggif、ccfgsstarrt.ccgi、ccfgppasss.cggi ccfgddonee.cggi;这这5个文文件中,前前两个文文件的数数据分别别存放在在数组DDEFAAULTT、TTIBUUG中,而而后三个个文件实实际是ccgi程程序,这这三个ccgi程程序分别别完成来来之客户户端的命命令请求求:Viiew connfigguraatioon、CChannge passswoord、SSubmmit connfigguraatioon,与与之同时时,它们们动态修修改并发发送了两两个网页页并COONFIIG、UUSERRMSGG。  接着增增添的配配置项为为HTTTP服务务,那么么协议栈栈启动之之后会启启动Htttp服服务(创创建一个个名为hhttpp seerveer的任任务)   接着着的增添添的配置置项为CCFGIITEMM_OSS_DBBGPRRINTTLEVVEL,来来选择打打印的信信息内容容:接下来调用用函数CCfgSSavee()来来获取配配置的大大小并讲讲配置数数据存入入一个缓缓存中去去,并释释放配置置。     接下来来调用函函数NeetBooot()来来启动协协议栈。这这个函数数是NDDK的用用户自己己写的一一个函数数,在这这个函数数中,调调用了协协议栈启启动函数数NC_NettStaart(),这这个函数数属于NNetwworkk Coontrrol APII,该函函数的源源代码可可以在tiNDKKsrrcnnetcctrllneetcttrl.c中找找到。其其函数接接口如下下:NetBooot()在在调用NNC_NNetSStarrt()之之前调用用CfggNeww()来来创建一一个新的的空的配配置,然然后再调调用CffgLooad()来来把之前前存入缓缓冲区中中的配置置好的配配置数据据载入新新的配置置中去,并并把它作作为参数数传入NNC_NNetSStarrt()中中去,接接着就调调用NCC_NeetSttartt()启启动协议议栈。     NC_NettStaart()函函数首先先调用了了4个硬硬件抽象象层(HHAL)的的四个初初始化函函数,由由它们来来完成底底层硬件件的初始始化(具具体细节节过程等等待进一一步研究究):接着该函数数调用CCfgSSetDDefaaultt()把把传入NNC_NNetSStarrt()函函数中构构建好的的配置设设置为默默认配置置。由于于编程方方法上的的需要,协协议栈就就使用配配置是统统一为一一个配置置句柄指指向的配配置。这这样CffgSeetDeefauult()的的本质就就是把该该配置句句柄指向向传入NNC_NNetSStarrt()函函数中构构建好的的配置。     接着把把传入NNC_NNetSStarrt()函函数的三三个函数数指针赋赋值给三三个全局局变量,以以方便后后面适当当的时候候调用:接着调用协协议栈的的核心AAPI函函数ExxecOOpenn()来来初始化化协议栈栈的exxecuutivve(自自己意会会这个概概念)。     接着动动态创建建一个名名为CoonfiigBooot的的任务,其其优先级级为155(最高高),其其执行的的函数是是NS_BoootTaask()。由由于DSSP/BBIOSS是占先先式实时时OS,所所以一旦旦任务高高优先级级的任务务创建,OOS内核核的调度度模块就就会自动动切换到到高优先先级的任任务执行行。很显显然,接接下来执执行的是是函数NNS_BBoottTassk()。这这个函数数的源码码在ttiNNDKsrccneetcttrl neetsrrv.cc中可以以找到。NS_BoootTTaskk()函函数首先先调用CCfgSSetSServvicee()来来Sett Seerviice CalllBaack Funntioons forr Evveryy Coonfiigurratiion Tagg,其意意思是为为每个CConffiguurattionn Taag设置置一个回回调函数数,其目目的是为为了在修修改完配配置之后后能及时时更新协协议栈系系统,也也就是使使协议栈栈系统随随着配置置的改变变而实时时地改变变。  回调函函数的接接口定义义如下: 在NDK的的协议栈栈中,CConffiguurattionn Taag共有有如下88个: 其中需要配配置回调调函数的的有如下下几个:CFGGTAGG_OSS、CFFGTAAG_IIP、CCFGTTAG_SERRVICCE、CCFGTTAG_IPNNET、CCFGTTAG_ROUUTE,它它们的回回调函数数分别为为:SPPConnfigg()、SSPCoonfiig()、SSPSeerviice()、SSPIppNett()、SSPRooutee(),这这些回调调函数的的实现源源代码都都在ttiNNDKsrccneetcttrl neetsrrv.cc可以找找到。下面分析以以下SPPConnfigg()函函数是怎怎样实现现实时更更新系统统的:SSPCoonfiig()函函数是作作为CFFGTAAG_OOS、CCFGTTAG_IP的的回调函函数的,所所以它必必须负责责处理增增添CFFGTAAG_OOS、CCFGTTAG_IP两两种类型型的Coonfiigurratiion Enttry时时的系统统实时更更新工作作。系统统在调CCfgAAddEEntrry函数数来增添添一个CCFGTTAG_OS、CCFGTTAG_IP类类型的配配置项后后(注意意:CffgAdddEnntryy只把配配置数据据添加到到配置中中去),会会调用与与该种配配置类型型捆绑的的的回调调函数SSPCoonfiig(CCfgSSetSServvicee函数来来完成捆捆绑工作作的),SSPCoonfiig函数数调用CCfgEEntrryInnfo来来获取该该配置项项的数据据缓冲区区的指针针并存放放在变量量pi中,接接着更具具Connfigguraatioon TTag的的类型来来获取具具体需要要修改的的系统配配置参数数结构体体;CFFGTAAG_OOSè OSEENVCCFG _osscfgg、osscfggcoppy  /  CCFGTTAG_IP èIPPCONNFIGG _iipcffg、iipcffgcoopy,这这两个都都是全局局变量,它它们的数数据结构构类型如如下: / Coonfiigurratiion Strructtureetypeddef strructt _iipcoonfiig          uinnt     IIcmppDoRRediirecct;        / Upddatee RttTabble on ICMMP rrediirecct (1=YYes)         uinnt     IIcmppTtll;                    / TTTL ffor ICMMP mmesssagees RRFC117000 saays 64         uinnt     IIcmppTtllEchho;   TTL ffor ICMMP eechoo RFFC17700 sayys 664          uinnt     IIpInndexx;                    / IPP Sttartt Inndexx         uinnt     IIpFoorwaardiing;             / IPP Foorwaardiing (1 = EEnabbledd)         uinnt     IIpNaatEnnablle;               / IPP NAAT EEnabble (1 = YYes)         uinnt     IIpFiilteerEnnablle;         / IP Fillterringg Ennablle (1 = Yees)         uinnt     IIpReeasmmMaxxTimme;         / Maxx reeasssembbly timme iin ssecoondssuint     IpRReassmMaaxSiize;         / Maax rreasssemmblyy paackeet ssizee          uinnt     IIpDiireccteddBCaast;       / Loook ffor dirrectted BCaast IP adddresssess         uinnt     TTcpRReassmMaaxPkkt;         / Maxx reeasmm pkkts helld bby TTCP socckett         uinnt     RRtcEEnabbleDDebuug;         / Enaablee Rooutee Coontrrol Messsagges (1=On)          uinnt     RRtcAAdvTTimee;               / Tiime in secc too seend RtAAdv (0=donn't)    &&nbssp;   uinnt     RRtcAAdvLLifee;                / Liitettimee off rooutee inn RttAdvv          intt      RRtcAAdvPPreff;                / Prrefeerennce Levvel (siigneed) in RtAAdv         uinnt     RRtArrpDoownTTimee;     / TTimee 5 faiiledd ARRPs keeep RRt ddownn (ssec)         uinnt     RRtKeeepaalivveTiime;       / VALLIDAATEDD rooutee tiimeoout (seec)         uinnt     RRtClloneeTimmeouut;         / INIITIAAL rroutte ttimeeoutt (ssec)         uinnt     RRtDeefauultMMTU;            / Deefauult MTUU foor iinteernaal rrouttes          uinnt     SSockkTtllDeffaullt;         / Deffaullt PPackket TTLL         uinnt     SSockkTossDeffaullt;         / Deffaullt PPackket TOSS         intt      SSockkMaxxConnnecct;    / MMax Socckett Coonneectiionss         uinnt     SSockkTimmeCoonneect;       / Maxx tiime to connnecct (secc)         uinnt     SSockkTimmeIoo;                / Deefauult Socckett IOO tiimeoout (seec)         intt      SSockkBuffMaxx;           &nnbsp;  / AAbsoolutte mmax Socckett buuffeer ssizee          intt      SSockkBuffMinnTx;            / Miin Tx sspacce ffor "abble to wriite""         intt      SSockkBuffMinnRx;            / Miin RRx ddataa foor ""ablle tto rreadd"         uinnt     PPipeeTimmeIoo;               / Deefauult Pippe IIO ttimeeoutt (ssec)         intt      PPipeeBuffSizze;               / Piipe intternnal buffferr siize         intt      PPipeeBuffMinnTx;/ Miin TTx sspacce ffor "abble to wriite""          intt      PPipeeBuffMinnRx;         / Miin RRx ddataa foor ""ablle tto rreadd"         IIPCOONFIIG;   大家应应该注意意到所有有的成员员都是332位的的数据类类型,所所以这里里的pii和pDDst指指针都定定义为指指向322位类型型数据的的指针。在在做完必必要性的的检测之之后,就就会把ppi指向向数据缓缓冲中的的数据直直接拷贝贝到pDDst+Iteem指向向的数据据缓冲中中去。两两个细节节性的问问题:1)为什么么只拷一一个322位?因因为这两两种类型型的Coonfiigurratiion的的Connfigguraatioon EEntrry都是是32位位类型的的数据。22)为什什么Ittem要要事先减减一?因因为Taag = CFFGTAAG_OOS / CFFGTAAG_IIP, Iteem的值值都是从从1开始始的。这样系统的的配置就就被修改改了,后后面程序序的执行行就会根根据新的的配置去去操作。这这里只分分析了AAddEEntrry的过过程,RRemooveEEntrry的过过程基本本上差不不多,不不同的是是用系统统默认配配置的值值去覆盖盖系统配配置。 /-/ SPPConnfigg() - CCFGTTAG_IP andd CFFGTAAG_OOS SServvicee Prroviiderr/-statiic iint SPCConffig(HANNDLEE hCCfg, uiint Tagg, uuintt Ittem, uiint Op, HAANDLLE hhCfggEnttry)    uuintt *ppi,*pdsst,*pdeef;  &nbsp; (vooid)hCffg;      / GGet thee innforrmattionn    iif( CfggEnttryIInfoo( hhCfggEnttry, 0, (UUINTT8 *)(&pii) ) < 0 )         retturnn( -1 );     / SSetuup tto hhanddle IP or OSif( TTag = CFGGTAGG_IPP )         / Bouund thee vaaluee off Ittem         if( Ittem > CCFGIITEMM_IPP_MAAX )               reeturrn( -1 );         pdsst = (uuintt *)&_iipcffg;        ppdeff = (uiint *)&&ipccfgccopyy;     elsse iif( Tagg = CFFGTAAG_OOS )         / Bouund thee vaaluee off Ittem         if( Ittem > CCFGIITEMM_OSS_MAAX )               reeturrn( -1 );         pdsst = (uuintt *)&_ooscffg;          pdeef = (uuintt *)&osscfggcoppy;    ellse         retturnn( -1 );                / VVeriify Iteem    iif( !Ittem )  retturnn( -1 );    IItemm - -;     / IIf tthiss iss ann "aadd"", aadd thee enntryy    iif( Op = CFGGOP_ADDD )         *(ppdstt+Ittem) = *pii;   / Ellse if "reemovve", reestoore thee deefauult     elsse iif( Op = CFGGOP_REMMOVEE )         *(ppdstt+Ittem) = *(ppdeff+Ittem);                / RRetuurn succcesss    rretuurn(1);  到这里大大家可能能觉察到到一个问问题:我我们的CCfgAAddEEntrry函数数在SttackkTesst任务务的开始始就被调调用,而而我们的的回调函函数是在在后来才才安装上上去的,那那么这些些添加的的配置项项是不是是没有被被更新到到系统配配置中去去呢?没没错,的的确没有有!那我我们怎么么办呢?由于一一开始我我们添加加了多个个配置项项,那么么这些配配置项更更新到系系统应该该有一个个先后顺顺序(可可能它们们之间有有什么依依赖关系系吧),因因此,首首先要调调用函数数CfggSettExeecutteOrrderr()来来设置,需需要注意意的是这这个函数数不仅设设定配置置项更新新到系统统配置中中的顺序序,同时时也设定定了这些些配置项项从系统统配置中中删除的的顺序。做做好这些些准备工工作之后后,调用用CfggExeecutte()(其其中fEExeccutee参数值值为1)来使使配置项项可以更更新到系系统配置置中去,同同也使能能以后添添加的配配置项也也能实时时更新到到系统配配置中去去。注意意:这个个函数必必须调用用,否则则你用CCfgAAddEEntrry函数数添加的的配置项项都不能能更新到到系统配配置中去去,即使使你在安安装好回回调函数数后调用用CfggAdddEnttry也也不能。至至此,TTCP/IP协协议栈系系统已经经启动,应应用程序序可以调调用协议议栈的>>APII函数来来实现网网络通信信等应用用。 接着调用函函数NCC_BoootCCompplette(),该该函数除除了设置置相应的的标志外外,主要要是来执执行一个个用户程程序。大大家应该该还记得得NC_NettStaart函函数的接接口吧,它它有三个个函数指指针作为为参数传传入,其其中第一一个就在在NC_BoootCoomplletee()中中调用:*NeetSttartt,该函函数指针针所指向向的函数数是由用用户来实实现,从从而向用用户提供供一个机机会,由由用户自自己决定定协议栈栈启动之之后做什什么工作作。接着着NS_BoootTaask中中调用TTaskkExiit()来来结束该该任务(任任务的状状态由RRunnninggèTerrminnateed),那那么接下下来通过过DSPP/BIIOS内内核的调调度,使使得SttackkTesst任务务继续运运行。StackkTesst任务务接着调调用函数数NettSchheduulerr,它是是协议栈栈的调度度器,用用来检测测并处理理所有与与网络相相关的事事件。该该函数是是一个无无限循环环,因此此任务StackkTesst最终终就成为为了网络络事件调调度任务务,也就就是说它它的角色色发生了了改变,因因此其优优先级需需要做适适当的调调整。有有关网络络事件调调度任务务的具体体细节后后面再论论。 至此,整个个系统就就跑起来来了,但但是我们们的应用用程序怎怎样添加加到这个个系统中中去并使使用这个个协议栈栈呢?大大家应该该还记得得NC_BoootCoomplletee函数调调用的NNetSStarrt函数数指针指指向的函函数吧,它它是由用用户实现现的一个个函数,在在协议栈栈启动之之后调用用。因此此用户的的应用程程序(与与网络相相关的应应用)可可以在该该函数中中动态创创建(应应用程序序作为任任务的形形式添加加到系统统中),CfgDemo项目就是这么做的。CfgDeemo项项目中NNetSStarrt函数数指针指指向的函函数为NNetwworkkOpeen()代代码如下下:由此可见该该函数动动态创建建了五个个任务,其其优先级级相同,均均为OSS_TAASKPPRINNORMM(5),而而且这五五个任务务的状态态都为处处于Reeadyy状态。但但是由于于随后网网络事件件调度任任务调整整了自己己的优先先级,此此四个任任务都从从Reaady状状态转为为Blockked状状态。一一旦网络络事件调调度任务务检测到到网络事事件就会会通知相相应的任任务使之之进入RRunnningg状态,处处理网络络事务。

    注意事项

    本文(从Cfgdemo项目来分析协议栈的启动14290.docx)为本站会员(you****now)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开