第5章ARMLinux内核名师编辑PPT课件.ppt

上传人:王** 文档编号:611208 上传时间:2023-12-08 格式:PPT 页数:60 大小:631KB
下载 相关 举报
第5章ARMLinux内核名师编辑PPT课件.ppt_第1页
第1页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第2页
第2页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第3页
第3页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第4页
第4页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第5页
第5页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第6页
第6页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第7页
第7页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第8页
第8页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第9页
第9页 / 共60页
第5章ARMLinux内核名师编辑PPT课件.ppt_第10页
第10页 / 共60页
亲,该文档总共60页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章ARMLinux内核名师编辑PPT课件.ppt》由会员分享,可在线阅读,更多相关《第5章ARMLinux内核名师编辑PPT课件.ppt(60页珍藏版)》请在优知文库上搜索。

1、1ARMLinux 内核 2提纲l1.ARM系统结构简介 l2.ARM-Linux内存管理 l3.ARM-Linux 的中断响应和处理 l4.ARM-Linux系统调用l5.系统的启动和初始化 l6.ARM-Linux进程管理和调度 l7.Linux的模块机制 31.ARM系统结构简介lARM有7种运行状态:l用户状态(User)l中断状态(IRQ,Imterrupt Request)l快中断状态(FIQ,Fast Imterrupt Request)l监管状态(Supervisor)l终止状态(Abort)l无定义状态(Undefined)l系统状态(System)4lARM系统结构中各个寄

2、存器的使用方式 寄存器使用方式程序计数器pc(r15)由所有运行状态共用通用寄存器r0-r7由所有运行状态共用通用寄存器r8-r12除快中断以外所有其他运行状态共用(快中断状态有自己专用的r8-r12)当前程序状态寄存 器CPSR由所有运行状态共用保存程序状态寄存器SPSR除用户状态以外的6种运行状态,各有自己的保存程序状态寄存器SPSR堆栈指针sp(r13)和链接寄存器lr(r14)7种运行状态各有自己的sp和lr52 ARM-Linux内存管理 l存储管理是一个很大的范畴 l存储管理机制的实现和具体的CPU以及MMU的结构关系非常紧密 l操作系统内核的复杂性相当程度上来自内存管理,对整个系

3、统的结构有着根本性的深远影响 62.1内存管理和内存管理和MMU lMMU,也就是“内存管理单元”,其主要作用是两个方面:l地址映射 l对地址访问的保护和限制 lMMU可以做在芯片中,也可以作为协处理器 72.2 冯冯诺依曼结构和哈佛结构诺依曼结构和哈佛结构 l冯诺依曼结构:程序只是一种数据,对程序也可以像对数据一样加以处理,并且可以和数据存储在同一个存储器中 l嵌入式系统中往往采用程序和数据两个存储器、两条总线的系统结构,称为“哈佛结构”82.3 ARM存储管理机制存储管理机制 lARM系统结构中,地址映射可以是单层的按“段(section)”映射,也可以是二层的页面映射 l采用单层的段映射

4、的时候,内存中有个“段映射表”,当CPU访问内存的时候:l其32位虚地址的高12位用作访问段映射表的下标,从表中找到相应的表项 l每个表项提供一个12位的物理段地址,以及对这个段的访问许可标志,将这12位物理段地址和虚拟地址中的低20位拼接在一起,就得到了32位的物理地址 9l如果采用页面映射,“段映射表”就成了“首层页面映射表”,映射的过程如下:l以32位虚地址的高12位(bit20-bit31)作为访问首层映射表的下标,从表中找到相应的表项,每个表项指向一个二层映射表。l以虚拟地址中的次8位(bit12-bit19)作为访问所得二层映射表的下标,进一步从相应表项中取得20位的物理页面地址。

5、l最后,将20位的物理页面地址和虚拟地址中的最低12位拼接在一起,就得到了32位的物理地址。10l凡是支持虚存的CPU必须为有关的映射表提供高速缓存,使地址映射的过程在不访问内存的前提下完成,用于这个目的高速缓存称为TLBl高速缓存 lARM系统结构中配备了两个地址映射TLB和两个高速缓存 11lARM处理器中,MMU是作为协处理器CP15的一部分实现的 lMMU相关的最主要的寄存器有三个:l控制寄存器,控制MMU的开关、高速缓存的开关、写缓冲区的开关等l地址转换表基地址寄存器 l域访问控制寄存器 12l控制寄存器中有S位(表示System)和R位(表示ROM),用于决定了CPU在当前运行状态

6、下对目标段或者页面的访问权限:SRCPU运行在特权状态CPU运行在用户状态00不能访问不能访问10只读不能访问01只读只读11不确定不确定132.4 ARM-Linux存储机制的建立存储机制的建立 lARM-Linux内核也将这4GB虚拟地址空间分为两个部分,系统空间和用户空间 lARM将I/O也放在内存地址空间中,所以系统空间的一部分虚拟地址不是映射到物理内存,而是映射到一些I/O设备的地址 14lARM处理器上的实现和x86的既相似又有很多不同:l在ARM处理器上,如果整个段(1MB,并且和1MB边界对齐)都有映射,就采用单层映射;而在x86上总是采用二层映射 lARM处理器上所谓的“段(

7、section)”是固定长度的,实质上就是超大型的页面;而x86上的“段(segment)”则是不定长的lLinux在启动初始化的时候依次调用:start_kernel()setup_arch()pageing_init()memtable_init()create_mapping()15lXsbase255开发系统存储管理的描述数据结构:static struct map_desc xsbase255_io_desc _initdata=/*virtual physical length domain r w c b*/0 xE8000000,0 x00000000,0 x02000000,

