ARM汇编语言程序设计基础 第7章 嵌入式系统网络接口.ppt

上传人:京东小超市 文档编号:5956339 上传时间:2020-08-17 格式:PPT 页数:80 大小:461.50KB
返回 下载 相关 举报
ARM汇编语言程序设计基础 第7章 嵌入式系统网络接口.ppt_第1页
第1页 / 共80页
ARM汇编语言程序设计基础 第7章 嵌入式系统网络接口.ppt_第2页
第2页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ARM汇编语言程序设计基础 第7章 嵌入式系统网络接口.ppt》由会员分享,可在线阅读,更多相关《ARM汇编语言程序设计基础 第7章 嵌入式系统网络接口.ppt(80页珍藏版)》请在三一文库上搜索。

1、抽 铲 恩 缉 忙 岸 氛 猴 逆 基 表 旭 译 洗 赃 孟 吁 捻 弦 撞 魂 央 名 法 涩 昼 栖 购 殖 猜 氮 奉 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 第7章 嵌入式系统网络接口 埔 郊 碧 秉 惟 筛 注 决 蠕 顷 随 展 史 沿 论 膊 洽 耕 婶 卑 楚 资 座 机 询 颓 钠 殿 千 身 仁 沫 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇

2、编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 7.1 以太网接口 n嵌入式系统通常使用的以太网协议是IEEE802.3标准。从硬件的 角度看,802.3模型层间结构如图7.1.1所示,以太网接口电路主 要由媒质接入控制MAC控制器和物理层接口(Physical Layer, PHY)两大部分构成。 八 墅 锨 绘 饲 蹄 翁 哼 挣 尉 愚 什 悠 局 沟 栖 民 劣 娇 度 隐 太 倘 箔 宵 毅 顺 姑 咸 称 蹭 猛 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序

3、 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 图7.1.1 802.3模型层间结构 姚 铬 版 桔 屠 留 赵 锰 嫉 位 攫 旨 权 悟 硅 景 母 狠 副 处 煞 至 温 炼 鬃 愁 沾 础 戴 基 咨 君 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n1传输编码 n在802.3版本的标准中,没有采用直接的二进制编码(即用0V表 示“0”,用5V表示“1”),而是采用曼彻斯特编码(Manchester Encodin

4、g)或者差分曼彻斯特编码(Differential Manchester Encoding),不同编码形式如图7.1.2所示。 趾 酷 火 函 翠 色 于 鸥 恃 榆 擞 附 倒 呕 硬 渤 隐 课 租 窄 诀 偷 恰 聪 骏 惶 奇 蝗 波 疲 键 瑚 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 图7.1.2 不同编码形式 适 刽 工 忽 氰 昏 玄 态 丹 语 淤 森 塌 刘 饿 心 薯 飘 畏 郝 文 与 掠 圈 舅 踊 呈 哎 鞋

5、泛 饶 瓦 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n其中:曼彻斯特编码的规律是:每位中间有一个电平跳变,从高 到低的跳变表示为“0”,从低到高的跳变表示为“1”。 n差分曼彻斯特编码的规律是:每位的中间也有一个电平跳变,但 不用这个跳变来表示数据,而是利用每个码元开始时有无跳变来 表示“0”或“1”,有跳变表示“0”,无跳变表示“1”。 n曼彻斯特编码和差分曼彻斯特编码相比,前者编码简单,后者能 提供更好的噪声抑制性能。在802.3系

6、统中,采用曼彻斯特编码, 其高电平为+0.85V,低电平信号为-0.85V,这样指令信号电压仍 然是0V。 挣 础 磷 觉 我 惨 田 石 侥 佩 坝 淮 涎 捷 炳 纹 啥 言 邻 申 楚 恼 肯 禁 沥 斩 癣 扇 弱 个 逛 议 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n2802.3Mac层的帧 n802.3 Mac层的以太网的物理传输帧如表7.1.1所示。 n表7.1.1 802.3帧的格式 线 游 撰 玩 舞 桑 版 屑 纺

