基于linux的嵌入式系统开发技术资料

上传人:今*** 文档编号:112021272 上传时间:2019-11-04 格式:PPT 页数:103 大小:276.50KB
返回 下载 相关 举报
基于linux的嵌入式系统开发技术资料_第1页
第1页 / 共103页
基于linux的嵌入式系统开发技术资料_第2页
第2页 / 共103页
基于linux的嵌入式系统开发技术资料_第3页
第3页 / 共103页
基于linux的嵌入式系统开发技术资料_第4页
第4页 / 共103页
基于linux的嵌入式系统开发技术资料_第5页
第5页 / 共103页
点击查看更多>>
资源描述

《基于linux的嵌入式系统开发技术资料》由会员分享,可在线阅读,更多相关《基于linux的嵌入式系统开发技术资料(103页珍藏版)》请在金锄头文库上搜索。

1、第六章 基于Linux的 嵌入式软件开发技术 目录 w嵌入式软件设计 wARM-Linux内核 wARM-Linux系统的调试 wARM-Linux的设备驱动程序 w嵌入式GUI简介 嵌入式软件设计 1. 交叉编译 2. 引导加载程序Bootloader 3. Linux内核移植 4. Linux的文件系统 嵌入式软件设计交叉编译 嵌入式软件设计引导加载程序 嵌入式Linux系统通常可以分为4个层次: w引导加载程序:一般烧写在Flash中, 常称为Bootloader,是开发板运行的第一 段程序,初始化最基本的硬件及加载 Linux 内核。 wLinux内核:特定为嵌入式平台定制的 内核以及

2、内核的启动参数。 w文件系统:包括根文件系统和建立于 Flash设备之上的文件系统。 w用户应用程序:特定用户的应用程序, 有时在用户应用程序和内核层之间可能还 会包括一个嵌入式图形用户界面,常用的 嵌入式GUI有QT、Micro Windows和 MiniGUI等。 嵌入式软件设计引导加载程序 Bootloader一般放在ROM、EEPROM和Flash中,在引导 时需要将部分代码和数据拷则到内存中。 Bootloader一般分为2部分: w 第1部分为基本硬件初始化、异常中断处理、设置堆 栈并将第2部分的代码和数据拷贝到内存; w 第2部分为本阶段使用硬件的初始化、内存检测、内 核的载入、

3、设置和启动,提供人机接口等功能。 同时装有Bootloader、内核启动参数、内核映像和根 文件系统映像的固态存储设备的典型空间分配结构图。 嵌入式软件设计内核移植 Linux移植即把Linux操作系统针对具体的目标 平台做必要改写之后,安装到该目标平台,使其正 确地运行起来。其基本内容是: w获取某一版本的Linux内核源码,根据具体目标平 台对该源码进行必要的改写(主要是修改体系结构 相关部分); w 添加一些外设的驱动,打造一款适合于目标平台 (可以是嵌入式便携设备也可以是其他体系结构的 PC机)的新操作系统,并对该系统进行针对目标平 台的交叉编译,生成一个内核映像文件; w将该映像文件

4、烧写(安装)到目标平台中。 嵌入式软件设计内核移植 通常对Linux源码的改写工作难度较大,它要求 不仅对Linux内核结构非常熟悉, 而且对目标平台 的硬件结构也非常熟悉。同时还要求对相关版本的 汇编语言比较熟悉,因为与体系结构相关的部分源 码往往是用汇编语言写的。因此这部分工作一般由 目标平台提供商完成。 针对目前嵌入式系统中最流行的ARM平台,它的 这部分工作就是由英国ARM公司的工程师完成的。 使用者可以从其网站上下载相关版本Linux内核的 补丁(Patch),把它打到所用的Linux内核上,再进 行交叉编译即可。 嵌入式软件设计内核移植 以Linux2.6.9为例,其基本过程是:

5、从ftp:/ftp.arm.1inux.org.uk下载Linux2.6.9 内核以及关于ARM平台的补丁。 给Linux2.6.9打补丁。 准备交叉编译环境。交叉编译环境工具链一般包 括Binutils(含AS汇编器和LD链接器等)、ARM- GCC和Glibc等。建立交叉编译环境。 修改内核目录下的Makefile文件。 进行编译。 嵌入式软件设计内核移植 Linux内核源码的修改 建立交叉编译环境之后,就可以对打过ARM补丁 的Linux内核进行移植修改。Linux的移植是个繁 重的工作,主要包含启动代码的修改、内核的链 接及装入、参数传递和内核引导4部分。 Linux内核分为体系结构相

