您好,欢迎来到聚文网。 登录 免费注册
深度探索嵌入式操作系统

深度探索嵌入式操作系统

  • 装帧: 平装
  • 出版社: 机械工业出版社
  • 作者: 彭东 著 著
  • 出版日期: 2015-10-01
  • 商品条码: 9787111514879
  • 版次: 1
  • 开本: 16开
  • 页数: 527
  • 出版年份: 2015
定价:¥99 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书的最终目的是构建一个用于学习的嵌入式操作系统内核,并工作在真正的物理机上。为了达到这一目的,本书大体上分为两部分:硬件部分和软件部分。硬件部分首先分析了我们选择的平台,以及这个平台上的组件。软件部分首先分析了操作系统内核是干什么的,其中都有些什么组件,这些个组件分别是干什么的有什么作用。然后是如何设计操作系统架构并将这些重要的组件组合在一起,以及设计时需要注意些什么。最后介绍了构建操作系统的工具。
作者简介
彭东,中国计算机领域的“鬼才”,自幼患病,从2008年开始直到现在,始终不间断地研究和自学计算机,精通各种编程语言,精通算法与数据结构,精通编译原理,精通操作系统理论并十分了解现有的Linux和Windows操作系统,还精通X86和ARM两大硬件平台体系结构。
先后独自从零开始开发了LMOS、LMOSEM两大操作系统内核,现在的LMOS已经是多进程、多线程、多CPU、支持虚拟内存的x86_64体系下的全64位操作系统内核,代码量已经有10万多行了,而LMOSEM则是本书中所写的基于ARM平台的嵌入式操作系统。LMOS的早期版本曾在IT168等社区发布,引起了广泛讨论,获得了极高的评价。
目录
前言
第1章操作系统的功能及为什么需要它
1.1从hello world开始
1.2操作系统功能演进
1.3小结
第2章硬件平台
2.1选择平台
2.1.1min12440
2.1.2mini2440平台的信息
2.2必须要关注的硬件
2.2.1原因
2.2.2RTC
2.2.3定时器
2.2.4串口
2.2.5中断控制器
2.2.6SDRAM
2.2.7NOmash
2.2.8Nandflash
2.3小结
第3章处理器
3.1ARM公司与其处理器
3.2ARM920T的结构与特性
3.2.1ARM920TCPU结构
3.2.2ARM920TCPU特性
3.3ARM920T存储体系
3.3.1ARM920T地址空间
3.3.2ARM920T存储器格式
3.3.3ARM920T存储地址对齐
3.4ARM920T状态
3.4.1ARM状态
3.4.2Thumb状态
3.5ARM920T处理器的7种工作模式
3.6寄存器
3.7异常和中断
3.7.1什么是异常和中断
3.7.2异常中断向量
3.8ARM920T指令集
3.8.1指令及其编码格式
3.8.2分支跳转指令
3.8.3数据处理指令
3.8.4装载和存储指令
3.8.5程序状态寄存器操作指令
3.8.6协处理器操作指令
3.8.7异常中断产生指令
3.9MMU
3.9.1MMU概述
3.9.2为什么要有MMU
3.9.3ARM920T CP15协处理器
3.9.4MMU页表
3.9.5MMU页面访问权限的控制
3.9.6MMU的快表TLB
3.9.7MMU的编程接口
3.10CaChe
3.10.1ARM920T的Cache
3.10.2Cache的原理
3.10.3Cache的类型及要注意的问题
3.10.4ARM920T Cache的编程接口
3.11小结
第4章操作系统内核的设计与构建
4.1操作系统内核的设计
4.1.1内核要完成的功能
4.1.2内核的架构
4.1.3分离硬件的相关性
4.1.4我们的选择
4.2开发环境及相关工具
4.2.1Linux环境
4.2.2文本编辑器
4.2.3GCC
4.2.4LD
4.2.5make
4.3LMOSEM的构建系统
4.3.1LMOSEM的makefile
4.3.2LMOSEM的链接脚本
4.4开发板的安装
4.5小结
第5章语言间调用约定与基本数据结构
5.1寄存器使用约定
5.1.1寄存器别名
5.1.2参数传递与返回值
5.2基本数据结构
5.2.1C语言的基本数据结构
5.2.2list_h_t数据结构
5.2.3spinlock_t数据结构
5.2.4kwlst_t数据结构
5.2.5sem_t数据结构
5.3数据结构存在于内存中的形式
5.4C与汇编的混用
5.5小结
第6章内核初始化
6.1开始
6.1.1第一行汇编代码
6.1.2第一个C函数
6.2MMU和中断向量的初始化
6.2.1初始化MMU
6.2.2复制中断向量
6.3串口初始化
6.3.1串口硬件
6.3.2内核的printf
6.4机器数据结构
6.4.1设计数据结构
6.4.2确定一些重要数据结构与内核的地址
6.5初级内存管理初始化
6.5.1设计一些数据结构
6.5.2初始化mmapdsc_t结构数组
6.5.3建立起内存分配数据结构
6.6中断初始化
6.6.1设计一些数据结构
6.6.2初始中断源描述符
6.7初始化测试
6.8小结
第7章内存管理
7.1内核功能层人口
7.2内存管理组件的设计
7.3块级内存管理
7.3.1块级内存管理数据结构视图
7.3.2块级内存管理接口
7.3.3主分配函数
7.3.4分配时查找alcfrelst_t
7.3.5分配时查找和操作mmapdsc_t
7.3.6分配代码写得对吗
7.3.7主释放函数
7.3.8释放时查找alcfrelst_t
7.3.9释放时查找和操作mmapdsc_t
7.3.10测试块级内存管理层
7.4页级内存管理
7.4.1页级内存管理接口及调用流程
7.4.2相关的数据结构
7.4.3页级内存管理初始化
7.4.4分配主函数
7.4.5分配时查找mplhead_t
7.4.6分配时新建页级内存池
7.4.7分配时操作mplhead_t
7.4.8分配代码写得对吗
7.4.9释放主函数
7.4.10释放时查找mplhead_t
7.4.11释放时操作mplhead_t
7.4.12释放时删除页级内存池
7.4.13测试页级内存管理层
7.5字级内存管理
7.5.1字级内存接口及调用流程
7.5.2相关的数据结构
7.5.3分配主函数
7.5.4分配时查找mplhead_t
7.5.5分配时新建字级内存池
7.5.6分配时操作mplhead_t
7.5.7分配代码写得对吗
7.5.8释放主函数
7.5.9释放时查找mplhead_t
7.5.10释放时操作mplhead_t
7.5.11释放时删除字级内存池
7.5.12测试字级内存管理层
7.6小结
第8章中断管理
8.1中断与中断控制器
8.1.1什么是中断
8.1.2S3C2440A中断控制器
8.2中断管理的架构与相关数据结构
8.2.1中断管理的架构
8.2.2设计数据结构intfltdsc_t和intserdsc_t
8.3中断处理
8.3.1中断辅助例程
8.3.2从中断向量开始
8.3.3保存CPU上下文
8.3.4中断主分派例程
8.3.5确定中断源
8.3.6调用中断处理例程
8.4安装中断回调例程
8.5小结
第9章驱动模型
9.1操作系统内核如何管理设备
9.1.1分权而治
9.1.2设备类型
9.1.3驱动程序
9.2相关数据结构
9.2.1驱动
9.2.2派发例程类型
9.2.3设备ID
9.2.4设备
9.2.5IO包
9.2.6设备表
9.3驱动模型的基础设施
9.3.1驱动程序从哪里执行
9.3.2新建与注册设备
9.3.3注册回调函数
9.3.4发送IO包
9.3.5调用驱动程序函数
9.3.6等待服务
9.3.7完成服务
9.3.8驱动模型辅助函数
9.4systick驱动程序实例
9.4.1systick硬件
9.4.2systick驱动程序框架
9.4.3systick驱动程序实现
9.4.4测试systick驱动程序
9.5RTC驱动程序实例
9.5.1RTC硬件
9.5.2RTC驱动程序实现
9.6小结
第10章进程
10.1应用程序的运行
10.1.1程序运行需要什么资源
10.1.2任何时刻资源都可用吗
10.1.3提出多道程序模型
10.2相关的数据结构
10.2.1设计进程的数据结构
10.2.2调度进程表
10.3LMOSEM内核的第一个进程
10.3.1进程管理组件的初始化
10.3.2建立空转进程
10.3.3空转进程运行
10.4新建进程
10.4.1分配进程描述符
10.4.2分配内存空间
10.4.3加入进程调度表
10.5进程调度
10.5.1调度算法
10.5.2处理进程时间片
10.5.3检查调度状态
10.5.4选择进程
10.5.5进程切换
10.5.6进程等待与唤醒
10.5.7进程测试
10.6小结
第11章文件系统
11.1文件系统设计
11.1.1文件系统只是一个设备
11.1.2数据格式与存储块
11.1.3如何组织文件
11.1.4关于我们文件系统的限制
11.2相关的数据结构
11.2.1超级块
11.2.2位图
11.2.3目录
11.2.4文件管理头
11.3文件系统格式化
11.3.1建立超级块
11.3.2建立位图
11.3.3建立根目录
11.4文件系统基础操作
11.4.1获取与释放根目录文件
11.4.2字符串操作
……
后记
摘要
为什么写这本书随着移动互联网技术的成熟,物联网也开始崭露头角,由此产生了各种小型、低功耗的智能硬件,这些智能硬件被嵌入到移动电话、手表、冰箱、空调、电视机、洗衣机等常用电子产品中,使这些常用电子产品功能更加强大、更加智能,而且它们可以连接到网络,便于用户远程操控,从而大大改善了人们的生活。 因此,嵌入式行业才变得如此火热,那些被嵌入到电子产品中的智能硬件,也需要一些小巧、特殊的操作系统软件才能正常工作,这类小巧、特殊的操作系统软件,称为嵌入式系统。2013年下半年,我开始学习嵌入式系统,并编写了一个嵌入式操作系统-LMOSEM。 在互联网上也认识了不少研究嵌入式的朋友,在他们的要求和规劝下,我终于有勇气把我研究出来的东西归纳、整理成册,也算是我学习的笔记,于是就有了这本书。虽然有很多的顾虑,怕贻笑方家、怕误导同道……但是我的每行代码、每个点子,都在实机上测试过并证明了其正确性,所以也就心下一片坦然了。如果这本书能够被后来者借鉴一二,或者解决他们的一些疑惑,我自然欣慰万分。 关于LMOSEM关于LMOSEM,这得从LMOS开始说起。2010年下半年,我开始准备要写个操作系统内核,没有其他目的,只是出于学习,出于兴趣。由于是自己独立从零开始设计、编写的,我觉得自己这种行为有点疯狂,索性用LMOS(liberty madness operating system)命名了我的操作系统。LMOS经过这几年的独立开发,现在已经发布了6个测试版本。先后从32位单CPU架构发展到64位多CPU架构,现在的LMOS已经是多进程、多线程、多CPU、支持虚拟内存的x86 64体系下的操作系统内核。LMOS的这些特性,非常适合通用计算机领域,如PC、工作站、小型服务器。这些特性导致LMOS代码量庞大,一些组件不够小巧,削剪起来非常复杂,很难保证削剪后的组件是否健壮,因此LMOS不适合于嵌入式领域,所以笔?者才重新开发了LMOSEM-适合嵌入式领域的操作系统。 LMOSEM依然删除了很多代码,因为写书要做到简单,便于理解。即便如此,LMOSEM依然包含了现代操作系统的大部分重要组件,如内存管理、进程管理、驱动模型、文件系统等。这些组件的实现过程在本书中都会有详细的介绍。LMOSEM不支持实时性功能,嵌入式操作系统也不一定要是实时性的操作系统,何况我们是出于学习的目的。为了代码的清晰、简单,我们暂不考虑安全性和性能方面的问题。等到明白了操作系统原理,我们再去不断修正、优化,使之功能变得更多,性能变得更强。笔者开发的LMOSEM操作系统项目,是在Linux操作系统下开发的,用到了Linux操作系统的很多工具。笔者不会和读者讨论为什么不用常用的Windows系统,也不会说谁好、谁不好。如果读者非常喜欢Windows系统,那么也可以尝试着把这个项目迁移到Windows系统下。但是笔者书中演示的环境还是Linux系统。关于如何搭建开发环境,本书后面的章节有详细的介绍。在那里读者会发现用Linux系统开发LMOSEM内核有很多方便之处,如会用到的MAKE、GCC、LD等,这些工具在Linux系统下都很容易得到,在Windows系统下虽然也能做到,但相对麻烦一点。何况今天的Linux系统已经很好用了。 读者对象口如果读者是一位纯粹的操作系统爱好者,对其有着浓厚的兴趣,那么本书将非常适合。 口如果读者是嵌入式领域的从业者或者学生,也可以从本书中获得很多帮助。 口如果读者是一位普通的应用软件开发者,业余时间也可以翻翻此书,书中的一些设计方法和编程手段,或许可以借鉴一二。 口如果你只是想了解一些计算机硬件系统和软件系统的常识,那么本书同样会让你获益。 如何阅读本书为了能更轻松地阅读这本书,笔者建议先了解C语言这门编程语言,对数据结构有所了解就更好了。除这些外,笔者假定读者没有其他任何技能。除了需要的上述技能,读者还需要对操作系统有强大的兴趣和求知欲,要有坚强的意志、永远不放弃的精神。开发操作系统内核本身就不是件容易的事,必然会有很多问题在等着我们,但是遇到问题不要害怕,静下心从容面对,只要我们不放弃,问题最终会解决。 本书很简单,没有拐弯抹角,没有反复修饰,但是必要的细节从不漏掉。宁可在细节上哕嗦一点,也不在不相关的地方多写一句。 本书的最终目的是构建一个用于学习的嵌入式操作系统内核,并工作在真正的物理机上。为了达到这一目的,本书大体上分为三部分:综述、硬件部分和软件部分。 综述部分(第1章)。 第1章,先说明操作系统的概念、功能和演进历史,最后得出现代操作系统的模型,使我们可以了解操作系统的轮廓。 硬件部分(第2~3章)。 第2章,从选择硬件平台开始,首先概述硬件平台的整体情况,接着了解编写操作系统内核必需的一些平台上的组件,如实时时钟、定时器、串口、中断控制器、内存芯片、Flash芯片、CPU、MMU等。让读者有初步的印象,在写代码用到某个组件时再详述其内部编程细节。 第3章,详细介绍处理器,重点介绍处理器的结构和特性、处理器的地址空间、处理器的状态和工作模式、处理器的寄存器和指令集。最后介绍处理器中的MMU和Cache,对于MMU,主要介绍MMU的作用和它对操作系统内核开发的影响、如何对MMU编程、MMU的几种地址映射方式。而对于Cache,重点介绍Cache的作用、Cache的类型、Cache的使用。 软件部分【第4~12章)。 第4章,介绍操作系统内核设计、操作系统内核的开发环境、开发操作系统内核的工具:GCC、LD、MAKE,以及它们的使用方法,最后介绍硬件平台的安装与测试。 第5章,首先介绍C语言使用寄存器的约定,以及它是如何处理参数、返回值的。接着介绍C语言基本数据类型的位宽及占用内存的大小,并用它们构建后面将要用到的一些基本的数据结构,如list-hj、spinlock_t、kwlst、semj。然后介绍C语言的数据结构在内存中存在的形式、对齐方式。最后介绍GCC独有的嵌入汇编代码的方式。 第6章,开始介绍LMOSEM的初始化,从第一行汇编代码开始、初始化MMU和中断向量、初始化串口设备、初始化内存管理数据结构和中断相应的数据结构,最后对一些数据结构进行测试。 第7章,开始介绍LMOSEM的内存管理组件。LMOSEM的内存管理组件分为三层:块级内存管理、页级内存管理、字级内存管理,这三个层分别应对不同的内存分配请求。本章将结合实际代码介绍如何一步步实现这三大内存管理层。 第8章,介绍LMOSEM的中断管理组件,内容包括中断控制器的细节、中断管理组件的结构、如何处理中断、安装中断处理的回调函数等。 第9章,介绍LMOSEM的设备驱动模型,其中介绍LMOSEM如何管理众多的硬件设备、LMOSEM支持的设备类型、驱动模型的数据结构和基础性代码,最后用两个驱动程序实例介绍如何在LMOSEM的驱动模型下编写规范的设备驱动程序。 第10章,介绍LMOSEM的进程管理组件,包括进程的由来、进程相关的数据结构、系统空转进程的建立与运行、进程调度、新建进程、进程的睡眠与唤醒、进程测试等相关内容。 第11章,介绍LMOSEM的文件系统组件,包括文件系统的设计、文件系统的建立、文件系统的基础操作、文件本身的操作,如文件的打开、新建、读写、删除等。最后对文件系?统组件进行严格的测试。 第12章,介绍LMOSEM的接口,包括许多LMOSEM的API和库函数的实现细节,主要包括时间、进程、内存、文件与设备、标准输入/输出等方面的API和库函数。 勘误和支持由于笔者水平有限,加之编写时间仓促,书中难免会出现一些不准确的地方,恳请读者批评指正,在技术之路上共勉。我的CU博客地址是:http://blog.chinaunix.net/uid/2 80321 28.html。 本书源代码已制作成光盘镜像文件,并上传到华章网站( www.hzbook.com),需要的读者可自行下载。 致谢我,自幼患病,读书不多,计算机成了唯一的兴趣爱好,没有父母的长期支持,连生活都尚且不能自理,更别说完成此书了,他们对我的帮助和关爱,纵使千万言语也难表一二。 由于经常在物理机上测试内核,要拆装一些设备和器件,这多亏了我的小弟,因为他一有时间就帮我做这部分工作。当然还有帮助过我的朋友,有一些是身边的,有些是网络中的。对父母、所有的亲人、朋友,我也只有常怀感恩之心,说声谢谢,谢谢他们一直的支持、帮助,谢谢他们一直对我那满满的关爱! 让笔者和你一起带着未知,带着好奇,带着兴奋,踏上操作系统的旅程吧!

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网