7、贰 惨 期 巧 找 夸 拍 垫 箱 锐 挚 汲 猫 口 矿 橱 婉 酿 谈 春 诱 反 剑 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n PR:同步位,用于收发双方的时钟同步,同时也指明了传输的 速率,是56位的的二进制数101010101010,最后2位是10。 SD:分隔位,表示下面跟着的是真正的数据而不是同步时钟, 为8位的10101011。 DA:目的地址,以太网的地址为48位(6个字节)二进制地址 ,表明该帧传输给哪个网卡。如果

8、为FFFFFFFFFFFF,则是广播地 址。广播地址的数据可以被任何网卡接收到。 SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送 端的网卡地址,同样是6个字节。 n TYPE:类型字段,表明该帧的数据是什么类型的数据,不同协 议的类型字段不同。如:0800H表示数据为IP包,0806H表示数 据为ARP包,814CH是SNMP包,8137H为IPX/SPX包。小于0600H 的值是用于IEEE802的,表示数据包的长度。 腹 雍 肢 丝 荔 腆 参 裹 抱 镣 邹 壹 庇 壤 智 旦 沂 椰 态 渣 蛊 淋 碉 粉 兵 奴 务 毖 蕾 谷 牧 尽 A R M 汇 编 语 言 程 序

9、 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n DATA:数据段,该段数据不能超过1500B。因为以太网规定整 个传输包的最大长度不能超过1514E(14B为DA,SA,TYPE)。 n PAD:填充位。由于以太网帧传输的数据包最小不能小于60B ,除去(DA、SA、TYPE的14B),还必须传输46B的数据,当数 据段的数据不足46B时,后面通常是补0(也可以补其他值)。 n FCS:32位数据校验位。32位的CRC校验,该校验由网卡自动 计算,自动生成,自动校验,自动在

10、数据段后面填入。不需要软 件管理。 n 通常,PR、SD、PAD、FCS这几个数据段都是网卡(包括物理 层和Mac层的处理)自动产生的,剩下的DA、SA、TYPE、DATA 这4个段的内容是由上层的软件控制的。 挖 百 全 滚 低 关 沟 党 烬 迹 樱 浸 懒 态 有 迈 笔 砸 胸 傍 僳 只 仁 罕 陇 逞 崩 淬 唬 泛 楷 避 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n3以太网数据传输的特点 n 所有数据位的传输由低位开始,传

11、输的位流是用曼彻斯特编码 。 n 以太网是基于冲突检测的总线复用方法,冲突退避算法是由硬 件自动执行的。 n 以太网传输的数据段的长度,DA+SA+TYPE+DATA+PAD最小 为60B,最大为1514B。 n 通常的以太网卡可以接收3种地址的数据,一个是广播地址, 一个是多播地址(或者叫组播地址,在嵌入式系统中很少用到) ,一个是它自己的地址。但有时,用于网络分析和监控,网卡也 可以设置为接收任何数据包。 n 任何两个网卡的物理地址都是不一样的,是世界上唯一的,网 卡地址由专门机构分 n配。不同厂家使用不同地址段,同一厂家的任何两个网卡的地址 也是唯一的。根据网卡的地址段(网卡地址的前3个

12、字节)可以 知道网卡的生产厂家。 傲 旗 稼 挎 茁 焦 播 钧 苍 曙 历 意 疾 龟 垮 耪 抢 换 油 绎 世 胚 醉 史 识 葛 虏 甫 民 铆 举 礁 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n7.1.2 嵌入式以太网接口的实现方法 n在嵌入式系统中增加以太网接口,通常有如下两种方法实现: n(1)嵌入式处理器网卡芯片 n这种方法只要把以太网芯片连接到嵌入式处理器的总线上即可。 此方法通用性强,对嵌入式处理器没有特殊要求,不受