6、关部分和体系结构无 关部分。在Linux启动的第1阶段,内核与体系结 构相关部分(arch目录下)首先执行,完成硬件寄 存器设置及内存映像等初始化工作,然后把控制 权转给内核中与系统结构无关部分。 在移植工作中要改动的代码主要集中在与体系 结构相关部分。 嵌入式软件设计内核移植 wLinux内核源码的裁减 wLinux内核源码的编译 wLinux内核源码的烧录 嵌入式软件设计文件系统 Linux内核在启动过程中会安装文件系统Root, 文件系统为Linux操作系统不可或缺的重要组成部 分。用户通常通过文件系统、操作系统与硬件设 备进行交互。在Linux系统中,硬件也作为文件系 统的一部分。 L

7、inux的一个最重要特点就是它支持许多不同的 文件系统。这使Linux非常灵活,能够与许多其他 操作系统共存。Linux支持的常见的文件系统有: JFS、ReiserFS、ext、ext2、ext3、IS09660、 XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、 NFS、SMB、SysV和PROC等。随着时间的推移, Linux支持的文件系统数还会增加。 ARM-Linux内核 1. ARM-Linux内存管理 2. ARM-Linux的中断响应和处理 3. ARM-Linux系统调用 4. 系统的启动和初始化 5. ARM-Linux进程管理和调度 6. Lin

8、ux的模块机制 ARM-Linux内核 Linux内核主 要由5个子系 统组成:进 程调度、内 存管理、虚 拟文件系统 、网络接口 、进程间通 信 ARM-Linux内核 1.进程调度 进程调度控制进程对CPU的访问。要选择下一个进程运行 时,由调度程序选择最值得运行的进程。Linux使用了比较 简单的、基于优先级的进程调度算法选择可运行进程。 2.内存管理 内存管理是Linux中负责管理内存的模块。Linux采用页 式存储管理机制。内存管理的任务是屏蔽各种硬件的内存结 构向上层返回统一的访问界面。Linux支持各种各样的硬件 体系结构,对每种硬件结构,其内存组织形式不尽相同,并 解决了多进程

9、状态下内存不足的问题,做到按需调页。 ARM-Linux内核 3.虚拟文件系统 Linux最重要的特征之一就是支持多个不同的文件系统, Linux目前支持的文件系统多达十余种,随着时间的推移, 这一数目还在不断增加。 为了支持多种文件系统,Linux用一个被称为虚拟文件系 统(VFS)的接口层将真正的文件系统同操作系统及系统服务 分离开。VFS允许用户同时安装多个不同的文件系统。 4.网络接口 网络接口提供了对各种网络标准的存取和对各种网络硬 件的支持。网络接口可分为:网络协议和网络驱动程序。网 络协议部分负责实现每一种可能的网络传输协议;网络设备 驱动程序负责与硬件设备通信,每一种可能的硬件

10、设备都有 相应的设备驱动程序。 ARM-Linux内核 5进程间通信 Linux中的每个进程都有自己的虚拟地址空间,操作系统 的一个最重要的基本管理目的,就是避免进程之间的互相影 响。但有时用户也希望能够利用两个或多个进程的功能完成 同一任务,为此,Linux内核提供了许多机制,利用这些机 制,进程之间可以进行通信并共同完成某项任务,这种机制 称为进程间通信(1PC)。信号和管道是最基本的两种,除此 以外,Linux还提供SystemV的进程间通信机制,包括消息队 列、信号灯及共享内存。 ARM-Linux内核内存管理 w存储管理是一个很大的范畴 n存储地址映射和内存空间的分配 n对地址访问的

11、保护和限制 nI/O地址映射 w存储管理机制的实现和具体的CPU以及MMU 的结构关系非常紧密 w操作系统内核的复杂性相当程度上来自内 存管理,对整个系统的结构有着根本性的 深远影响。 ARM-Linux内核内存管理 wMMU,也就是“内存管理单元”,其主要作用 是两个方面: n地址映射 n对地址访问的保护和限制 wMMU可以集成在芯片中,也可以作为协处理器 ARM-Linux内核内存管理 w冯诺依曼结构:程序只是一种数据, 对程序也可以像对数据一样加以处理, 并且可以和数据存储在同一个存储器中 。 w哈佛结构:采用程序和数据两个存储器 、两条总线的系统结构。 当前嵌入式系统中使用哈佛结构的较

