文章目录
一、写在前面(理解)
1、理解操作系统
操作系统:向下控制硬件,向下提供接口
(是否有mmc内存映射机制,判断是否可以使用操作系统)
2、ARM处理器类型
- 微处理器:具有较高的性能。,用于嵌入式,带操作系统
- 微控制器:一般用于单片机,芯片内部集成ROM、RAM、总线、定时/计数器、I/O、A/D等各种必要功能和外设。
- DSP:硬件结构和指令进行过特殊设计,非常擅长高速实现各种数字信号处理运算(如数字滤波、频谱分析等)
3、ARM架构
- Cortex-A:用于高性能应用,主要支持分页内存管理单元MMU**,linux需要MMU的支持才能运行。**
- Cortex-R:侧重于实时性应用,如汽车系统。
- Cortex-M:侧重于微控制器,常用的STM32就是此内核。
二、Linux系统架构
1、系统调用
- 为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。
2、库函数
- 系统调用提供的功能非常基础,所以使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能。 上面的分配内存的操作,可以定义成一个库函数,比如常用的malloc。
3、shell壳
- shell(壳)是一个特殊的应用,也经常被称为命令行 。可以理解为是一个命令解释器
- 一个shell对应一个终端 (terminal)。 终端是一个硬件设备,用来输入并显示输出。如今可以在shell中显示输入与输出。
三、Linux内核
1、Linux内核结构
如图,字符设备与块设备都被映射到Linux文件系统的文件和目录。
应用程序可通过套接字访问网络设备,并用使用以下两种方式访问字符设备与块设备:
- 系统API 如 open() ,write() , read() , close()等。
- 调用C标准库函数fopen() , fwrite() , fread() ,fclose()等。不过C库函数最终也是调用系统API实现的。(缓冲区)
2、内核组成(抽象结构)
2.1、进程调度(进程的五种状态)(SCHED)
- 执行态
- 就绪态
- 睡眠态(深度睡眠、浅度睡眠)(等待)
- 暂停态
- 僵死态
2.2、内存管理(MM)
进程内存分配:3G的用户空,1G大小的内核空间
2.3、虚拟文件系统(VFS)
虚拟文件系统为上层的应用程序提供了统一的调用接口,
对下则负责调用具体底层文件系统或设备驱动中实现的file_operations结构体中的成员函数。
2.4、网络接口(NET)
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。Linux网络接口分为
- 网络协议 :负责实现每一种可能的网络传输协议。
- 网络驱动程序:负责与硬件设备通信
2.5、进程间通信(IPC)
- 无名管道
- 有名管道
- 信号
- 消息队列
- 共享内存
- 信号量
- 套接字
3、内核空间与用户空间
3.1、写在前面
现代的CPU其内部会区分不同的工作模式,以此来区分不同级别和权限的操作。
例如:ARM的八种工作模式
- User 非特权模式,一般在执行上层的应用程序时ARM处于该模式
- FIQ (快速中断模式)当一个高优先级中断产生后ARM将进入这种模式
- IRQ (外部中断模式)当一个低优先级中断产生后ARM将进入这种模式
- SVC (超级用户模式)当复位或执行软中断指令swi后ARM将进入这种模式
- Abort (中止模式)当产生存取异常时ARM将进入这种模式
- Undef (指令未定义模式)当执行未定义的指令时ARM将进入这种模式
- System (系统模式)使用和User模式相同寄存器集的特权模式
- Monitor (监控模式)为了安全而扩展出的用于执行安全监控代码的模式
3.2、理解内核空间与用户空间
在ARM环境中,**Linux系统充分利用CPU的硬件特性,实现了两级的操作模式,用户(usr)模式和管理模式(svc)。**与此对应,在Linux系统中具有两种空间:
- **内核空间: 是管理模式,可以进行任何操作,可以对底层硬件进行直接访问。**等
- 用户空间:用户代码运行的模式,被禁止对硬件进行直接访问和对内存的的未授权访问。实现上通过swi软中断从用户模式陷入管理模式。等