嵌入式系统北京航空航天大学Experiment3(免费阅读).ppt

嵌入式系统北京航空航天大学Experiment3(免费阅读).ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验目的 实验内容 Bootloader Linux内核 实验步骤 实验目的 了解bootloader及其作用,了解Linux内核结构。 掌握配置和编译Linux系统内核的方法以及移植嵌入式Linux的基本步骤。 实验内容 在Linux系统的宿主PC下,修改裁减内核源码,编译生成bootloader、内核映像和根文件系统。 在Windows系统的宿主PC下,烧写bootloader、内核映像和根文件系统。(带U盘) 嵌入式Linux系统构成 引导加载程序(armboot, blob, redboot, vivi, U-Boot) 启动加载模式(正常工作模式),下载模式 内核 文件系统 用户应用程序(有时还包括嵌入式图形用户界面) Bootloader介绍 引导加载程序bootloader是系统加电后运行的第一段代码,它完成整个系统的加载启动任务。 在基于ARM的嵌入式系统中,系统在上电或复位时通常都从地址0开始执行,而在这个地址处放的通常就是系统的bootloader。 通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 Bootloader的启动流程 第一个阶段主要包括依赖于CPU的体系结构硬件初始化的代码,通常用汇编语言实现。这个阶段的任务有: ◆基本的硬件设备初始化(屏蔽所有中断、关闭处理器内部指令/数据cache等) ◆为第二阶段准备RAM空间 ◆如果是从某个固态存储媒质中,则复制Bootloader的第二阶段代码到RAM ◆设置堆栈 ◆跳转到第二阶段的C程序入口点 第二个阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和移植性。这个阶段的任务有: ◆初始化本阶段要使用到的硬件设备 ◆检测系统内存映射 ◆将内核映像和根文件系统映像从flash读到RAM ◆为内核设置启动参数 ◆启动内核(将控制交给内核) Linux内核介绍 目前专门针对嵌入式设备的Linux改版有针对无MMU的uClinux和针对有MMU的标准Linux在各硬件体系结构上的移植版本。 uClinux是通过对标准Linux内核裁减,去除虚拟内存管理部分的代码,并对内存分配进行优化,从而达到提高系统运行效率的目的。 因此uClinux的应用程序开发要求用户自己正确的处理内存管理,一旦错误地修改了其他进程的内存,将可能造成系统死机。基于像ARM2410这样的ARM9内核的ARM-Linux使用了MMU的内存管理,对进程有保护,提高了嵌入式系统中多进程的保护能力。使用户应用程序的可靠性得以提高,降低了用户的开发难度。 Linux内核结构 /arch目录,包含了体系结构相关部分的内核代码,如i386 arm等平台,而每个平台又包括以下几个目录: boot:包括启动内核所用的部分或全部代码 kernel:存放支持体系结构特有的特征的实现 lib:存放高速的体现结构特有的通用函数的实现 mm:存放体系结构特有的内存管理程序的实现 /drivers目录,保存了内核中所有设备驱动程序。 /fs目录,列出了Linux支持的所有文件系统的代码,如ntfs ext3和yaffs等 /include目录,包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。不同的平台需要的头文件会有所不同,因此该目录和arch目录一样,按平台划分多个子目录,如asm-arm是arm平台的。 Linux内核结构(续) /init目录,包含了内核的初始化代码,有main.c version.c两个文件。 /ipc目录,包含了核心进程间的通信代码。 /kernel目录,内核管理的核心代码在此,与处理器结构相关的代码都在arch/*/kernel目录下。 /lib目录,包括与平台无关的通用函数。 /mm目录,包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/kernel目录下。 /net目录,里面是核心的网络部分代码,其每个子目录对应于网络的一个方面。 其他目录,Documentation目录存放了许多文档。scripts目录存放配置内核的一些脚本文件。 Linux内核移植 1 Linux内核的移植主要包含启动代码的修改,内核的链接及装入,参数传递,内核引导几个部分。我们在移植工作中要改动的代码主要集中在与体系结构相关部分。 在/arch/arm/boot/bootp目录中,有个init.S的ARM汇编文件,它就是引导Linux内核在arm平台上启动的初始化代码。它里面定义了一个全局符号_start,它定义了默认的起始地址,同时它也是整体内核二进制镜像的

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档