嵌入式Linux开发

上传人:xmg****18 文档编号:116878303 上传时间:2019-11-17 格式:PPT 页数:87 大小:1.90MB
返回 下载 相关 举报
嵌入式Linux开发_第1页
第1页 / 共87页
嵌入式Linux开发_第2页
第2页 / 共87页
嵌入式Linux开发_第3页
第3页 / 共87页
嵌入式Linux开发_第4页
第4页 / 共87页
嵌入式Linux开发_第5页
第5页 / 共87页
点击查看更多>>
资源描述

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

1、第6章 嵌入式Linux开发 主讲:李岩 现在 Linux 广泛用于各类计算应用, 不仅包括 IBM 的微型 Linux 腕表、手持设 备(PDA 和蜂窝电话)、因特网装置、瘦 客户机、防火墙、工业机器人和电话基础 设施设备,甚至还包括了基于集群的超级 计算机。 本章主要介绍了: 怎样应用Linux来进行嵌入式系统的开发 。 选用Linux操作系统的优势。 Linux的简化版本uClinux相关知识。如内 存管理、进程管理、启动过程等。 开发工具Hittool的具体应用。 6.1 嵌入式Linux概况 nLinux操作系统开放源代码,可以裁剪内核 ,并已在x86、Alpha、Sparc、MIP

2、S、 PPC、Motorola、NEC和ARM等硬件平台 上稳定、高效地运行。 nLinux操作系统作为一种多任务、稳定可靠 、内核可裁剪的系统,是开发嵌入式软硬 件产品的优秀软件平台。 n嵌入式Linux是一种开放源码、软实时、多 任务的嵌入式操作系统。 6.1.1 嵌入式Linux l在嵌入式开发中,随着微处理器的产生,价格低廉、结构 小巧的CPU和外设接口提供了稳定可靠的硬件架构。 l高端嵌入式系统要求许多高级的功能,如图形用户界面和 网络支持。许多高端RTOS供应商已经提供了这些功能, 但其价格也很高,一般人难以接受。 lLinux为嵌入式操作系统提供了一个极有吸引力的选择, 它是一个

3、类UNIX的、以内核为基础的、有完备内存保护 机制的、多任务多进程的操作系统。 l由于Linux具有开放性,所以许多人认为Linux非常适合多 数Intemet设备。他们认为Linux可以支持不同的设备,支 持不同的配置。 6.1.1 嵌入式Linux 1. 可运行于多种硬件平台 Linux符合IEEE POSIX.1标准,使应用程序具有较好的可移植性。 Linux内核已经被移植到多种硬件平台上,这对受开销、时间限制的 研究与开发项目是很有吸引力的。 2. 可裁剪,性能优异,应用软件丰富 Linux的动态模块加载使Linux的裁剪极为方便,高度模块化的部件使 添加非常容易。 Linux是一个全

4、面的多任务和真正的32位操作系统。系统运行稳定, 功能强大,支持多种硬件平台,应用工具多。 3. 使用成本低 Linux是免费软件,只要遵守GPL(GNU General Public License)的规 定,就可以免费获得拷贝,并进行开发和商业发行。 6.1.1 嵌入式Linux 4. 强大的网络功能 ILinux操作系统最突出的是网络部分,基本上所有的网络 协议和网络接口都可以在Linux上找到。 ILinux内核对网络协议栈的设计是从简捷实用的角度出发 的,它有一整套的网络协议模块。 ILinux的网络功能十分强大,更重要的是, Linux的网络 功能和协议是以内核可选的模块方式提供的

5、,它允许用户 自由地裁剪和优化。 5. GUI开发支持 GLinux本身有性能优秀的X Window系统,在X Window系 统的支持下,能方便地进行图形用户界面的开发。 6.1.1 嵌入式Linux GX Window是一个在大多数UNIX工作站上使用的图形用户 界面。 GX Window系统应用于嵌入式系统时,要考虑嵌入式系统 的特殊条件。 6. 丰富的开发技术资源 HLinux在这几年中不断成熟,越来越多的人加入了Linux的 行列。 H这意味着对新硬件的Linux驱动程序甚至比用于其他UNIX 系统(如Solaris的驱动程序)还来得及时。 HLinux庞大的志愿者网络在生产“补丁”