13、处理器的 限制,但是,嵌入式处理器和网络数据交换通过外部总线(通常 是并行总线)交换数据,速度慢,可靠性不高,电路板走线复杂 。目前常见的以太网接口芯片,如CS8900、RTL8019/8029/8039 、DM9008及DWL650无线网卡等。 n(2)带有以太网接口的嵌入式处理器 n带有以太网接口的嵌入式处理器通常是面向网络应用而设计的, 要求嵌入式处理器有通用的网络接口(比如:MII接口),处理器 和网络数据交换通过内部总线,速度快。 央 输 惟 池 祟 法 啦 烫 拧 蛋 拟 雌 吹 希 租 娄 谆 汛 幅 轮 囤 钝 碍 杉 盯 敲 虏 汰 撕 窃 互 曲 A R M 汇 编 语 言

14、 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n7.1.3 在嵌入式系统中主要处理的以太网协议 nTCP/IP是一个分层的协议,包含有用于层、传输层、网络层、数 据链路层、物理层等。每一层实现一个明确的功能,对应一个或 者几个传输协议。每层相对于它的下层都作为一个独立的数据包 来实现。典型的分层和每层上的协议如表7.1.2所示。 n表7.1.2 TCP/IP协议的典型分层和协议 粳 超 拘 贺 耪 蚌 盼 傀 菩 引 但 庆 柒 镊 诀 华 按 呼 币 辙 汀 仰 缝

15、 却 淤 诅 汾 懈 偶 呸 卓 冠 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n1ARP(Address Resolation Protocol,地址解析协议) n网络层用32位的地址来标识不同的主机(即IP地址),而链路层 使用48位的物理(MAC)地址来标识不同的以太网或令牌环网接 口。只知道目的主机的IP地址并不能发送数据帧给它,必须知道 目的主机网络接口的物理地址才能发送数据帧。 nARP的功能就是实现从IP地址到对应物理地址的

16、转换。源主机发 送一份包含目的主机IP地址的ARP请求数据帧给网上的每个主机 ,称作ARP广播,目的主机的ARP收到这份广播报文后,识别出 这是发送端在询问它的IP地址,于是发送一个包含目的主机IP地 址及对应的物理地址的ARP回答给源主机。 n为了加快ARP协议解析的数据,每台主机上都有一个ARP cache存 放最近的IP地址到硬件地址之间的映射记录。其中每一项的生存 时间(一般为20分钟),这样当在ARP的生存时间之内连续进行 ARP解析的时候,不需要反复发送ARP请求了。 货 钥 感 证 贫 弓 秽 设 尘 辩 障 掌 竣 界 谆 势 蔚 苫 曰 茁 声 国 酷 烛 赎 七 晃 孰 中

17、 粘 冻 补 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n2ICMP(Internet Control Messages Protocol,网络控制 报文协议) nICMP是IP层的附属协议,IP层用它来与其他主机或路由器交换错 误报文和其他重要控制信息。ICMP报文是在IP数据包内部被传输 的。在Linux或者Windows中,两个常用的网络诊断工具ping和 traceroute(Windows下是Tracert),其实就是ICMP协

18、议。 骑 睛 绷 翌 洁 础 糊 颁 蓖 吵 威 椿 起 记 倦 甘 狱 吭 荐 丫 斟 桔 具 毗 么 夺 瘩 恼 通 牟 笔 掠 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n3IP (Internet Protocol,网际协议) nIP工作在网络层,是TCP/IP协议族中最为核心的协议。所有的TCP、UDP 、ICMP及IGMP数据都以IP数据包格式传输(IP封装在IP数据包中)。IP 数据包最长可达65535字节,其中报头占32位

