移植操作系统报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式系统及应用基于s3c6410的嵌入式Linux系统移植1.嵌入式系统介绍嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可配置,对功能、可靠性、成本、体积、功耗有严格约束的专用系统。。嵌入式Linux是在标准Linux的基础上针对嵌入式系统进行内核裁减和优化后形成的一种小型操作系统,一般只有几百KB左右,即使加上其它必要的模块和应用程序,所需的存储空间也很小,非常适合于移植到嵌入式系统中去。一个完整的嵌入式系统的构建过程大体可以分为四个步骤:交叉编译环境的搭建、BootLoader移植、Linux内核的配置编译及移植、根文件系统的制作及移植。本文将以SUMSANG公司的s3c6410处理器为目标平台,介绍嵌入式Linux系统的构建过程。1.1.嵌入式系统的组成一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。硬件层:硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。中间层:硬件层与软件层之间为中间层,也称为硬件抽象层(HardwareAbstractLayer,HAL)或板级支持包(BoardSupportPackage,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。系统软件层:系统软件层主要指运行于ARM芯片上的操作系统,目前常见的ARM操作系统有WinCE、Linux、Symbain、Android等。应用软件层:主要指运行于带操作系统的ARM上的软件,是由程序员编写的软件。2.Linux系统移植Linux系统移植实际上是把整套软件系统平台运行环境从一个硬件平台搬移到另一个硬件平台并运行的过程,这整个的过程主要包括系统引导代码的移植、操作系统移植、文件系统移植,通过这整套软件系统平台的移植,可以达到使同样的软件系统平台在不同的硬件环境下运行的目的。进行Linux系统移植的先决条件是要对软件、硬件以及整个系统都有一个比较深入的了解,例如在Linux系统移植的过程中首先需要对各种硬件原理比较熟悉,其次对硬件原理图也要非常了解,再次对Linux系统与引导代码和文件系统的关系也要了解,最后更要对Linux系统本身要有一个深入的理解,只有通过这些准备工作才能具备进行Linux系统移植的条件。由于系统移植是软硬件结合的工作,在移植的过程中还会遇到各种问题,更需要事先准备好各种软硬件知识,协同来解决这样的问题。这部分将对整个Linux系统移植有一个全面的介绍,并且对后文中一些基本概念和所用的技术进行基本的介绍。2.1.Linux系统移植主要步骤Linux系统向ARM开发平台上移植,其主要步骤主要有四步:搭建交叉编译环境;Bootloader移植;Linux内核移植;文件系统移植;系统移植主要步骤流程图如下:搭建交叉编译环境移植BootLoaderLinux内核移植Linux文件系统移植安装ARM编译器编译生成用于nandFlash,启动的u-boot2.2.交叉编译环境搭建将arm-linux-gcc-4.3.2.tgz文件拷贝到Ubuntu的/forlinx目录下,该文件位于用户基础资料光盘的“实用工具”文件夹中。在Ubuntu中新建一个终端,输入下面的命令安装交叉编译器:#cd/forlinx(进入/forlinx目录)#mkdir/usr/local/arm(创建目录,若目录已存在会提示错误,跳过即可)#tarzxvfarm-linux-gcc-4.3.2.tgz-C/编译器解压到/usr/local/arm把交叉编译器路径添加到系统环境变量中,以后可以直接在终端窗口中输入arm-linx-gcc命令来编译程序。在终端中执行:gedit/etc/profile添加以下四行到该文件中:exportPATH=/usr/local/arm/4.3.2/bin:$PATHexportTOOLCHAIN=/usr/local/arm/4.3.2exportTB_CC_PREFIX=arm-linuxexportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi保存,退出。重新启动系统,在终端里面执行arm-linux-gcc回车:如下图所示就说明交叉编译器已经成功安装到了系统里面,可以使用该编译器来编译Uboot代码和内核代码了。2.3.BootLoader引导程序及移植引导加载程序是系统加电后运行的第一段软件代码。它包括固化在固件(firmware)中的boot代码(可选)和BootLoader两大部分。PC机中BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。在嵌入式系统中,整个系统的加载启动任务就完全由BootLoader来完成。由于BootLoader的实现依赖于CPU的体系结构,因此,嵌入式领域里建立一个通用的BootLoader几乎是不可能的。大多数BootLoader都分为stagel和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stagel中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。BootLoader的stagel上电启动后通常按以下步骤执行:首先对硬件设备初始化。包括屏蔽所有中断,设置CPU的速度和频率,RAM初始化,初始化LED,关闭CPU的内部指令/数据Cache等。接下来的工作是为加载BootLoader的stage2准备RAM空间,然后拷贝BootLoader的stage2到RAM空间中。接着设置好堆栈。最后跳转到stage2的人口点。BootLoader的stage2通常按以下步骤执行:初始化本阶段要使用到的硬件设备,然后检测系统内存映射(memorymap),将Kernel映像和根文件系统映像从Flash上读到RAM空间中,接着为内核设置启动参数,最后调用内核。至此整个BootLoader的启动引导过程结束。U-Boot作为嵌入式系统中通用的BootLoader,可以很方便的移植到其他硬件平台,因此对嵌入式系统BootLoader,研究U-Boot的移植就显得非常重要。移植U-Boot到新的嵌入式系统板上包括两个层面的移植,第一层面是针对CPU的移植,第二层面是针对BOARD的移植,同时需要移植相关的头。然后根据开发板的不同内存需要使用不同的U-boot配置项。编译128M内存开发板Uboot方法:进入uboot1.1.6目录、配置config、编译:#cduboot1.1.6(进入uboot源码的目录)#makeforlinx_nand_ram128_config(配置适用于128M内存开发板的config)#makeclean(删除以前编译的文件)#make(编译)2.4.Linux内核移植1、编译Linux-3.0.1将压缩包‘FORLINX_linux-3.0.1.tar.gz’拷贝到作目录下,解压缩:#tarzxfFORLINX_linux-3.0.1.tar.gz2、配置内核1)进入Linux-3.0.1内核主目录,通过以下命令将6410的默认配置文件写到当前目录下的.config。makes3c6410_defconfig2)配置内核模块的功能,有几种方式可以进行界面选择:makemenuconfig(文本选单的配置方式,在有字符终端下才能使用)makexconfig(图形窗口模式的配置方式,图形窗口的配置比较直观,必须支持Xwindow下才能使用)makeoldconfig(文本配置方式,在原内核配置的基础修改时使用)这里使用makemenuconfig命令。3编译内核命令如下:#makezImage编译结束后将在内核源码目录的arch/arm/boot中得到Linux内核映像文件:zImage2.5.文件系统映像制作1、准备好文件系统FileSystem-Yaffs2.tar.gz是文件系统目录,可以使用此目录制作Yaffs2文件系统,且FileSystem-Yaffs2.tar.gz目录也用于NFS网络根文件系统挂载。2、制作映像在基础光盘\Linux-3.0.1\filesystem\Yaffs2文件系统制作工具中有两个制作工具:mkyaffs2image-nand2g和mkyaffs2image-nand256m1)mkyaffs2image-nand256m制作出的映像,适用于256M和1G字节nandflash的开发板。制作命令:#./mkyaffs2image-nand256mFileSystem-Yaffs2rootfs.yaffs22)mkyaffs2image-nand2g制作出的映像,适用于2G或者4G字节nandflash的开发板。制作命令:#./mkyaffs2image-nand2gFileSystem-Yaffs2rootfs.yaffs2最后生成rootfs.yaffs2是可以下载到开发板nandflash中的yaffs2文件系统映像。移植成功后Linux启动的界面:3.基于移植的系统上的小程序功能:每次可以选择上下左右其中一个方向去拨动,每拨动一次,所有的数字方块都会往拨动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。程序源码:2048.c/*2048*/#includestdio.h#includestdlib.h#includetime.h#includemy_getch.hintcode[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};inttemp[5];intmov=0;intscore=0voidprint(void){inti,j;printf(2048\n);printf(W--UPA--LEFTS--DOWND--RIGHT0--EXIT\n);printf(Score:%dmov:%d\n,score,mov);printf(|*******************|\n);for(i=0;i=3;i++){for(j=0;j=3;j++){if(code[i][j]==0){printf(|);}else{printf(|%4d,code[i][j]);}}printf(|\n|*******************|\n);}}intadd(void){inti;intt=0;intchange=0;do{for(i=0;i=3;i++){if(temp[i]==0){if(temp[i]!=temp[i+1])change=1;temp[i]=temp[i+1];temp[i+1]=0;}}t++;}while(t=3);for(i=1;i=3;i++){if(temp[i]==temp[i-1]){if(temp[i]!=0){change=1;score=score+tem

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功