基于arm内核微处理器操作系统的移植

上传人:ldj****22 文档编号:51640733 上传时间:2018-08-15 格式:PPT 页数:57 大小:429.50KB
返回 下载 相关 举报
基于arm内核微处理器操作系统的移植_第1页
第1页 / 共57页
基于arm内核微处理器操作系统的移植_第2页
第2页 / 共57页
基于arm内核微处理器操作系统的移植_第3页
第3页 / 共57页
基于arm内核微处理器操作系统的移植_第4页
第4页 / 共57页
基于arm内核微处理器操作系统的移植_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《基于arm内核微处理器操作系统的移植》由会员分享,可在线阅读,更多相关《基于arm内核微处理器操作系统的移植(57页珍藏版)》请在金锄头文库上搜索。

1、基于ARM内核微处理器操作系统 的移植报告人:王黎明Email: 操作系统的移植RTOS操作系统在ARM内核的移植嵌入式uClinux及其应用开发嵌入式Linux及其应用开发RTOS操作系统在ARM内核的移植uCOSII内核介绍1)简单、高效的嵌入式实时操作系统内核 2)抢占式、多任务、可确定性 3)系统服务 ( 邮箱、消息队列、信号量等 ) 4)源代码公开 5)可扩展性和可移植性 6)专为嵌入式应用而设计,可固化,可裁减 7)稳定性和可靠性经过实践检验RTOS操作系统在ARM内核的移植前后台系统RTOS操作系统在ARM内核的移植不可剥夺内核RTOS操作系统在ARM内核的移植可剥夺型内核RTO

2、S操作系统在ARM内核的移植应用程序有关移植重点软件部分硬件部分RTOS操作系统在ARM内核的移植移植uCOS到处理器上必须满足以下几个条件1)处理器的C编译器能产生可重入代码 2)用C语言就可以打开和关闭中断 ARM核包含了一个CPSR寄存器,该寄存器包含一个全局中断 禁 止位可以打开和关闭中断 3)处理器支持中断且能产生定时中断 ARM处理器都支持中断并能产生定时中断 4)处理器支持容纳一定数量数据的硬件堆栈 ARM有足够的硬件堆栈 5)处理器有将堆栈指针和其他CPU寄存器读出和存储器到堆栈或内 存中的指令 ARM中汇编指令stmfd可以将所有寄存器压栈,对应也有一个出 栈指令ldmfdR

3、TOS操作系统在ARM内核的移植可重入代码可重入代码指的是可以被多个任务同时调用,而不会破坏数据的一段 代码,或者说代码具有在执行过程中打断后再次被调用的能力。 Example:int temp; void swap (int *x,int *y)void swap (int *x,int *y) int temp;temp=*x temp=*x;*x=*y; *x=*y*y=Temp; *y=Temp; RTOS操作系统在ARM内核的移植每个任务都是 一个无限的循 环,都可能处 在5种状态之 一: 休眠态、 就绪态、 运行态、 等待态、 中断态。RTOS操作系统在ARM内核的移植移植步骤1基

4、本的配置和定义(OS_CPU.h里) 1)定义与编译器相关的数据类型这部分修改是和所用的编译器相关的,不同的编译器会使用不同字节来表示同一 数 据。 2)定义允许和禁止中断宏 因为处理器现场的寄存器在任务切换时都将会保存在当前运行任务的 堆栈中,所以OS_STK数据类型应该是和处理器的寄存器长度一致的。 3)定义栈的增长方向堆栈有高地址向低地址增长,这个也是和编译器有关的,当进 行函数调用时,入口参数和返回地址一般都会保存任务的堆栈中,编 译器的编译选项和由此生成的堆栈指令就会决定堆栈增长方向。4)定义OS_TASK_SW 包括开关中断的宏定义,以及进行任务切换的宏定义RTOS操作系统在ARM

5、内核的移植移植步骤2移植OS_CPU_A.ASM汇编代码文件 1)OSStarHighRdy函数 本函数由OSStart函数调用,OSStart函数负责使就绪状态的任 务开始运行,其中OSStarthightRdy负责获取新任务的堆栈指针并从 堆栈指针中恢复新任务的所有寄存器,函数要移植的原因就是因为它 涉及到保存处理器的寄存器到堆栈。 2)OSCtxSw函数 本函数由OS_TASK_SW函数调用,OS_TASK_SW由 OSSched函数调用。OSSched函数负责任务之间的切换: OSCTxSw函数在OSSched函数中负责保存当前任务对应的处理器寄 存器到堆栈中,并将需要恢复的任务对应的

6、处理器寄存器从堆栈中恢 复出来RTOS操作系统在ARM内核的移植移植步骤2移植OS_CPU_A.ASM汇编代码文件3)OSIntCtxSw函数本函数由OSIntExit函数调用,OSIntExit函数由OSTickISR调用,负责在 定时中断中的任务切换,前面提到的函数OSCtxSw和本函数均负责任务之间的 切换,区别主要在于是否在定时中断期间负责任务切换:OSIntCtxSw函数主要 保存当前任务堆栈指针,并将新任务对应的处理器寄存器从堆栈中恢复出来 4)OSTickISR函数 时间节拍函数,由定时中断产生,主要负责在进入时保存处理器寄 存器,完成任务的切换,退出时恢复寄存器并返回。RTOS

7、操作系统在ARM内核的移植移植步骤3移植OS_CPU_C.C标准C代 码文件 这个源文件由10个函数需要移植 OSTaskStkInit(); OSTaskCreateHook(); OSTaskDelHook(); OSTaskSwHook(); OSTaskIdleHook(); OSTaskStartHook(); OSTimeTickHook(); OSInitHookBegin(); OSInitHookEnd(); OSTCBInitHook(); 唯一必须移植的函数是OSTaskStkInit函数,这个函数在任务创建时调用, 负责初始化任务的堆栈结构RTOS操作系统在ARM内核的