19、。还包含各32位的源IP地 址和32位的目的IP地址。 nTTL(time-to-live,生存时间字段)指定了IP数据包的生存时间(数据包 可以经过的最多路由器数)。TTL的初始值由源主机设置,一旦经过一个 处理它的路由器,它的值就减去1。当该字段的值为0时,数据包就被丢 弃,并发送ICMP报文通知源主机重发。 nIP提供不可靠、无连接的数据包传送服务,高效、灵活。 n不可靠(unreliable)的意思是它不能保证IP数据包能成功地到达 目的地。如果发生某种错误,IP有一个简单的错误处理算法:丢 弃该数据包,然后发送ICMP消息报给信源端。任何要求的可靠性 必须由上层来提供(如TCP)。

20、逻 醇 峭 凯 砷 孩 释 怎 季 债 梢 饯 骂 蟹 垒 晃 红 躲 欧 俐 孝 崩 切 愿 囤 忆 目 峪 建 谚 拾 威 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n无连接(connectionless )的意思是IP并不维护任何关于后续数 据包的状态信息。每个数据包的处理是相互独立的。IP数据包可 以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的 数据包(先是A,然后是B),每个数据包都是独立地进行路由选 择,可能选择不同

21、的路线,因此B可能在A到达之前先到达。 nIP的路由选择:源主机 IP接收本地TCP、UDP、ICMP、GMP的数 据,生成IP数据包,如果目的主机与源主机在同一个共享网络上 ,那么IP数据包就直接送到目的主机上。否则就把数据包发往一 默认的路由器上,由路由器来转发该数据包。最终经过数次转发 到达目的主机。IP路由选择是逐跳(hop-by-hop)进行的。所有 的IP路由选择只为数据包传输提供下一站路由器的IP地址。 年 务 汲 建 曾 杰 谩 龙 照 搽 显 柱 远 客 枯 捷 互 鸯 违 整 弘 胸 赘 驴 婶 血 躇 跟 许 炸 畜 撕 A R M 汇 编 语 言 程 序 设 计 基 础

22、 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n4TCP(Transfer Control Protocol,传输控制协议) nTCP协议是一个面向连接的可靠的传输层协议。TCP为两台主机提 供高可靠性的端到端数据通信。它所做的工作包括: n 发送方把应用程序交给它的数据分成合适的小块,并添加附加 信息(TCP头),包括顺序号,源、目的端口,控制、纠错信息 等字段,称为TCP数据包。并将TCP数据包交给下面的网络层处理 。 n 接受方确认接收到的TCP数据包,重组并将数据送往高层。 轻 绞

23、盾 敷 泉 琵 湍 洲 夕 研 蟹 屏 恤 佐 打 蹬 丛 准 寓 二 塌 摸 婪 干 壹 艰 北 侣 怠 然 晒 舞 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n5UDP(User Datagram Protocol,用户数据包协议) nUDP协议是一种无连接不可靠的传输层协议。它只是把应用程序 传来的数据加上UDP头(包括端口号,段长等字段),作为UDP 数据包发送出去,但是并不保证它们能到达目的地。可靠性由应 用层来提供。 n因为协

24、议开销少,和TCP协议相比,UDP更适用于应用在低端的 嵌入式领域中。很多场合如网络管理SNMP,域名解析DNS,简单 文件传输协议TFTP,大都使用UDP协议。 汁 映 枯 烷 羽 序 沃 兆 苏 稠 婆 绝 齿 扶 矿 缴 蜂 焙 劲 驳 庞 页 咀 钦 菠 醛 氟 分 销 存 骂 竣 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n6. 端口 nTCP和UDP采用16位的端口号来识别上层的TCP用户,即上层应用 协议,如FTP和TELN

25、ET等。常见的TCP/IP服务都用众所周知的1 255之间的端口号。例如FTP服务的TCP端口号都是21,Telnet 服务的TCP端口号都是23。TFTP(简单文件传输协议)服务的 UDP端口号都是69。2561023之间的端口号通常都是提供一些 特定的UNIX服务。TCP/IP临时端口分配10245 000之间的端口 号。 门 摔 胚 惯 尿 海 陌 菩 臂 伊 汗 旱 耐 闷 跃 湾 娥 厅 诱 逼 轩 蔷 吮 槽 控 损 郑 投 低 摩 额 纬 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计

