《嵌入式Linux移植课件》由会员分享,可在线阅读,更多相关《嵌入式Linux移植课件(42页珍藏版)》请在金锄头文库上搜索。
1、嵌入式Linux移植50组:余元林 SC06010047 林 茂SC06010055嵌入式Linux移植大纲嵌入式OS的分类及各自特点嵌入式Linux的特点嵌入式Linux的移植讨论嵌入式Linux移植嵌入式系统的分类嵌入式嵌入式LinuxLinux本身的种种特性使其成为嵌入式开发的首选。嵌入式协会(ELC)发布了ELC产品规范版本1.0,更为嵌入式Linux的开发提供了提供了方便。RT-LinuxuCLinux(Micro-Control-Linux)mizi-linux:由韩国mizi公司根据Linux2.4内核移植而来,支持S3C2410A处理器嵌入式Linux移植嵌入式系统的分类uCl
2、inuxuClinux是很常用的一种嵌入式Linux,它去掉了Linux中的内存管理单元(MMU),主要用于没有内存管理单元的处理器(比如三星公司的S3C44B0X)。它是继承了标准Linux的优良特性,针对嵌入式处理器的特点设计的一种操作系统,具有内嵌网络协议、支持多种文件系统,开发者可利用标准Linux先验知识等优势。其编译后目标文件可控制在几百KB量级。嵌入式Linux移植嵌入式系统的分类Windows CEMicrosoftWindowsCE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。
3、操作系统的基本内核需要至少200K的ROM。嵌入式Linux移植嵌入式系统的分类VxWorksVxWorks是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。它支持多种处理器,如x86、i960、SunSparc、MotorolaMC68xxx、MIPSRX000、POWERPC等等。大多数的VxWorksAPI是专有的。采用GNU的编译和调试器。嵌入式Linux移植嵌入式系统的分类uC/OSuC/OS是一个典型的RTOS,该系统从1992年开始发展,目前流行的是第二个版本,即uC/OSII。它的特点可以概括为一下几个方面:公开源代码良好的可移植性(Portable)可裁剪(Scalab
4、le)可固化(ROMable)占先式(Preemptive)多任务嵌入式Linux移植嵌入式系统的分类LynxOSLynxReal-timeSystems的LynxOS是一个分布式、嵌入式、可规模扩展的RTOS,它遵循POSIX.1a、POSIX.1b和POSIX.1c标准。LynxOS支持线程概念,提供256个全局用户线程优先级;提供一些传统的、非实时系统的服务特征;包括基于调用需求的虚拟内存,一个基于Motif的用户图形界面,与工业标准兼容的网络系统以及应用开发工具。PortableOperatingSystemInterface嵌入式Linux移植嵌入式系统的分类Palm OSPalmO
5、S是一种32位的嵌入式OS,用于掌上电脑。此系统是3Com公司的PalmComputing部(以独立成一家公司)开发的。它运行在一个抢占式的多任务内核之上,同一时刻用户界面仅仅允许一个应用程序被打开,与同步软件HotSync结合可以使掌上电脑与PC上的信息实现同步,把PC的功能扩展到了手掌上。它具有强大的灵活性和良好的可移植性,是一款非常流行的掌上电脑操作系统。嵌入式Linux移植嵌入式系统的分类QNXOS-9pSOS嵌入式Linux移植嵌入式Linux的特点一、广泛的硬件支持一、广泛的硬件支持Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,目前已经成功移
6、植到数十种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。嵌入式Linux移植嵌入式Linux的特点二、内核高效稳定二、内核高效稳定Linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合
7、于嵌入式系统的需要。嵌入式Linux移植嵌入式Linux的特点三、开放源码,软件丰富三、开放源码,软件丰富Linux是开放源代码的自由操作系统,它为用户提供了最大限度的自由度,由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件做为原型,在其上进行二次开发。嵌入式Linux移植嵌入式Linux的特点四、优秀的开发工具传统的嵌入式开发调试工具是在线仿真器(In-CircuitEmu
8、lator,ICE),它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。价格非常昂贵,只适合做非常底层的调试。嵌入式Linux为开发者提供了一套完整的工具链(ToolChain),它利用GNU的gcc做编译器,用gdb、kgdb、xgdb做调试工具,能够很方便地实现从操作系统到应用软件各个级别的调试。嵌入式Linux移植嵌入式Linux的特点五、完善的网络通信和文件管理机制五、完善的网络通信和文件管理机制Linux至诞生之日起就与Internet密不可分,支持所有标准的Internet网络协议,并且很容易
9、移植到嵌入式系统当中。此外,Linux还支持ext2、fat16、fat32、romfs等文件系统,这些都为开发嵌入式系统应用打下了很好的基础。嵌入式Linux移植嵌入式Linux系统的组成部分一、引导程序一、引导程序能实现系统的快速引导,提供瞬间开机功能。负责将Linux内核加载到内存,并将控制权交给内核初始化程序。具体工作包括:寻找或将指定的内核映像解压,解压文件系统。嵌入式Linux移植嵌入式Linux系统的组成部分二、二、Linux内核内核Linux是一个单一内核操作系统,但可以动态装入和卸载内核中的部分源代码,这与传统的单一内核操作系统全部静态编译内核代码是不同的。Linux内核由内
10、存管理、进程管理、定时器中断管理、模块管理、虚拟文件系统、接口文件系统、设备驱动程序、进程间通信、网络管理、系统启动等构成。嵌入式Linux移植嵌入式Linux系统的组成部分三、初始化进程三、初始化进程系统在刚刚启动时,运行于内核方式,这时候只有一个初始化进程在运行,他首先做系统的初始化,然后执行初始化程序(一般是/sbin/init)。初始化进程是系统的第一个进程,以后所有的进程都是初始化进程的子进程。嵌入式Linux移植嵌入式Linux系统的组成部分四、硬件驱动程序四、硬件驱动程序设备驱动程序是内核的一部分,它像内核中其它代码一样运行在内核模式。驱动程序如果出错将会使操作系统受到严重破坏,
11、甚至能使系统崩溃并导致文件系统的破坏和数据丢失。Linux设备驱动程序的主要功能有:对设备进行初始化;使设备投入运行和退出服务;从设备接收数据并将它们送回内核;将数据从内核送到设备;检测和处理设备出现的错误。嵌入式Linux移植嵌入式Linux系统的组成部分五、应用程序五、应用程序提供所需功能的一个或更多应用程序。嵌入式Linux移植移植的概念移植步骤a.Bootloader的移植;b.嵌入式Linux操作系统内核的移植;c.嵌入式Linux操作系统根文件系统的创建;d.电路板上外设Linux驱动程序的编写。嵌入式Linux移植移植的准备工作PC平台装有Linux操作系统或在Windows操作
12、系统下安装Cygwin目标平台CPU:S3C2410SDRAM:HY57V561620Nandflash:K9F1208U0B(64MB)以太网芯片:CS8900A(10M/100MB)嵌入式Linux移植源码包linux kernellinux-2.6.14.1.tar.gzSkyeyeskyeye-1.2-RC8-3.tar.bz2toolchaincross-2.95.3.tar.bz2,也可以使用gcc,gdb,glibc,binutils等工具自己编译产生。嵌入式Linux移植源码包binuilsbinutils-2.16.tar.gzgccgcc-3.4.4.tar.bz2glib
13、cglibc-2.3.5.tar.gzglibc-linuxthreads-2.3.5.tar.gzgdbgdb-5.2.tar.bz2u-bootu-boot1.1.4.tar.bz2嵌入式Linux移植源码包Batch(补丁)ioperm.c.diff 作用:打修正ioperm()函数flow.c.diff 作用:该补丁用于产生crti.o和crtn.o文件t-linux.diff 作用:修改gcc一处bug其他工具busybox-1.1.3.tar.gzmkcramfs嵌入式Linux移植交叉编译工具嵌入式Linux移植bootloader与u-bootBootLoader是系统加电启运
14、行的第一段软件代码,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引导程序的主要运行任务就是将内核映象从硬盘上读到RAM中然后跳转到内核的入口点去运行,也即开始启动操作系统。嵌入式Linux移植bootloader与u-bootBootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如S3C44B0),从而将系统的软硬件环境带到一个
15、合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。嵌入式Linux移植bootloader与u-boot每种不同的CPU体系结构都有不同的BootLoader。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置,因此为嵌入式系统建立一个通用的BootLoader是很困难的U-boot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。U-Boot除了支持PowerP
16、C系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。嵌入式Linux移植Boot Loader 的操作模式的操作模式 (Operation Mode)启动加载(启动加载(Boot loading)模式:)模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式下。嵌入式Linux移植Boot Loader 的操作模式的操作模式
17、(Operation Mode)下载(下载(Downloading)模式:)模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中。BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader的这种工作模式。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。嵌入式Lin
18、ux移植u-boot功能系统引导支持NFS挂载、从FLASH中引导压缩或非压缩系统内核基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤对Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;设备驱动;上电自检功能;SDRAM故障检测;CPU型号;特殊功能,XIP内核引导嵌入式Linux移植u-boot移植为了使U-Boot支持新的开发板,一种简便的做法是在U-Boot已经支持的开发板中选择一种和目标板接近的,
19、并在其基础上进行修改。移植前的准备阅读相关文档config.mk,flash.c的修改修改flash和SDRAM的参数设置(以Byte为单位)其他事项,比如准备源码,建立交叉开发环境等嵌入式Linux移植u-boot移植在建立的开发环境下进行移植工作。绝大多数的开发环境是交叉开发环境。在这方面,DENX和MontaVista均提供了完整的开发工具集在目标板与开发主机间接入硬件调试器,一般使用BDI2000。一方面,其价格不如ICE调试器昂贵,同时其可靠性高,功能强大,完全能胜任移植和调试u-Boot。另外,网上也有不少关于BDI2000调试方面的参考文档。如果在参考开发板上移植U-Boot,可
20、能需要移除目标板上已有的bootloader。嵌入式Linux移植u-boot移植修改文件.c文件.h头文件FLASH的驱动程序串口驱动配置,编译把boot.bin和u-boot.gz烧到flash里面去,或RAM中的指定位置嵌入式Linux移植u-boot移植对于U-Boot的移植方法,大致分为两种一,先用BDI2000创建目标板初始运行环境,将U-Boot镜像文件u-boot.bin下载到目标板RAM中的指定位置,然后,用BDI2000进行跟踪调试。其好处是不用将U-Boot镜像文件烧写到FLASH中去。但弊端在于对移植开发人员的移植调试技能要求较高,BDI2000的配置文件较为复杂。嵌入
21、式Linux移植u-boot移植另外一种方法是用BDI2000先将U-Boot镜像文件烧写到FLASH中去,然后利用GDB和BDI2000进行调试。这种方法所用BDI2000的配置文件较为简单,调试过程与U-Boot移植后运行过程相吻合,即U-Boot先从FLASH中运行,再重载至RAM中相应位置,并从那里正式投入运行。麻烦的就是需要不断烧写FLASH。嵌入式Linux移植Linux-2.6内核的移植修改Makefile找到ARCH和CROSS_COMPILE,修改ARCH?=armCROSS_COMPILE?=armlinux设置PATH环境变量,使其可以找到交叉编译工具链设置flash分区
22、嵌入式Linux移植Linux-2.6内核的移植配置内核支持启动时挂载devfs为了内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改fs/Kconfig文件armlocalhostlinux2.6.14$vifs/Kconfig配置内核产生.config文件makemenuconfigmakezImage编译内核,生成zImage下载zImage到开发板嵌入式Linux移植构造目标板的根目录及文件系统建立一个目标板的空根目录在my_rootfs中建立Linux目录树创建linuxrc文件挂载/etc为ramfs,并从/mnt/etc下拷
23、贝文件到/etc目录当中挂载/proc为proc文件系统挂载/sys为sysfs文件系统挂载其他文件系统相关配置文件的创建创建帐号及密码文件创建profile文件创建fstab文件嵌入式Linux移植移植Busyboxbusybox是linux的命令工具集,包含例如login,insmod等许多linux命令的源代码,编译这个源码包,就会生成若干linux命令工具的可执行程序。这里需要注意一点的是,只要installbusybox,我们根文件系统下先前建好的linuxrc就会被覆盖为一同名二进制文件。所以要事先备份我们自己的linuxrc,在安装完busybox后,将linuxrc复制回去就好。嵌入式Linux移植谢谢大家!嵌入式Linux移植