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

    企业管理从Cfgdemo项目来分析协议栈的启动.docx

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

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

    企业管理从Cfgdemo项目来分析协议栈的启动.docx

    企业管理从Cfgdemo项H来分析协议找的启动从 Cfgdemo工程来分析协议端的启动工程中静忐创立的任务有两个:一个是空间任务,一个是StackTest任 务,main身数是空的。任务StackTest的优先级(5J比空网任务高。整个 程序的初始化局部执行完之后,就会执行StackTest任务,从而轨行Stack Test ()法教。StackTest ()函数首先调用了 NC_Sy stemOpen ()的数,来完成协议 找宗统的初始化工作。必须注意的是:在使用协议找之前必须最先调用该 函教。接下来调用%数CfgNew()来创立一个配置(Configuration J并获 得该百乙置的句柄,接下来的工作就是在配置中增添配置项(Configuration Entry J ,增添配置选项是通过调用CfgAddEntryf)必教实现的。该工程 中首 先增添的配置项为 Host name :从CFGDEMO工程来分析林以杨的启动CfgAddEnUy( hCfg, CFGTAG_SYSINFO, CFGITEMDHCP_HOSTNAME, 0, 蛔,(UINT8 *)hn, 0);一 N接着增添的配置项为Telnet服务,那么协议找条统在启动之后会启动T elnet服务(创走了一 个名为telnetd的任务):CI_SERVICE_TELNET telnet; p廖B <fetelnet, 除Qf加 Inet);" 班照,惊JPA她=INADDR ANY;一 圾加映或西熬露=展盅4欧艮班pqQ;卜诗.轮砥=2;一tel侬.PMg-CatfbMk = &C93碰 Qpeww CfeAddEntxy(hCfe, CFGTAG SERVICE, CFGITEM SERVICE TELNET,。, S切煲德Ine。, (U由08 *)&telnet, 0);“接着通过调用efs_createfile ()创立5个文件 , 其名字分别为:index.htm1 > tibug.gif > cfgstart.cgi. cfgpass.cgi cfgdone.cgi ; 这 5 个文件中, 前两个 文件的数据分别存放在数组DEFAULT 口,TIBUG口中,而后三个文件实际是 cgi程序,这三个cgi程序分别完成来之客户端的命令请求:View configur ation. Change password > Submit configuration, 与之同时,它们动志修改 并发送了两个网页并CONFIG. USERMSGo接着增添的配置项为 服务,那么协议找启动之后会启动 服务 (创 建一个名为 server的 任务)CI_SERVICE_ ; 口口黑项(及 ,曲q典rttp);一h也由我gSJEMte = INADDRgANY;。.城中簿妁期里双?勒§尊 =熬也睫胴映其源C3MEg(hCfg, CFGTAG_SERVICE, CFGITEM_SERVICE- , Og$臃域独均),(UINT8 *)& , 0 );p接着的增添的配置项为CFGITEM_OS_DBGPRINTLEVEL,来选择打印的 信息内家:CFGTAG_OS, CFGITEM_OS_DBGPRINTLEVEL, CFG_ADDMODE_UNIQUE,由然的岫,(UINT8。);/接下来调用函数CfgSave ()来获取配置的大小并讲配置数据存入一个 缓存中去,并粹放配置。接下来调用舀数NetBoot ()来启动协议栈。这个国数是NDK的用户自 己写的一个国教,在 这个函数中,调 用了协议找启 动函数NC_NetStart (), 这个舀数属于Network Control API,该自数的派代玛可以在tiNDKsrc netctrlnetctrl.c中找到。其舀教接口如下:M NC Netstmc HANDLE hCfg. ”期虢怨掇tOO, /-UDQPM 皿西© NetBoot ()左调用NC_NetStart ()之前调用CfgNew()来创立一个新的 空的配置,然后再调用CfgLoad ()来把之南存入缓冲区中的配置好的配 置数据我入新的配置中去,并杷它作为参数传入NC_NetStart 3中去,接 着 就调用NC_NetStart ()启动协议找。NC.NetStart ()的数首先调用了 4个硬件抽象层CHALJ的四个初始化 名教,由它们来完成底层硬件的初始化(T具体细节过程等待进一步研究):UTiinerliutO: / Initialize the timers llUserLedliutO; / Initialize the User LED driver _啖感砌顼10;/ Initialize the serial port"JlPacketliutj); / Initialize the packet drivers J接着该国数调 用CfgSetDefault ()耙传入NC_NetStart (T )及教中构建好的 配置设置为默认配置。由于编程方法上的需要,协议找就使用配置是统一 为一个配置句柄指向的配置。这样CfgSetDefault ()的本质就是把该配置 句柄指向传入 NC_NetStart ()的数中构建好的配置。接着把传入NC_NetStart ()必教的三个函数指针赋值给三个全局变量, 以方便后面适.当的时候调用:区啖WjUDto = N感WStopFw = N或 S娅;p阳ih询=嗨期酎氐接着调用伊议找的核心 API函数ExecOpen ()来初始化例议找的executiv e ( t己意会这个概念)o接着动去创立一个名为ConfigBoot的任务,其优先级为1 5 (最高), 其执行的国数是NS_BootTask 3。由于DSP/BIOS是占先式实时OS,所 以一旦任务嵩优先级的任务创立,OS内核的调度模块就会自动切换到高优 先级的任务执行。很显然,接下来执行的是函数NS_BootTask ()。这个 %数的 源码在tiNDKsrcnetctrl netsrv.c中可以找到。NS_BootTask ()舀教首先调用 CfgSetService 3 来 Set Service CallB ack Funtions for Every Configuration Tag,其意思是为每个 Configuratio n Tag设置一个回调函数,其百的是为了在修改完配置之后能及时更新协 议找系统,也就是使协议找条统随着配置的改变而实时地改变。 回调的 教的接口定义如下:int CbSiv( HANDLE hCfg, uint Tag, uint Item, uint Op, HANDLE hCfgEntry), hCfei HANDLE to Cojiflg 一 TaglTag value of entry changed 一|Item value of entry char管 d 【飞OpOperation (CFGOP_ADD or CFGOP_REMOVE)一hCfgEhtiyNon-Rjeferenced HANDLE to entry added or removed在 NDK的协议找中,Configuration Tag共有如下8个:define CFGTAG_OS define CFGTAG_IP /define CFGTAG_SERVICiE #define CFGTAGJPNET #define CFGTAG_ROUTE define CFGTAG_CLIENT define CFGTAG_SYSINFO define CFGTAG ACCT0x0001/ OS Configuration0x0002/ IP Stack Configuration0x0003/ Service0x0004/ IP Network p0x0005/ Gateway Routed0x0006 恃/ DHCPS Clients0x0007/ System Information10x0008/ User Account u其中需要配置回调 法数的有如下 几个:CFGTAG_OS、CFGTAG_IP、C FGTAG_SERVICE、CFGTAG_IPNET . CFGTAG_ROUTE ,它 们的回调函数 分别为:SPConfig ( ) 、SPConfig ( ) 、SPService ( ) 、 SPIpNet 3 、S PRoute ( J ,这些 回调函数的实现源代码都在tiNDKsrcnetctrl netsrv.c 可以找到O下面分析以下SPConfig 3 函数是怎样实现实时更新系统的:SPConfi g C J函致是 作为CFGT AG_OS > CFGTAG_IP的 回调函 数的,所以 它必须 负责处理增添 CFGTAG_OS > CFGTAG_IP 两种类型的 Configuration Entry 时的系统实 时更新工作。系统在 调CfgAddEntry的 数来增 添一个CFGTAG_ OS、CFGTAG_IP类型的配置项后(注意:CfgAddEntry只把配置数据添加 到配置中去),会调用与该种配置类型捆绑的的回调函数SPConfig ( CfgS etService法数来完成掴绑工作的),SPConfig身数调用CfgEntrylnfo来获 取该配置项的数据缓冲区的指针并存放在变量pi中,接着更具Configurati on Tag的类型来获取具体需要修改的系统配置参数结构体;CFGTAG_OSeOSENVCFG _oscfg. oscfgcopy / CFGTAG_IP elPCONFIG _ipcfg. ipcf gcopy,这两个都是全局变量,它们的数据结构类型如下:/ (Configuration Structuretvpedef struct osenvcfe: uM" Debug msg print threshholduinotDhgAborWeyel;/ Debug msg sys abort itehtoldintTaskPriLow;/ Lowest priority for stack taskJintlaskPriNorm;/ Normal prioritv for stack task/域/ High priority for stack task.域侬; / KemeLlevel priority (Wglest)intTaskStkLow;/ Minimum stack sizeJ域驰以q即/ Normal stack size p如7High;/ Stack size for hili volume tasks OSENVCFG; Configuration Structure typedef struct _ipconfig uint IcmpDoRedirect;(1 =Yes)uint IcmpTtl;s 64uint IpReasmMaxSize;esuint TcpReasmMaxPkt;ketuint RtcEnableDebug;= On)uintRte AdvTime;t)&nbs/ Max reasm pkts held by TCP soc/ Enable Route Control Messages (1/ Time in sec to send RtAdv (0 = don'tp; uint RtcAdvLife;int Rte AdvPref;uint RtArpDownTime;ec)uintRtKeepaliv eTime;uint RtCloneTimeout;uint RtDefaultMTU;/ Litetime of route in RtAdv/ Preference Level (signed) in RtAdv/ Time 5 failed ARPs keep Rt down (s/ VALIDATED route timeout (sec)/ INITIAL route timeout (sec)/ Default MTU for internal routuint SockTtlDefault;uint SockTosDefault;int SockMaxConnect;/ Default Packet TTL/ Default Packet TOS/ Max Socket Connections/ Update RtTable on ICMP redirect/ TTL for ICMP messages RFC 1700 saysuint IcmpTtlEcho;TTL for ICMP echo RFC1700 says 64/ Max reassembly packet sizeuintIplndex;/ IP Start IndexuintIpForwarding;/ IP Forwarding (1 = Enabled)uintIpNatEnable;/ IP NAT Enable (1 = Yes)uintIpFilterEnable;/ IP Filtering Enable (1 = Yes)uintIpReasmMaxTime;/ Max reassembly time in secondsuint IpDirectedBCast;uint IpDirectedBCast;/ Look for directed BCast IP addresseuint Soc kTim eConnectuint SockTimelo;int SockBufMax;/ Max time to connect (sec)/ Default Socket IO timeout (sec) &nbsP;/ Absolute max Socket buffer sizeint SockBufMinTx;int SockBufMinRx;uint PipeTimelo;int PipeBufSize;int PipeBufMinTx ;int SockBufMinTx;int SockBufMinRx;uint PipeTimelo;int PipeBufSize;int PipeBufMinTx ;/ Min Tx space for nable to write/ Min Rx data for "able to read"/ Default Pipe IO timeout (sec)/ Pipe internal buffer size/ Min Tx space for ''able to writeint PipeBufMinRx;int PipeBufMinRx;/ Min Rx data for "able to read IPCONFIG;大彖应该注意到所有的成员都是32佳的数据类型,所以这里的pi和pDs t指针都定义为指向32枚类型数据的指针。在做完必要性的检测之后,就会 把pi指向数据缓冲中的数据直接拷贝到pDst+Item指向的数据缓冲中去。 两个细节性的问题:1)为什么只拷一个32佳?因为这两种类型的Configuration的Configu ration Entry都是32枚类型的数据。2)为什么Item要事先减一?因为Tag=CFGTAG.OS / CFGTAG_IP, Item 的值都是从 1 开始的。这样余统的配置就被修改了,后面程序的执行就会根据新的配置去掾作。 这里只分析了 AddEntry的过程,RemoveEntry的过程基本上差不多,不同 的是用系统默认配置的值去覆盖系统配置。/ SPConfigO - CFGTAG_IP and CFGTAG_OS Service Provider/static int SPConfig(HANDLE hCfg, uint Tag, uint Item, uint Op, HAND LE hCfgEntry) uint *pi,*pdst,*pdef;&nbsp; (void)hCfg;/ Get the informationif( CfgEntryInfo( hCfgEntry, 0, (UINT8 *)(&pi) ) < 0 ) return( -1 );/ Setup to handle IP or OS if( Tag =二 CFGTAG_IP )/ Bound the value of Itemif( Item > CFGITEM_IP_MAX ) return( -1 );pdst = (uint *)&_ipcfg; pdef = (uint *)&ipcfgcopy;Jelse if( Tag = CFGTAG_OS ) / Bound the value of Item if( Item > CFGITEM_OS_MAX ) return( -1 );pdst = (uint *)&_oscfg; pdef = (uint *)&oscfgcopy; else return( -1 );)/ Verify Itemif( !Item ) return( -1 );Item -/ If this is an "add”,add the entry if( Op = CFGOP_ADD )*(pdst + Item) = *pi;/ Else if "remove",restore the default Jelse if( Op = CFGOP.REMOVE )*(pdst + Item) = *(pdef+Item);/ Return successreturn(1);)到这里大家可能觉察到一个问题:我们的CfgAddEntry函数在StackTest任 务的开始就被调用,而我们的回调西教是在后来才安装上去的,那么这些添 加的配置项是不是没有被更新到系统配置中去呢?没错,确实没有!那我们 怎么办呢?由于一开始我们添加了多个配置项,那么这些配置项更新封条统 统应该有一个先后顺序(可能它们之间有什么依赖关系吧),因此,首先 要调用函数 CfgSetExecuteOrder ()来设置,需要注意的是这个困教不仅 设定配置项更新到系统配置中的顺序,同时也设定了这些配置项从条统配置 置中删除的顺序。做好这些准备工作之后,调用CfgExecute ()(其中fE xecute参数值为1)来使配置项可以更新到系统配置中去,同也使能以后添加的配置项也能实时更新利余统配置中去。注意:这个函数必须调用,否 那么你用 CfgAddEntry的数添加的配置项都不能更新利系统配置中去,即使 你在安装好回调困教后调用CfgAddEntry也不能。至此,TCP/IP协议找条统 已经启动,应用程序可以调用协议栈的API函数来实现网络通信等应用。 :有关CfgExecut前一个疑问:这段数是怎样把配置项都更新到系统配置中去的呢?;:是通过前面安装好的回调函数么?病么后面还要调用SennceScan呢?欢迎大家和:我一起来研究这个问题mailto: anqian8 8etang.c om/:接着调用函数NC_BootComplete (),该的数除了设置相应的标志外, 主要是来执行一个用户程序。大家应该还记得NC_NetStart函数的接口吧, 它有三个函数指针作为参数符人,其中第一个就在NC_BootComplete () 中调用:*NetStart,该函数指针所指向的函数是由用户来实现,从而向用 户提供一个机会,由用户自己决定协议找启动之后做什么工作。接着NS_ BootTask中调用TaskExit ()来结束该任务(任务的状态由RunningeTerm inated J ,那么接下来通过DSP/BIOS内核的调度,使得StackTest任务继续 运行OStackTest任务接着调 用函数 NetScheduler,它是协议找的调度器,用来 检测并处理所有与网络相关的事件。该舀数是一个无F艮循环,因此任务StackTest最终就成为了网络事件调度任务,也就是说它的角色发生了改 变,因此其优先级需要做适当的调整。有关网络事件调度任务的具体细节 后面再论。至此,整个余统就跑起来了,但是我们的应用程序怎样添加到这个系统 中去并 使用这个协议找呢?大彖应该还记得NC.BootComplete函数调 用的 NetStart函数指针指向的函数吧,它是由用户实现的一个国数,在协议找启 动之后调用。因此用户的应用程序(与网络相关的应用)可以在该国数中 动态创立(应用程序作为任务的形式添加利系统中),CfgDemo工程就是这 么做的。CfgDemo工程中NetStart函数指针指向的函数为 NetworkOpen ()代码如 T :static void 以典磁KQp期0。J/ If we don't have any kind of IP in our configuration, we do a ' 'conHg by ping”。/ function. The calling parameter is the/ inteiface index to configure*寝!飒侦戏畋I AhGet!P= TaskQte( JMIE -GetlP", OS_TASKPRINORM, 0x1000,1, 0,0);/ Create our local servers phEcho = IaskCreate( 2chp$戏;'氏加5亚口§ TASKPRINORM, 0x1400, 0,0,0); hData = IaskCreate( datasiy, "DataSiy1', OS TASKPRINORM, 0x1400, 0, 0, 0); hNuU = TaskCreate( nullsrv, tiNuUSivei, OS TASKPRINORM, 0x1400, 0,0,0);hOob= TaskCreate( oobsiy, ,QpbSiy, OS TASKPRINORM, 0x1000, 0,0,0 );<由此可见该国数动态创立了五个任务,其优先级相同,均为OS_TASKPRIN ORM (5),而且这五个任务的状态都为处于Ready状去。但是由于随后网 络事件调度任务调整了自己的优先级,此四个任务都从Ready状宓转为 Blocked状态。一旦网络事件调度任务检测到网络事件就会通知相应的任务 使之迷人Running状态,处理网络事务。

    注意事项

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

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




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

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

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

    收起
    展开