没有合适的资源?快使用搜索试试~ 我知道了~
底层工作者手册之嵌入式操作系统内核
需积分: 5 23 下载量 68 浏览量
2018-08-04
10:55:24
上传
评论 1
收藏 3.58MB PDF 举报
温馨提示
我在写本手册前没有任何有关操作系统内核的知识,有的仅仅 是简单的使用过 2 个操作系统的经验,也仅限于对操作系统应用层 一些功能的简单了解。我在写操作系统内核时也只能从这些应用经 验出发,参考一些资料,更多的是自己想办法用最顺其自然的代码 实现操作系统的这些内核功能。因此,你要相信,既然我能在此基 础上写出这个操作系统内核那么你一定也能看明白。 本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要 的是从原理的角度对操作系统的功能做了分析、设计,从无到有循 序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以 一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内 核的过程,这样的一个过程对你来说应该也是一个最好的学习过 程。 如果你有一定的 C 语言基础,并且对硬件也有稍微的了解, 那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、 扩展你需要的操作系统功能! 提供源码,讲述原理。作者写的很基础。
资源推荐
资源详情
资源评论
提供源码,讲述原理
从无到有,和你一起一步步编写实时嵌入式操作系统内核
操作系统内核也许并没有像你想象的那么神秘
底层工作者手册
之 嵌入式操作系统内核
Wanlix 操作系统内核
Mindows 操作系统内核
我在写本手册前没有任何有关操作系统内核的知识 , 有的仅仅
是简单的使用过 2 个操作系统的经验 , 也仅限于对操作系统应用层
一些功能的简单了解 。 我在写操作系统内核时也只能从这些应用经
验出发 , 参考一些资料 , 更多的是自己想办法用最顺其自然的代码
实现操作系统的这些内核功能 。 因此 , 你要相信 , 既然我能在此基
础上写出这个操作系统内核那么你一定也能看明白。
本手册不仅仅是从应用的角度介绍操作系统如何使用 , 更重要
的是从原理的角度对操作系统的功能做了分析 、 设计 , 从无到有循
序渐进一点点的增加操作系统的功能 , 并且每增加一个功能便配以
一个例子加以演示,让读者能立刻看到代码运行的结果。
本手册记录了我从对操作系统内核不了解到写出操作系统内
核的过程,这样的一个过程对你来说应该也是一个最好的学习过
程。
如果你有一定的 C 语言基础,并且对硬件也有稍微的了解,
那么我相信你一定会看明白本手册!也一定可以随心所欲的修改
、
扩展你需要的操作系统功能!
书并不只是简单的翻译文档
书可以写的让人看得更明白
1
前言
目前我所见的绝大部分介绍操作系统的书籍只是从应用的角度告诉读者应该如何使用
操作系统 , 而且相当一部分书籍只是把原有的用户手册整理了一下便出书了 , 这样的书籍只
能当做一本使用手册去查 , 从学习的角度来说意义不大 , 一不介绍实现背景 、 原理 , 二不介
绍应用例子 , 无法让读者深刻体会操作系统的用法 。 本手册最大特点是从操作系统的结构设
计 、 编码的角度讲述操作系统内核原理 。 本手册不是在操作系统写完后才写的 , 而是一边设
计一边编码一边编写 , 记录了操作系统从无到有的过程 , 讲解了操作系统实现的原理 , 只要
读者了解 C 语言,再对汇编语言和硬件稍微有所了解便能看懂本手册。
05 年 4 月,经历了漫长的学生时代我终于参加工作了!
在学校里接触了少的可怜的硬件开发 , 由于无人指导再加上本人做和尚撞钟 , 因此所调
试的单板问题百出 。 进入公司后 , 当我可在硬件与底层软件之间选择时我毫不犹豫的选择了
软件,直至走到今天。最开始被分配到做微码,后来又阴错阳差的搞起了 C 语言底层软件
开发 。 我刚入公司时可谓软件基础太差 , 学校里学的知识也使我仅知道一点 C 语言的概念
,
从来没有实战过 。 好在当时所作的项目编码阶段已经结束 , 我的工作就是学习别人的代码并
帮助测试 、 修改问题 , 当然 , 做的也并不好 。 现在回想起来 , 在这平淡的工作过程中有三点
对我至关重要 , 一 、 正是在这段时间培养起我比较扎实的 C 语言基础 , 不能说学到了很多
,
但绝对是让我明白了很多最基本的概念 , 让我知道了学习的方法 。 二 、 正是在这段时间我接
触了项目的开发 , 让我参与到历时几年几百人相互协助的项目开发中 , 看到大项目的开发过
程 , 接触到了很多在学校里永远不会接触到的事物 , 这些经验对我今后至关重要 , 虽然只是
冰山一角。三、正是在这段时间让我有机会第一次接触了嵌入式操作系统 —— vxworks ,虽
然仅仅是嵌入式操作系统的一些应用层概念。
由于我基础较差再加上我是慢热型 , 当时工作的并不好 , 一年半后几经周折我换到了一
个小部门 。 以前几百人的开发团队不见了 , 众多的技术专家 、 牛人不见了 , 一二十层 、 几个
、
几十个 CPU 的板子不见了,取而代之的是巴掌大的单板,所谓专家就是我,我一个人就可
以是整个项目的全部软件开发人员,设计软件结构、编写从驱动层到业务层的所有代码 。 以
前所做的工作是冰山一角 , 只知功能不识业务 , 现如今则需要我承担与软件相关的所有工作
。
正是在这种环境中我可以借鉴以前的一些经验并按照自己现有的想法设计软件 , 在实现系统
功能的同时也证明了我在硬件、底层软件所掌握知识的正确性。从做大系统的冰山一角 , 到
做麻雀虽小五脏俱全的小系统 , 各有各的难处 , 但也各有各的优点 , 这也为我编写这本手册
提供了必要条件。
在做这些小系统时有一个问题一直困扰着我 , 我所作的设备需要与主设备对接 , 主设备
会实时下发命令给我们执行 , 并且需要实时回应消息 , 这样看来如果有一个嵌入式操作系统
就会比较好实现 。 但我们的小系统硬件资源受限制 , 主频低 、 存储空间少 , 使得我很难找到
一个合适的操作系统 。 现有的一些能用的操作系统需要收费 , 有些不提供源码 , 但让我最不
能接受的是资料不全 , 真看不明白 , 使用这些操作系统如果在项目开发过程中出了问题又没
有很好的技术支持将是很大的风险 , 因此在做这些小系统时我一直是裸奔 。 裸奔是可以搞定
一切,但对于系统设计、维护来说确实是比较费劲。
在一个项目中我抛弃了原有的 51 单片机,使用了 ARM7TDMI 处理器。随着反复查 看
ARM 芯片手册并在项目调试过程中对 ARM7 芯片的逐步了解 , 我逐渐意识到实现一个简单
的操作系统内核调度功能似乎并没有想象中的那么困难 , 原以为实现操作系统调度功能需要
2
深入了解编译器的知识,现在发现只要使用标准的 C 语言、一些汇编语言和芯片硬件知识
就可以实现。
整理一下我目前所处的情况:
1. 迫切需要一个适合小系统的嵌入式操作系统,但又没有合适的。
2. 了解了嵌入式操作系统的一些概念。
3. 掌握了 ARM7 芯片的硬件结构、 C 语言和汇编语言知识。
4. 找不到一本可以较好的介绍操作系统的书籍 , 希望能让更多的人了解嵌入式操作系
统内核调度的基本原理,并以一种简单易懂的方式让更多的人接受。
事已如此 , 万事具备 ! 现在 , 我们就开始一起编写两个嵌入式操作系统内核 —— Wanli x
和 Mindows !
Wanlix 是一个内核非常小的嵌入式操作系统,只有几百个字节(大小与编译器、编译
选项也有关 ) ,但功能也非常少,只提供任务切换功能,而且需要主动调用函数切换任务。
但 , 它确实可以实现任务调度功能 , 最难能可贵的是它的小巧 , 非常适合资源特别少但又需
要任务切换的小项目。在这个源码开放的时代, Linux 、 Unix 遍地生根,它就跟我姓了 , 因
此叫 Wanlix 。
地球人都知道 Windows ,它是一种大型 PC 机操作系统,它是分时操作系统,它是 P C
机通用操作系统。而我们将要编写的 Mindows 则是一种小型操作系统,是实时的,是用在
嵌入式设备上的嵌入式实时操作系统,一切都是与 Windows 相反的!因此这个操作系统就
叫 Mindows !
本手册只讲解 Wanlix 、 Mindows 操作系统的内核,至于其它的例如 BSP 、文件系统、
协议栈等内容过于庞大,本人没有精力也没有能力实现。这两个操作系统已经提供了源码
,
有兴趣的朋友可以在此基础上自己试着实现其它功能,与他人互相讨论、交流,共同提高
。
在此我为大家提供了一个网站:
http://blog.sina.com.cn/ifreecoding
大家可以登录此网站下载相关资料,并可进入其中的论坛交流经验。
本手册假定读者具有一定的软硬件基础,对于其中软件编码方面的基础问题不再赘述 。
另外需要特殊说明的是 , 我使用 vxworks 嵌入式操作系统时间只有一年左右 , 而且只是
使用过极其简单的几个最基本的功能,在后来的一个项目中还简单使用过 TI DSP 的 BIO S
操作系统 , 因此本人对嵌入式操作系统的了解仅限皮毛 , 本手册也仅是根据本人在使用上述
两种操作系统中所建立的感官印象并按照我自己的想法来实现的 , 错误 、 疏漏之处在所难免
,
还请各位多多包涵,如有问题,可以反馈到论坛。
本人免费提 供 Wanli x 和 Mindow s 的源码 , 但不承担您使用本操作系统为您带来的损失 。
另外 , 本人语文水平实在有限 , 当我还年轻的时候就因为高中还需要写作文 , 就没有报
考高中,后来是班主任硬逼着改报的高中,在此向当年的班主任孙老师表示感谢!因此 , 本
手册无法顾及语言优美逻辑顺通,只要大家能看明白就行了,有问题我们可以再交流。
最后 , 向那些无偿付出自己知识的兄弟姐妹们表示敬意 ! 在编写操作系统过程中 , 确实
遇到了一些问题 , 正是在网上查到你们贡献出的宝贵经验才能让我得以完成此操作系统的编
写 , 因此 , 我也将这本手册无偿提供给大家 , 供大家参考 , 希望本手册能给你能带来一些帮
助!
2011.09.23 深圳坂田
1
目录
底层工作者手册 ..................................................................................................................................... 1
前言 .......................................................................................................................................................... 1
目录 .......................................................................................................................................................... 1
第 1 章 操作系统基础知识 ................................................................................................................ 1
第 1 节 为什么要使用操作系统 .................................................................................................. 1
第 2 节 操作系统的分类 .............................................................................................................. 3
第 2 章 写操作系统前的预备知识 .................................................................................................... 5
第 1 节 ARM7 芯片基本结构 ......................................................................................................... 5
第 2 节 ARM7 汇编语言简介 ......................................................................................................... 9
第 3 节 ARM7 芯片的函数调用标准 .......................................................................................... 19
第 4 节 Wanlix 的文件组织结构 ............................................................................................... 23
第 5 节 Wanlix 的开发环境 ....................................................................................................... 25
第 3 章 Wanlix 操作系统 .................................................................................................................. 27
第 1 节 两个固定任务之间的切换 ........................................................................................... 27
第 2 节 任意任务间的切换 ........................................................................................................ 36
第 3 节 用户代码入口 —— 根任务 ........................................................................................... 43
第 4 节 使用 Wanlix 编写交通红绿灯控制系统 .................................................................... 44
第 5 节 发布 Wanlix 操作系统 .................................................................................................. 50
第 4 章 Mindows 操作系统 .............................................................................................................. 56
第 1 节 Mindows 的文件组织结构 ............................................................................................ 56
第 2 节 定时器触发的实时抢占调度 ....................................................................................... 57
第 3 节 实时事件触发的实时抢占调度 ................................................................................... 78
第 4 节 任务切换钩子函数 ...................................................................................................... 102
第 5 节 任务创建和任务删除钩子函数 ................................................................................. 107
第 6 节 任务自结束 .................................................................................................................. 112
第 7 节 二进制信号量 .............................................................................................................. 116
第 8 节 计数信号量 .................................................................................................................. 136
第 9 节 互斥信号量 .................................................................................................................. 144
第 10 节 队列 ............................................................................................................................. 153
第 5 章 将操作系统移植到 Cortex 内核的芯片上 ...................................................................... 158
第 1 节 Cortex 内核介绍 ......................................................................................................... 158
第 2 节 开发环境 ...................................................................................................................... 162
第 3 节 将 Wanlix 移植到 Cortex 芯片 ................................................................................. 164
附录 1 Wanlix 接口函数 ..................................................................................................................... 1
附录 2 参考资料 .................................................................................................................................. 2
附录 3 Wanlix 开发环境安装 ............................................................................................................. 3
附录 4 Mindows 开发环境安装 ......................................................................................................... 9
2
图
图 1 没有操作系统和有操作系统的函数执行过程 .................................................................... 3
图 2 ARM7 工作模式 .......................................................................................................................... 6
图 3 ARM7 工作模式与寄存器 ......................................................................................................... 7
图 4 ARM7 CPSR 寄存器结构 ........................................................................................................... 8
图 5 ARM7 芯片模式位 .................................................................................................................... 8
图 6 MOV 指令的机器码格式 ......................................................................................................... 11
图 7 栈的 4 种类型 ......................................................................................................................... 14
图 8 B 指令的机器码格式 ............................................................................................................. 17
图 9 AAPCS 关于 ARM 寄存器的定义 ............................................................................................ 20
图 10 Wanlix 文件结构 ................................................................................................................. 24
图 11 Wanlix 文件调用关系 ......................................................................................................... 25
图 12 任务切换过程 ...................................................................................................................... 27
图 13 寄存器组在内存中的结构 .................................................................................................. 30
图 14 寄存器组在栈中的位置 ...................................................................................................... 31
图 15 系统栈和任务栈 .................................................................................................................. 31
图 16 两个任务交替执行 .............................................................................................................. 35
图 17 TCB 在栈中的位置 ............................................................................................................... 37
图 18 可创建任意多个任务的运行结果 ..................................................................................... 42
图 19 使用 根任务作为用户入口的运行结果 ............................................................................. 44
图 20 十字路口 交通红绿灯示意图 ............................................................................................. 45
图 21 十字路口运行状态切换图 .................................................................................................. 46
图 22 十字路口主流程图 .............................................................................................................. 47
图 23 十字路口任务流程图 .......................................................................................................... 48
图 24 十字路口红绿灯演示 .......................................................................................................... 49
图 25 Keil 中生成 map 文件的选项 ............................................................................................ 52
图 26 Keil 中生成库文件的选项 ................................................................................................. 53
图 27 不使用库文件和使用库文件 Keil 工程对比 .................................................................. 54
图 28 Mindows 文件调用关系 ....................................................................................................... 57
图 29 任务状态转换关系图 .......................................................................................................... 59
图 30 ready 表与任务的关联关系图 .......................................................................................... 59
图 31 空链表 ................................................................................................................................... 60
图 32 拥有 1 个子节点的链表 ...................................................................................................... 60
图 33 拥有 2 个子节点的链表 ...................................................................................................... 60
图 34 拥有多个子节点的链表 ...................................................................................................... 60
图 35 ready 表链表根节点与标志的对应关系图 ...................................................................... 61
图 36 ready 表 256 级标志分级方法 .......................................................................................... 64
图 37 Mindows 任务调度流程 ....................................................................................................... 71
图 38 4.2 节测试任务执行过程 ................................................................................................... 76
图 39 tick 中断调度任务的结果 ................................................................................................. 77
图 40 delay 表结构 ........................................................................................................................ 78
图 41 delay 表操作流程图 ........................................................................................................... 79
图 42 任务 delay 时间 .................................................................................................................. 79
剩余193页未读,继续阅读
资源评论
WangChao1227
- 粉丝: 12
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功