移植操作系统报告
- 格式:docx
- 大小:2.16 MB
- 文档页数:15
北航ARM9实验报告:实验3uCOS-II实验北航 ARM9 实验报告:实验 3uCOSII 实验一、实验目的本次实验的主要目的是深入了解和掌握 uCOSII 实时操作系统在ARM9 平台上的移植和应用。
通过实际操作,熟悉 uCOSII 的任务管理、内存管理、中断处理等核心机制,提高对实时操作系统的理解和应用能力,为后续的嵌入式系统开发打下坚实的基础。
二、实验环境1、硬件环境:ARM9 开发板、PC 机。
2、软件环境:Keil MDK 集成开发环境、uCOSII 源代码。
三、实验原理uCOSII 是一个可裁剪、可剥夺型的多任务实时内核,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。
其基本原理包括任务管理、任务调度、时间管理、内存管理和中断管理等。
任务管理:uCOSII 中的任务是一个独立的执行流,每个任务都有自己的堆栈空间和任务控制块(TCB)。
任务可以处于就绪、运行、等待、挂起等状态。
任务调度:采用基于优先级的抢占式调度算法,始终让优先级最高的就绪任务运行。
时间管理:通过系统时钟节拍来实现任务的延时和定时功能。
内存管理:提供了简单的内存分区管理和内存块管理机制。
中断管理:支持中断嵌套,在中断服务程序中可以进行任务切换。
四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM9 芯片型号,并配置相关的编译选项。
2、导入 uCOSII 源代码将 uCOSII 的源代码导入到工程中,并对相关的文件进行配置,如设置任务堆栈大小、系统时钟节拍频率等。
3、编写任务函数根据实验要求,编写多个任务函数,每个任务实现不同的功能。
4、创建任务在主函数中使用 uCOSII 提供的 API 函数创建任务,并设置任务的优先级。
5、启动操作系统调用 uCOSII 的启动函数,使操作系统开始运行,进行任务调度。
6、调试与测试通过单步调试、查看变量值和输出信息等方式,对系统的运行情况进行调试和测试,确保任务的执行符合预期。
嵌入式系统设计实训课程学习总结嵌入式操作系统移植与应用开发嵌入式系统设计实训课程学习总结——嵌入式操作系统移植与应用开发在嵌入式系统设计实训课程中,我学习了嵌入式操作系统移植与应用开发的相关知识,并通过实践项目深化了对这一领域的理解。
本文将对我在这门课程中所学到的内容进行总结,并分享我在实训过程中的体会和收获。
一、嵌入式操作系统移植的基本概念与技术要点1.1 嵌入式操作系统的定义与特点嵌入式操作系统是专门为嵌入式设备设计的操作系统,具有实时性、小巧性、低功耗等特点。
学习过程中,我了解了常见的嵌入式操作系统,如嵌入式Linux、FreeRTOS和VxWorks等,并了解了它们的特点和适用场景。
1.2 嵌入式操作系统移植的基本原理嵌入式操作系统移植是将操作系统适配到目标硬件平台上的过程。
在学习中,我了解了嵌入式操作系统移植的基本原理和步骤,包括硬件驱动适配、中断处理、启动过程等,对于理解操作系统与硬件之间的交互关系有了更深入的认识。
1.3 嵌入式操作系统移植的实践项目实训课程中,我参与了一个嵌入式操作系统移植的实践项目。
在这个项目中,我通过实际操作了解了具体的移植过程和技术要点。
我们选择了嵌入式Linux作为移植对象,在基于ARM架构的开发板上进行了操作系统移植和应用开发。
通过这个项目,我对嵌入式操作系统移植有了更深入的认识,并提升了动手实践的能力。
二、嵌入式应用开发的实践项目2.1 嵌入式应用开发的基本原理嵌入式应用开发是指在嵌入式系统上开发应用程序,利用系统提供的资源和接口实现特定功能。
在实训中,我学习了嵌入式应用开发的基本原理和技术要点,包括编程语言选择、资源管理、任务调度等。
2.2 嵌入式应用开发的实践项目实训过程中,我参与了一个嵌入式应用开发的实践项目。
我们选择了小型智能家居系统作为开发目标,在嵌入式Linux系统上进行了应用程序的开发。
通过该项目,我学习了如何利用操作系统提供的接口与硬件进行交互,并实现了一系列有实际意义的功能,如温度监测、远程控制等。
第6期2020年12月机电元件ELECTROMECHANICALCOMPONENTSVol 40No 6Dec 2020收稿日期:2020-10-20基于STM32单片机的uC/OS-II操作系统移植张中前(贵州航天电器股份有限公司,贵州贵阳,550009) 摘要:网络技术和信息技术的发展,嵌入式系统应用越来越普及,嵌入式设备的应用也越来越多。
uC/OS-II广泛应用于路由器、飞行器及工业控制等。
uC/OS-II操作系统执行效率高,占用存储空间少,具有实时性及可扩展性等优点,在小型嵌入式设备中具有广泛应用。
本文介绍了基于ARMCORTEXM3系列单片机上的uC/OS-II移植,对电子控制组件的设计具有参考作用。
关键词:实时操作系统;uC/OS-II;内存管理;任务管理;STM32;移植Doi:10.3969/j.issn.1000-6133.2020.06.015中图分类号:TN784 文献标识码:A 文章编号:1000-6133(2020)06-0057-051 引言操作系统是裸机的第一层软件,操作系统直接运行在硬件上,上层软件通过提供应用程序接口(API函数),实现对底层硬件的访问,同时,通过操作系统实现对多个上层应用软件(任务)管理,实现对硬件CPU管理、存储管理、I/O接口管理及文件管理,如图1所示。
图1 操作系统功能组成示意图 STM32系列单片机以其优良的价格,大容量的FLASH及RAM存储空间,极易用于较为复杂的控制系统;在STM32单片机上进行uC/OS-II实时操作系统的移植,提高了产品的设计灵活性,实现较为复杂的系统功能;通过将开源的uC/OS-II移植在STM32单片机上,以其较为低廉的硬件成本获得较高的使用性能,具有良好的应用前景。
2 uC/OS-II操作系统2.1 uC/OS-II操作系统的基本特征uC/OS-II是一个完整的、可移植、可固化、可剪裁的基于优先级调度的抢占式实时多任务操作系统;它能够在外界事件或数据产生时,能够接收图2 uC/OS-II文件结构示意图并以足够快的速度响应,其处理的结果又能够在规定的时间内输出,并控制所有实时任务协调、一致运行。
PetaLinux操作系统在MicroBlaze系统中的移植解析PetaLinux操作系统在MicroBlaze系统中的移植解析大多使用linux的人都对WINE程序比较熟悉,WINE程序是可以在不需要Windows的情况下使用Windows的软件。
下面是店铺整理的关于PetaLinux操作系统在MicroBlaze系统中的移植,希望大家认真阅读!FPGA生产商Xilinx公司提供了全面的嵌入式处理器解决方案,包括PowerPC、MicroBlaze和PicoBlaze三款RISC结构的处理器核。
其中,MicroBlaze是32位嵌入式软核处理器解决方案,支持CoreConnect总线的标准外设集合,具有兼容性、可配置性以及重复利用性,能够根据成本和性能要求提供高性价比的处理性能。
支持MicroBlaze处理器的嵌入式操作系统很多,比如uc/os—II、BuleCat ME Linux、RTA MB、ThreadX、PetaLinux等等。
本文介绍了PetaLogix公司发布的PetaLinux操作系统,并分析了Xilinx公司所使用BSP自动生成技术。
最后总结出PetaLinux操作系统在MicroBlaze平台上的移植方法和步骤。
1 PetaLinux操作系统介绍PetaLinux操作系统是面向MicroBlaze软核处理器的全功能嵌入式Linux操作系统。
其发布采用了“all inone”的整合方式,将针对MicroBlaze处理器定制的Linux2.4/z.6内核源码、U—boot源码、相关的开发工具以及开发板参考硬件平台配置,集成在一个压缩包内发行,极大地方便了开发人员的使用。
该操作系统主要具有以下几大特点:①针对FPGA嵌入式开发的特点采用了板级支持包。
②自动生成工具,可以根据用户定义的嵌入式硬件平台信息自动生成板级支持包,简化了操作系统的移植。
③PetaLinux发布的源码树中包含了部分常用IP核的驱动程序(如GPIO、EthernetLite、UartLite等),减少了用户移植、编写驱动程序的工作量。
操作系统移植在当今的科技世界中,操作系统移植是一项至关重要的技术活动。
它就像是给计算机系统进行一场“大搬家”,把一个操作系统从一种硬件平台或环境迁移到另一种不同的硬件平台或环境中,让其能够在新的“家”里正常运行。
要理解操作系统移植,我们先得清楚什么是操作系统。
操作系统就像是计算机的大管家,负责管理计算机的各种资源,比如内存、处理器、输入输出设备等,同时还为应用程序提供一个稳定、高效的运行环境。
常见的操作系统有 Windows、Linux、Android 等等。
那为什么要进行操作系统移植呢?原因有很多。
首先,随着技术的不断发展,新的硬件平台不断涌现。
比如,当一家公司研发出了一款性能更强大、功耗更低的芯片,为了让现有的操作系统能够在这个新芯片上运行,就需要进行移植。
其次,有时候出于特定的应用需求,需要把操作系统从一种设备移植到另一种设备上。
比如,将原本在个人电脑上运行的操作系统移植到智能手机或平板电脑上。
操作系统移植可不是一件简单的事情,它是一个复杂而具有挑战性的过程。
在移植之前,需要对目标硬件平台进行深入的了解。
这包括了解其处理器架构、内存管理方式、中断处理机制、总线结构等等。
只有清楚地掌握了这些硬件特性,才能为后续的移植工作打下坚实的基础。
然后就是对操作系统本身的分析和修改。
操作系统通常由内核、驱动程序、系统服务等多个部分组成。
在移植过程中,可能需要对内核进行调整,以适应新的硬件环境。
比如,修改内存分配算法、优化任务调度策略等。
对于驱动程序,往往需要重新编写或修改,以使其能够与目标硬件进行正确的交互。
系统服务也可能需要进行相应的调整,以确保其在新平台上的正常运行。
在实际的移植工作中,还需要解决一系列的兼容性问题。
不同的硬件平台可能具有不同的指令集、寄存器设置、存储布局等。
这就需要在移植过程中进行相应的转换和适配,以确保操作系统能够正确地执行指令、访问内存和处理数据。
另外,测试也是操作系统移植中不可或缺的环节。
㊀ISSN1672-4305CN12-1352/N实㊀㊀验㊀㊀室㊀㊀科㊀㊀学LABORATORY㊀SCIENCE第22卷㊀第6期㊀2019年12月Vol 22㊀No 6㊀Dec 2019计算机应用基于Zynq平台的Android操作系统移植王㊀洁,冷㊀威,侯㊀刚(大连理工大学软件学院,辽宁大连㊀116620)摘㊀要:为了解决Zynq-7000在无操作系统情况下ProcessingSystem部分开发困难的问题,研究并给出了An⁃droid操作系统在Zynq-7000AllProgrammableSoC平台上移植的具体方法㊂通过安装交叉编译器㊁移植Boot⁃Loader引导程序㊁配置和编译Linux内核㊁编译Android源码㊁生成Android文件系统和镜像文件等步骤,完成了Android系统的移植工作㊂将Android系统在Zynq-7000平台启动所需要的文件拷贝到SD卡中并进行系统启动,实验结果表明Android系统移植成功,这可以使得Zynq-7000平台的开发与使用更加广泛㊂关键词:Zynq平台;操作系统移植;Android;全可编程SoC中图分类号:TP316㊀㊀文献标识码:A㊀㊀doi:10.3969/j.issn.1672-4305.2019.06.011TransplantationofAndroidoperatingsystembasedonZynqplatformWANGJie,LENGWei,HOUGang(SchoolofSoftwareTechnology,DalianUniversityofTechnology,Dalian116620,China)Abstract:InordertosolvetheproblemthattheZynq-7000isdifficulttodevelopintheProcessingSystemwithoutoperatingsystem,thespecificmethodofportingtheAndroidoperatingsystemontheZynq-7000AllProgrammableSoCplatformisstudied.ThemigrationoftheAndroidsystemiscomple⁃tedbyinstallingthecrosscompiler,portingtheBootLoader,configuringandcompilingtheLinuxker⁃nel,compilingtheAndroidsourcecode,generatingtheAndroidfilesystemandimagefiles.ThefilesneededtostarttheAndroidsystemontheZynq-7000platformarecopiedtotheSDcardandthesys⁃temisstarted.TheexperimentalresultsshowthattheAndroidsystemissuccessfullytransplanted,whichmakesthedevelopmentanduseoftheZynq-7000platformmoreextensive.Keywords:Zynq;operatingsystemtransplant;Android;AllProgrammableSoC㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀基金项目:国家自然科学基金(项目编号:61472100);中央高校基本科研业务费资助(项目编号:DUT17JC26)㊂通讯作者:候刚(1982-),男,辽宁沈阳人,博士,讲师,主要研究方向为模型检测㊁形式化方法㊂㊀㊀随着科技的进步和各个领域应用需求的多样化,嵌入式设计技术和芯片技术经历了一次又一次的革新㊂Xilinx公司推出的全球第一个可扩展处理平台Zynq系列打破了传统嵌入式处理器的性能瓶颈[1-2]㊂Zynq将处理器与FPGA整合在一起,实现了全可编程SoC,其在机器学习㊁图像处理㊁汽车电子等领域都有广泛应用[3]㊂本文致力于研究Android嵌入式操作系统在Zynq-7000开发平台上的实现㊂通过在Zynq-7000开发平台上移植操作系统来屏蔽底层的硬件,提供一个统一的编程接口,使得高级语言程序员不需要学习Zynq-7000开发平台以及Xilinx开发工具也能够很好地开发可以在Zynq-7000开发平台上正确运行的软件,这使得Zynq-7000平台的应用与开发更加广泛㊂1㊀硬件平台环境ZynqAPSoC平台是由ARM+FPGA组成的,其体系结构如图1所示㊂其中ARM部分在Zynq中被称为ProcessingSystem(PS),处理器为双核的Cor⁃texTM-A9,而FPGA部分在Zynq中被称为Program⁃王洁,等:基于Zynq平台的Android操作系统移植mableLogic(PL),其资源和结构与Xilinx的7系列FPGA一样㊂图1㊀Zynq-7000体系结构图2㊀Android简介Android是Google公司和OpenHandsetAlliance(开放手机联盟)为移动设备开发的一个操作系统㊂Android是基于Linux内核的㊁开源的操作系统,其包括了操作系统㊁用户界面和应用程序三大部分㊂Android系统除了被应用于智能手机㊁平板电脑外,也可应用于数字电视[4]㊁数码相机[5]㊁探测器[6]㊁医疗设备[7]等电子设备中㊂Android是开源的意味着降低了手机软件的开发成本和手机的价位,因此Android操作系统受到了各大手机厂商和消费者的青睐㊂同时由于第三方恶意软件的出现,Android系统的安全问题也成为了研究的热点[8-10]㊂3㊀Android操作系统移植在这一节中将介绍如何在Zynq-7000平台上搭建Android操作系统㊂本节分为七个部分来详细叙述Android在Zynq-7000平台上的移植过程:An⁃droid移植环境搭建㊁BootLoader移植㊁Linux内核配置和编译㊁编译设备树㊁构建Android用户空间㊁ram⁃disk修改和制作startup.sh文件㊂3.1㊀Android系统移植环境搭建Android操作系统移植环境搭建是在Linux系统下进行的,本文使用的是Ubuntu14.4㊂需要安装交叉编译器,在Xilinx官网上下载并安装xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,并通过exportCROSS_COMPILE=arm-xilin1x-linux-gnuea⁃bi和exportPATH=/<myPath>/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin:ƔPATH两条语句导入环境变量㊂由于Android上层代码是用JAVA编写的,所以在移植Android时还需要JAVA的开发环境,本文安装的是JDK6㊂这样Android移植需要的环境就搭建完成了㊂3.2㊀BootLoader移植u-boot是当前比较流行并被广泛采用的一款Bootloader㊂可以从https://github.com/Xilinx/u-boot-xlnx下载最新版本的u-boot源码㊂在使用交叉编译器编译u-boot之前,首先要通过执行makeZynq_zed_config命令对源码进行配置,使之能够生成支持XilinxBSP的可执行文件㊂然后编译u-boot,将会在该路径的目录下生成一个名为u-boot.elf的文件,该文件用于生成BOOT.BIN启动文件㊂3.3㊀Linux内核配置和编译本文使用的是3.3版本的Linux内核,由digi⁃lent维护㊂源码可以从https://github.com/Digi⁃lent/linux-3.3-digilent.git下载㊂通过执行makeARCH=armdigilent_zed_defconfig命令对Linux内核源码进行配置,使其能够支持Xilinx的BSP与驱动㊂通过执行makemenuconfig命令启动图形配置界面来启用Linux内核中关于Android系统的功能㊂图形界面如图2所示,选择DeviceDrivers项,回车,进入设备驱动配置界面,选择Stagingdrivers项,按 Y ,使该功能可用,然后回车,进入平台驱动配置界面㊂在平台驱动配置界面中选择Android项,回车,进入Android操作系统驱动配置界面,通过按 Y 允许Android下的所有功能,然后保存退出㊂至14此,内核配置完成,通过make命令编译内核,生成的内核镜像文件zImage在arch/arm/boot/目录下㊂图2㊀Linux内核配置界面3.4㊀编译设备树可以在内核目录的scripts/dtc路径下找到设备树编译器㊂需要注意的是内核在编译时需要配置为打开设备树编译器㊂Zynq的默认设备树源文件digilent-zed.dts在arch/arm/boot/dts目录下㊂在编译设备树源文件之前,要对Zynq的设备树进行如下修改:bootargs="console=ttyPS0,115200root=/dev/ramrwinitrd=0x800000,8Mearlyprintkrootfstype=ext4rootwaitdevt⁃mpfs.mount=0";然后利用设备树编译器生成devicetree.dtb文件㊂3.5㊀构建Android用户空间首先借助repo工具下载得到Android系统源码,然后切换到Android系统源码目录下对Android源码进行编译㊂在编译后的Android系统源码目录下,新建一个名为Makefile.Zynq的文件,将如下内容写入到文件中:OUT_DIR:=out/target/product/genericROOT_IMG:=root.imgROOTFS:=rootfsROOT_DIRS=lib/modulestmpmediaPHONY:dummyƔ(ROOT_IMG):dummyrm-rfƔ@sudorm-rfƔ(ROOTFS)cp-rƔ(OUT_DIR)/rootƔ(ROOTFS)cp-rƔ(OUT_DIR)/systemƔ(ROOTFS)cdƔ(ROOTFS)&&mkdir-pƔ(ROOT_DIRS)sudochown-Rroot:rootƔ(ROOTFS)sudogenext2fs-dƔ(ROOTFS)-bƔƔ((80∗1024))-m0-NƔƔ((64∗1024))Ɣ(ROOT_IMG)sudochownƔ(shellid-u):Ɣ(shellid-g)Ɣ(ROOT_IMG)#Phonytargetforcestherootfsimagefiletoberebuiltoneachmakedummy:使用make-fMakefile.Zynq命令生成Android文件系统㊂生成的文件名为root.img,文件大小为80M左右㊂3.6㊀ramdisk修改首先通过编译BusyBox㊁编译Dropbear㊁工具链动态库与应用的设置㊁目录的创建与配置和制作ramdisk镜像文件ramdisk8M.image.gz五步完成根文件系统的制作㊂为使Zynq-7000平台在启动时能加载Android系统文件,还需修改ramdisk文件㊂将文件解压并挂载到ramdisk目录下,然后修改ram⁃disk目录下的etc/init.d/rcS文件,将如下内容添加到rcS文件末尾:echo"MountingSDcardto/mnt/sd"mkdir-p/mnt/sdmount/dev/mmcblk0p1/mnt/sdecho"++Startingstartup.shscriptonSDcard"if[-f/mnt/sd/startup.sh];then/mnt/sd/startup.shfi分析上面的内容可以看出:rcS是Linux启动后运行的一个脚本,在rcS文件的最后去执行startup.sh文件,来加载Android系统的相关内容㊂3.7㊀制作startup.sh文件startup.sh文件是用来挂载并配置Android系统㊀王洁,等:基于Zynq平台的Android操作系统移植相关内容的脚本文件,在Linux内核启动后开始执行㊂新建startup.sh文件,将如下内容写入到startup.sh文件:echo"++PreparingforAndroid"mkdir/mnt/rootmount-oloop/mnt/sd/root.img/mnt/root/mount-tprocproc/mnt/root/procmount-tsysfssys/mnt/root/sysmount-ttmpfstmp/mnt/root/datamkdir-p/mnt/root/tmp/sdmount/mnt/sd/mnt/root/tmp/sdecho"++StartingAndroid"chroot/mnt/root/init至此,完成了Android系统在Zynq-7000平台上的移植工作㊂4㊀Android操作系统的板级实现Android系统启动需要BOOT.BIN㊁devicetree.dtb㊁zImage㊁root.img㊁ramdisk8m.image.gz和startup.sh六个文件,将这些文件拷贝到Zynq-7000平台自带的SD卡中㊂4.1㊀Zynq-7000平台的配置Android系统在Zynq-7000平台上启动是从SD卡启动并引导的㊂首先将ZedBoard板卡断电,然后将SD卡从电脑SD卡槽中取出,并将其插入到Zed⁃Board的SD卡槽中㊂修改跳线设置,通过USB电缆将ZedBoard板的J14MiniUSB接口和用于当前设计的计算机的一个USB接口连接㊂通过HDMI转VGA线连接ZedBoard上的HDMI接口和显示器上的VGA接口㊂接着打开串口调试工具,设置参数如下:波特率115200,数据位8,停止位1,无奇偶校验位,无硬件控制流㊂最后打开ZedBoard开发板电源,大约15秒后,可以看到串口调试工具界面上显示操作系统的启动过程㊂4.2㊀Android系统启动结果展示通过HDMI连接显示器,可以看到Android系统启动过程㊂最后在显示器上会显示Android系统启动后的界面,如图3所示㊂测试结果表明移植的Android系统可以稳定的运行㊂5㊀结语本文在Zynq-7000平台上移植了Android操作系统,结果表明所移植的Android系统功能完善㊂通过在Zynq上移植操作系统,可降低PS部分的开发难度,为高级语言程序员在Zynq上的应用开发提图3㊀Android启动界面供便利,使得Zynq-7000开发平台的应用与开发更加广泛㊂参考文献(References):[1]㊀王莹,李健,万翀.引领28nmFPGA 智 造时代[J].电子产品世界,2011,18(12):10-11.[2]㊀王莹.Xilinx可扩展处理平台:ZYNQ嵌入式处理器与FPGA集成的独特创举[J].电子产品世界,2012,19(2):27-32.[3]㊀陆佳华,江舟,马岷.嵌入式系统软硬件协同设计实战指南[M].北京:机械工业出版社,2013.[4]㊀赵爽怡.安卓在新一代数字电视芯片上的移植技术研究[D].武汉:华中科技大学,2013.[5]㊀苏锋.智能相机任重道远 两款安卓系统数码相机使用感受[J].微电脑世界,2013,29(1):126-127.[6]㊀魏爽.基于Android的嵌入式非线性结探测装置研究[D].长春:吉林大学,2015.[7]㊀李晨.基于定制Android平台的呼吸机软件研究与实现[D].南京:东南大学,2016.[8]㊀LiD,BissyandeTF,KleinJ,etal.UnderstandingAndroidAppPiggybacking:ASystematicStudyofMaliciousCodeGrafting[J].IEEETransactionsonInformationForensics&Security,2017,12(6):1269-1284.[9]㊀FarukiP,BharmalA,LaxmiV,etal.AndroidSecurity:ASur⁃veyofIssues,MalwarePenetration,andDefenses[J].IEEECom⁃municationsSurveys&Tutorials,2017,17(2):998-1022.[10]㊀FangZ,HanW,LiY.PermissionbasedAndroidsecurity:Is⁃suesandcountermeasures[J].Computers&Security,2014,43(6):205-218.收稿日期:2018-07-11修改日期:2018-07-25作者简介:王洁(1979-),男,辽宁大连人,博士,副教授,主要研究方向为并行体系结构㊁容错计算㊂34。
计算机环境的可移植操作系统界面(POSIX.1)简介
马也腾
【期刊名称】《中国计算机用户》
【年(卷),期】1991(000)006
【总页数】4页(P10-13)
【作者】马也腾
【作者单位】无
【正文语种】中文
【中图分类】TP316
【相关文献】
1.建设系统的实验环境打造计算机精品课程——东南大学计算机教学实验中心简介[J], 翟玉庆
2.实现计算机异构环境下图书馆信息服务系统界面的统一 [J], 张华
3.计算机磁盘操作系统简介(一) [J], 梁成秀
4.计算机磁盘操作系统简介(二) [J], 梁成秀
5.计算机磁盘操作系统简介(三) [J], 梁成秀
因版权原因,仅展示原文概要,查看原文内容请购买。
基于8086单芯片计算机的嵌入式 Linux 操作系统移植杨延庆【摘要】In view of the problems of experimental platform and a shortage of experimental means during the study of“The Principle & Application of Microcomputer”and“Microcomputer Principle & Interface Technology” ,the embedded Linux operation system transplantation is proposed based on 8086 single chip computer .The operation system support for 8086 micro -process platform is provided by analyzing 8086 single chip computer and methods of embedded Linux operation system transplantation ,and by taking advantage of cross compiler environment upon Linux kernel and file system transplantation .T his transplantation demonstrates that the embedded Linux operating system can reduce the difficulty of research and development and shorten the cycle of the complicated embedded products tremendously .In addition ,it can in‐crease the efficiency of the system by reducing the repeated labor in system design .%针对“微型计算机原理及应用”和“微型计算机原理与接口技术”等课程实验平台与实验手段不足等问题,提出基于8086单芯片计算机的嵌入式Linux操作系统移植。
操作系统安装与配置实验报告实验目的:
1. 了解操作系统的安装过程。
2. 熟悉操作系统的基本配置。
实验内容:
1. 安装操作系统。
2. 进行基本配置。
3. 测试系统运行情况。
实验步骤:
1. 准备安装光盘或USB启动盘。
2. 将光盘或USB启动盘插入计算机,并启动计算机。
3. 按照提示选择安装语言和时区等信息。
4. 选择安装类型(新安装或升级)。
5. 选择安装目标磁盘。
6. 进行分区和格式化。
7. 完成安装并进行基本配置(设置用户名、密码、网络等)。
实验结果:
1. 成功安装操作系统。
2. 完成基本配置。
3. 系统能够正常运行。
实验总结:
通过本次实验,我了解了操作系统的安装过程和基本配置方法。
在实际操作中,我遇到了一些问题,比如分区和格式化时出现了错误提示,但通过查阅资料和询问同学,最终成功解决了这些问题。
通过这次实验,我对操作系统的安装和配置有了更深入的了解,也提高了自己的解决问题的能力。
希望在以后的实验中能够继续学习和提高。
嵌入式系统及应用基于s3c6410的嵌入式Linux系统移植1.嵌入式系统介绍嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可配置,对功能、可靠性、成本、体积、功耗有严格约束的专用系统。
嵌入式Linux是在标准Linux 的基础上针对嵌入式系统进行内核裁减和优化后形成的一种小型操作系统,一般只有几百KB左右,即使加上其它必要的模块和应用程序,所需的存储空间也很小,非常适合于移植到嵌入式系统中去。
一个完整的嵌入式系统的构建过程大体可以分为四个步骤:交叉编译环境的搭建、Boot Loader移植、Linux内核的配置编译及移植、根文件系统的制作及移植。
本文将以SUMSANG公司的s3c6410处理器为目标平台,介绍嵌入式Linux系统的构建过程。
1.1.嵌入式系统的组成一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。
执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。
执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
硬件层:硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。
在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。
其中操作系统和应用程序都可以固化在ROM中。
中间层:硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,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内核移植;文件系统移植;系统移植主要步骤流程图如下: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把交叉编译器路径添加到系统环境变量中,以后可以直接在终端窗口中输入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 回车:如下图所示就说明交叉编译器已经成功安装到了系统里面,可以使用该编译器来编译Uboot 代码和内核代码了。
2.3. Boot Loader引导程序及移植引导加载程序是系统加电后运行的第一段软件代码。
它包括固化在固件(firmware)中的boot代码(可选)和Boot Loader两大部分。
PC机中Boot Loader 的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
在嵌入式系统中,整个系统的加载启动任务就完全由Boot Loader来完成。
由于Boot Loader的实现依赖于CPU的体系结构,因此,嵌入式领域里建立一个通用的Boot Loader几乎是不可能的。
大多数Boot Loader都分为stagel和stage2两大部分。
依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stagel中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
而stage2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。
Boot Loader的stagel上电启动后通常按以下步骤执行:首先对硬件设备初始化。
包括屏蔽所有中断,设置CPU的速度和频率,RAM初始化,初始化LED,关闭CPU的内部指令/数据Cache等。
接下来的工作是为加载Boot Loader的stage2准备RAM空间,然后拷贝Boot Loader的stage2到RAM空间中。
接着设置好堆栈。
最后跳转到stage2的人口点。
Boot Loader的stage2通常按以下步骤执行:初始化本阶段要使用到的硬件设备,然后检测系统内存映射(memory map),将Kernel映像和根文件系统映像从Flash上读到RAM空间中,接着为内核设置启动参数,最后调用内核。
至此整个Boot Loader的启动引导过程结束。
U-Boot作为嵌入式系统中通用的Boot Loader,可以很方便的移植到其他硬件平台,因此对嵌入式系统Boot Loader,研究U-Boot的移植就显得非常重要。
移植U-Boot到新的嵌入式系统板上包括两个层面的移植,第一层面是针对CPU的移植,第二层面是针对BOARD的移植,同时需要移植相关的头。
然后根据开发板的不同内存需要使用不同的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_linux-3.0.1.tar.gz2、配置内核1) 进入Linux-3.0.1内核主目录,通过以下命令将6410的默认配置文件写到当前目录下的.config。
make s3c6410_defconfig2)配置内核模块的功能,有几种方式可以进行界面选择:make menuconfig(文本选单的配置方式,在有字符终端下才能使用)make xconfig(图形窗口模式的配置方式,图形窗口的配置比较直观,必须支持Xwindow下才能使用)make oldconfig(文本配置方式,在原内核配置的基础修改时使用)这里使用make menuconfig命令。
3 编译内核命令如下:#make zImage编译结束后将在内核源码目录的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-nand256m FileSystem-Yaffs2 rootfs.yaffs22)mkyaffs2image-nand2g制作出的映像,适用于 2G或者 4G字节 nandflash 的开发板。
制作命令:#./mkyaffs2image-nand2g FileSystem-Yaffs2 rootfs.yaffs2最后生成rootfs.yaffs2 是可以下载到开发板nandflash 中的yaffs2 文件系统映像。
移植成功后Linux启动的界面:3. 基于移植的系统上的小程序功能:每次可以选择上下左右其中一个方向去拨动,每拨动一次,所有的数字方块都会往拨动的方向靠拢外,系统也会在空白的地方随机出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。
系统给予的数字方块不是2就是4,玩家要想办法在这小小的16格范围中凑出“2048”这个数字方块。
程序源码:2048.c/*2048*/#include<stdio.h>#include<stdlib.h>#include<time.h>#include"my_getch.h"int code[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};int temp[5];int mov=0;int score=0void print(void){int i,j;printf("2048\n");printf("W--UP A--LEFT S--DOWN D--RIGHT 0--EXIT\n"); printf("Score:%d mov:%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");}}int add(void){int i;int t=0;int change=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+temp[i]; }temp[i-1]=temp[i-1]*2;temp[i]=0;}}do{for(i=0;i<=3;i++){if(temp[i]==0){temp[i]=temp[i+1];temp[i+1]=0;}}t++;}while(t<=3);return change;}int main(void){int gameover=0;int i,j;int change=1;char input;srand((unsigned)time(NULL));while(gameover==0){if(change>=1){do{i=((unsigned)rand())%4; j=((unsigned)rand())%4; }while(code[i][j]!=0);if(((unsigned)rand())%4==0) {code[i][j]=4;}else{code[i][j]=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++){temp[i]=code[i][j];}temp[4]=0;change=change+add();for(i=0;i<=3;i++){code[i][j]=temp[i];}}break;case 'A':case 'a':for(i=0;i<=3;i++){for(j=0;j<=3;j++){temp[j]=code[i][j];}temp[4]=0;change=change+add();for(j=0;j<=3;j++){code[i][j]=temp[j];}}break;case 'S':case 's':for(j=0;j<=3;j++){for(i=0;i<=3;i++){temp[i]=code[3-i][j]; }temp[4]=0;change=change+add();for(i=0;i<=3;i++){code[3-i][j]=temp[i]; }}break;case 'D':case 'd':for(i=0;i<=3;i++){for(j=0;j<=3;j++){temp[j]=code[i][3-j]; }temp[4]=0;change=change+add();for(j=0;j<=3;j++){code[i][3-j]=temp[j]; }}break;}gameover=1;for(i=0;i<=3;i++)for(j=0;j<=3;j++)if(code[i][j]==0)gameover=0;}printf("Game over!\n");return 0;}my_getch.h#ifndef MYGETCH_H#define MYGETCH_H#include <stdio.h>#include <termios.h> //操作终端#include <unistd.h>#include <assert.h>#include <string.h>char my_getch(){int c=0;struct termios org_opts, new_opts;int res=0;//保留终端原来设置res=tcgetattr(STDIN_FILENO, &org_opts);assert(res==0);//从新设置终端参数memcpy(&new_opts, &org_opts, sizeof(new_opts));new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);c=getchar();//恢复中断设置res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);return c;}#endif运行结果:在终端上显示的运行结果:在开发板上显示的运行结果:。