6、程序方面反应很快 。 6.1.2 嵌入式Linux的组成 最基本的嵌入式Linux系统需要3个基本元素: O系统引导程序,用于完成机器加电后的系统定位引 OLinux系统内核,为嵌入式应用提供一个软件环境,为应 用程序完成基本的底层的资源管理工作; O初始化过程,完成基本的初始化。 O为使这个最小嵌入式系统具有一定的实用性,还需加上硬 件的驱动程序及个或几个应用进程以提供必要的应用功 能支持。 O如果应用比较复杂,可能还需要添加一个可以在ROM或 RAM中使用的文件系统、TCP/IP网络协议栈等。 O在PDA领域,还需要加上个GUl支持。 6.1.3 嵌入式Linux的版本 1.将Linux移

7、植以满足实时要求的实时操作系统 ,应用于一些关键的控制场合,如Fsmlabs公司 的RT Linux,Monta Vista的Hard Hat Linux。 2.尽可能保留Linux的强大功能,尽可能地减少 其体积,以满足许多嵌入式系统对体积的要求 ,如uClinux。 3.针对特定嵌入式领域采用整合方案,如Lineo, TimeSys,合肥华恒等。接下来,简要介绍常用 的两个嵌入式Linux操作系统。 6.1.3 嵌入式Linux的版本 1.实时Linux(RT Linux) RT Linux是美国新墨西哥州大学计算机系研制开发的。 RT Linux实现的内核位于通常的Linux内核之下,这

8、个内核是一个实 时内核,它只需要完成底层的任务创建、中断服务程序,并为底层任 务、ISR和Linux进程之间进行通信排队。 RT Linux的调度方法和用户实时任务的工作是通过Linux的可导入模 块的方式进行的。 2. uClinux uClinux是一个GNU的项目,代码完全开放。 uClinux的英文解释是Micro Control Linux,可理解为“微控制领域中 的Linux系统”。 它专门应用于没有MMU的CPU,并专为嵌入式系统做了许多小型化 的工作,已支持的微处理器包括Motorola MC68000,MCF5206和 MCF5207ColdFire等。 6.2 uCLinu

9、x开发介绍 目前,uClinux往往基于两个Linux内核版本,2.0.38 是一个比较成熟的版本,2.4.x是最新的版本 Hitool 套件同时提供了对他们的支持。 一般uClinux的内核大小在500k左右,如果加上一 些基本的应用,也就在900k左右.非常适合于嵌入式 系统。 uClinux架构如图6-1所示(下页) ,一些重要的 模块在下面描述。 6.2.1 启动过程(Bootstrap) n启动模块Bootstrap负责用来起动Linux内核 ,包括Chip Selector初始化,系统堆栈的初 始化,把压缩的Linux映像从Flash中解压到 RAM中,并把控制权交给内核的初始化例

10、 程。 n这部分工作是与你的硬件高度相关的,所 以这部分的代码要尽量精简。 6.2.2 内核初始化(Kernel Initialization) 6内核初始化的入口地址是: start_kernel(在init/main.c中)。 6它初始化内核的其它部分,包括异常(trap )、中断(IRQ)、内存页(Page)、调度( Scheduling)、驱动程序等等。并启动 “init”进程进入多任务环境。 6.2.3 系统调用处理/异常处理 当“init”程序运行后,内核对整个系统的运行不再进行直接控制,而 是通过系统调用给应用程序提供服务和响应外部及内部的异步事件, 例如:程序错误,硬件中断等。

11、 在ARM中,系统调用采用swi指令所产生的软件异常来实现 , 如例所示: swi 0x900004(其中0x900004表示这个系统调 用为sys_write)。 00002550 : 2550: ef900004 swi 0x00900004 2554: e3700a01 cmn r0, #4096 ; 0x1000 2558: 2afff6b0 bcs 20 255c: e1a0f00e mov pc, lr 6.2.4 驱动程序(Device Driver) 驱动程序是整个Linux内核的主要组成部分,它们控制着操 作系统和外部设备的交互。 Linux的驱动程序是可选的,但是典型的系统

