移植操作系统报告_第1页
移植操作系统报告_第2页
移植操作系统报告_第3页
移植操作系统报告_第4页
移植操作系统报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式系统及应用基于s3c6410的嵌入式Linux系统移植1. 嵌入式系统介绍嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可配置,对功能、可靠性、成本、体积、功耗有严格约束的专用系统。嵌入式Linux是在标准Linux的基础上针对嵌入式系统进行内核裁减和优化后形成的一种小型操作系统,一般只有几百KB左右,即使加上其它必要的模块和应用程序,所需的存储空间也很小,非常适合于移植到嵌入式系统中去。一个完整的嵌入式系统的构建过程大体可以分为四个步骤:交叉编译环境的搭建、Boot Loader移植、Linux内核的配置编译及移植、根文件系统的制作及移植。本文将以SUMSANG公司的s3c641

2、0处理器为目标平台,介绍嵌入式Linux系统的构建过程。1.1. 嵌入式系统的组成一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。硬件层:硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、

3、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。中间层:硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。系统软

4、件层:系统软件层主要指运行于ARM芯片上的操作系统,目前常见的ARM操作系统有WinCE、Linux、Symbain、Android等。应用软件层:主要指运行于带操作系统的ARM上的软件,是由程序员编写的软件。2. Linux系统移植Linux系统移植实际上是把整套软件系统平台运行环境从一个硬件平台搬移到另一个硬件平台并运行的过程,这整个的过程主要包括系统引导代码的移植、操作系统移植、文件系统移植,通过这整套软件系统平台的移植,可以达到使同样的软件系统平台在不同的硬件环境下运行的目的。进行Linux系统移植的先决条件是要对软件、硬件以及整个系统都有一个比较深入的了解,例如在Linux系统移植的

5、过程中首先需要对各种硬件原理比较熟悉,其次对硬件原理图也要非常了解,再次对Linux系统与引导代码和文件系统的关系也要了解,最后更要对Linux系统本身要有一个深入的理解,只有通过这些准备工作才能具备进行Linux系统移植的条件。由于系统移植是软硬件结合的工作,在移植的过程中还会遇到各种问题,更需要事先准备好各种软硬件知识,协同来解决这样的问题。这部分将对整个Linux系统移植有一个全面的介绍,并且对后文中一些基本概念和所用的技术进行基本的介绍。2.1. Linux系统移植主要步骤Linux系统向ARM开发平台上移植,其主要步骤主要有四步:搭建交叉编译环境;Bootloader移植;Linux

6、内核移植;文件系统移植;系统移植主要步骤流程图如下:2.2. 交叉编译环境搭建将arm-linux-gcc-4.3.2.tgz 文件拷贝到Ubuntu 的/forlinx 目录下,该文件位于用户基础资料光盘的“实用工具”文件夹中。在Ubuntu 中新建一个终端,输入下面的命令安装交叉编译器:#cd /forlinx (进入/forlinx 目录)#mkdir /usr/local/arm (创建目录,若目录已存在会提示错误,跳过即可)#tar zxvf arm-linux-gcc-4.3.2.tgz -C /编译器解压到/usr/local/arm把交叉编译器路径添加到系统环境变量中,以后可以

7、直接在终端窗口中输入arm-linx-gcc 命令来编译程序。在终端中执行:gedit /etc/profile添加以下四行到该文件中:export PATH=/usr/local/arm/4.3.2/bin:$PATHexport TOOLCHAIN=/usr/local/arm/4.3.2export TB_CC_PREFIX=arm-linuxexportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi保存,退出。重新启动系统,在终端里面执行arm-linux-gcc 回车:如下图所示就说明交叉编译器已经成功安装到了系统里面,可以使用

8、该编译器来编译Uboot 代码和内核代码了。2.3. Boot Loader引导程序及移植引导加载程序是系统加电后运行的第一段软件代码。它包括固化在固件(firmware)中的boot代码(可选)和Boot Loader两大部分。PC机中Boot Loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。在嵌入式系统中,整个系统的加载启动任务就完全由Boot Loader来完成。由于Boot Loader的实现依赖于CPU的体系结构,因此,嵌入式领域里建立一个通用的Boot Loader几乎是不可能的。大多数Boot Loader都分为s

9、tagel和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stagel中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。Boot Loader的stagel上电启动后通常按以下步骤执行:首先对硬件设备初始化。包括屏蔽所有中断,设置CPU的速度和频率,RAM初始化,初始化LED,关闭CPU的内部指令数据Cache等。接下来的工作是为加载Boot Loader的stage2准备RAM空间,然后拷贝Boot Loader的stage2到RAM空间中。接着设置好堆

10、栈。最后跳转到stage2的人口点。Boot Loader的stage2通常按以下步骤执行:初始化本阶段要使用到的硬件设备,然后检测系统内存映射(memory map),将Kernel映像和根文件系统映像从Flash上读到RAM空间中,接着为内核设置启动参数,最后调用内核。至此整个Boot Loader的启动引导过程结束。U-Boot作为嵌入式系统中通用的BootLoader,可以很方便的移植到其他硬件平台,因此对嵌入式系统BootLoader,研究U-Boot的移植就显得非常重要。移植U-Boot到新的嵌入式系统板上包括两个层面的移植,第一层面是针对CPU的移植,第二层面是针对BOARD的移

