




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 y - 一 6 5 1 8 30 嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技 术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的 工作和生活中,它在当今的应用正变得越来越广泛。b o o t l o a d e r 作为嵌入式 系统软件的重要组成部分,对它的研究和实现无疑也具有重要的现实意义。 本文首先对嵌入式系统b o o t l o a d e r 的特点和作用进行了介绍。然后从 嵌入式系统的角度对如何实现b o o t l o a d e r 进行了比较全面的分析。 本文对嵌入式系统的硬件初始化,串u 驱动及传输协议,网口驱动及传输 协议,u s b 驱动及传输协议,f l a s h 的驱动等等都做了比较洋细的分析。并结 合e v 4 4 8 0 丌发板,给出了实现的具体细节。 最后,对已经实现的b o o t l o a d e r 进行了测试和评估,并就今后的改进 方向提出了自己的意见。 关键字:嵌入式系统;b o o t l o a d e r ;u c l i n u x a b s t r a c t v i r t u a l l ye v e r ye l e c t r o n i cd e v i c ed e s i g n e da n dm a n u f a c t u r e dt o d a yi sa l le m b e d d e d s y s t e m b r i e f l y , b o o t l o a d e ri s t h ef i r s ts o f t w a r e p r o g r a mt h a tr u n sw h e na c o m p u t e rs t a r t s i ti sr e s p o n s i b l ef o rl o a d i n ga n dt r a n s f e r r i n gc o n t r o lt ot h eo p e r a t i n g s y s t e mk e r n e ls o f t w a r e t h i se s s a yi n t r o d u c e sh o wt od e s i g nb o o t l o a d e ri na n e m b e d d e d s y s t e m f i r s tt h ep a p e ri n t r o d u c e st h ef e a t u r e sa n dt h n c t i o no f b o o t l o a d e r ,t h e ni nd e t a i l a n a l y z e sb o o t l o a d e rf r o mv i e wo fe m b e d d e df i e l d ,a n db r i n g su pas y s t e m m o d e lo fb o o t l o a d e r i nt h i sp a p e r , i ta l s oh a v ead e t a i lr e s e a r c ho ns o m e p a r to fb o o t l o a d e r ,s u c h a s h a r d w a r ei n i t i a l ,u a r td r i v e ra n dt r a n s f e r p r o t o c a i ,l a n c a r dd r i v e ra n dt f l p i p p r o t o c a i ,u s b d r i v e ra n dt r a n s f e rp r o t o c a l ,f l a s hd r i v e re t c f i n a l l y , t h i sp a p e ri m p l e m e n t sa n d t e s t sb o o t l o a d e ri ne v 4 4 8 0e v a l u a t i o n b o a r d , t h e nb r i n g su ps o r t i ea d v i c eo nt h ei m p r o v e m e n ti nt h ef u t u r e k e y w o r d :b o o t l o a d e r ,e m b e d d e ds y s t e m ,u c l i n u x 第一章绪论 第一节引言 嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技 术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的 j t 作和生活中。 嵌入式处理器是嵌入式系统的核心,r i s c 型处理器具有结构简单,处理速 度快和处理功能强等特点,新型的嵌入式系统大多采用r i s i c 型处理器作为核, 如a r m 公司的a r m 。a r m 公司是嵌入式r i s c 处理器的知识产权i p 提供商, 它为a r m 架构处理器提供了a r m 处理器内核,如a r m 7 t d m i 。在本应用中, 采用的s 3 c 4 4 b o 处理器就是a r m 7 t d m i 的内核。 简单的嵌入式系统一般并不使用操作系统,只包含一些控制流程。但是当系 统所提供的功能复杂化以后,比如需要提供图形界面等等,这个时候就必须考虑 使用操作系统。 如今,在专用的嵌入式板子运行u c l i n u x 系统已经变得越来越流行。 一个嵌入式l i n u x 系统从软件的角度看通常可以分为四个层次: 1 引导加载程序。包括固化在固件( f i r m w a r e ) 中的b o o t 代码( 可选) ,和b o o t l o a d e r 两大部分。 2 l i n u x 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3 文件系统。包括根文件系统和建立于f l a s h 内存设备之上文件系统。通常用 r a l t ld i s k 来作为r o o t f i l e s y s t e m 。 4 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间 可能还会包括一个嵌入式图形用户界面。常用的嵌入式g u i 有: m i c r o w i n d o w s 和m i n i g u i 等。 引导加载程序是系统加电后运行的第一段软件代码。回忆一下p c 的体系 结构我们可以知道,p c 机中的引导加载程序由b i o s ( 其本质就是一段固件程序) 和位于硬盘m b r 中的o s b o o t l o a d e r ( 比如,l i l o 和g r u b 等) 一起组成。 b i o s 在完成硬件检测和资源分配后,将硬盘m b r 中的b o o tl o a d e r 读到系统 的r a m 中,然后将控制权交给o s b o o tl o a d e r 。b o o tl o a d e r 的主要运行任务 就是将内核映象从硬盘上读到r a m 中,然后跳转到内核的入口点去运行,也 即开始启动操作系统。 而在嵌入式系统中,通常并没有像b i o s 那样的固件程序( 注,有的嵌入 式c p u 也会内嵌一段短小的启动程序) ,因此整个系统的加载启动任务就完全 4 由b o o tl o a d e r 来完成。比如在一个基于a r m 7 t d m i 内核的嵌入式系统中, 系统在上电或复位时通常都从地址0 x 0 0 0 0 0 0 0 0 处开始执行,而在这个地址处安 排的通常就是系统的b o o tl o a d e r 程序。 在把u c l i n u x 移植到开发板后,这段引导程序的软件模块就是 h c a d m i c e t e k o ,它随后调用m i s c o 这个解压缩模块中的解压缩函数,解压p i g g y o 这个u e l i n u _ x 内核,把内核解到开发板的r a i n 中后,跳到内核入口处执行。 下面将从b o o tl o a d e r 的概念、b o o tl o a d e r 的主要任务、b o o tl o a d e r 的框 架结构等三个方面来讨论嵌入式系统的b o o tl o a d e r 。 第二节b o o t l o a d e r 的概念 简单地说,b o o tl o a d e r 就是在操作系统内核运行之前运行的一段小程序。 通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系 统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确 的环境。 通常,b o o tl o a d e r 是严重地依赖于硬件而实现的,特别是在嵌入式世界。 因此,在嵌入式世界里建立个通用的b o o tl o a d e r 几乎是不可能的。尽管如此, 我们仍然可以对b o o tl o a d e r 归纳出一些通用的概念来,以应用于各种特定的 b o o tl o a d e r 设计与实现。 1 b o o tl o a d e r 所支持的c p u 和嵌入式板 每种不同的c p u 体系结构都有不同的b o o tl o a d e r 。有些b o o tl o a d e r 也 支持多种体系结构的c p u ,比如u b o o t 就同时支持a r m 体系结构和m i p s 体系结构。除了依赖于c p u 的体系结构外,b o o tl o a d e r 实际上也依赖于具体 的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它 们是基于同一种c p u 而构建的,要想让运行在一块板子上的b o o tl o a d e r 程序 也能运行在另一块板子上,通常也都需要修改b o o tl o a d e r 的源程序。 2 b o o tl o a d e r 的安装媒介( i n s t a l l a t i o nm e d i u m ) 系统加电或复位后,所有的c p u 通常都从某个由c p u 制造商预先安排的 地址上取指令。比如,基于a r m 7 t d m ig o r e 的c p u 在复位时通常都从地址 o x 0 0 0 0 0 0 0 0 取它的第一条指令。而基于c p u 构建的嵌入式系统通常都有某种 类型的固态存储设备( 比如:r o m 、e e p r o m 或f l a s h 等) 被映射到这个预先 安排的地址上。因此在系统加电后,c p u 将首先执行b o o tl o a d e r 程序。 3 用来控制b o o tl o a d e r 的设备或机制 主机和目标机之间一般通过串口建立连接,b o o tl o a d e r 软件在执行时通常 会通过串口来进行i o ,比如:输出打印信息到串口,从串口读取用户控制字符 等。 4 b o o tl o a d e r 的启动过程是单阶段( s i n g l e s t a g e ) 还是多阶段( m u l t i s t a g e ) 通常多阶段的b o o tl o a d e r 能提供更为复杂的功能,以及更好的可移植性。 从固态存储设备上启动的b o o tl o a d e r 大多都是2 阶段的启动过程,也即启动 过程可以分为s t a g el 和s t a g e2 两部分。而至于在s t a g e1 和s t a g e2 具体完 成哪些任务将在下面讨论。 5 b o o tl o a d e r 的操作模式( o p e r a t i o nm o d e ) 大多数b o o tl o a d e r 都包含两种不同的操作模式:”启动”模式和”下载调试” 模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,b o o tl o a d e r 的作用就是用来加载操作系统,而并不存在所谓的启动模式与下载调试模式的区 别。 启动模式:这种模式也称为”自主”( a u t o n o m o u s ) 模式。也即b o o t l o a d e r 从 目标机上的某个固态存储设备上将操作系统加载到r a m 中运行,整个过程并 没有用户的介入。这种模式是b o o tl o a d e r 的正常工作模式,因此在嵌入式产品 发布的时侯,b o o tl o a d e r 显然必须工作在这种模式下。 下载调试模式:在这种模式下,目标机上的b o o t l o a d e r 将通过串口连接或 网络连接等通信手段从主机( h o s t ) 下载文件,比如:下载内核映像和根文件系 统映像等。从主机下载的文件通常首先被b o o tl o a d e r 保存到目标机的r a m 中,然后再被b o o tl o a d e r 写到目标机上的f l a s h 类固态存储设备中。b o o t l o a d e r 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后 的系统更新也会使用b o o tl o a d e r 的这种工作模式。工作于这种模式下的b o o t l o a d e r 通常都会向它的终端用户提供一个简单的命令行接口。 像b l o b 或u b o o t 等这样功能强大的b o o tl o a d e r 通常同时支持这两种 工作模式,而且允许用户在这两种工作模式之间进行切换。比如,b l o b 在启动 时处于正常的启动加载模式,但是它会延时1 0 秒等待终端用户按下任意键而将 b l o b 切换到下载模式。如果在1 0 秒内没有用户按键,则b l o b 继续启动l i n u x 内核。 6 b o o t l o a d e r 与主机之间进行文件传输所用的通信设备及协议 最常见的情况就是,目标机上的b o o tl o a d e r 通过串口与主机之间进行文件 传输,传输协议通常是x m o d e m y m o d e m z m o d e m k e r m i t 协议中的一种。 在本应用中,开发了串口驱动,使用了x m o d e m 作为传输协议。但是,串口传 输的速度是有限的,因此可以通过其它方式来下载文件。 一种是通过以太网连接并借助t f t p 协议来下载文件。这就涉及到以太网 6 卡的驱动及相关i p 协议栈的开发实现,在本文的第四章中详细介绍了这部分的 内容。 另一种则是通过u s b 接口并开发相应协议来下载文件。这涉及到u s b 芯片 的驱动及主机驱动程序的开发。在本文的第五章中详细介绍了这部分的内容。 此外,在论及这个话题时,主机方所用的软件也要考虑。比如,在通过以太 网连接和t f t p 协议来下载文件时,主机方必须有一个软件t f t p s e r v e r 用来的提 供t f t p 服务。 在通过u s b 接1 :3 连接来下载文件时,主机方必须有一个软件u s b d o w n l o a d 用来提供服务。 第二章b o o t l o a d e r 的总体介绍 第一节b o o t l o a i ) e r 的主要任务和结构框架 在第一章中已经提到,b o o t l o a d e r 包括两种操作模式,个是启动模式, 个是下载模式。 在启动模式下,b o o t l o a d e r 的主要任务是从主机上快速传送u c l l n u x 内核到开发板的r a m 上,正确地调用内核来执行,如果需要的话,还要把r a m 中的u c l i n u x 内核写到f l a s h 中。 为此目标,在系统上电后,首先进入启动模式,并开始启动一个计数器,在 1 0 秒内允许用户中断启动模式,进入下载调试模式。如果在1 0 秒内,用户不中 断启动模式,则随即自动用t f t p 方式传送u c l i n u x 内核到开发板的r a m 中 特定地址中去,传送完毕后,自动启动u c l i n u x 内核。 如果在规定时间内,用户中断启动模式,进入下载调试模式。则系统提供了 大量的命令供用户使用,主要命令简要介绍如下: 1 ) 文件传送类命令 总共提供了三个文件传送类命令。 u a r t l o a d :该命令从串行通信口用x m o d e m 协议传送文件到开发板内存。 t f t p _ _ l o a d :该命令从网口用t f t p 协议传送文件到开发板内存。 u s b l o a d :该命令从u s b 口用b u l k u s b 协议传送文件到开发板内存。 2 ) 内存调试类命令 md i s p l a y :该命令用于显示内存的值。 mm o d i f y :该命令用于修改内存的值。 3 ) f l a s h 操作命令: fe r a s e :提供多种方式实现对f l a s h 的修改和删除。 4 ) 运行命令: g o :从指定地址开始运行程序。 另外,由于b o o t l o a d e r 的实现依赖于c p u 的体系结构,因此大多数 b o o t l o a d e r 都分为s t a g e i 和s t a g e 2 两大部分。依赖于c p u 体系结构的代码, 比如设备初始化代码等,通常都放在s t a g e l 中,而且通常都用汇编语言来实现, 以达到短小精悍的目的。而s t a g e 2 则通常用c 语言来实现,这样可以实现较复 杂的功能,而且代码会具有更好的可读性和可移植性。 b o o t l o a d e r 的s t a g e l 通常包括以下步骤: 硬件设备初始化。 为加载b o o tl o a d e r 的s t a g e 2 准备r a m 空问。 拷贝b o o t l o a d e r 的s t a g e 2 到r a m 空间中。 设置好堆栈。 跳转到s t a g e 2 的c 入口点。 b o o tl o a d e r 的s t a g e 2 通常包括以下步骤: 初始化本阶段要使用到的硬件设备。 检测系统内存映射( m e m o r ym a p ) 。 驱动各外部设备( 串口,网口,u s b 口) 在下载调试模式下,接收外部命令,与主机进行各种通信。 在启动模式下,跳到u c l i n u x 中运行操作系统。 下图阐述了b o o t l o a d e r 的存储器映射 图2 1b o o t l o a d e r 的存储器映射 9 第二节硬件的开发环境和硬件的初始化 硬件环境:e v 4 4 8 0 丁f = 发板。它是适合三星$ 3 c 4 4 8 0 微处理器手持设备和 通用应用的代码开发平台。它由$ 3 c 4 4 8 0 处理器,b o o tf l a s h ,s d r a m , l c d 接口,两个串行通信接口,以太网接口,u s b 接口,键盘接口,i i s ( 声音) 接口,r t c ,j t a g 接口和八段数码管组成。 s 3 c 4 4 b o x 由1 6 3 2 位r i s c ( a r m 7 t d m i ) c p u 核,8 k bc a c h e ,可选的内 部s r a m ,l c d 控制器,带握手协议的双通道u a r t ,4 通道d m a ,系统管理 器( 片选逻辑,f p e d o s d r a m 控制器) ,6 通道带p w m 定时器,7 l 位通用i o 端口,r t c ,8 通道l o 位a d c ,i i c 总线接口,i i s 总线接口,s y n c s i o 接口和 时钟p l l 组成。 系统硬件框图如下: 网圈曰 固日 国曰 图2 2系统硬件框图 基于a i t m 的芯片多数为复杂的片上系统,这种复杂系统里的多数硬件模块 都是可配置的,需要由软件来设置其需要的工作状态。因此在用户的应用程序之 前,需要由专门的一段代码来完成对系统的初始化。由于这类代码直接面对处理 器内核和硬件控制器进行编程,一般都是用汇编语言。 1 0 曰 圈因 下面先简单介绍一下板子初始化的流程,流程图如下所示: 否 三困 禁止中断 l l初始化c l o c kc o n t r o lr e g i s t e r j l初始化m e m o r yc o n t r o l l e r 图2 3 硬件初始化流程 中断向量表 a r m 要求中断向量表必须放置在从0 地址开始,连续的8 个4 字节的空间内。 每当一个中断发生以后,a r m 处理器便强制把p c 指针置为向量表中对应中断类 型的地址值。因为每个中断只占据向量表中1 个字的存储空间,只能放置一条 a r m 指令,使程序跳转到存储器的其他地方,再执行中断处理。 中断向量表的程序实现通常如下表示: e n t r y : br e s e t h a n d l e r bu n d e f h a n d l e r bs w i h a n d l e r bp r e a b o r t h a n d l e r bd a t a a b o r t h a n d l e r n o p b i r q h a n d l e r b f i q h a n d l e r 其中关键字e n t r y 是指定编译器保留这段代码,因为编译器可能会认为这是一 段亢余代码而加以优化。链接的时候要确保这段代码被链接在0 地址处,并且作 为整个程序的入口。 初始化存储器系统 s 3 c 4 4 b o x 有6 个r o m s r a m 槽( r o m 0 槽用于b o o tr o m ) 和2 个r o m s r a m , e d o s d r a m 槽。 s 3 c 4 4 b o x 上的系统管理器可以通过软件控制访问时间和每个槽的数据总线宽 度。其中数据总线宽度由b w s c o n 控制寄存器控制,访问时间由系统管理器上 的b a n k c o n o 7 控制寄存器控制。 槽6 、7 上的存储器类型必须一致( 例如r o m & r o m ,s d 洲& s d r a m ) 。r o m 槽0 用来作为b o o tr o m 插槽。 在系统r e s e t 的时候,执行对b w s c o n ,b a n k c o n 0 7 ,r e f r e s h ,b a n k s i z e , m r s r b 6 7 的控制,使用的是一些特殊命令,如l d m i a 和s t m i a 。 对特殊寄存器进行配置的示例代码如下: l d rr 0 = s m r d a t a l d m i a r 0 , r l r 1 3 l d rr o ,= r e 臣_ b w s c o n b w s c o na d d r e s s + s t m i a r 0 , r l r 1 3 s m r d a t a 这个地址中存放了将要赋给各相关寄存器的值。 这些值依次赋给从b w s c o n 开始的这十三个寄存器。 初始化堆栈 因为a r m 有7 种执行状态,而每一种状态的堆栈指针寄存器( s p ) 都是独立的。 因此,对程序中需要用到的每一种模式都要给s p 定义一个堆栈地址。方法是改 变状态寄存器内的状态位,使处理器切换到不同的状态,然后给s p 赋值。 第三节软件的开发环境和软件部分的总体框图 软件开发环境:使用g n u 的a r m - e l f a s ,a r m e l f g c c ,a r m e l f l d 工具编译链接源文件,生成e l f 目标代码后,到h i t o o l 集成环境下进行调试。 在开发过程中,参考了u c l i n u x2 4 x 这个操作系统的部分代码。 先介绍一下b o o t l o a d e r 的总体结构框架 如下图所示: 图2 4b o o t l o a d e r 的总体结构框架 由上图可以看出,b o o t l o a d e r 软件的开发主要由三部分组成。其中硬件的初 始化部分由汇编语言编写,已经在前面作了描述。驱动层和应用协议层部分主要 由c 语言编写,也嵌入了部分的a r m 汇编。 接下来在第三章中将主要描述串行f i 的驱动及传输协议。第四章中将主要描述网 口的驱动及传输协议。第五章中将主要描述u s b 的驱动和传输协议。第六章将主 要描述f l a s h 部分的编程模型。 第三章串口驱动及传输协议 第一节串行通讯口驱动程序的编写 概述 串行通讯是微计算机之间一种常见的近距离通讯手段,因为使用方便、编程 简单而广泛使用,几乎所有的微控制器、p c 机都提供串行通讯接口。 $ 3 c 4 4 8 0 的u a r t 单元提供两个独立的异步串行通讯口( a s y n c h r o n o u s s e r i a li o ,s i o ) ,每个通讯口均可工作在中断模式或d m a 模式,u a r t 能产 生内部中断请求或d m a 请求,从而在c p u 和串行i o 口之间传送数据。 $ 3 c 4 4 8 0 的u a r t 单元特性包括: 1波特率可编程2支持红外发送与接收 31 至0 2 个停止位45 ,6 ,7 或8 个数据位 5 奇偶校验 每一个异步串行通讯口都具有独立的波特率发生器、发送器、接收器和控制 单元。波特率发生器可由片内系统时钟m c l k 驱动:发送器和接收器都有独立 的1 6 个字节的数据缓冲寄存器和数据移位器。待发送的数据首先传送到发送缓冲 寄存器,然后拷贝到发送移位器并通过发送数据引脚t x d n 发送出去。接收数 据首先从接收数据引脚r x d n 移入移位器,当接收到一个字节时就拷贝到接收 缓冲寄存器。 相关寄存器的介绍 1 u a r t 波特率除数因子寄存器( u b r d i v 0 、l i b r d w l ) u a r t 波特率除数因子寄存器u b r d i v 0 、u b r d w l 的值,决定了发送、接收 的波特率。 计算公式如下:r u b r d i v 0 = ( ( i n t ) ( m c l k 1 6 b a u d + o 5 ) 一1 ) 其中m c l k 是系统时钟,本系统中采用4 0 m 。 b a u d 为波特率,本应用设定为1 1 5 2 0 0 。 2 u a r t 线路控制寄存器( u l c o n 0 ,u l c o n l ) 该寄存器的值,决定了相应串行通信口的特性,如奇偶校验的种类,数据位长度, 停止位长度,是正常传送还是红外传送等。 本应用中,设定为正常传送,无奇偶校验,一个停止位,8 个数据位。 3 u a r t 控制寄存器( u c o n 0 ,u c o n l ) 该寄存器的值,决定了接收发送的模式等等 4 u a r t 缓冲控制寄存器( u f c o n o ,u f c o n l ) 1 4 该寄存器,决定了该串行通信口使用f i f o 的情况 为简单起见,没有使用f i f o 。 5 u a r t 发送缓冲寄存器( u t x h 0 ,u t x h l ) 该寄存器,存放待发送的8 位数据。 6 u a r t 接收缓冲寄存器( u r x h o ,u r x h l ) 该寄存器,存放接收到的8 位串行数据。 7 u a r t 接收和发送的状态寄存器( u t r s 丑玎o , 该寄存器的值,指明了发送和接收的状态。 本应用中,由于时间限制, u t r s t a t l ) 当往发送缓冲寄存器中写数据时,必须等状态寄存器中的发送缓冲区为空置位。 当状态寄存器表明接收缓冲区有数据,才能接收数据。 第二节串口通讯协议:x _ m o d e m 及其它 为了能从主机上下载文件,必须开发和主机能相互间通信的协议。 就串行通信而言,一般p c 机上都自带超级终端软件,该软件支持以下通信协议: x m o d e m ,y m o d e m ,z m o d e m ,k e r m i t 等等 为简单起见,下面仅就如何在开发板上实现x m o d e m 协议作一个介绍。 x m o d e m 协议的介绍 ) a 0 d e m 是个简单的串行通信协议,首先解释几个术语 s o h = c t r l a ,一个传送数据包的开头 e o t = c t r l d ,代表结束一个传输过程 a c k = c t r l f ,对上一个传送的肯定回复 n a k = c t r l u ,对上一个传送的否定回复 c a n = c t r l x ,命令取消本次传输过程 被传输的文件被分成一个个数据包进行传送,每个数据包中包含的实际数据大小 是1 2 8 个字节。 每个数据包都有一个数据包号,数据包号是从l 开始的,以后往上递增,当数据 包号大于2 5 5 时,就减去2 5 6 ,以便使数据包号一直都在0 到2 5 5 之间。 每个数据包的格式如下: 图2 2x m o d e m 协议中数据包的格式 对数据包号的取补,就是简单的用2 5 5 减去数据包号。 校验码:校验的过程也相对简单,是把实际传送的这1 2 8 个字节相加,得到的值 如果大于2 5 5 的话,就减去2 5 6 ,以便使最后得到的校验码一直都在0 至1 1 2 5 5 之间。 传送的过程是从下载方( 在本应用中,就是e v 4 4 8 0 开发板) 向主机( 即p c 机) 发出一个n a k 信号开始的。 主机在接受至j j n a k 信号后,就发出第一个数据包,如下: 1 s o h ( 一个字节) 2 数据包号( 一个字节) 3 数据包号的补码( 一个字节) 4 实际数据( 1 2 8 个字节) 5 校验码( 一个字节) 以上这五部分构成了一个数据块。 下载方在接受到一块数据后,做以下工作: 1 看收到的数据包号与上次收到的数据包号是否匹配,如上次收到的是3 ,那这 次收到的数据包号应该是4 。如果不是,就取消传送。 2 看数据包号与数据包号的补码是否匹配,即相加结果是否是2 5 5 。如果不是, 就取消传送。 3 把收到的1 2 8 个字节相加,得到一个校验值。 4 如果该校验值与发送过来的校验值一致,则认为接收和发送正确。就把接收 到的数据添加在接受文件后面,同时给发送方发出a c k 信号,要求传送下一 块数据。 5 如果该校验值与发送过来的校验值不一致,则认为接收和发送出错。给发送 方发出n a k 信号,要求重新传送这一块数据。 6 如果下一块数据不是以s o h 开始,而是以e o t 开始,说明发送方已经发送完 相关数据,这时给发送方发出a c k 信号,以结束本次传送过程。 1 6 简单的实现流程图( e v 4 4 8 0 倾0 ) 图2 3x m o d e m 实现流程图 甲 第四章网口驱动及传输协议 第一节网卡芯片及相应驱动的编写 1 网卡芯片介绍及与系统的连接。 开发板上使用的是一个带双绞线( 1 0 b a s e t & 1 0 0 b a s e t ) 接口的以太网端口。 s m s cl a n 9 1 c 1 1 3 用以作为$ 3 c 4 4 8 0 和以太网媒体的中介。 该网卡芯片的主要特点是: i 单片的以太网控制器 i i 1 0 1 0 0m b p s 传输速率 试内置8 k 字节的发送,接收缓冲器 i v 支持8 1 6 位的c p u a c c e s s 。 v 内部1 6 位数据通道。 v i 支持突发数据的传输 v m功耗小,提升了电源管理 网卡是把开发板和局域网连接起来的网络适配器,它涉及到网络物理层和数 据链路层,其基本功能是数据转换,包的装配和拆卸,网络存取控制,数据缓存 和网络信号。 以下是开发板上网卡的连接图: 地址线 t s 6 1 2 1r j 4 5 f r 叫 数据线。 s m s c l a n 9 l c l 3 $ 3 c 4 4 b 0 一n o e _ - 一n g c s _ 一n w b e - - 1 1 - e x i n t i 一n w e _ 图3 1 网卡芯片与系统的连接图 为了让网卡能正常的工作,必须开发相应的网卡驱动程序。 网络驱动程序在b o o t l o a d e r 系统网络部分架构中的位置如下: lt f t p 应用程序 l i lu d p 协议 i li p 协议 i 囤卜一网卡驱动程序 l l网卡硬件 图3 2 网络部分的简单o s i 模型 s m s c l a n 9 l c l l 3 主要寄存器介绍: b a n k 选择寄存器:偏移地址0 x o e 以下是实现b a n k 选择的函数。 v o i ds m cs e l e c t _ b a n k ( i n tx ) w r i t e w ( 0 x e , x ) ; t r a n s m i tc o n t r o l 寄存器:b a n k 0 ,o f f s e t0 发送控制寄存器,如是否允许发送,带不带校验码, r e c e i v ec o n t r o l 寄存器:b a n k 0 ,o f f s e t4 接受控制寄存器,如是否允许接受,接受的帧格式, c o n f i g u r a t i o n 寄存器:b a n k1 ,o f f s e t0 配置寄存器,配置好后在运行时期不可改变。 c o n t r o l 寄存器:b a n k1 ,o f f s e tc 应用层 运输层 网络层 数据链路层 物理层 长度控制等等。 冲突控制等等 控制寄存器。当其中的a u t or e l e a s e 位被置位时,在一个发送页被发送 成功后,会被自动释放。发送成功的包号也不会被写到t x c o m p l e t i o nf i f o 中去。 1 9 m m uc o m m a n d 寄存器:b a n k2 ,o f f s e t0 该寄存器主要控制内存的申请,释放,和发送,接受f i f o 的控制。在初始 化时,要用到其中的r e s e t 命令,复位所有的内存,指针和中断。在发送数据 包时,要用到其中的a l l o c 命令和e n q u e u e 命令,前者是申请内存。后者是 把要发送的数据包放到内存中去。在接收数据包时,要用到其中的r e l e a s e 命 令,释放接收到的数据包所占用的内存。 a l l o cr e s u l t 寄存器:b a n k 2 ,o f f s e t3 发送数据包时,在a l l o c 命令后,从这个寄存器中能读到a l l o c a t e d p a c k e tn u m b e r 。 f i f op o r t s 寄存器:b a n k 2 ,o f f s e t4 接收数据包时,从这个寄存器中读出接收的数据包号。 p o i n t e r 寄存器:b a n k2 ,o f f s e t6 指针寄存器。决定了发送或者接收数据包时候对数据寄存器的操作方式。当 其中的a u t 0 1 n c r 被置位时,对数据寄存器的存取地址会自动改变。当其中的 r e a d 被置位1 时,表明操作将是读取,被置位0 时,表明操作将是写。当其中 的r c v 被置位l 时,表明采用的是接收区域的地址,并且用r xf i f o 寄存器的 输出值作为接收数据包的号。当其中的r c v 被置位0 时,表明采用的是发送区 域的地址,并且用p a c k e tn u m b e r 寄存器的输出值作为发送数据包的号。 d a t a 寄存器:b a n k2 ,o f f s e t 8 一o f f s e tb 数据寄存器。可以用b y t e w o r d 方式读取,地址由指针寄存器给定。 i n t e r r u p ts t a = 兀,s 寄存器:b a n k 2 ,o f f s e t c 、 中断状态寄存器,读该寄存器,了解各种中断发生的情况。 i n t e r r u p tm a s k 寄存器:b 砧哌2 ,o f f s e td 中断屏蔽寄存器,在相应位上置0 ,可以屏蔽掉相关的中断。 2 网卡芯片的初始化流程。 以下给出了初始化网卡的一些必要步骤。 初始化网卡的m a c 地址 首先需要初始化网卡的m a c 地址,方法是向b a n k l 的i n d i v i d u a l a d d r e s s r e g i s t e r 中写入所预先设定的m a c 地址 具体函数如下: v o i de t h _ m a c i n i t ( ) i n t i ; 件 设定s m s e 网卡的m a c 地址是:0 x 0 0 ,o ) ( o b ,0 x 5 1 ,o x 0 0 ,o ) 【o f ,o ) 【f r 十, e t h m a c _ a d d r 0 】2o x 0 0 ; e t h m a c _ a d d r 1 - 0 x o b ; e t h m a c _ a d d r 2 0 x 51 ; e t h m a c _ a d d r 3 = 0 x 0 0 ; e t h m a c _ a d d r 4 】= o x o f i e t h m a c _ a d d r 5 】_ 0 x i f ; s m c s e l e c t _ b a n k ( 1 ) ; f o r ( i - o ;i d a t a - = l e n ; s k b - l e n + = l e n ; i f ( s k b 一 d a t a h e a d ) s k b _ u n d e r _ p a n i c ( s k b ,l e n , c u r r e n tt e x ta d d r 0 ) ; ) r e t u r ns k b - d a t a : ) 第三节b o o t l o a d e r 中i p 协议栈总体框架设计 i 总体系统架构。 总体系统架构见图3 - 2 。 2 数据流程: 数据传送时采用t f t p 协议传送。 首先在开始t f t p 服务前,需要得到远端t f t p 服务器的m 地址。 然后查询a r p 的地址映射表,看是否有该i p 所对应的物理地址。 如果没有相关的物理地址,必须利用a r p 协议发出请求消息,在得到相应 的回复后才可以开始传送流程。 发送数据时,把需要传送的数据加上t f t p 包头,由于选择的是无连接的 u d p 协议,所以将加好t f t p 包头的数据交给u d p 协议模块处理,u d p 模块将 其首部和数据封装成u d p 数据包,然后将封装好的u d p 数据包交给i p 协议模 块,i p 模块在u d p 数据包上添加i p 首部,并封装成i p 数据包。i p 模块再将i p 数据包交给以太网层模块,以太网层模块在i p 数据包前加上本地网卡的m a c 地址和远端服务器的m a c 地址及协议类型,构成以太网帧,送给网卡驱动程序 进行发送。 接受数据时,网卡中断程序先产生接受中断。调用相应程序接受,写到 s kb u f f 缓冲区中,将接受到的数据帧交给以太网层模块,以太网层模块取出 帧头,判断接受数据的类型,如果是a r p 报文,则将a r p 报文交给a r p 协议 模块处理;如果是i p 数据包,则将i p 数据包交给i p 协议模块处理。i p 协议模 块取出i p 首部信息,判断是否本地接受,如果是则根据数据包的类型,将报文 交给相应的协议模块( t c p 模块,u d p 模块或是i c m p 模块) 处理;在本 b o o t l o a d e r 中,采用的是u d p 数据报,所以u d p 模块接受到数据,判断是 不是t f t p 数据报。如果是,交给t f t p 应用层处理。 第四节基本协议设计框架 1 网络接口层实现模型 功能概述 该层是u d p b p 协议栈与下层物理设备驱动程序之间的接口。 发送普通数据时,本层的网络接口层发送函数e t hs e n d o 负责接收上层协 议产生的数据,以待发i p 数据包的目的i p 地址为索引查找a r p 地址映射表, 如果查找到对应的目的地物理地址,则将它封装成以太网帧。调用驱动程序进行 发送。如果没有相应的目的地物理地址,则调用a r p 协议实现中的a r p _ r e q 函数发出a r p 请求。 接受数据时,本层的网络接口层接受函数e t h _ r e c v 0 被底层的网卡驱动程 序调用。e t hr e c v o i 函数首先判断接受到的数据类型,如果是i p 数据包,则 调用上层i p 协议中的i p;如果是 数据包,则调用上层a i 心协议_ r e c v o a r p 中的a r p _ r e c v o 。 初始化函数e t hi n i t 0 负责实现网络接口层相关数据结构的初始化。 函数关系图 下图显示了网络接口层函数与其它协议之间的关系,其中虚线框内为网络接口层 实现。 i p 报文 调用 l pr e c v a r p 报文 调用i p 报文a r p 报文 网卡驱动的接受函数网卡驱动的发送函数 图3 7网络接口层的函数关系 2 a r p 层协议实现模型 功能概述 a r p 如议实现埘a r p 报文的解释,处理,同时管理a r p 映射表。 a r p 报文分为a r p 请求报文和a r p 应答报文。当进行以太网帧的封装时, 如果不知道目的地的m a c 地址,则调用a r pr e q 0 发出a r p 请求报文。a r p 报文处理函数a r pr e c v 0 负责对接收到的a r p 报文进行处理。如果收到a r p 请求报文,而且
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西梧州学院高层次人才引进模拟试卷附答案详解(模拟题)
- 2025河南洛阳市洛宁县招聘看护队伍劳务派遣人员45名考前自测高频考点模拟试题及答案详解(各地真题)
- 2025第二季度重庆万盛经开区创业就业和人才中心招聘1人考前自测高频考点模拟试题及答案详解(典优)
- 安全培训教师决心书课件
- 2025湖南邵阳学院招聘22人模拟试卷及答案详解(网校专用)
- 2025年中职高考对口升学(理论考试)真题卷【医药卫生大类】模拟练习
- 2025福建生态工程职业技术学校招聘4人模拟试卷及答案详解(名校卷)
- 2025年甘肃省平凉市博物馆公益性岗位人员招聘模拟试卷及答案详解(新)
- 2025广东广州市海珠区招聘事业单位工作人员19人模拟试卷及完整答案详解1套
- Ibufenac-13C6-Dytransin-sup-13-sup-C-sub-6-sub-生命科学试剂-MCE
- 银行安全用电知识培训课件
- 2025鄂尔多斯市国源矿业开发有限责任公司社会招聘75人笔试参考题库附带答案详解
- 2025年解除租赁合同协议书
- 工业废水零排放技术解决方案创新创业项目商业计划书
- 黄冈市2025年高三年级9月调研考试(一模)生物试卷(含答案)
- 人工搬运培训课件
- 2025年哈尔滨投资集团有限责任公司校园招聘笔试备考题库含答案详解(精练)
- DB4406∕T 47-2024 养老机构安全风险管理规范
- 2025年高考英语新课标Ⅱ卷点评及2026备考方向 课件
- 2025年广东省中考语文试卷真题(含答案解析)
- 2025年学宪法、讲宪法知识竞赛题库及答案
评论
0/150
提交评论