12、应该包括一 个控制台(Console),一个通用串口驱动程序,一个块设备 (用来存放根文件系统) 驱动程序。 当Linux内核起动的时候,需要一个输出调试信息的设备。 这个设备往往通过串口来实现。 这个调试终端可以通过register-console 这个函数来创建。 而所有的调试信息都通过Printk例程通过这个调试终端来 输出。 6.2.5 文件系统(File System) y支持多种文件系统是Linux一个重要的特性,uClinux同样 把这一特性带进了嵌入式系统中,并针对嵌入式系统作了 一些取舍。 y在Hitool for uClinux包括了romfs, Ext2 FS, RAM

13、FS, NFS 。 y其中,romfs 是最简单的只读文件系统,所占用的空间最 少,我们用它来做根文件系统(root file system)。 y根文件系统里存放Linux启动时要用到的设备文件,配置 文件和应用程序。 y例如:/dev/tty0, /etc/rc , /bin/init ,/bin/sh, 等等。 6.2.6 内存管理 ! uClinux不能使用处理器的虚拟内存管理技术但仍然采用 存储器的分页管理,系统在启动时把实际存储器进行分页 。在加载应用程序时程序分页加载。但是由于没有MMU管 理,所以实际上uClinux采用实存储器管理策略(物理内存 )。 !uClinux系统对于

14、内存的访问是直接的,(它对地址的访问 不需要经过MMU,而是直接送到地址线上输出),所有程 序中访问的地址都是实际的物理地址。 !由于应用程序加载时必须分配连续的地址空间,所以开发 人员在开发应用程序时必须考虑内存的分配情况并关注应 用程序需要运行空间的大小。 !从内存的访问角度来看,开发人员的权利增大了(开发人 员在编程时可以访问任意的地址空间),但与此同时系统 的安全性也大为下降。 6.2.7 进程管理 uClinux 和Linux之间最大的区别在于平面存储器模型。没有虚拟存储 器可以提供非常有效的fork 系统调用。 由于在使用fork时,内核会将父进程拷贝一份给子进程,但是这样的 做法

15、相当浪费时间,因为大多数的情形都是程序在调用fork后就立即 调用exec,这样刚拷贝来的进程区域又立即被新的数据覆盖掉。 因此Linux系统提供一个系统调用vfork,vfork假定系统在调用完成 vfork后会马上执行exec,因此vfork不拷贝父进程的页面,只是初始 化私有的数据结构与准备足够的分页表。 这样实际在vfork调用完成后父子进程事实上共享同一块存储器(在 子进程调用exec或是exit之前),因此子进程可以更改父进程的数据 及堆栈信息, 因此vfork系统调用完成后,父进程进入睡眠,直到子进程执行exec。 并且在这段时间内,子进程不能更改数据段和堆栈的内容。 6.2.7

16、 进程管理 当子进程执行exec时,由于exec要使用被执行程序 的数据,代码覆盖子进程的存储区域, 这样将产生写保护错误(do_wp_page)(这个时 候子进程写的实际上是父进程的存储区域)。这 个错误导致内核为子进程重新分配存储空间。 当子进程正确开始执行后,将唤醒父进程,使得 父进程继续往后执行。 所以,在uClinux中,想让父子进程同时运行同一个 程序是不可以的。 6.2.8 运行时间库及应用程序 运行时间库提供了用户程序和内核程序的接口。 1. 程序的入口代码 用户自己写程序一般从main开始,其实程序在运行时真正 的进入点是C运行库的一部分。这部分代码执行初始静态 数据,例如错误号(errno)以及环境指示符(environ) ,并且将参数argc 和argv传输到main。 参数和环境一般根据宏程序start_thread(定义在 include/proc/processer.h) 的调用约定,放在寄存器或者堆 栈上。execve 系统调用利用star

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

当前位置:首页 > 大杂烩/其它

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