已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中科技大学 硕士学位论文 jtag并行烧写工具研究与实现 姓名:李江卫 申请学位级别:硕士 专业:计算机应用技术 指导教师:涂刚 20080606 华中科技大学硕士学位论文 华中科技大学硕士学位论文 i 摘摘 要要 jtag(joint test access group)烧写工具具有灵活、方便、稳定等特点,因而在 嵌入式系统领域得到了广泛的应用。然而,基于仿真器的烧写工具一般都需要配合 宿主机才能使用,不具有独立工作的能力;并且一次只能操作一个目标,烧写效率 不高。 并行烧写工具以 jtag 技术为基础, 带有易于交互的用户接口, 具有同时操作多 个目标板的能力。该工具以带有小键盘和显示屏的开发板为硬件基础,分为分时内 核,并行烧写和用户接口三大部分实现。 分时内核是烧写工具实现并行处理功能的基础,它以 c/os-ii(microc/os-ii)内 核为基础进行分时调度改造得来,实现一个有四个优先级的分时调度系统。分时内 核同时向系统提供任务同步、通信和存储管理等功能。 并行烧写功能是系统的主要设计目标。 首先在驱动层的基础上实现 jtag 操作接 口,该接口向调用者提供读写数据、指令寄存器,读取控制器标识,设置扫描链及 重启等功能函数。然后在 jtag 接口基础上,根据闪存操作规程,使用分时内核提 供的服务实现对闪存的并行烧写功能。 用户接口是烧写工具能够脱离宿主机独立工作的基础。烧写工具在小键盘和显 示屏的基础上,实现了由键盘中断模块和显示控制模块组成的用户接口,可满足用 户与系统进行简单交互操作的需要。 对比实验证明,并行烧写工具对目标板进行烧写时速度较高,具有较强的实用 性。 关键字关键字:嵌入式系统,烧写工具,并行 华中科技大学硕士学位论文 华中科技大学硕士学位论文 ii abstract with the flexible, convenient and stable characteristics, jtag (joint test access group) programming tool become widely used in the field of embedded systems. however, the widespread used emluator-based programming tools do not have the ability to work independently, and can only perform one target once a time. a jtag-based parallel programming tool, with user-friendly interface, has the ability to manipulate more than one target at one time. the system, based on development board with keyboard and lcd (liquid crystal display), consists of a time-sharing core, parallel programming application and user interface. time-sharing core is the basis of parallel-processing functions; it has modified to provide a time-sharing scheduling system based on the famous microkernel microc/os-ii, and now, it use a 4-level queue to manage all the tasks in the system. time-sharing system could also provide the functions including inter-process communication, memory management etc. parallel programming application is the main goal of this system. based on the driver of jtag, a set of functions is provided including data/instruction register reading/writing, chain selecting, bypassing and resetting to the caller. then using the jtag interface and time-sharing core, a parallel programming features is provided according to flash operating rule. user interface is the basic of programming tools for working independent from host. the user interface, based on a small keyboard and lcd, can satisfy users with simple interaction needs. testing showed that, with the system consisting of s3c2440 processor and flash, the programming rate is 2.8 kbytes per second for single target and 2.7kbytes per second for two targets. practice shows this system has strong practical for small files. key words: embedded system,programming tool,parallel 独创性声明独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或 集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在 文中以明确方式标明。本人完全意识到,本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权 保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借 阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进 行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密 ,在_年解密后适用本授权书。 不保密。 (请在以上方框内打“”) 学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日 本论文属于 华中科技大学硕士学位论文 华中科技大学硕士学位论文 1 1 绪论绪论 1.1 课题背景课题背景 伴随着计算机技术的高速发展, 嵌入式系统从早期的航空、 航天、 军事等领域1, 迅速扩展到了工业控制、汽车电子、通信、消费类电子、互联网、医疗、仪器仪表 等众多日常生活领域2。由于嵌入式系统与特定应用紧密结合3,使用专用的处理器 芯片,并且一般不具备自我开发能力,这些使得嵌入式软件开发与通用软件开发相 比有较大不同,尤其表现在开发过程的后期阶段。 一个显著的不同是嵌入式软件需要将程序烧写到目标板上,尤其是在目标板上 没有任何可使用的软件时,该步骤更显得必要而有决定意义。现有的烧写技术主要 有编程器编程,板上编程器编程和 jtag 在线编程4。编程器编程需要手动操作,效 率低、易出错。板上编程器方法需要设计专用的编程接口,成本较高5;而 jtag 在 线编程的方法既能弥补上述方法的不足,同时具有灵活、方便6、稳定等特点,得到 广泛的应用。 jtag 在线编程利用 jtag 接口直接执行对存储芯片的擦除和编程操作7,目标 板不需要增加与编程相关的辅助电路,有助于减少电路板尺寸,同时避免了对芯片 的手工操作,适用于电路板尺寸有严格限制的手持设备8。由于 jtag 仿真器通常提 供在线编程能力, 所以使用它进行闪存烧写变得越来越流行。 仿真器通过 jtag 接口 直接对目标板硬件进行操作。它通常实现某种调试协议9,向调用者提供调试功能接 口。配合图形化的操作界面,使用者可以直观的完成烧写工作。但在使用过程中, 也显现出了某些不足。它价格昂贵10,不易于大规模使用,一次只能操作一个目标, 需要配合开发环境11才能进行烧写工作。 本课题源于实际需求, 预期实现一种基于 jtag 技术的并行烧写工具。 烧写工具 从硬件仿真器的缺点出发,尝试给出一种解决办法。实现后的并行烧写工具可以使 用 usb (universal serial bus)或通用异步收发器(universal asynchronous receiver and transmitter,uart)与宿主机通信,带有简单的图形用户接口。它不依赖于宿主机, 可独立的完成代码烧写工作,且具有同时操作多个目标板的能力。这些优点使得它 华中科技大学硕士学位论文 华中科技大学硕士学位论文 2 能够降低使用成本和简化使用流程。 1.2 国内外概况国内外概况 1.2.1 烧写工具现状烧写工具现状 在嵌入式软件开发领域中,jtag 在线编程技术通常作为 jtag 仿真器的一个重 要功能提供给用户,使用这种方法进行烧写变得越来越普遍。本章接下来将以介绍 仿真工具的形式描述 jtag 在线编程方法的现状。 随着硬件的发展,jtag 仿真器的种类也越来越多,性能亦随之不断提升12。各 种类型的仿真工具本质上都是依托于 jtag 接口12完成实际工作,所不同的是与宿 主机的连接方式,以及由此带来的性能和使用上的差异。使用仿真器进行烧写,其 与宿主机及目标板之间的连接关系大概如图 1.1 所示: 宿主机 通信端 x转化硬件 目 标 板 jtag 并口、串口、网口等 图 1.1 仿真器连接使用图 由图 1.1 可以看出,仿真器在宿主机和目标板之间起到信号转化的功能。宿主机 的框 x 指代仿真器与宿主机的可能的不同连接方式。正是连接方式的不同造成了仿 真器的软硬件方面及各自的性能差异13。下面就按照连接方式的不同,对仿真器进 行简单的说明: 1并口连接方式 使用宿主机的并口14与仿真器进行连接,以并口作为调试通信手段。由于并口 变得越来越不那么重要,笔记本很少带有并口,甚至有些台式机也不再提供并口, 所以这种方式有一定限制。另外使用并口烧写速度较慢15,所以并口仿真器产品不 是很多,并口 multi-ice arm16仿真器是其中一个类型。它使用 arm 官方的 multi-ice server,兼容 multi-ice,采用 rdi17 (remote debug interface)接口设计, 支持 ads1.2、sdt2.51、rvds18 (realview developer suite)、multi2000 和 iar ewarm19等众多集成开发环境。 华中科技大学硕士学位论文 华中科技大学硕士学位论文 3 2网口连接方式 为了提高仿真效率,越来越多的仿真器开始使用网口进行连接。由于采用网口 进行调试命令的传输,调试速度得到很大的提高。bdi/1000/2000/3000 系列以及 armice 都是采用这种连接方式的典型代表。 bdi2000 仿真器有一个内置的 10 base-t 的以太网接口20,可以与宿主机进行 高速控制交互。它接收开发端的命令或数据然后以自己的尽可能快的方式作用于目 标板。它可提非常高的调试速度,在与目标机通信时速率可达 16mb/秒,程序下载 速率也高达 320kb/秒21,烧写速度可达 320kb/秒。armice 仿真器采用 10/100m 网口,支持的速度最高可达 800kb/秒22。 3usb 连接方式 随着 usb 总线的广泛使用,出现了越来越多的支持 usb 接口的仿真器产品。 该类仿真器不仅具有速度上的优势,同时还具有其它连接方式不具有的特点。它可 实现即插即用23,使用方便;无须外接电源24,可由 usb 总线直接供电;具有很好 的扩展性,避免发生端口资源争抢现象。jlink、ez-usb fx225和 ej-debug 等仿 真器是该种类型的代表。 jlink是iar公司的一款小巧的基于usb口jtag硬件调试器26。 它支持ads、 keil、iar ewarm、winarm27和 rvds 等几乎所有开发环境。j-link 与 iar 公司的嵌入式开发平台 iar ewarm 紧密结合,可以做到无缝连接,并且支持即插 即用。其最高内存下载可达 600kb/秒。ez-usb fx2 是英蓓特公司的一款使用 usb 接口的仿真器,它符合 usb2.0 规范,提供全部传输类型(等时、批量、中断、控制 传输) ,最高数据传输率可达 56mb/秒。 4串口连接方式 由于串口普遍存在于各类系统中,所以自然也存在使用串口进行连接的仿真器。 但是,使用串口一方面没有什么速度优势,另一方面,串口通常会用作目标板与开 发端通讯的手段,比如接收一些命令,打印调试信息等等。bdi2000 提供对该类型 链接方式的支持28。 1.2.2 硬件烧写工具硬件烧写工具 硬件仿真器性能出众29,配置灵活,支持体系结构众多的处理器,可实现对许 多类型的存储芯片进行操作。比如 abatron30公司的 bdi2000 仿真器可以通过 华中科技大学硕士学位论文 华中科技大学硕士学位论文 4 rs232 串口或者 10m 以太网连接宿主端;与目标板的通信速率达到 16mb/秒31,程 序下载速率高达 320kb/秒;它可以进行各种型号闪存的在线编程,支持广泛的调试 器,rtos32 (real-time operating system)和主机环境33 (windows 和 linux)。支持 的处理器架构包括34从 powerpc、xscale35、arm、mips、coldfire、arm11、 ppc85xx36、ppc83xx 到 ips32/637。硬件仿真工具具有以下方面的特点: 1处理器硬件:仿真器通常具有非常强的仿真能力,这不仅是因为它使用了高 速的通信端口, 更重要的是, 它使用了特殊的处理器来完成对目标板 jtag 时序的操 作。bdi2000 仿真器内部使用的微处理器是摩托罗拉公司的 mc6836038。ez-usb fx2 仿真器使用 cypress 公司的 cy7c68013-128ac 芯片处理器39。 2闪存操作:硬件仿真器一般都具有对 flash 存储器的在线编程能力。因为 flash 编程操作是嵌入式开发中一个必需的阶段。仿真器实现对 flash 的烧写有 两种方法 40。第一种是首先使用仿真器将一个代理程序写入到目标板上并启动该代 理程序,之后在宿主机上与代理程序通信来完成目标代码的 flash 写入工作;另一 种是使用仿真器直接将代码写入目标板。图形化调试器 axd debugger41集成的 flash downloader42工具,就可以按照第一种方法实现 flash 的写入操作。 3调试协议:硬件仿真器一般都支持某种调试协议,以便于与宿主机上的集成 开发环境37 (integrated development environment, ide)协同工作。 使用较多的是 arm 公司的 rdi 协议,它用于嵌入式系统的远程调试。该协议经常出现在为 arm 处理 器开发的 ide 的调试模块中,如 ads1.2、sdt2.51 rvds、multi200023和 iar ewarm 开发环境。由于基于 arm 的处理器广泛非常使用,所以几乎所有常用的硬 件仿真器声称自己完全兼容 rdi 协议。 1.2.3 软件烧写工具软件烧写工具 硬件仿真器强大功能,但价格非常昂贵43,不利于较大规模的使用。所以,存 在不少软件仿真器。软件仿真器其实是运行在宿主机中软件调试代理,它负责解释、 执行调试器的调试命令。 软件仿真工具也需要通过宿主机的某个端口对目标板进行控制,其工作方式与 图 1.1 比较相似,但中间起连接作用的是硬件转化器而不是硬件仿真器。硬件转化器 负责将在宿主机和目标板之间进行信号的转化。原则上讲,宿主机可以使用串口、 华中科技大学硕士学位论文 华中科技大学硕士学位论文 5 并口、网口和 usb 等进行连接,但考虑到实现的难易程度,并口相连的方式得到了 最广泛的应用。 按照维护者的不同,仿真软件工具可分为两类,一类由开发板生产商自己提供。 开发板(或试验开发板)生产公司从降低用户成本考虑,有时会提供一套包括仿真 软件的开发软件组件。 博创公司随开发板的提供 uarmjtag2.0 调试代理软件就属于该 类43。uarmjtag 完全支持 rdi1.5.1 调试协议,可以和 sdt2.5.1、ads1.2 等开发环 境配合使用,支持 arm7/9 系列处理器,具有对 flash 编程功能32。 另一类是由开源组织或个人维护。前者在 unix/linux 环境下比较常见,如与 gnu/gdb 调试器配和使用的仿真软件 multi-ice-gdb-server。该服务软件要配合 multi-ice 才能使用。linux 环境下还有一个叫做 jtager33的仿真服务软件。它是 一个运行在宿主端 linux 环境下的简易调试软件,它有自己的用户接口,可以独立 完成读写处理器寄存器、设备寄存器、内存及固态存储设备。 h-jtag34是 windows 平台下由个人维护的调试代理软件,其功能和 multi-ice 类似,包括两个工具软件:h-jtag server 和 h-flasher。分别用于实现调试 代理和 flash 烧写功能。该软件符合 rdi1.5.1 远程调试协议,可以与支持该协议 的调试器协同工作, 同时支持 wiggler, sdt-jtag 等用户自定义 jtag 调试板35。 1.3 课题主要研究工作课题主要研究工作 本文尝试实现一个基于 jtag 的并行烧写工具,在保留了硬件烧写工具优点的 基础上还具有并行处理、图形接口、不依赖于宿主机等特点。该烧写工具以 arm920t 内核对调试的支持为基础,所以本文首先对其进行了简单的介绍,然后 给出烧写工具的总体软硬件设计,并对软件模块进行详细介绍。具体说来,本课题 将要完成的工作主要有以下几点: 1在 c/os-ii 内核基础上完成分时调度内核的改造。 根据烧写工具的设计需求,对 c/os-ii 内核进行了调度策略的修改,实现一个 有 4 个优先级的分时调度系统。修改过程尽量保留系统其它模块的原貌和完整性。 修改后的内核可以较好的支持烧写工作的并行调度。 2实现了基于 jtag 的并行烧写能力。 首先在驱动层的基础上实现了 jtag 操作接口,向上层提供读写数据寄存器, 华中科技大学硕士学位论文 华中科技大学硕士学位论文 6 写指令寄存器,设置扫描链及重启等功能函数。然后在 jtag 接口基础上,根据 flash 操作规程,使用内核层提供的服务实现了对 flash 的并行烧写功能。 3实现了一个易用交互的用户接口。 设计实现了基于小键盘和 lcd (liquid crystal display)显示屏的菜单式用户接 口,可满足用户与系统进行简单交互操作的需要。 华中科技大学硕士学位论文 华中科技大学硕士学位论文 7 2 烧写工具整体设计烧写工具整体设计 本章重点描述并行烧写工具的整体设计。首先介绍实现烧写工具的基础知识, 包括 jtag 标准内容,arm920t 内核对 jtag 标准以及烧写功能的支持;随后描述 烧写工具的硬件组成和软件结构,并对软件的“驱动层” 、 “内核层”和“应用层” 进行简单的描述。 2.1 相关知识介绍相关知识介绍 2.2.1 jtag 标准标准 1测试存取端口 tap 测试存取端口 tap 是一个通用控制接口35,通过它可以访问芯片提供的数据寄 存器和指令寄存器。jtag 标准规定 tap 最少要提供三个输入信号和一个输出信号, 分别描述如下: (1) 时钟输入信号 tck 20 (test clock):提供一个独立的、基本的时钟信号; (2) 模式选择信号 tms 20 (test mode select):用于控制状态机状态的转换; (3) 数据输入信号 tdi 20 (test data input):数据输入的接口; (4) 信号输出信号 tdo 20 (test data output):数据输出的接口。 2tap 控制器 tap 控制器(tap controller)是一个有限状态机,包含 16 个标准状态20,分别为 test-logic reset、run-test/idle、select-dr-scan、capture-dr、shift-dr、exit1-dr、 pause-dr、exit2-dr、update-dr、select-ir-scan、capture-ir、shift-ir、exit1-ir、 pause-ir、exit2-ir、update-ir 20。 3功能寄存器 (1) 指令寄存器:用于存放当前指令操作码; (2) 测试数据寄存器:用于保存一些特殊的、用户测试目的的数据; (3) 旁路寄存器:用于在 tdi 与 tdo 之间提供最短的通路; 华中科技大学硕士学位论文 华中科技大学硕士学位论文 8 (4) 边界扫描寄存器:边界扫描寄存器也称移位寄存器,也就是 jtag 链; (5) 标识寄存器:用于保存芯片相关信息,如厂商标号等。 2.1.2 arm920t 烧写支持烧写支持 arm920t 的 tap 控制器总共可以支持 3241条扫描链,扫描链 0 到 15 由 arm 自己保留使用,其它留作扩充。可以通过寄存器 screg4:0中的值来获取当前使用 的扫描链。测试存取控制器 tap 初始化时,默认使用扫描链 3。 1扫描链 0:用于设备间的测试和对核心进行测试。 2扫描链 1:用于调试,该扫描链的数据线 dd31:0以及指令数据线 id31: 0单元也可以用于外部测试 extest。 3扫描链 2:主要用于访问 embeddedice 内部的寄存器。 4扫描链 3:通常处于封装芯片的外围,用于对芯片和外界间的通信进行监测。 不同的芯片厂商对该扫描链的定义有较大不同,如三星的 s3c2410 芯片该链链长为 471,而 intel 的 sa-1100 长度只有 2922。 arm920t 支持所有 jtag 标准规定的公有指令,并扩展了私有指令,下表列出 了常用的 jtag 调试指令。 表 2.1 arm920t 调试常用的 jtag 指令 指令名称 二进制编码 功能说明 extest 0000 该指令将通过scan_n选定的扫描链置于外部测试模式。 scan_n 0010 该指令用于选择需要访问的扫描链。 idcode 1110 该指令用于读取 cpu 的 id。 bypass 1111 该指令用于选择旁路寄存器 bypass。 2.2 硬件结构硬件结构 实现的并行烧写工具是软硬件的组合体。接下来的两节将分别描述这两部分内 容。烧写工具的硬件主体是一个电路印刷板,它使用三星公司的 s3c2410 微处理器, 带有内存和 nand 型号的 flash,可以通过 uart、网络接口或者 usb 与外部通 华中科技大学硕士学位论文 华中科技大学硕士学位论文 9 信。硬件同时带有一个 lcd 显示屏和小键盘。硬件整体结构如图 2.1 所示: 烧写工具烧写工具 gpio 320240 lcd显示屏 键盘 ram flash 串 口 网 口 usb gpio s3c2410 图 2.1 硬件组成图 lcd 显示屏分辨率为 320240,小键盘包含数字键,上下左右四向键和确定取 消功能。处理器芯片 s3c2410 采用 arm920t 为核心,主频可达 200mhz 以上。 开发端可以通过小键盘和通信端口对烧写工具进行控制。烧写工具接收用户的 烧写命令, 做适当处理后通过 gpio 口进行针对目标板的实际操作。 实现后的烧写工 具与开发端和调试目标端的链接情况如图 2.2 所示: 物理连线 烧写工具 gpio gpio 目标板 通信端口 开发 端 jtag lcd 小键盘 目 标 板 jtag 图 2.2 烧写工具与开发端连接图 2.3 软件结构软件结构 烧写工具的软件总体上可以分为 3 个模块层次,分别是“驱动层” , “内核层” 和“应用层” 。 “驱动层”负责硬件驱动功能,它提供对硬件的有效管理,负责向“内 核层”报告这些硬件各种状态。 “内核层”包括内核提供的基本调度、通信等功能, 它根据从“驱动层”获得的硬件状态来驱动“应用层” 。 “应用层”以任务的形式实 华中科技大学硕士学位论文 华中科技大学硕士学位论文 10 现,受“内核层”驱动,通过控制“驱动层”实现烧写功能。系统的整体结构如图 2.3 所示: 应用层 驱动层 核心层 硬件层 图 2.3 软件模块数据流图 由于 c/os-ii 内核不包含硬件驱动层,为了提供访问硬件的效率,将对硬件的 控制放在了应用层中,而不是通过操作系统间接的对其进行操作。这一点可以从图 2.3 中看出。整个软件系统以“应用层”为中心, “内核层”负责提供系统服务,其 功能类似一个特殊应用库。系统的详细模块结构如图 2.4 所示: lcd驱动键盘驱动uart驱动 用户接口 模块 uart命令解析 命令管理模块 flash命令模块 定时器驱动 内核模块 gpio驱动 控制 流 硬件层 驱动 模块 应用 模块 图 2.4 软件结构模块图 2.3.1 驱动模块驱动模块 驱动层包括定时器驱动, gpio 驱动, uart 驱动, lcd 驱动, 键盘驱动等模块。 驱动模块大多工作在中断模式下,且在应用层存在于其对应的任务。按照用途,这 些模块可分为同于输入的和用于输出的两个类型。前者包括定时器驱动,键盘驱动 和 uart 驱动等模块,它们联合起来驱动整个系统的运行。剩下的属于面向输出类 型,包括 lcd 驱动和 gpio 驱动模块。lcd 驱动模块用于向用户显示信息,gpio 华中科技大学硕士学位论文 华中科技大学硕士学位论文 11 驱动模块用于对外进行数据和控制的输出。 1键盘和 lcd 驱动模块:它们共同组成图形化用户界面的底层部分,向应用 层提供合适的访问接口。键盘驱动模块以中断方式工作,当用户按下键盘时,该模 块唤醒应用层的某个对应任务。该任务调用 lcd 驱动模块更新用户界面,同时向命 令管理模块发送通知消息。 2uart 驱动模块:该模块以中断方式工作,用于控制 uart 硬件部分。它接 收并回显用户输入的字符,当用户按下回车键时发送一条消息,唤醒应用层的命令 解析任务。配合应用层相应任务,该模块可以向用户提供基于 uart 的命令控制。 3硬件定时器驱动模块:该模块用于对硬件定时器进行管理,包括初始化,提 供时钟中断处理函数。时钟中断是烧写工具实现分时调度的直接驱动源。 2.3.2 内核模块内核模块 本课题设计实现的烧写工具具有并行的处理能力,并行的意思是指烧写工具实 现时会为图 2.2 中的每一个 gpio 口创建一个烧写任务, 这些任务既可独自工作也可 并发的同时工作而不影响其它 gpio 任务的完成。在图 2.2 中,如果 gpio 端口对应 的两个烧写任务同时工作时,它们将交替的占用处理器资源。 要实现上述并行功能,系统需要提供对分时调度的支持,这通常属于操作系统 的范畴。使用源代码公开的操作系统内核是比较好的选择,可能的选择有 linux 和 c/os-ii,但二者对本课题来讲都存在一些问题。linux 功能完善,但结构复杂,对 硬件的操作需要由内核层完成,可能会降低对硬件的操作效率;不过,或许可以将 尽可能多的工作放在内核中完成,但这种想法没有进行过验证。相反,c/os-ii 恰 好是操作系统的另一个极端,它仅提供有限的核心功能,所以结构非常简单。由于 不存在硬件驱动层,故可以直接对硬件进行操作,这样可以尽可能的提高操作 gpio 的效率。 由于烧写功能的实现最后都会转换会对 gpio 的操作, 所以这种能力对烧写 工具具有重要意义。故此本课题选择采用 c/os-ii 内核,但是该内核不提供分时调 度,处于同样级别的多个烧写任务不能分时的共享处理器,必须对其调度算法进行 改造。 改造后的内核层提供操作系统的基本功能,包括任务管理,同步和通信,内存 管理和调度功能等。它既要向“应用层”提供系统服务又要合理分配处理器资源。 华中科技大学硕士学位论文 华中科技大学硕士学位论文 12 内核层是在对 c/os-ii 内核的修改的基础上实现的。主要是将 c/os-ii 内核原有的 实时调度改为分时调度。其它模块尽量保持不变,详细内容将在操作系统移植章节 进行介绍。 2.3.3 应用模块应用模块 应用层主要用于完成烧写工具的各种需求功能,如对闪存的各种操作。因其所 有功能模块都以任务的形式实现,所以严重依赖于系统中的内核层。系统几乎为每 个关键硬件实现一个对应的任务,如 uart 驱动模块与命令解析模块相对应。图 2.4 中深色的长方形都对应一个功能明确的任务。这些任务大部分时间处于睡眠状态, 等待某些特定事件,一旦条件得到满足,就会被“内核层”唤醒以完成相应处理, 之后再次睡眠等待重复以上过程。在图 2.4 中,每个任务等待的事件由末端带圆圈的 箭头的一端标出。如“用户界面任务”等待键盘驱动模块发来的消息。 1命令管理模块:该模块统一管理用户的各种命令并将命令发送到合适的执行 任务模块。由于同时存在键盘和 uart 两种命令接口,这种统一管理的方式可以保 证命令的正确执行。 2flash 命令模块:该模块主要包含 flash 命令的执行部分,它与系统中的 其它模块如 jtag 操作接口模块, 引脚处理器模块等有紧密联系。 各模块间的关系如 图 2.5 所示: flash操作模块 引脚处理模块 jtag操作接口层 图 2.5 flash操作接口调用图 由图 2.5 可看出,flash 操作模块通过调用引脚处理模块和 jtag 操作接口向 上层提供一个 flash 操作接口,该接口包含块擦除、页烧写等基本操作。详细内容 将在第四章的烧写实现技术中进行介绍。 整个系统由外部事件驱动运行。这些外部事件分为两类:周期性的定时器中断 事件和其它各种硬件中断事件。 前者是实现分时调度的保证; 后者主要有键盘、 uart 华中科技大学硕士学位论文 华中科技大学硕士学位论文 13 和 usb 等。这些硬件以事件的方式激活相应的任务,进而完成应用功能。外部事件 和任务的关系如下所示: (1) 键盘中断用户接口任务命令管理模块flash 命令模块; (2) uart 中断uart 命令解析命令管理模块flash 命令模块; 定时器中断事件用于驱动操作系统内部对任务时间的计算,属于系统服务。由 上可知,中断系统在系统的整体具有重要的作用,故烧写工具的包含有简单高效的 中断模块。 2.4 本章小结本章小结 本章内容由两部分组成。第一部分主要介绍烧写工具相关的基本知识,首先简 单描述了 jtag 标准的组成部分:tap 控制器,数据寄存器和指令系统,然后具体 描述 arm902t 微处理器核心对 jtag 及标准的实现和扩充。 第二部分为本章重点内 容,主要对烧写工具的结构介绍。首先描述了烧写工具的硬件组成,及其使用情况; 最后介绍了烧写工具的软件结构,并重点描述了软件模块的三个组成部分驱动层, 内核层和应用层的功能。 华中科技大学硕士学位论文 华中科技大学硕士学位论文 14 3 操作系统改造操作系统改造 分时调度系统是烧写工具并行工作的软件基础,本章将详细描述该分时系统的 实现过程。由于该分时系统是通过对 c/os-ii 内核进行改造而实现的,所以本章首 先给出改造的总体目标、原则和内容等,然后详细介绍操作系统就绪表、任务控制 块和事件控制的改造过程。 3.1 改造说明改造说明 c/os-ii 内核大部分代码使用标准 c 语言进行编写, 所以具有很好的移植性37。 分时调度系统对于烧写工具的软件体系结构的“内核层” ,它是在 c/os-ii 内核基础 上进行改造得来,本节对改造目标、原则、内容等进行简单的介绍。 1改造目标 “内核层”需要向烧写工具提供一些重要的系统服务,包括并行调度、进程通 信、内存管理等。c/os-ii 内核已经实现了上述系统服务,但其实现的抢占式实时 调度器并不符合烧写工具的对分时性的要求,所以改造目标就是实现一个分时调度 器,同时尽量保持 c/os-ii 其它功能模块的完整性。 通常,c/os-ii 会在调度器工作前创建系统中所有可能用到的任务,并且在系 统运行过程中一般不删除任务,所以引起系统调度的事件主要是外部中断,包括时 钟中断和其它硬件中断。总体来说,c/os-ii 的调度时机发生在以下几种情况: (1) 进程调用各种形式的延迟函数主动将自己挂起; (2) 进程访问尚不可用的共享资源时将自己挂起; (3) 进程的创建和删除时; (4) 中断返回时; 为了尽可能与原系统保持一致,实现的分时调度内核依然是可抢占的,即在每 次中断返回前进行任务切换检查。这样,在上述调度时机的基础上只要添加一个调 度监测点就可实现分时调度: (5) 当前任务时间片耗完。 华中科技大学硕士学位论文 华中科技大学硕士学位论文 15 2改造原则 基于上面提到的目标,对应有一些改造原则如下所示: (1) 使用分时调度器替代基于优先级实时调度器:为了降低系统改造的难度,系 统只保留一个调度算法; (2) 保留原来的时间管理和内存管理的实现机制: 这样就可以尽可能多的使用系 统原来的功能; (3) 只改造将会使用到的功能,删除所有不会用到的功能:比如只改造消息邮 箱、消息队列和信号量三种同步、通信方法,而删除信号量标志方法。 3改造内容 内核改造主要涉及到就绪表、任务控制块和事件控制块等数据结构,以及与其 相关联的函数,几乎所有的改造工作都在源代码文件 os_core.c 和 os_task.c 中进行。 另外,在头文件 ucos_ii.h 中按照改造原则进行配置以获取一个尽可能精简的内核。 整个改造过程的思路可以描述为:从目标(分时系统)出发,依次改造受此影响的 数据结构及其函数。这是一个逐级深入的过程,可用图 3.1 进行简单的描述: 就绪表 分时 系统 分时 系统 任务 控制块 事件控制块 图 3.1 目标与内核结构影响图 图 3.1 说明了目标影响内核中数据结构(就绪表,任务控制表和时间控制表)的 整个过程。箭头表示箭头尾部的项目的改动会影响到箭头指向的项目。如目标的改 动分时系统要求就绪表进行相应的改动;同样,就绪表与任务控制块,就 绪表与时间控制块和任务控制块和时间控制块都有这样的改动依赖关系。同时,这 些数据结构的改动会带来相应函数的变动。 本章接下来的内容依照图 3.1 中所述的关系进行展开。另外,由于 c/os-ii 一 直在不断的向前发展,这里的所有改造工作基于的内核版本为 v2.76。 3.2 任务就绪表改造任务就绪表改造 c/os-ii 使用位图的方法来管理系统中所有就绪任务。内核中定义有两个变 华中科技大学硕士学位论文 华中科技大学硕士学位论文 16 量, 分别为 osredygrp 和 osrdytbl,每个任务都在其中占有对应的比特位。分时 系统将使用新的数据结构对就绪任务进行管理。 1调度队列数据结构 为了使系统中具有一定的灵活性和适应性,分时内核的实现采用优先级调度策 略。为此,系统使用含有 4 个级别的队列来管理就绪任务,队列之间有不同的优先 级,队列内部优先级相同。这样系统就含有 4 个优先级,那么队列间采用优先级调 度,队列内采用基于时间片的轮转调度。系统使用如图 3.2 所示的数据结构来管理系 统中的就绪任务。 os_prio_drvtask_0_1 ostcbrdyhdrostcbrdytail 0 1 2 3 0 1 2 3 os_prio_sys os_prio_usr os_prio_idl os_prio_drv os_prio_sys os_prio_usr os_prio_idl task_0_2task_0_3 task_1_1task_1_2 task 2_1task_2_2 空闲任务 图 3.2 调度队列数据结构图 图 3.2 中 ostcbrdyhdr和 ostcbrdytail均为长度为 4 的任务控制块的指针 数组,ostcbrdyhdri指向 i 队列的队首任务控制块,对了中的其它任务通过任务 控制块的相关指针连接起来。同时,为了加速执行就绪任务的插入操作使用 ostcbrdytaili指向 i 队列的最后一个任务控制块。 由于 c/os-ii 不提供对硬件驱动的支持,也没有实现文件系统等高级功能,可 以认为是微内核操作系统,所以按照优先级从高到低定义了称为 os_prio_drv、 os_prio_sys、 os_prio_usr 和 os_prio_idl 的 4 个队列。 这 4 个对了分别对应 于系统驱动层、系统功能层、用户程序层和空闲任务使用。用于空闲任务的 os_prio_idl 层只能含有一个 idle_task 空闲任务,由于 idle_task 总是处于就绪态, 这样可以保证就绪队列中永远都含有就绪任务。 2就绪队列操作函数 对该数据结构的进行操作的函数主要有: (1) ostaskrdyqadd():用于向就绪队列中添加任务; (2) ostaskrdyqdel():用于从就绪队列中删除任务; (3) ostaskrdyget():从就绪队列中返回下一个最适合运行的任务。 当某个任务重新进入就绪态时,函数 ostaskrdyqadd()将被调用,它负责将该 华中科技大学硕士学位论文 华中科技大学硕士学位论文 17 任务添加到它所属就绪队列的尾部。另外,当前进程的时间片用完时会被放入它所 在就绪队列的队尾,此时同样调用该函数。其实现代码如下所示: void ostaskrdyqadd(os_tcb *ptcb) os_tcb *phdr, *ptail; ptcb-ostcbbdyprev = nil_tcb; /* 参数检查 */ ptcb-ostcbbdynext = nil_tcb; phdr = ostcbrdyhdrptcb-ostcbprio; ptail = ostcbrdytailptcb-ostcbprio; if (ptail = nil_tcb) /* 安全检查 */ ostcbrdytailptcb-ostcbprio = ptcb; ostcbrdyhdrptcb-ostcbprio = ptcb; else ostcbrdytailptcb-ostcbprio-ostcbbdynext = ptcb; ptcb-ostcbbdyprev = ostcbrdytailptcb-ostcbprio; ostcbrdytailptcb-ostcbprio = ptcb; 该函数使用 ostcbrdytail 来加速添加操作的完成。 函数 ostaskrdyqdel()执行 相反的功能,这里就不再给出其实现代码。函数 ostaskrdyget()的实现很简单,在 就绪队列表中从 os_prio_drv 到 os_prio_idl 顺序查找非空队列, 然后返回位于 队首的任务。由于就绪队列中至少有一个 idle_task 存在,所以该函数总是能够正确 返回。 3函数 ostimetick 实现分时调度系统的关键是时钟中断和任务时间片的处理。其核心是在每个时 钟中断到来时对当前任务的时间片进行更新,并且在合适的时机进行任务切换。 在 c/os-ii 中,函数 ostimetick()用于在每次时钟中断到来时完成与该中断相 华中科技大学硕士学位论文 华中科技大学硕士学位论文 18 关的系统任务,所以将对时间片的处理放在这里处理比较合适。在每次时钟中断到 来时函数 ostimetick()对对任务链表进行一次遍历,主要工作是对延时任务的处理。 为了实现分时调度,在保留这些功能的基础上,只需添加对时间片的处理即可。 void ostimetick (void) /* 内核级时钟中断处理函数 */ /* 省略与原函数相同的部分 */ while (不是 idle_task) if (是当前进程) 时间片减 1; if (时间片为 0) 更新当前进程的时间片; 将该任务移到所在队列的队尾; 该函数仍然执行一个循环,遍历系统中的所有任务,不过循环结束的条件是 idle_task 任务。因为系统启动时,idle_task 是系统建立的第一个任务,它将被放在系 统任务表的最后边,所以可以有此便利。函数 ostimetick()比原来多了对当前任务 的判断,如果是当前任务,则递减时间片。如果时间片用完还要将当前任务放到就 绪队列的尾部。所有这些操作都基于任务控制块中的成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保安三级试题全集与答案解析
- 应用分析能力考试试题与答案
- 广东省肇庆市九年级历史下册 第一单元 2 对社会主义道路的探索教案 新人教版
- 高中历史人教版(新课标)选修1历史上重大改革回眸第四单元王安石变法1社会危机四伏和庆历新政教学设计
- 土木识图测试题及答案解析
- 2026年周围神经病诊疗要点题库(含答案)
- 广东省肇庆市九年级历史下册 第一单元 2 对社会主义道路的探索教学设计 新人教版
- 2026年宜宾驾校科目一试题及答案
- 基于生活体验的小学高段创意写作教学备课教案
- 2026年线路通道隐患排查员岗位题库
- 中国铁路成都局集团有限公司2026年度招聘高校毕业生(二)历年真题汇编附答案解析
- 放射治疗毒性分级标准操作手册
- 电能表错接线培训课件
- 民宿员工聘用合同范本
- 主井提升培训课件
- 浙江金石亚药医药科技有限公司迁扩建项目环评报告
- 酒店安全巡查日常检查记录表
- 招商岗位测试题及答案
- 医院后勤管理与设备职责
- 周三多-管理学:原理与方法(第七版),第三章
- 无人机遥感图像融合
评论
0/150
提交评论