从cfgdemo项目来分析协议栈的启动

上传人:第*** 文档编号:32743390 上传时间:2018-02-12 格式:DOC 页数:9 大小:704KB
返回 下载 相关 举报
从cfgdemo项目来分析协议栈的启动_第1页
第1页 / 共9页
从cfgdemo项目来分析协议栈的启动_第2页
第2页 / 共9页
从cfgdemo项目来分析协议栈的启动_第3页
第3页 / 共9页
从cfgdemo项目来分析协议栈的启动_第4页
第4页 / 共9页
从cfgdemo项目来分析协议栈的启动_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《从cfgdemo项目来分析协议栈的启动》由会员分享,可在线阅读,更多相关《从cfgdemo项目来分析协议栈的启动(9页珍藏版)》请在金锄头文库上搜索。

1、从 Cfgdemo 项 目 来 分 析 协 议 栈 的 启 动项 目 中 静 态 创 建 的 任 务 有 两 个 : 一 个 是 空 闲 任 务 , 一 个 是 StackTest任 务 , main 函 数 是 空 的 。 任 务 StackTest 的 优 先 级 ( 5) 比 空 闲 任 务 高 。 整个 程 序 的 初 始 化 部 分 执 行 完 之 后 , 就 会 执 行 StackTest 任 务 , 从 而 执 行 StackTest( ) 函 数 。StackTest( ) 函 数 首 先 调 用 了 NC_SystemOpen( ) 函 数 , 来 完 成 协 议 栈系 统

2、的 初 始 化 工 作 。 必 须 注 意 的 是 : 在 使 用 协 议 栈 之 前 必 须 最 先 调 用 该 函 数 。 接下 来 调 用 函 数 CfgNew( ) 来 创 建 一 个 配 置 ( Configuration) 并 获 得 该 配 置的 句 柄 , 接 下 来 的 工 作 就 是 在 配 置 中 增 添 配 置 项 ( Configuration Entry) , 增 添 配 置 选 项 是 通 过 调 用 CfgAddEntry( ) 函 数 实 现 的 。 该 项 目 中 首 先增 添 的 配 置 项 为 Host name:从 CFGDEMO 项 目 来 分 析

3、协 议 栈 的 启 动接 着 增 添 的 配 置 项 为 Telnet 服 务 , 那 么 协 议 栈 系 统 在 启 动 之 后 会 启 动 Telnet 服 务 ( 创 建 了 一 个 名 为 telnetd 的 任 务 ) :接 着 通 过 调 用 efs_createfile( ) 创 建 5 个 文 件 , 其 名 字 分 别 为 : index.html、 tibug.gif、 cfgstart.cgi、 cfgpass.cgi cfgdone.cgi; 这 5 个文 件 中 , 前 两 个 文 件 的 数 据 分 别 存 放 在 数 组 DEFAULT、 TIBUG中 , 而 后

4、三 个 文 件 实 际 是 cgi 程 序 , 这 三 个 cgi 程 序 分 别 完 成 来 之 客 户 端 的 命 令 请 求: View configuration、 Change password、 Submit configuration, 与之 同 时 , 它 们 动 态 修 改 并 发 送 了 两 个 网 页 并 CONFIG、 USERMSG。接 着 增 添 的 配 置 项 为 HTTP 服 务 , 那 么 协 议 栈 启 动 之 后 会 启 动 Http 服 务( 创 建 一 个 名 为 http server 的 任 务 ) 接 着 的 增 添 的 配 置 项 为 CFGI

5、TEM_OS_DBGPRINTLEVEL, 来 选 择 打 印 的 信 息内 容 :接 下 来 调 用 函 数 CfgSave( ) 来 获 取 配 置 的 大 小 并 讲 配 置 数 据 存 入 一 个 缓存 中 去 , 并 释 放 配 置 。接 下 来 调 用 函 数 NetBoot( ) 来 启 动 协 议 栈 。 这 个 函 数 是 NDK 的 用 户自 己 写 的 一 个 函 数 , 在 这 个 函 数 中 , 调 用 了 协 议 栈 启 动 函 数 NC_NetStart( ) , 这 个 函 数 属 于 Network Control API, 该 函 数 的 源 代 码 可 以

6、 在 tiNDKsrcnetctrlnetctrl.c 中 找 到 。 其 函 数 接 口 如 下 :NetBoot( ) 在 调 用 NC_NetStart( ) 之 前 调 用 CfgNew( ) 来 创 建 一 个 新 的空 的 配 置 , 然 后 再 调 用 CfgLoad( ) 来 把 之 前 存 入 缓 冲 区 中 的 配 置 好 的 配 置 数据 载 入 新 的 配 置 中 去 , 并 把 它 作 为 参 数 传 入 NC_NetStart( ) 中 去 , 接 着 就调 用 NC_NetStart( ) 启 动 协 议 栈 。NC_NetStart( ) 函 数 首 先 调 用

7、 了 4 个 硬 件 抽 象 层 ( HAL) 的 四 个 初 始化 函 数 , 由 它 们 来 完 成 底 层 硬 件 的 初 始 化 ( 具 体 细 节 过 程 等 待 进 一 步 研 究 ) :接 着 该 函 数 调 用 CfgSetDefault( ) 把 传 入 NC_NetStart( ) 函 数 中 构 建 好的 配 置 设 置 为 默 认 配 置 。 由 于 编 程 方 法 上 的 需 要 , 协 议 栈 就 使 用 配 置 是 统 一 为 一个 配 置 句 柄 指 向 的 配 置 。 这 样 CfgSetDefault( ) 的 本 质 就 是 把 该 配 置 句 柄指 向

