您的位置:首页 > 运维架构 > Linux

打造嵌入式领域的Linux平台! ----TOPPERS项目组的目标

2010-03-07 17:54 190 查看
0.Introduction

一说起操作系统, 我们的脑海马上就会闪出Windows, 据说Windows已经被安装到了1.5亿台计算机上.
然而在这里我还要提到另一种操作系统, 据估计这种类型的操作系统已经被安装到了全球30亿到40亿台家用电子产品中.
如果普及程度按照机器数量来计的话, 它的普及程度竟然是Windows的数十倍. 这款操作系统叫做TRON, 是由我们的邻国日本自主研制开发的.

1. What is TRON ?

1984年TRON系统问世的时候, 日本业界将其称为一款可以打破微软垄断地位的自制软件,
认为这种系统将可使日本计算机企业不再承担必须向微软购买Windows系统时支付的费用. 然而这一美梦却在1989年被打碎,
当时美国方面得知日本政府准备把TRON安装到教育用计算机中后就威胁说要将TRON列为不公平贸易壁垒之一.
参与TRON项目的企业因为担心失去美国市场而退出了该项目. 尽管面向PC的TRON操作系统就此一蹶不振,
TRON项目却从此得以集中精力去研究和发展面向嵌入式机器的操作系统ITRON.

严格说的话, ITRON并不是一款操作系统, 而是一个操作系统的规范. TRON项目小组将自己的研究成果以规范的形式公开, 任何公司和个人都可以无偿得到这份规范, 根据规范来编写自己的操作系统, 并自行决定该操作系统的用途.

为了尽可能推广ITRON规范, 使其能够适用于各种硬件环境, 最大限度发挥硬件环境自身的性能,
TRON项目组在规范制定过程中采取弱标准化的原则, 即对于接近硬件的部分不作严格规定, 比如中断处理部分. 时至今日,
ITRON规范操作系统在日本仍能占据将近5成的市场份额, 弱标准化起了很大的作用.

然而随着嵌入式系统的高功能,网络化和高度HMI化, 软件开发和调试都变得越来越复杂, 软件的可重用性显得越来越重要.
而弱标准化的原则导致ITRON操作系统版本林立, 中间件软件缺乏可移植性和可重用性. 对于整个产业界来说,
很多开发成为重复开发,极大地浪费了资源.

在日本嵌入式行业具有较大影响力的 开源社区/非赢利组织TOPPERS项目 针对这一状况给出了回答.

2. Why TOPPERS

针对ITRON操作系统版本混乱,软件资源复用困难的局面,
日本名古屋大学研究生院的高田广章教授牵头成立TOPPERS项目.该项目组集合学校,企业以及社会上有识之士的力量,
最初的目标是确立一个ITRON规范操作系统的决定版本,
使之成为嵌入式领域的Linux,让各种嵌入式应用程序以及中间件都能在一个确定的平台上自由流通.

TOPPERS是Toyohashi OPen Platform for Embedded Real-time Systems的缩略.
以Toyohashi(丰桥)为名是因为高田教授在项目组成立之初(2000年11月)在日本丰桥技术科学大学任教的缘故.
2003年9月,为了扩大影响力, TOPPERS申请成为NPO(Nonprofit Organization)法人.

TOPPERS/JSP(Just Standard Profile)内核是项目组的第一个开发成果, 它完全遵循 ITRON4.0规范,
完全开源. 代码可读性强, 容易移植, 具有高性能与占用RAM少的特点. 此外, 提供Linux以及Windows的仿真环境,
使开发者在没有开发板的前提下也能进行开发和调试. 值得一提的是, TOPPERS/JSP内核的标准开发环境完全用GNU工具链构建,
因此从内核到开发环境, 开发者可以构建一个纯粹免费的开发平台.

除了立足于ITRON规范的开发以外, 项目组的另一个目标是吸收ITRON规范的精华, 摒弃ITRON规范中相对落后于时代潮流的部分,
发展和创造全新的嵌入式实时内核. 该内核就是 TOPPERS/ASP(Advanced Standard Profile),
是在TOPPERS/JSP内核的基础上扩展改良而成的, 它主要面向要求高可靠性,高安全性以及高实时性的嵌入式系统, 就软件规模而言,
这样的系统的代码大小在几十KB和1MB之间.

项目组将TOPPERS/ASP内核定位于基础中的基础, 各种新内核都以ASP扩展的形式出现. 比如项目组的另一个开发成果
TOPPERS/FMP(Flexible Multiprocessor Profile)内核, 就是以ASP内核作为基础的.
FMP内核对应多核处理器, 其设计思想其实非常简洁明了: 任务(task)在设计阶段被分配处理器; 内核在运行时不自行更改任务所属的处理器;
内核提供在运行时可以更改任务所属处理器的API.

除了各种内核之外, TOPPERS项目组还开发各种中间件, 比如TCP/IP协议栈, USB协议栈, 面向汽车系统的CAN/LIN通信模块, 文件系统等等.

3. About JSP

在这里我们简单介绍一下作为TOPPERS项目组的第一个开发成果的JSP内核.

内核的灵魂是任务调度. 在只有一个CPU的情况下, 某个时间点能够运行的只有一个任务. 因此任务调度表现为多个任务竞争胜者获得CPU资源这样一个过程.

ITRON规范基于弱标准化的原则,很多地方都作了非常宽松的处理, 但是对于任务调度这一块却作出了非常严格和明确的规定:
任务调度基于任务的优先级,以抢占方式进行;对拥有相同优先级的任务,则以FCFS(First Come First
Served)方式进行调度.用通俗一点的说法就是: 优先级高的任务是王; 优先级相同的任务中, 先举手的是王;
内核完全容忍王对CPU资源的完全独占----即便是其它任务因此丧失运行的机会.

