嵌入式系统8-嵌入式Linux

上传人:n**** 文档编号:50732810 上传时间:2018-08-10 格式:PPT 页数:62 大小:172.50KB
返回 下载 相关 举报
嵌入式系统8-嵌入式Linux_第1页
第1页 / 共62页
嵌入式系统8-嵌入式Linux_第2页
第2页 / 共62页
嵌入式系统8-嵌入式Linux_第3页
第3页 / 共62页
嵌入式系统8-嵌入式Linux_第4页
第4页 / 共62页
嵌入式系统8-嵌入式Linux_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《嵌入式系统8-嵌入式Linux》由会员分享,可在线阅读,更多相关《嵌入式系统8-嵌入式Linux(62页珍藏版)》请在金锄头文库上搜索。

1、嵌入式Linux一、嵌入式Linux的定义l嵌入式Linux(Embedded Linux)是指对 Linux经过小型化裁剪后,能够固化在 容量只有几K字节或几M字节的存储器芯 片或单片系统中,应用于特定嵌入式场 合的专用Linux操作系统嵌入式Linux的优势 lLinux系统是层次结构且内核完全开放l强大的网络支持功能lLinux具备一整套工具链,容易自行建 立嵌入式系统的开发环境和交叉运行环 境,并且可以跨越嵌入式系统开发中仿 真工具的障碍lLinux具有广泛的硬件支持特性嵌入式Linux面临的挑战l1、扩充Linux的实时系统l2、改变Linux内核的体系结构l3、完善Linux的集成

2、开发环境1、扩充Linux的实时系统l内核不支持事件优先级和抢占实时特 性l对Linux实时性的扩展可以从两方面进 行: 向外扩展(让实时系统支持的范围更广 ,支持的设备更多) 向上扩展(扩充Linux内核,从功能上扩 充Linux的实时处理和控制系统)lRT-Linux的做法 Linux本身的任务以及Linux内核本身作 为一个优先级最低的任务 实时任务作为优先级最高的任务 实时任务以Linux的内核模块(Loadable Kernel Module,LKM)的形式存在2、改变Linux内核的体系结构lMonolithic内核体系lMicroKernel体系l执行效率l内核的体积l升级、维护

3、和移植微内核技术l缺点:操作系统的服务模块在独立的 地址空间运行,使得进程间通信和上 下文切换的系统开销大大增加,降低 了系统效率。3、完善Linux的集成开发环境lLinux在基于图形界面的特定系统定 制平台的研究上,与Windows操作系 统相比还存在差距POSIX实时扩展lPOSIX(Portable Operating System Interface)是为标准化类 UNIX操作系统所必须具有的特征和接 口而制定,其思想就是为了增强为类 UNIX操作系统编写的软件的可移植性二、嵌入式linux开发l最小的嵌入式 Linux 系统仅需要三个基本 元素: 引导实用程序 Linux 微内核,

4、由内存管理、进程管理和定时 服务构成 初始化过程l硬件驱动程序 一个或多个应用进程,以提供所需功能 面向嵌入式Linux 系统的 图形用户界面lMicroWindows/NanoX 开放源码 无任何硬件加速能力 图形引擎中存在许多低效算法 代码质量较差lOpenGUI 可移植性稍差lQt/Embedded 低的程序效率、大的资源消耗lMiniGUI嵌入式Linux开发l了解硬件 l针对所用CPU的编译器/汇编器/连接器,相 应的库工具,目标文件分析/管理工具,符号查 看器 l编程器,下载工具和查错器 l安排内存地址 l编写启动代码和机器相关代码:硬件初始 化,装载内核及安装根文件系统以及开始

5、内核执行 l驱动程序 嵌入式Linux的一般开发步骤: 精简内核 系统启动 驱动程序开发 界面开发:将X-Window换成MicroWindows精简内核 构造内核的常用命令包括:make config、 dep、clean、mrproper、zImage、bzImage、 modules、modules_install。 使用 make config 去掉多余功能。./Makefile ./arch/i386/kernel/ Makefile 系统启动 l系统启动的相关文件如下: ./arch/$ARCH/boot/ bootsect.s ./arch/$ARCH/boot/setup.s

6、./init/main.c bootsect.S 及 setup.S 驱动程序 在Linux系统里,设备驱动程序提供一组入口 点,它们由一个结构在设备驱动程序初始化 的时候向系统进行登记,以便系统在适当的 时候调用。Linux系统里,通过调用 register_chrdev 向系统注册字符型设备驱动程 序。 添加驱动程序 1.直接修改系统核心的源代码,把设备驱动 程序加进核心里 2.把设备驱动程序作为可加载的模块,由系 统管理员动态地加载它,使之成为核心的一 部分。 驱动程序模块 Linux中,模块可以用C语言编写,用gcc编译 成目标文件(不进行链接,作为*.o文件存在 )。为此需要在gcc

7、命令行里加上-c的参数。 在成功地向系统注册了设备驱动程序后(调 用register_chrdev),就可以用mknod命令来 把设备映射为一个特别文件。其它程序需要 使用这个设备的时候,对此特别文件进行操 作。 三、linux启动流程l1 加电或复位l2 BIOS的启动l3 Boot Loaderl4 操作系统初始化1 加电或复位l冷启动过程开始,中央处理器进入复位 状态,将内存中的所有数据清零,对内 存进行校验,如果没错,CS寄存器将置 入FFFF,IP寄存器置入0000,这个 CS:IP组合指向的是BIOS的入口。系统 就是这样进入BIOS启动过程的。2 BIOS启动l上电自检POST(

8、Power On Self Test)l对系统内的硬件设备进行监测和连接l最后,BIOS将从软盘或硬盘上读入 Boot Loader.如果从硬盘启动, BIOS将读入该盘的零柱面零磁道1扇 区(MBR),这个扇区上就放着Boot Loader.2 BIOS启动l除了启动程序,BIOS还提供了一组中断以 便于对硬件设备的访问。我们知道,当键 盘上的某一键被按下,CPU就会产生一个 中断并把这个键的信息读入。l在操作系统没有被装入以前(Bootsect.S 还没有被读入),中断的响应程序由BIOS 提供。3 Boot LoaderlBoot Loader是一段汇编代码,存放 在MBR中,它的主要作

9、用就是将系统 启动代码读入内存。3 Boot Loaderl因为在启动过程中,BIOS会把Boot Loader读入内存,并把控制权交给它 。MBR(硬盘启动)内的代码就是 Boot Loader或者它的一部分,为了 说明Boot loader的实现,先解释磁 盘结构。3 Boot Loaderl一个硬盘在DOS文件系统下可被分为四个基本分区 ,可以把一个基本分区定义为一个扩展分区,然后 再把这个基本分区分为一个或多个逻辑分区。l整个硬盘的分区表存放在硬盘的第一个扇区(MBR ),每个扩展分区也对应一个分区表,它存放在该 扩展分区对应的第一个扇区里。l除主引导扇区外,每个基本分区和扩展分区也有

10、自 己的引导扇区,结构与MBR相同,但逻辑分区的引 导扇区不能用于启动。3 Boot Loaderl如果是硬盘启动,Boot Loader将查 找主分区表中标记为活动分区的表项 ,把该表项对应的分区的引导扇区读 入,然后将控制权交给该扇区内的引 导程序。3 Boot Loaderl如果计算机上装有不只一个操作系统 ,仅仅MS-DOS的Boot Loader无法 完成这种工作,需要一个可以多重起 动的工具,下面介绍Linux下最常用 的LILO.3 Boot LoaderlLILO实际上是一个在Linux环境下编写的Boot Loader 程序,主要功能是引导Linux操作系统的启动。lLILO

11、的功能实际上是有几个程序共同实现的,它们是:(1)Map Installer 这是LILO用于管理启动文件的程序 。它将boot loader写入引导分区,创建纪录文件以映射 内核的启动。(2)The boot loader 它负责把Linux内核或其他操作系 统 的引导分区读入内存。还提供命令行接口,让用 户选择从哪个操作系统启动和加入启动参数。(3)其他文件:主要包括用于存放Map Installer记录的 map文件和存放LILO配置信息的配置文件。4 进入操作系统lBoot Loader 做了这么多工作,一言 以蔽之,只是把操作系统的代码调入 内存,所以当它执行完后,自然该把 控制权交