8、传 入 NC_NetStart( ) 函 数 中 构 建 好 的 配 置 。 接 着 把 传 入 NC_NetStart( ) 函 数 的 三 个 函 数 指 针 赋 值 给 三 个 全 局 变 量, 以 方 便 后 面 适 当 的 时 候 调 用 :接 着 调 用 协 议 栈 的 核 心 API 函 数 ExecOpen( ) 来 初 始 化 协 议 栈 的 executive( 自 己 意 会 这 个 概 念 ) 。接 着 动 态 创 建 一 个 名 为 ConfigBoot 的 任 务 , 其 优 先 级 为 15( 最 高 ), 其 执 行 的 函 数 是 NS_BootTask( )

9、 。 由 于 DSP/BIOS 是 占 先 式 实 时 OS,所 以 一 旦 任 务 高 优 先 级 的 任 务 创 建 , OS 内 核 的 调 度 模 块 就 会 自 动 切 换 到 高 优先 级 的 任 务 执 行 。 很 显 然 , 接 下 来 执 行 的 是 函 数 NS_BootTask( ) 。 这 个 函数 的 源 码 在 tiNDKsrcnetctrl netsrv.c 中 可 以 找 到 。NS_BootTask( ) 函 数 首 先 调 用 CfgSetService( ) 来 Set Service CallBack Funtions for Every Configu

10、ration Tag, 其 意 思 是 为 每 个 Configuration Tag 设 置 一 个 回 调 函 数 , 其 目 的 是 为 了 在 修 改 完 配 置 之 后 能 及 时更 新 协 议 栈 系 统 , 也 就 是 使 协 议 栈 系 统 随 着 配 置 的 改 变 而 实 时 地 改 变 。 回 调 函 数 的 接 口 定 义 如 下 :在 NDK 的 协 议 栈 中 , Configuration Tag 共 有 如 下 8 个 :其 中 需 要 配 置 回 调 函 数 的 有 如 下 几 个 : CFGTAG_OS、 CFGTAG_IP、 CFGTAG_SERVICE、

11、 CFGTAG_IPNET、 CFGTAG_ROUTE, 它 们 的 回 调 函 数 分 别 为 : SPConfig( ) 、 SPConfig( ) 、 SPService( ) 、 SPIpNet( ) 、 SPRoute( ), 这 些 回 调 函 数 的 实 现 源 代 码 都 在 tiNDKsrcnetctrl netsrv.c 可 以找 到 。下 面 分 析 以 下 SPConfig( ) 函 数 是 怎 样 实 现 实 时 更 新 系 统 的 : SPConfig( ) 函 数 是 作 为 CFGTAG_OS、 CFGTAG_IP 的 回 调 函 数 的 , 所 以 它 必 须

12、 负 责 处理 增 添 CFGTAG_OS、 CFGTAG_IP 两 种 类 型 的 Configuration Entry 时 的 系统 实 时 更 新 工 作 。 系 统 在 调 CfgAddEntry 函 数 来 增 添 一 个 CFGTAG_OS、 CFGTAG_IP 类 型 的 配 置 项 后 ( 注 意 : CfgAddEntry 只 把 配 置 数 据 添 加 到 配 置 中去 ) , 会 调 用 与 该 种 配 置 类 型 捆 绑 的 的 回 调 函 数 SPConfig( CfgSetService 函 数 来 完 成 捆 绑 工 作 的 ) , SPConfig 函 数 调

13、 用 CfgEntryInfo 来 获 取 该配 置 项 的 数 据 缓 冲 区 的 指 针 并 存 放 在 变 量 pi 中 , 接 着 更 具 Configuration Tag 的 类 型 来 获 取 具 体 需 要 修 改 的 系 统 配 置 参 数 结 构 体 ; CFGTAG_OS OSENVCFG _oscfg、 oscfgcopy / CFGTAG_IP IPCONFIG _ipcfg、 ipcfgcopy, 这 两 个 都 是 全 局 变 量 , 它 们 的 数 据 结 构 类 型 如 下 :/ Configuration Structuretypedef struct _i

14、pconfig uint IcmpDoRedirect; / Update RtTable on ICMP redirect (1=Yes)uint IcmpTtl; / TTL for ICMP messages RFC1700 says 64uint IcmpTtlEcho; TTL for ICMP echo RFC1700 says 64 uint IpIndex; / IP Start Indexuint IpForwarding; / IP Forwarding (1 = Enabled) uint IpNatEnable; / IP NAT Enable (1 = Yes)uin

15、t IpFilterEnable; / IP Filtering Enable (1 = Yes)uint IpReasmMaxTime; / Max reassembly time in secondsuint IpReasmMaxSize; / Max reassembly packet size uint IpDirectedBCast; / Look for directed BCast IP addressesuint TcpReasmMaxPkt; / Max reasm pkts held by TCP socketuint RtcEnableDebug; / Enable Route Control Messages (1=On)uint RtcAdvTime; / Time in sec to send RtAdv (0=dont) uint RtcAdvLife; / Litetime of route in RtAdv int RtcAdvPref; / Preference Level (signed) in RtAdvuint RtArpDownTime; / Time 5 failed ARPs keep Rt down (sec)uint R

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号