根据一定的规则决定哪一个任务获得CPU资源的程序就叫调度机构.可以说, OS就是一段以调度机构为中心再加上若干从属功能的程序.

在根据调度规则进行任务调度的时候,操作系统需要完成中止任务与重开任务的工作.
比如从任务A切换到任务B这样一个简单的过程,实际上包含了两个工作: 1)中止任务A的运行;
2)重开任务B的运行.被中断运行的任务A将在再次获得运行权利的时候重新运行.
这样一个任务切换的过程被称之为任务分配(dispatch),内核中完成这个工作的程序就叫做任务分配机构(dispatcher).任务分配在内核中
同样占据着非常核心的地位.

ITRON规范将任务获得运行权利的状态定义为运行状态(RUNNING), 同时对未获得运行权利的其他各种状态作出了明确定义.
进入运行状态之前的一个状态被称为就绪状态(READY). 任务虽然已经做好运行的准备,但由于此时CPU资源被其他的高优先级别的任务所占据,
暂时无法获得运行权利.

此外还有等待状态(WAITING). 比如任务等待来自其它任务(或者中断)发送过来的数据,数据过来之后才会继续下一步的运行;
接收到数据之前的这个状态就是等待状态. 等待状态不会一下子迁移到运行状态, 而是先过渡到就绪状态, 在CPU出现空闲的时候再迁移到运行状态.

这三个状态是任务最基本的状态. 理解了这三个状态之间的转换关系, 就能够把握任务调度的过程.

除了任务调度以外, 内核的另一个重要工作就是中断服务. ITRON规范并不对与微处理器架构密切相关的中断服务的实际过程作出明确的抽象.
然而处理器架构虽然千差万别, 但是大体流程还是有其共通之处.
因此TOPPERS/JSP内核在内核移植文档(config.txt)中给出了一个中断服务流程.

当中断发生时, 内核首先对现场进行保护, 也就是将各寄存器中的数据进行备份. 其次内核判断是否需要切换上下文环境(context).
JSP内核定义了两种上下文环境: 1)任务上下文; 2) 非任务上下文. 中断服务运行于非任务上下文环境. JSP内核支持嵌套中断,
也就是在中断服务中响应别的中断. 在嵌套中断的情况下, 内核已经处于非任务上下文环境, 从而无须进行上下文切换工作.
接着在非任务上下文环境下, 内核调用相应的中断处理程序(interrupt handler), 中断处理程序由应用程序开发者编写,
并在内核启动之前注册?到内核. 在中断处理程序运行完毕之后, 内核判断是否需要进行上下文环境切换. 如果此前的中断并非嵌套中断,
则切换回任务上下文环境. 然后, 内核进行现场恢复工作, 也就是将之前备份的数据载入各个寄存器. 最后, 程序计数器返回被中断处,
中断服务结束.

最后再谈一下JSP内核的一个特色----内核资源的静态生成. 内核除了任务调度以及中断服务以外, 还需要完成资源管理工作.
内核资源包括任务, 信号量, 内存池等等. 内核用ID来识别和管理资源. 很多OS都支持资源的动态生成,
为什么JSP内核要选择只支持静态生成呢? 这主要是因为JSP内核主要面向小规模的嵌入式系统. 在这样的系统里, ROM的容量较为充裕,
而内置RAM容量则显得相对寒碜. 使用外置RAM也是思路之一, 但是在较小规模的系统里,
芯片的输入输出管脚被占用意味着需要付出无法使用某些内置功能的代价. 因此在JSP内核的其中一个设计思想就是尽量不使用RAM.
而资源的静态生成就可以尽可能将资源的一些相关信息放到ROM中, 从而减少了RAM的使用量.

Appendix

1)Linux上构建JSP内核仿真环境

a. 下载jsp内核:

http://www.toppers.jp/download.cgi/jsp-1.4.3.tar.gz

b. 解冻: tar xzvf jsp-1.4.3.tar.gz

c. cd jsp

d. mkdir test

e. cd test

f. ../configure C linux

g. make depend

h. make

执行 ./jsp ,出现如下信息, 则说明成功

-----------------------------------------------------------------------

TOPPERS/JSP Kernel Release 1.4 (patchlevel = 3) for Linux(posix-base) (Jan 15 2008, 22:36:53)

Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory

Toyohashi Univ. of Technology, JAPAN

Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory

Graduate School of Information Science, Nagoya Univ., JAPAN

System logging task is started on port 1.

Sample program starts (exinf = 0).

task1 is running (001). |

task1 is running (002). |

task1 is running (003). |

task1 is running (004). |

-----------------------------------------------------------------------

2)相关网址:

a. TOPPERS官方网站http://www.toppers.jp/index.html

中文版:http://www.toppers.jp/cn/index.html

英文版:http://www.toppers.jp/en/index.html

b. ITRON技术规范http://www.assoc.tron.org/eng/document.html

c. TOPPERS/ASP内核的技术解说http://www.nces.is.nagoya-u.ac.jp/NEXCESS/blog/

英文版http://www.nces.is.nagoya-u.ac.jp/NEXCESS/blog_en/

鸣谢TOPPERS项目组及TOPPERS中文工作小组的协助!

编者简介:钱冰,CSDN 特约记者。长期从事嵌入式软件系统设计开发工作。Linux、自由软件、实时操作系统以及空手道爱好者。目前学习及关注热点:嵌入式系统技术趋势、欧美日电子及软件企业经济走势、技术相关的财务及法律法规。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: