linux 操作系统的移植及应用.ppt_第1页
linux 操作系统的移植及应用.ppt_第2页
linux 操作系统的移植及应用.ppt_第3页
linux 操作系统的移植及应用.ppt_第4页
linux 操作系统的移植及应用.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,linux 操作系统的移植及应用,培训中心 2010,2,主要内容,嵌入式操作系统 linux概述 建立开发环境 linux内核配置与编译 linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序 linux应用程序开发,3,操作系统概述,为什么需要操作系统 早期的8位/16位系统中大多没有操作系统 进入32位时代 - 系统中的软件越来越复杂,完全驾奴的能力不够 - 维护成本太高、系统升级困难 使用嵌入式操作系统 - 稳定性好、性能高、功能完善 - 遵循标准,便于移植、升级,4,嵌入式操作系统的特点,提供内核管理 多任务管理 外围资源管理 要更稳定 可裁

2、剪、可配置 实时性需求 针对应用的优化与功能增强,5,典型的嵌入式操作系统,uC/OS-II操作系统 简单高效、免费、支持64个任务、支持多种CPU、无设备驱动程序、缺乏足够的应用模块。 eCOS操作系统 免费使用、支持多种CPU、 使用GNU工具链开发、有完备的设备驱动程序和应用模块、支持 POSIX标准、需要较多的系统资源。 VxWorks嵌入式实时操作系统 销售额最大,价格昂贵;通常只提供二进制码内核;支持多种CPU;完整的开发工具和测试 工具;完备的设备驱动和应用模块;支持POSIX标准;性能好,功能齐全。 WinCE操作系统 Microsoft出品、需购买许可、支持多线程、有优先级、

3、虚拟内存、提供类似PC机的操作系统 界面等。 Linux操作系统 类似UNIX;免费;源代码开放;符合POSIX标准;支持TCP/IP;支持绝大多数32位和64位 CPU;抢先式多任务处理;内存保护;虚拟内存等。 ,6,主要内容,嵌入式操作系统 linux概述 建立开发环境 linux内核配置与编译 linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序 linux应用程序开发,7,Linux操作系统,最初设计为桌面系统,现广泛应用于服务器。 Linux的特点:支持多种体系结构,支持大量外设,网络功能完善开放源代码,软件资源丰富,内核稳定而高效,大小及功能

4、均可定制。 满足嵌入式操作系统的要求,目前在嵌入式领域高速发展,催生了一些嵌入式Linux,如uClinux、RTLinux,1969年,Bell实验室,发明UNIX 1991年,芬兰Linus Torvalds,设计了Linux,8,Linux内核版本号约定,x.y.zz - x:主版本号 - y:次版本号,奇数=开发版,偶数=稳定版 - zz:子版本号,当前版本的修订次数 例如:2.4.18表示对核心2.4版本的第18次修订,该版本为可以使用的稳定版本。,9,linux应用特征,广泛的处理器结构和硬件平台支持 程序代码的质量与可靠度高 提供广泛的通信协议和软件标准支持 丰富的应用软件和广泛

5、的社群支持 低廉的成本 开源软件 可靠的系统安全,10,linux设计特征,linux的内存管理 linux的多进程处理 linux针对实时性的解决方案 执行程序的格式 文件系统 标准C函数库,11,linux系统组成,一个基于linux 的完整的嵌入式系统由三个部分组成:系统引导程序、linux 操作系统内核和文件系统。 系统引导程序通常称作Boot Loader,平台上执行的第一段代码,类似BIOS、BSP。 内核比较精简,压缩后一般小于1M。 文件系统主要存储用户应用程序,同时包括系统配置文件、系统程序和必需的驱动程序,根据用户所加入应用程序的大小,文件系统所占空间也存在比较大的差异。

6、采用分区存放,12,linux内核结构,Linux内核与大部分UNIX内核一样是单内核体系结构的,即它是由几个逻辑功能上不同的部分组合而成的大程序。 单内核结构可以动态加载和卸载模块(module),能够根据需要定制内核映像的尺寸; 具有很大灵活性,不需要重新编译内核且引导就能检验新的内核组件,方便用户构筑自己的个人内核。 Linux内核由5个主要的子系统组成,分别为:进程调度(SCHED)、内存管理(MM)、虚拟文件系统(Virtul File System,VFS)、网络接口(NET)和进程间通信(IPC)。,13,内核结构示意图,14,linux文件目录结构,linux 发布版文件目录结

7、构和功能如下图所示:,15,主要内容,嵌入式操作系统 linux概述 建立开发环境 编译运行linux linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序 linux应用程序开发,16,建立交叉编译环境,宿主机,目标机,Linux,Windows-Cygwin,安装环境,Linux环境下GNU工具(编译、链接),安装工具,17,Cygwin介绍,Cygwin软件是一个运行于windows下的Linux模拟环境。它包括: 动态链接库Cygwin.dll 一组Linux工具集 Cygwin提供的一组功能强大的工具,包括大多数GNU软件(如gcc,gdb,x

8、free86,bash,tetex,opengl,perl,python等),可以帮助开发人员将应用程序从Linux移植到Windows平台。 Cygwin对于学习掌握Linux操作环境,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。,18,Cygwin的安装和设置(一),下载网址: 运行Cygwin安装程序setup.exe,然后选择“Install from Local Directory“,选择“下一步”,如图所示。,19,Cygwin的安装和设置(二),选择Cygwin的安装目录。选择DOS文本文件类型(DOS与UNIX文本类型的区别

9、在于前者的换行为ASCLL的0 x0D和0 x0A组合,后者是0 x0D)。选择“下一步”,如图所示。,NTFS,20,Cygwin的安装和设置(三),选择安装项目。点击在安装项目左边的“default”,可以调整该项目的安装设置。开发Linux必须选择全部安装以下项目: Admin - 包括启动服务cygrunsrv等工具,NFS启动必备 Archive - 压缩解压工具集 Base - 基本的Linux工具集 Devel - 开发工具集,包括gcc、make等开发工具 Libs - 函数库 Net - 网络工具集 Shells - 常用Shell工具集 Utils - 包括bzip2等实用

10、工具集,21,交叉编译链接工具介绍(一),编译、汇编、链接工具 : arm-linux-g+、arm-linux-c+ C+编译器。 arm-linux-c+filt C+语言支持函数重载,可以使用相同的函数名称和不同的函数参数,连接器使用本工具来过滤 C+和Java 符号,防止重载函数冲突。 arm-linux-gcc 编译器。 arm-linux-as 汇编器。 arm-linux-ld 连接器。 arm-linux-protoize、arm-linux-unprotoize gcc的可选部分,protoize在程序中增加函数原型,转换程序符合标准C规范。Unprotoize则清除所找到的

11、的函数原型的参数。,22,交叉编译链接工具介绍(二),实用工具集 : arm-linux-addr2line arm-linux-ar arm-linux-nm arm-linux-objcopy arm-linux-objdump arm-linux-ranlib arm-linux-readelf,23,交叉编译链接工具介绍(三),文件系统工具: cramfsck CRAMFS文件系统的释放工具。 mkcramfs CRAMFS文件系统的生成工具。,24,将Linux系统下的工具链安装解压包: cross-armtools-linux-edukit2410.tar.bz2 在控制台使用以下

12、命令安装: 将cross-armtools-linux-edukit2410.tar.bz2拷贝到/tmp/目录下。 cd /tmp tar -P -xvjf cross-armtools-linux-edukit2410.tar.bz2 source armtools-linux/cross-install.sh 软件自动将工具链安装到/usr/arm-linux目录。,开发工具链安装,25,主要内容,嵌入式操作系统 linux概述 建立开发环境 linux内核配置与编译 linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序调试 linux应用程序开发

13、,26,安装linux源代码,linux官方网站linux源代码最新版本的下载地址为: .uk/developer/ 源代码包名称为linux-2.4.18-rmk7-pxa1-mz5.tar.bz2 。 解压linux源代码包,执行命令: cd /usr/local/src/ tar -xvjf linux-2.4.18-rmk7-pxa1-mz5.tar.bz2,27,配置linux内核,linux提供三个不同的命令进行 linux的配置,效果完全一样。 make menuconfig make config make xconfig 一般我们

14、选择make xconfig,它提供一个图形界面,比较直观。,28,内核配置选项,内核编译以前首先应该对内核进行配置,裁剪不必要的内容,在完全实现硬件功能的前提下尽量节约空间。,29,编译linux内核,cd /usr/local/src/kernel make dep -搜索linux编译输出与源代码之间的依赖关系,并以此生成依赖文件 make clean -清除以前构造内核时生成的所有目标文件、模块文件和临时文件。 make zImage -编译Linux内核,生成压缩的内核映像文件,30,运行linux,通过编译最终在arch/arm/boot目录下生成1个文件: zImage linu

15、x 内核2.4.x的压缩方式可执行映像文件。 烧写映像文件: 通过Flash烧写工具,分别将Bootloader(启动)、zImage以及 root.cramfs三个映像文件固化到Flash中。 配置超级终端: 启动PC上超级终端软件并设置超级终端为115200 波特率,无校 验, 1 位停止位,无数据流控制。 运行linux: 复位EduKit4 2410开发板,通过超级终端观察linux的启动运 行。,31,主要内容,嵌入式操作系统 linux概述 建立开发环境 编译运行linux linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序 linux应用

16、程序开发,32,linux的移植,处理器结构层次移植,33,处理器结构层次移植(1),处理器结构的源文件在kernel/arch目录下; 包含所有已支持的处理器,以子目录形式提供,如arm、armnommu、m68k、mips64等; linux使用的是arm; 处理器结构文件目录主要由以下这些子目录组成: kernel - 内核源代码 mm - 内存管理源代码 lib - 处理器特定的内部库函数 boot - 包含压缩内核的代码,也是内核文件最后编译生成的地方 tools - 包含自动产生文件的脚本,34,处理器结构层次移植(2),linux内核代码大部分独立于处理器与其体系结构,但其最底层

17、的代码是由各处理器结构特定的。 中断处理上下文、内存映射的维护、任务上下文和初始化过程等,这部分代码都在kernel/arch/目录下; 处理器结构的头文件在kernel/include目录下; 设备驱动文件通常是在kernel/drivers目录下; 分区类型和网络相关的部分则分别在kernel/fs和kernel/net目录下; 对一个新型的处理器结构,在移植中可参照其他的处理器结构,模仿与其相似的处理器体系结构程序编写,在某个处理器结构目录下修改文件使其达到待移植的处理器结构的要求。,35,芯片层次移植,芯片层次移植源程序主要集中在kernel/arch/arm/mach-xxxx目录,

18、头文件在kernel/include/asm-arm/arch-xxxx目录,移植内容主要包括以下部分:,芯片层次移植,其他,时钟脉冲频率,定时中断,中断处理,内核启动代码,芯片定义,设备号,36,板级移植,当使用处理器已经被linux支持时,主要的工作就是针对硬件电路板的区别进行的板级移植。,存储器参数,内核运行起始地址,内核解压引导程序相关地址,内核解压引导程序存储区初始化,驱动程序,37,主要内容,嵌入式操作系统 linux概述 建立开发环境 编译运行linux linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序 linux应用程序开发,38,系

19、统引导程序bootloader,BIOS,BSP,Bootloader,商业OS,39,PC引导方式,BIOS 在完成硬件检测和资源分配后,将硬盘中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。 Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。,40,嵌入式Bootloader,在嵌入式系统中,通常并没有像 BIOS 那样的固件程序,因此整个系统的加载启动任务就完全由 Boot Loader 来完成。 系统在上电或复位时通常都从地址 0 x00000000 处

20、开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。,41,Bootboader的作用与特点,Bootloader的作用是初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 Bootloader独立于操作系统,高度依赖于硬件,包括处理器的体系结构、具体型号、硬件电路板的设计。不可能实现一个通用的Bootloader。 linux的发行包中不包含Booloader,但用户可以直接使用或参考一些开源的Bootloader软件工程。,42,文件存放及引导方式,1.Boot Loader、内核映像和文件系

21、统映像在系统中的存储的典型空间分配结构图如下: 2. 如果RAM空间紧张,并且对系统执行速度要求不高,也常使用未经压缩的在Flash本地执行XIP(Execute In Place)方式的内核映像文件。 3.调试过程中:经常使用未经压缩的在Ram本地执行XIP方式的内核映像文件。 与在Flash本地执行的映像文件的区别是它不需要将数据段从Flash拷贝到Ram中的过程。 这种方式下,需要Boot Loader具有通过网口或串口下载内核映像文件并启动内核的功能。,43,系统引导程序最简功能设计,禁止所有的中断,设置处理器时钟、运行速度,存储区初始化,设置堆栈指针将bss段清零,跳转到内核映像的入

22、口,44,系统引导程序完备功能设计,设计一个完备的Boot Loader,可在最简功能基础上考虑是否增加以下功能: (1)上电自检; (2)支持串口通讯方式,提供串口方式的命令控制台; (3)支持以太网通讯方式,提供以太网通讯方式的命令控制台; (4)可以通过串口或以太网下载并引导内核和文件系统映像文件; (5)支持通过串口或以太网通讯烧写映像文件到Flash; (6)能够读写I/O端口、存储区、寄存器; (7)配置功能,包括设置IP地址、MAC地址、系统时间等。,45,开源Boot Loader,常用的Boot Loader有以下几种:vivi、Blob、U-Boot等 实际应用中常常在VI

23、VI源代码的基础上修改来制作系统的Boot Loader,46,主要内容,嵌入式操作系统 linux概述 建立开发环境 编译运行linux linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序调试 linux应用程序开发及调试,47,Linux的文件系统,文件系统是反映负责存取和管理文件信息的机构 。 文件系统通常是单独建立的 。 包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。 文件系统的概念使得用户能够查看存储设备上的文件和路径而无需考虑实际物理设备的文件系统类型。,48,文件系统的层次结构,