8、DOMAIN_IO,0,1,0,0,/片选0 CS0:Intel Strata Flash 32M 0 xF0000000,0 x04000000,0 x00100000,DOMAIN_IO,0,1,0,0,/片选1CS1:CS8900A 0 xf0110000,0 x08000000,0 x00010000,DOMAIN_IO,0,1,0,0,/片选2 CS2:Extend PORT0,扩充的GPIO 0 xf0120000,0 x08100000,0 x00010000,DOMAIN_IO,0,1,0,0,/CS2:Extend PORT1 0 xf1000000,0 x0C700000,

9、0 x00010000,DOMAIN_IO,0,1,0,0,/片选CS3:USB Host(Ez-Host);162.5 ARM-Linux进程的虚存空间 lLinux虚拟内存的实现需要6种机制的支持:l地址映射机制l内存分配回收机制l缓存和刷新机制l请求页机制l交换机制l内存共享机制 17l系统中的每个进程都各有自己的首层映射表,这就是它的空间,没有独立的空间的就只是线程而不是进程 lLinux内核需要管理所有的虚拟内存地址,每个进程虚拟内存中的内容在其task_struct结构中指向的 vm_area_struct结构中描叙 18ltask_struct结构分析图:19l由于那些虚拟内存区

10、域来源各不相同,Linux使用vm_area_struct中指向一组虚拟内存处理过程的指针来抽象此接口 l为进程创建新的虚拟内存区域或处理页面不在物理内存中的情况下,Linux内核重复使用进程的vm_area_struct数据结构集合 l当进程请求分配虚拟内存时,Linux并不直接分配物理内存 203 ARM-Linux 的中断响应和处理的中断响应和处理 l中断是一个流程,一般来说要经过三个环节:l中断响应l中断处理l中断返回 l中断响应是第一个环节,主要是确定中断源,在整个中断机制中起着枢纽的作用 21l使CPU在响应中断的时候能迅速的确定中断源,辅助手段主要有下列几种:l中断源通过数据总线

11、提供一个代表具体设备的数值,称为“中断向量”l在外部提供一个“集线器”,称为“中断控制器”l将中断控制器集成在CPU芯片中,但是设法“挪用”或“复制”原有的若干引线,而并不实际增加引线的数量 22lARM是将中断控制器集成在CPU内部的,由外设产生的中断请求都由芯片上的中断控制器汇总成一个IRQ中断请求l中断控制器还向CPU提供一个中断请求寄存器和一个中断控制寄存器 lGPIO是一个通用的可编程的I/O接口,其接口寄存器中的每一位都可以分别在程序的控制下设置用于输入或者输出 23lARM Linux将中断源分为三组:l第一组是针对外部中断源;l第二组中是针对内部中断源,它们都来自集成在芯片内部

12、的外围设备和控制器,比如LCD控制器、串行口、DMA控制器等等。l第三组中断源使用的是一个两层结构。24l在Linux中,每一个中断控制器都由strcut hw_interrut_type数据结构表示:struct hw_interrupt_type const char*typename;unsigned int(*startup)(unsigned int irq);void(*shutdown)(unsigned int irq);void(*enable)(unsigned int irq);void(*ack)(unsigned int irq);void(*end)(unsigne

13、d int irq);void(*set_affinity)(unsiged int irq,unsigned long mask);25l每一个中断请求线都有一个struct irqdesc 数据结构表示:typedef struct unsigned int status;/*IRQ status*/hw_irq_controller*handler;struct irqaction*action;/*IRQ action list*/unsigned int depth;/*nested irq disables*/spinlock_t lock;_cacheline_aligned i

14、rq_desc_t;26l具体中断处理程序则在数据结构 struct irqactionl三个数据结构的相互关系如图:struct hw_interrupt_typeStruct irqacton指向具体的中断服务函数irq_descNR_IRQS 27l在进入中断响应之前,CPU自动完成下列操作:l将进入中断响应前的内容装入r14_irq,即中断模式的lr,使其指向中断点。l将cpsr原来的内容装入spsr_irq,即中断模式的spsr;同时改变cpsr的内容使CPU运行于中断模式,并关闭中断。l将堆栈指针sp切换成中断模式的sp_irq。l将pc指向0 x18。28l中断流程图:294 A

15、RM-Linux系统调用系统调用 larm处理器有自陷指令SWI lcpu遇到自陷指令后,跳转到内核态l操作系统首先保存当前运行的信息,然后根据系统调用号查找相应的函数去执行l执行完了以后恢复原先保存的运行信息返回 30实验一创建和使用一个新的系统调用 l在 arch/arm/kernel/目录下创建一个新的文件mysyscall.c l在 arch/arm/kernel/call.S 中添加新的系统调用,新的系统调用号0 x900000+226 l修改arch/arm/kernel/目录下的Makefile文件,在obj-y后面添加mysyscall.o 31实验一创建和使用一个新的系统调用

16、(1)l一个测试程序来使用新的系统调用:test.h:#definesys_hello()_asm_ _volatile_(swi 0 x900000+226nt)while(0)test.c:#include#include “test.h”int main(void)printf(start hellon);sys_hello();printf(end hellon);32实验一创建和使用一个新的系统调用(2)l然后执行 l启动开发板,将应用程序test通过zmodem协议下载到开发板的文件系统目录下,在板子上运行test程序所得结果如下:#arm-linux-gcc test.c-o test#./teststart hellohello worldend hello335.系统的启动和初始化系统的启动和初始化 l使用bootloader将内核映像载入 l内核数据结构初始化(内核引导第一部分):start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置,启动init过程,创建第一个内核线程 lstart_kernel()函数中各个主要初始化函数的功能 34

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!