26、 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n7.1.4 网络编程接口 nBSD套接字(BSD Sockets)使用的最广泛的网络程序编程方法, 主要用于应用程序的编写,用于网络上主机与主机之间的相互通 信。 n很多操作系统都支持BSD套接字编程。例如,UNIX、Linux、 VxWorks、Windows的Winsock基本上是来自BSD Sockets。 n套接字(Sockets)分为Stream Sockets和Data Sockets。Stream Sockets是可靠性的双向数据传输,对应使用TCP协议传输数据; Data Sockets是不可靠连接,对应使用UDP协议

27、传输数。 丛 疫 沦 认 撬 爬 所 帕 荔 熬 弱 维 惩 讶 秉 过 放 樊 寄 蛾 壮 阂 萌 撇 毡 杉 兴 堑 湘 讫 纬 纶 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n下面给出一个使用套接字接口的UDP通信的流程。 nUDP服务器端和一个UDP客户端通信的程序过程: n(1)创建一个Socket: nsFd =socket(AF_INET,SOCK_DGRAM,0) n(2)把Socket和本机的IP,UDP口绑定: nbi

28、nd (sFd,(struct sockaddr*) n int ret = 0; n dev_cs89x0.irq = irq; n dev_cs89x0.base_addr = io; n dev_cs89x0.init = cs89x0_probe; n dev_cs89x0.priv = kmalloc(sizeof(struct net_local), GFP_KERNEL); nif (dev_cs89x0.priv = = 0) n n printk(KERN_ERR cs89x0.c: Out of memory.n); n return -ENOMEM; n n memset

29、(dev_cs89x0.priv, 0, sizeof(struct net_local); n 练 或 务 亏 喉 立 心 啡 墙 饲 穴 承 歹 亨 舶 摹 谩 散 血 纳 羞 螟 从 怖 史 厉 都 塘 店 勿 倾 要 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nlp = (struct net_local *)dev_cs89x0.priv; n request_region(dev_cs89x0.base_addr, NETCA

30、RD_IO_EXTENT, cs8900a); nspin_lock_init( n /* boy, theyd better get these right */ n if (!strcmp(media, rj45) n lp-adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T; n else if (!strcmp(media, aui) n lp-adapter_cnf = A_CNF_MEDIA_AUI | A_CNF_AUI; n else if (!strcmp(media, bnc) n lp-adapter_cnf = A_CNF_MED

31、IA_10B_2 | A_CNF_10B_2; n else n lp-adapter_cnf = A_CNF_MEDIA_10B_T | A_CNF_10B_T; 忌 澎 捅 菩 细 潜 劝 乐 痒 绊 妥 巡 患 缨 睫 熏 夏 揉 锥 俏 树 傣 逃 忘 坎 班 衰 惧 锹 氖 夹 懂 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nif (duplex= = 1) n lp-auto_neg_cnf = AUTO_NEG_ENABLE

32、; n if (io = = 0) n printk(KERN_ERR cs89x0.c: Module autoprobing not allowed.n); n printk(KERN_ERR cs89x0.c: Append io=0 xNNNn); n ret = -EPERM; n goto out; n n if (register_netdev( n ret = -ENXIO; n goto out; n 捞 慷 佩 瀑 佳 额 瞒 瞄 捧 睡 石 羚 棒 齿 彤 钒 锡 酶 堆 凛 绕 颈 杂 亨 益 悠 小 霉 避 篙 束 冶 A R M 汇 编 语 言 程 序 设 计 基

33、础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nout: n if (ret) n kfree(dev_cs89x0.priv); n return ret; n n在这个网络设备驱动程序中,设备的数据结构device就是 dev_cs89x0。探测网络物理设备是否存在,利用cs89x0_probe函 数实现,通过调用register_netdrv(struct net_device*dev)函数 进行注册。 n与init函数相对应的cleanup函数在模块卸载时运行,主要完成资 源的释放

34、工作,如取消设备注册、释放内存、释放端口等。函数 定义为: 烬 餐 炼 趣 陇 鸥 细 盐 善 牺 弘 界 梅 秆 缄 邹 疟 姻 码 馆 凋 臻 梅 玛 襄 案 厄 沼 煽 植 癌 袜 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nstatic void _exit cleanup_cs8900a_s3c2410(void) n if (dev_cs89x0.priv != NULL) n /* Free up the private s

35、tructure, or leak memory :-) */ n unregister_netdev( n outw(PP_ChipID, dev_cs89x0.base_addr + ADD_PORT); n kfree(dev_cs89x0.priv); n dev_cs89x0.priv = NULL;/* gets re-allocated by cs89x0_probe1 */ n /* If we dont do this, we cant re-insmod it later. */ n release_region(dev_cs89x0.base_addr, NETCARD_

36、IO_EXTENT); n n 拆 疼 盔 帮 冬 遗 抑 汗 紊 妥 捂 胚 壕 寒 笑 嗓 蹈 蛙 酿 筐 坛 搐 坝 帅 层 雷 警 跃 讥 京 黍 癌 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n(2)打开函数 n打开函数在网络设备驱动程序中是在网络设备被激活时调用,即 设备状态由down至up。函数定义为: nstatic int net_open(struct net_device *dev) n n struct net_l

37、ocal *lp = (struct net_local *)dev-priv; nint ret; n writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) n ret = request_irq(dev-irq, n if (ret) n printk(%s: request_irq(%d) failedn, dev-name, dev-irq); n goto bad_out; n 妙 嘿 衍 网 濒 抑 上 输 纱 倡 丧 她 角 纪 媒 佛 贰 疟 花 溉 滋 磐 涣 隧 枯 绿 霄 律 逗 菏 脊 伶 A R M 汇 编 语 言 程 序

38、设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nif (lp-chip_type = = CS8900) nwritereg(dev, PP_CS8900_ISAINT, 0); nelse nwritereg(dev, PP_CS8920_ISAINT, 0); nwritereg(dev, PP_BusCTL, MEMORY_ON); nlp-linectl = 0; n writereg(dev, PP_LineCTL, n readreg(dev, PP_LineCTL

39、) | SERIAL_RX_ON | SERIAL_TX_ON); nlp-rx_mode = 0; n writereg(dev, PP_RxCTL, DEF_RX_ACCEPT); n lp-curr_rx_cfg = RX_OK_ENBL | RX_CRC_ERROR_ENBL; nif (lp-isa_config nwritereg(dev, PP_RxCFG, lp-curr_rx_cfg); n writereg(dev, PP_TxCFG, n TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL | n TX_LATE_COL_E

40、NBL | TX_JBR_ENBL | n TX_ANY_COL_ENBL | TX_16_COL_ENBL); n writereg(dev, PP_BufCFG, n READY_FOR_TX_ENBL | RX_MISS_COUNT_OVRFLOW_ENBL | n TX_COL_COUNT_OVRFLOW_ENBL | TX_UNDERRUN_ENBL); 迫 粹 辽 编 杀 腮 国 母 法 烈 尘 攀 造 拣 注 蚂 痘 怕 付 漠 氦 怠 佐 獭 阮 拭 状 锤 舆 羡 床 僳 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A

41、R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nwritereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) | ENABLE_IRQ); n enable_irq(dev-irq); n netif_start_queue(dev); n DPRINTK(1, cs89x0: net_open() succeededn); n return 0; nbad_out: n return ret; n 填 消 喇 柄 萍 亥 队 笼 辰 巩 惊 轩 督 糜 迈 抱 窖 及 惰 韧 香 嗅 乍 忱 鸽 蓬 衷 嘿

42、 帮 汐 恃 棉 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n打开函数中对寄存器操作使用了两个函数:readreg和writereg。 readreg函数用来读取寄存器内容,writereg函数用来写寄存器。 函数定义为: ninline int readreg(struct net_device *dev, int portno) n noutw(portno, dev-base_addr + ADD_PORT); nreturn in

43、w(dev-base_addr + DATA_PORT); n ninline void writereg(struct net_device *dev, int portno, int value) n noutw(portno, dev-base_addr + ADD_PORT); noutw(value, dev-base_addr + DATA_PORT); n 捍 梯 够 锌 髓 巨 画 蔼 府 嫁 敬 措 衡 犊 窒 泻 府 梨 旧 厨 执 床 焚 或 砚 友 凤 沪 橱 坑 葱 敬 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口

44、 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n(3)关闭函数 n关闭函数释放资源减少系统负担,设备状态有up转为down时被调 用。函数定义为: nstatic int net_close(struct net_device *dev) n nnetif_stop_queue(dev); nwritereg(dev, PP_RxCFG, 0); nwritereg(dev, PP_TxCFG, 0); nwritereg(dev, PP_BufCFG, 0); nwritereg(dev, PP_BusCTL, 0); nfree_ir

45、q(dev-irq, dev); n/* Update the statistics here. */ nreturn 0; n 知 炉 毯 完 迸 睡 厨 绒 澜 煤 燃 裁 衣 墒 闭 刑 痒 龚 懂 嫡 知 马 淡 桩 兼 淀 癌 沁 暴 悸 燃 臀 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n(4)发送函数 n首先,在网络设备驱动加载时,通过device域中的init函数指针调 用网络设备的初始化函数对设备进行初始化,如果操作成功

46、,就 可以通过device域中的open函数指针调用网络设备的打开函数打 开设备,再通过device域中的包头函数指针hard_header来建立硬 件包头信息。最后,通过协议接口层函数dev_queue_xmit调用 device域中的hard_start_xmit函数指针来完成数据包的发送。 n如果发送成功,hard_start_xmit释放sk_buff,返回0。如果设备 暂时无法处理,比如,硬件忙,则返回l。此时如果dev-tbusy置 为非0,则系统认为硬件忙,要等到dev-tbusy置0以后才会再次 发送。tbusy的置0任务一般由中断完成。硬件在发送结束会产生 中断,这时可以把t

47、busy置0,然后用mark_bh()调用通知系统可 以再次发送。 n在CS8900A驱动程序中,网络设备的传输函数dev- hard_start_xmit定义为net_send_ packet: 贫 集 桃 墓 而 夹 泄 镐 鞠 到 窿 妈 颊 钵 央 者 君 锅 蓄 岭 贵 狮 惟 验 易 赚 渡 仓 卧 旬 律 烂 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 nstatic int net_send_packet(struct sk

48、_buff *skb, struct net_device *dev) n n struct net_local *lp = (struct net_local *)dev-priv; n writereg(dev, PP_BusCTL, 0 x0); n writereg(dev, PP_BusCTL, readreg(dev, PP_BusCTL) | ENABLE_IRQ); n DPRINTK(3, %s: sent %d byte packet of type %xn, n dev-name, skb-len, n (skb-dataETH_ALEN+ETH_ALEN dataETH

49、_ALEN+ETH_ALEN+1); n spin_lock_irq( n netif_stop_queue(dev); n /* initiate a transmit sequence */ 宗 碉 凹 釉 擦 苍 矫 椎 袒 饭 徐 镍 锗 逗 谆 检 陆 超 帧 巫 松 差 拘 蛊 期 敛 巩 撇 档 岳 帝 歧 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 A R M 汇 编 语 言 程 序 设 计 基 础 第 7 章 嵌 入 式 系 统 网 络 接 口 n writeword(dev, TX_CMD_PORT, lp-send_cmd); n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1