11、植,同时需要移植相关的头。然后根据开发板的不同内存需要使用不同的U-boot 配置项。编译128M内存开发板 Uboot方法:进入uboot1.1.6 目录、配置config、编译:#cd uboot1.1.6 (进入uboot 源码的目录)# make forlinx_nand_ram128_config (配置适用于128M 内存开发板的config)#make clean (删除以前编译的文件)#make (编译)2.4. Linux内核移植1、编译Linux-3.0.1将压缩包FORLINX_linux-3.0.1.tar.gz 拷贝到作目录下,解压缩:#tar zxf FORLINX

12、_linux-3.0.1.tar.gz2、配置内核1) 进入Linux-3.0.1内核主目录,通过以下命令将6410的默认配置文件写到当前目录下的.config。makes3c6410_defconfig2) 配置内核模块的功能,有几种方式可以进行界面选择:makemenuconfig(文本选单的配置方式,在有字符终端下才能使用)makexconfig(图形窗口模式的配置方式,图形窗口的配置比较直观,必须支持Xwindow下才能使用)makeoldconfig(文本配置方式,在原内核配置的基础修改时使用)这里使用makemenuconfig命令。3 编译内核命令如下:#make zImage编

13、译结束后将在内核源码目录的arch/arm/boot 中得到Linux 内核映像文件:zImage2.5. 文件系统映像制作1、准备好文件系统FileSystem-Yaffs2.tar.gz 是文件系统目录,可以使用此目录制作Yaffs2文件系统,且FileSystem-Yaffs2.tar.gz 目录也用于NFS 网络根文件系统挂载。2、制作映像在基础光盘Linux-3.0.1filesystemYaffs2 文件系统制作工具中有两个制作工具:mkyaffs2image-nand2g 和mkyaffs2image-nand256m1)mkyaffs2image-nand256m制作出的映像,

14、适用于 256M 和 1G字节 nandflash的开发板。制作命令:#./mkyaffs2image-nand256m FileSystem-Yaffs2 rootfs.yaffs22)mkyaffs2image-nand2g制作出的映像,适用于 2G或者 4G字节 nandflash的开发板。制作命令:#./mkyaffs2image-nand2g FileSystem-Yaffs2 rootfs.yaffs2最后生成rootfs.yaffs2 是可以下载到开发板nandflash 中的yaffs2 文件系统映像。移植成功后Linux启动的界面:3. 基于移植的系统上的小程序功能:每次可以

15、选择上下左右其中一个方向去拨动,每拨动一次,所有的数字方块都会往拨动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。程序源码:2048.c/*2048*/#include#include#include#includemy_getch.hint code44=0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0;int temp5;int mov=0;int score=0void print(void) int i,j; printf(2

16、048n); printf(W-UP A-LEFT S-DOWN D-RIGHT 0-EXITn); printf(Score:%d mov:%dn,score,mov); printf(|*|n); for(i=0;i=3;i+) for(j=0;j=3;j+) if(codeij=0) printf(| ); else printf(|%4d,codeij); printf(|n|*|n); int add(void) int i; int t=0; int change=0; do for(i=0;i=3;i+) if(tempi=0) if(tempi!=tempi+1) change

17、=1; tempi=tempi+1; tempi+1=0; t+; while(t=3); for(i=1;i=3;i+) if(tempi=tempi-1) if(tempi!=0) change=1; score=score+tempi; tempi-1=tempi-1*2; tempi=0; do for(i=0;i=3;i+) if(tempi=0) tempi=tempi+1; tempi+1=0; t+; while(t=1) do i=(unsigned)rand()%4; j=(unsigned)rand()%4; while(codeij!=0); if(unsigned)r

18、and()%4=0) codeij=4; else codeij=2; mov+; print();input=my_getch(); change=0; switch(input) case 0: printf(Are you sure to exit?(y/n); input=getchar(); if(input=y|input=Y) exit(0); break; case W: case w: for(j=0;j=3;j+) for(i=0;i=3;i+) tempi=codeij; temp4=0; change=change+add(); for(i=0;i=3;i+) code

19、ij=tempi; break; case A: case a: for(i=0;i=3;i+) for(j=0;j=3;j+) tempj=codeij; temp4=0; change=change+add(); for(j=0;j=3;j+) codeij=tempj; break; case S: case s: for(j=0;j=3;j+) for(i=0;i=3;i+) tempi=code3-ij; temp4=0; change=change+add(); for(i=0;i=3;i+) code3-ij=tempi; break; case D: case d: for(i=0;i=3;i+) for(j=0;j=3;j+) tempj=codei3-j; temp4=0; change=change+add(); for(j=0;j=3;j+) codei3-j=tempj; break; gam

温馨提示

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

评论

0/150

提交评论