24、文件系统有多种类型,如:RAMFS、CRAMFS、JFFS2 文件系统的层次结构图:,49,文件系统的挂载,文件系统的挂载: mount opt-t fs Examles: /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 / /bin/mount -n -t ramfs ramfs /etc /bin/mount -t jffs2 /dev/mtdblock/4 /usr,50,cramfs 文件系统,cramfs 不会影响系统读取文件的速度,而且是一个高度压缩的文件系统,因此非常广泛应用于嵌入式系统中。 生成映象文件: mkcram

25、fs -h -e edition -i file -n name dirname outfile,51,主要内容,嵌入式操作系统 linux概述 建立开发环境 编译运行linux linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序 linux应用程序开发,52,linux内核启动过程,Bootloader完成系统初始化工作后,将运行控制权交给linux内核。根据内核是否压缩以及内核是否在本地执行,linux通常有以下两种可选的启动方式: Flash本地运行方式:内核的未经压缩的可执行映像固化在Flash,系统启动时内核在Flash中开始逐句执行。 压缩

26、内核加载方式:内核的压缩映像固化在Flash上,系统启动时由附加在压缩映像前的解压复制程序读取压缩映像,在内存中解压后执行,这种方式相对复杂,但是运行速度更快(RAM的存取速率要比Flash高)。,53,Flash本地内核的启动过程,本地运行时内核的启动包括: 特定体系结构设置:由汇编文件head-armv.s完成,基本运行过程: 1) 配置系统寄存器; 2) 初始化ROM、RAM以及总线控制寄存器等; 3) 设置堆栈指针,将bss段清零; 4) 修改pc指针,跳转到kernel/init/main.c中的start_kernel函数,开始linux系统的初始化。 linux系统初始化 程序跳

27、转到start_kernel函数执行,在这里完成处理器结构的初始化、中断的初始化、进程相关的初始化以及内存初始化等重要工作。,54,压缩内核的启动过程,压缩内核启动过程包括: 解压复制 本过程由head.s完成,基本运行过程: 1)配置系统寄存器; 2)初始化ROM、RAM以及总线控制寄存器等; 3)对Flash和SDRAM进行地址映射,将内核的映像文件从Flash拷贝到SDRAM; 4)设置堆栈指针,将bss段清零,将来执行c语言程序时要用到; 5)调用Misc.c中的解压缩内核函数decompress_kernel(),对拷贝到SDRAM的内核映像文件进行解压缩; 6)执行调用内核函数ca

28、ll_kernel,跳转到解压后linux内核入口。 特定体系结构设置 linux系统初始化,55,内核的调试方法,Embest IDE+JTAG仿真器 Printk() KGDB KDB ,56,JTAG仿真器调试模型,PC机,JTAG仿真器,目标板,并口/USB/网口,运行 Embest IDE,57,Printk()调试内核,Printk是调试内核代码时最常用的一种技术。在内核代码中的关键位置加上Printk调用,可直接把所关心的信息打印到屏幕上或输出到文件中; linux内核执行完console_init()函数后,可以通过串行口终端输出信息。 在PC和目标板之间连接串口线; 运行PC

29、上的超级终端并进行配置。,PC机,目标板,串口,58,主要内容,嵌入式操作系统 linux概述 建立开发环境 编译运行linux linux移植 系统引导程序Boot Loader linux的文件系统 linux内核程序调试 linux应用程序开发,59,应用程序的编写,开发平台:Linux平台或Cygwin 在/usr/local/src目录下面新建任意目录作为应用程序开发,如建立app目录。$:mkdir -p /usr/local/src/app,60,添加应用程序到文件系统中,在包含文件系统的Linux中,将编写好的应用程序添加到文件系统中需要进行以下几个方面的工作:,编写Makef

30、ile,修改配置相关文件,修改用户程序工程管理文件,在./user/Makefile 中,增加行 dir_$(CONFIG_USER_HELLO) += app,在./config/config.in 菜单定义中: bool Hello CONFIG_USER_HELLO,61,编写程序工程管理文件Makefile,编写Makefile的主要内容: 编译操作、环境变量、测试文件、编译选项、链接选项、编译链接命令、编译清除和安装执行文件等,62,快速添加应用程序,上节所述增加应用程序以及编译执行的过程比较正式但也比较繁琐,用户可以采用下述方法在开发调试过程中快速添加应用程序。,编译生成可执行文件,复制可执行文件到文件系统,生成文件系统映像,63,linux应用程序调试,主机调试方法 主机:Linux或Windows的Cygwin; 编译调试:主

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论