大学课件物联网与嵌入式系统开发--第5章_嵌入式操作系统解读.ppt

大学课件物联网与嵌入式系统开发--第5章_嵌入式操作系统解读.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大学课件物联网与嵌入式系统开发--第5章_嵌入式操作系统解读

5.5 Linux简介 5.5.11 Linux启动流程简介(续) Linux内核有两种映像:一是非压缩内核,叫做Image,另一种是它的压缩版本,叫做zImage。zImage是Image经过压缩形成的,所以比Image小,但必须在它的开头加上解压缩的代码,将zImage解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般比较小,所以一般的嵌入式系统均采用压缩的内核。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) ARM系列处理器的zImage入口程序为arch/arm/boot/compressed/head.S,head.S依次完成如下工作: 开启MMU和Cache; 调用decompress_kernel()解压内核; 调用call_kernel()进入非压缩内核Image的启动。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) Linux非压缩内核的入口位于文件/arch/arm/kernel/head.S中,该程序主要完成如下工作。 ① 通过查找处理器内核类型和处理器类型调用相应的初始化函数。检测处理器类型是在汇编子函数__lookup_architecture_type中完成,该函数返回时会将返回结构保存在r5、r6和r7三个寄存器中,其中r5保存RAM的起始基地址,r6保存I/O基地址,r7保存I/O的页表偏移地址。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) ② 建立页表。调用__create_page_tables 子函数来建立页表,它所要做的工作就是将RAM基地址开始的4MB空间的物理地址映射到0xC0000000开始的虚拟地址处。对S3C2440开发板而言,RAM连接到物理地址0,当调用__create_page_tables结束后,00理地址将映射到0xC0000000~0xC0400000虚拟地址处。 ③ 跳转到start_kernel()函数开始内核的初始化工作,这一阶段的流程图如图5-4所示。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) 5.5 Linux简介 5.5.11 Linux启动流程简介(续) 当所有的初始化结束之后,使用如下代码来跳到C程序的入口函数start_kernel()处,开始之后的内核初始化工作。 start_kernel是所有Linux平台进入系统内核初始化后的入口函数,它主要完成剩余的与硬件平台相关的初始化工作,如图5-5所示。在进行一系列与内核相关的初始化后,调用第一个用户进程(init进程)并等待用户进程的执行,这样整个Linux内核便启动完毕。该函数所做的具体工作如下所述。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) ① 调用setup_arch()函数进行与体系结构相关的第一个初始化工作。对于ARM平台而言,该函数定义在arch/arm/kernel/setup.c。它首先通过检测出来的处理器类型进行处理器内核的初始化,然后通过bootmem_init()函数根据系统定义的meminfo 结构进行内存结构的初始化,最后调用paging_init()开启MMU,创建内核页表,映射所有的物理内存和I/O空间。 ② 创建异常向量表和初始化中断处理函数。 ③ 初始化系统核心进程调度器和时钟中断处理机制。 ④ 初始化串口控制台(Serial-Console)。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) ⑤ ARM-Linux 在初始化过程中一般都会初始化一个串口作为内核的控制台,这样内核在启动过程中就可以通过串口输出信息,以便开发者或用户了解系统的启动进程。 ⑥ 创建和初始化系统Cache,为各种内存调用机制提供缓存,包括动态内存分配、虚拟文件系统(Virtual File System)及页缓存。 ⑦ 初始化内存管理,检测内存大小及被内核占用的内存情况。 ⑧ 初始化系统的进程间通信机制(IPC)。 5.5 Linux简介 5.5.11 Linux启动流程简介(续) 5.5 Linux简介 5.5.11 Linux启动流程简介(续) 当以上所有的初始化工作结束后,start_kernel()函数会调用rest_init()函数来进行最后的初始化,包括创建系统的第一个进程(init进程)来结束内核的启动。init进程首先进行一系列的硬件初始化,然后通过命令行传递过来的参数挂载根文件系统。最后init进程会执

文档评论(0)

33ggoup + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档