12、给操作系统,由操作系统的 启动程序来完成剩下的工作。4 进入操作系统l把控制权交给Setup.S这段程序l进入保护模式,同时把控制权交给 Head.SlHead.S调用/init/main.C中的 start_kernel函数,启动程序从 start_kernel()函数继续执行4 进入操作系统 (1)Setup.Sl首先,Setup.S对已经调入内存的操作系统代码进 行检查,如果没错,它会通过BIOS中断获取内存 容量,硬盘等信息(实模式)l准备让CPU进入保护模式a.先屏蔽中断信号b.调用指令lidt和lgdtc.对8259中断控制器进行编程d.协处理器重新定位完成这几件事后,Setup.

13、S设置保护模式的标志, 重取指令,再用一条跳转指令jmpi 0x100000,KERNEL_CS。进入保护模式下的启动 阶段,控制权交给Head.S.4 进入操作系统 (2)Head.Sl也要先做屏蔽中断一类的工作l然后对中断向量表做一定的处理lBoot Loader读入内存的启动参数和命令行参数, Head.S把它们保存在empty_zero_page页中l检查CPU类型l对协处理器进行检查 l页初始化,调用setup_paging这个子函数 l因为已进入保护模式,段机制的多任务属性体现 4 进入操作系统 (3)main.c中的初始化lHead.S调用/init/main.c中的 start

14、_kernel函数,把控制权交给它 ,这个函数是整个操作系统初始化的 最重要的函数,一旦它执行完,整个 操作系统的初始化也就完成了。4 进入操作系统 (3)main.c中的初始化l计算机在执行start_kernel前以进入 了保护模式,使处理器完全进入了全 面执行操作系统代码的状态。l但直到目前为止,这都是针对处理器 的。而一旦start_kernel开始执行, Linux内核就一步步展现。lStart_kernel执行后,就可以以一个 用户的身份登陆和使用Linux了4 进入操作系统 (3)main.c中的初始化l较为重要的函数如下lSetup_arch() 最基本硬件的初始化lPagin

15、g_init() 线性地址空间映射lTrap_init()中断向量表初始化lInt_IRQ与中断有关的初始化lSched_init()进程调度初始化lConsole_init()对中断的初始化4 进入操作系统 (3)main.c中的初始化l对文件系统的初始化lInode_init() i节点管理机制初始化lName_cache_init() 目录缓存机制初 始化lBuffer_init() 块缓存机制初始化4 进入操作系统 (3)main.c中的初始化l启动到了目前这种状态,只剩下运行 /etc下的启动配置文件。l这时初始化程序并没有完成操作系统 各个部分的初始化,更关键的文件系 统的安装还没

16、有涉及,这是在init进程 建立后完成的。就是start_kernel()最 后部分内容。4 进入操作系统 (4)建立init进程lLinux要建立的第一个进程是init进程l启动所需的Shell脚本文件a.Linux系统启动所必须的b.用户登陆后自己设定的 系统启动所必须的脚本存放在系统默认 的配置文件目录/etc下。首先调用的 是/etc/inittab.四、Linux系统移植的两 大部分l内核部分和系统部分l(1)内核部分初始化和控制所有硬件设 备(严格说不是所有,而是绝大部分 ),为内存管理、进程管理、设备读 写等工作做好一切准备。l(2)系统部分加载必需的设备,配置各 种环境以便用户可以使用整个系统。(1)内核移植lLinux内核可以视为由五个功能部分 组成:进程管理(包括调度和通信) 、内存管理、设备管理、虚拟文件系 统、网络l需要改动的就是进程管理、内存管理 和设备管理中被独立出来的那部分即 硬件相关部分的代码修改的代码l进程管理底层代码lBIOS接口代码l时钟、中断等板上设备支持代码l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

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