8、移植uCOS的启动 1)在程序中分配任务栈 分配任务栈的主要目的是为任务运行时变量、堆栈提供存放和访 访问空间,通过定义数组unsigned int StackXSTACKSIZE并在 任务启动时传递该数组指针完成任务栈的初始化 2)建立任务函数 函数体中包含的内容有变量定义及初始化;功能函数或指令语句 设定任务挂起时间间隔 3)描述启动任务 传递任务函数地址、任务堆栈地址、任务优先级 4)在main()函数中完成启动流程 主要完成运行任务前引见初始化、操作系统的初始化、启动定时 中断、启动任务等。嵌入式uClinux及其应用开发 提纲嵌入式uClinux系统概况 开发工具GNU的使用 建立u

9、Clinux开发环境 在uClinux下开发应用程序添加用户应用程序到uClinux 嵌入式uClinux系统概况1)完全符合GNU/GPL公约的操作系统 2)取消了内存管理单元MMU3)沿袭了linux绝大多数特性 4)Linux 2.0/2.4内核派生而来 5)体积小,可移植性强 6)完整的网络功能 7)完备的文件系统支持 8)丰富的标准API接口嵌入式uClinux系统概况嵌入式uClinux系统概况Uclinux的一些相关知识 1)内存管理单元MMU 2)实时性的支持 3)平台支持 4)与标准linux的兼容性 5)网络的支持 6)应用领域开发工具GNU的使用GNU软件包括C编译器的G

10、CC,C+编译器的G+,汇编器AS,连接器 LD,二进制转换工具(OBJCOPY,OBJDUMP),调试工具(GDB, GDBSERVER,KGDB)和基于不同硬件平台的开发库。建立uClinux开发环境基于uClinux操作系统的应用开发环境一般是由目标系统硬件开发板和宿 主PC机构成。目标开发板用于运行操作系统和系统应用程序软件,而目标板所用到的 操作系统的内核编译、应用程序的开发和调试则是通过宿主PC机来完成 。双方一般通过串口,并口或者以太网口建立连接关系。建立uClinux开发环境在宿主机上安装工具链 1)arm-elf-binutils-2.11-5.i386.rpm 2)arm-

11、elf-gcc-2.95.3-2.i386.rpm 3)genromfs-0.5.1-1.i386.rpm 4)arm-elf-gdb-5.0-1.i386.rpm安装之后,可以在/usr/local/bin路径下看到GCC,G+,binutile, genromfs,flthdr和elf2flt等各种工具编译uClinux内核 uClinux内核采用模块化的组织结构,通过增减内核模块的方式来增 减系统功能,因此正确合理的设置内核的的功能模块,从而只编译系 统所需要的功能的代码,会对系统的运行进行如下方面优化:1)用户根据自身硬件系统的实际情况定制编译的内核,因为具有更 少的代码,一般会获得更

12、高的运行速度。 2)由于内核代码在系统运行时会常驻内存,因此,更短小的内核会 获得更多的用户内存空间 3)减少内核中不必要的功能模块,可以减少系统漏洞,从而增加 系统的稳定性和安全性编译uClinux内核 键入命令1)make menuconfig内核配置 2)make dep 寻找依存关系 3)make clean 清除以前构造内核时生成的所有目标 文件,模块文件和一些临时文件 4)make lib_only该命令编译库文件 5)make usr_only 编译用户应用程序文件 6)make romfs生成romfs文件系统 7)make image 8)make 编译uClinux内核当内

13、核的编译工作完成之后,会在/ uClinux- Samsung/images目录下看到两个内核文件:image.ram和 image.rom 将image.rom烧入bank0的Flash存储区内,上电后会自动加 载到SDRAM中运行 将image.ram下载到SDRAM中0x8000处,修改PC指针寄存 器的值为0x8000并执行 在uClinux下开发应用程序 基于uClinux应用程序的开发一般在标准的linux平台上用交叉编译工 具来完成。 由于uClinux没有MMU,并且做了大幅的精简,有时候在Linux下可 以使用的某些函数在uclinux下用不了,这样就需要用户自己编写库 函数

14、。 所以开发uCLinux下运行的程序和开发linux下运行的程序是一样的 Example:arm-elf-gcc Wall O2 Wl,-elf2flt o lednxy ledshow.c-Wall 指定产生全部的警告信息-O2 是一个二级优化选项,表示编译器尽产生尽可能小和尽可能块的代码-WL 一般用法“WL,Option”就是把后面的选项传递给连接器-Elf2flt 指定自动调用elf转换flat格式的工具添加用户应用程序到uClinux 方法一:直接编译全部内核 把源程序lednxy.c添加到运行于目标板上的uClinux操作系统中1) uClinux-Samsung/user目录并

15、建立一个自己的子目录,键入: Mkdir myapp 2)把lednxy拷贝到myapp目录下,并将相应的makefile文件拷贝到该目录下 3)修改这个makefile文件,写成 EXEC=ledshow OBJS=ledshow.o all : $(EXEC) $(EXEC): $(OBJS)$(CC) $(LDFLAGS) o $ $(OBJS) $(LDLIBS) romfs:$(ROMFSINST) /bin/$(EXEC) clean: rm f $(EXEC) *.elf *.gdb *.o添加用户应用程序到uClinux4)进入user目录,增加一行语句到该目录下的Makefile文件中 dir_$(CONFIG_USER_MYAPP_LEDNXY) += myapp 5)config目录下修改config.in文件,在最后增加下列语句mainmenu_option next_comment comment My Application bool lednxy CONFIG_USER

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号