12、多。 ARM-Linux内核内存管理 ARM存储管理机制 wARM系统结构中,地址映射可以是单层的按“段 (section)”映射,也可以是二层的页面映射 w采用单层的段映射的时候,内存中有个“段映射 表” ,当CPU访问内存的时候: n其32位虚地址的高12位用作访问段映射表的下标,从 表中找到相应的表项 n每个表项提供一个12位的物理段地址,以及对这个段 的访问许可标志,将这12位物理段地址和虚拟地址中 的低20位拼接在一起,就得到了32位的物理地址 ARM-Linux内核内存管理 w如果采用页面映射,“段映射表”就成了“首 层页面映射表”,映射的过程如下: n以32位虚地址的高12位(b

13、it20-bit31)作为访问 首层映射表的下标,从表中找到相应的表项,每个 表项指向一个二层映射表。 n以虚拟地址中的次8位(bit12-bit19)作为访问所 得二层映射表的下标,进一步从相应表项中取得20 位的物理页面地址。 n最后,将20位的物理页面地址和虚拟地址中的最低 12位拼接在一起,就得到了32位的物理地址。 ARM-Linux内核内存管理 w凡是支持虚存的CPU必须为有关的映射表 提供高速缓存,使地址映射的过程在不访 问内存的前提下完成,用于这个目的高速 缓存称为TLB。 w考虑到芯片成本,高速缓存不能放入全部 映射表,由MMU有选择地存放部分表项。 wARM系统结构中配备了

14、两个地址映射TLB和 两个高速缓存。 ARM-Linux内核内存管理 wARM处理器中,MMU是作为协处理器CP15的 一部分实现的。 wMMU相关的最主要的寄存器有三个: n控制寄存器,控制MMU的开关、高速缓存的开 关、写缓冲区的开关等 n地址转换表基地址寄存器 n域访问控制寄存器 ARM-Linux内核内存管理 控制寄存器中有S位(表示System)和R位(表示 ROM),与访问权限段位AP结合,决定了CPU在当 前运行状态下对目标段或者页面的访问权限: APSRCPU运行在特权状态CPU运行在用户状态 00 00不能访问不能访问 10只读不能访问 01只读只读 11不确定不确定 01读

15、写不能访问 10读写只读 11读写读写 ARM-Linux内核内存管理 ARM-Linux存储机制的建立 wARM-Linux内核将4GB地址空间分为两个部 分,系统空间和用户空间(1GB/3GB) wARM将I/O也放在内存地址空间中,所以系 统空间的一部分虚拟地址不是映射到物理 内存,而是映射到一些I/O设备的地址。 ARM-Linux内核内存管理 wARM的实现和x86的既相似又有很多不同: n在ARM处理器上,如果整个段(1MB,并且和 1MB边界对齐)都有映射,就采用单层映射 ;而在x86上总是采用二层映射 nARM处理器上所谓的“段(section)”是固 定长度的,实质上就是超大

16、型的页面;而 x86上的“段(segment)”则是不定长的 ARM-Linux内核内存管理 ARM-Linux进程的虚存空间 wLinux虚拟内存的实现需要6种机制的支持 : n地址映射机制 n内存分配回收机制 n缓存和刷新机制 n请求页机制 n交换机制 n内存共享机制 ARM-Linux内核内存管理 task_struct结构分析图 : ARM-Linux内核内存管理 w由于那些虚拟内存区域来源各不相同, Linux使用vm_area_struct中指向一组虚拟 内存处理过程的指针来抽象此接口 w为进程创建新的虚拟内存区域或处理页面 不在物理内存中的情况下,Linux内核重复 使用进程的vm_area_struct数据结构集合 w当进程请求分配虚拟内存时,Linux并不直 接分配物理内存 ARM-Linux内核中断响应与处理 w中断是一个流程,一般要经过三个环节: n中断响应 n中断处理 n中断返回 w中断响应是第一个环节,主要是确定中断 源,在整个中断机制中起着枢纽的作用 ARM-Linux内核中断响应与

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号