uClinux操作系统移植,看看

2016-01-29 18:34 38 1 收藏

uClinux操作系统移植,看看,uClinux操作系统移植,看看

【 tulaoshi.com - Linux 】

uClinux操作系统移植 -------------------------------------------------------------------------------- 来源:BIPLIP.com 作者:沈沙 (复旦大学电子工程系沈沙,欢迎转载,转载时请保留此行作者信息) l uClinux简介 l 硬件体系结构简介 l 编译环境和编译工具。 l uClinux启动过程 l 系统源码的修改 1. uClinux简介 uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。 uclinux是一个源码开放的操作系统,面向没有MMU(Memory Management Unit)的硬件平台。它是linux的一个变种,主要的区别在于两者的内存管理机制和进程调度管理机制,同时为了适应嵌入式应用的需求,它的采用了romfs文件系统,并对linux上的c语言库glibc做了简化。 2. 硬件体系结构简介 运行uClinux的硬件平台主要包括如下几个部分:cpu(ARMv4指令集兼容)、uart、memory controller、定时器、flash存储器,sdram存储器,中断控制器和DMA。 3. 编译环境和编译工具 uclinux操作系统源码绝大部分是用c语言开发的,有一些与硬件直接相关的代码则用特定于某一CPU体系结构的汇编来实现。这些源码只能用GNU的gcc编译工具来进行编译、链接。 GNU gcc可以运行于Linux/Unix操作系统上。如果要在Windows平台上运行gcc,则必须安装Cygwin。Cygwin可以在Windows中安装一个linux的运行环境,这样就可以在windows下运行原本只能在linux下运行的程序。 为了在PC上编译得到运行于目标CPU上的操作系统内核,还必须安装一个合适的交叉编译器。Gcc 提供了现成的针对MIPS、ARM、M68K、Sharc、PowerPC的交叉编译器。如果没有现成的交叉编译器,则需要自行设计。GNU网站提供了一些如何开发新的交叉编译器的文章。开发一个新的编译器,一般需要如下几个步骤: (1)、编写机器描述脚本。采用gcc的RTL(Register Tansfer Language)语言描述针对某一CPU体系结构的机器指令与寻址方式、CPU浮点处理方式、endianess、c语言中各种数据类型的位宽、寄存器的个数和使用规则、堆栈和函数调用规则等体系结构的细节。 (2)、设计代码生成器。Gcc在对c语言源文件进行了词法和语法分析后,将产生一种中间格式文件(intermediate representation)。为了把这种中间格式文件转化为针对具体CPU体系结构的机器码,需要自行设计一个代码生成器。 (3)、设计汇编器 (4)、设计链接器 4. uClinux启动过程 uClinux系统的启动可以分为两个步骤: (1). 运行bootloader初始化程序 SRAM、SDRAM等存储设备属于挥发性的存储器,掉电以后其中的内容就会全部丢失,所以必须把操作系统的内核镜像存放在Flash等不挥发性存储介质上。但是操作系统在运行时,需要动态的创建一些如数据段、堆栈、页表(针对使用虚拟地址的操作系统)等内容,所以需要在RAM中运行操作系统。因此,就需要一个引导程序把操作系统的内核镜像从Flash存储器拷贝到RAM中,然后再从RAM中执行操作系统的内核。Bootloader就是可以完成这样一种功能的程序。 从本质上来讲,bootloader不属于操作系统内核。它采用汇编语言编写,因此针对不同的cpu体系结构,这一部分代码不具有可移植性。在移植操作系统时,这部分代码必须加以改写。 具体来讲,bootloader在系统启动时主要完成以下几项工作: · 将操作系统内核从flash拷贝到sdram中,如果是压缩格式的内核,还要将之解压缩。 · 改写系统的memory map,原先flash起始地址映射为0地址,这时需要将RAM的起始地址映射为0。 · 设置堆栈指针并将bss段清零。将来执行c语言程序和调用子函数时要用到。 · 改变pc值,使得cpu开始执行真正的操作系统内核。 (2) 运行操作系统内核 bootloader程序执行完上述的各项工作后,通过一条跳转指令,转而执行ini目录下c语言源文件main.c中的函数start_kernel()。因为在此之前bootloader已经创建好一个初始化环境, c函数可以开始执行了。整个操作系统内核的初始化工作从这里才算是真正开始。这个函数的长度比较短,代码如下: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// asmlinkage void __init start_kernel(void) { char * command_line; unsigned long mempages; extern char saved_command_line[]; /* * Interrupts are still disabled. Do necessary setups, then * enable them */ lock_kernel(); printk(linux_banner); setup_arch(&command_line); printk("Kernel command line: %sn", saved_command_line); parse_options(command_line); trap_init(); init_IRQ(); sched_init(); softirq_init(); time_init(); /* * HACK ALERT! This is early. We're enabling the console before * we've done PCI setups etc, and console_init() must be aware of * this. But we do want output early, in case something goes wrong. */ console_init(); #ifdef CONFIG_MODULES init_modules(); #endif if (prof

来源:https://www.tulaoshi.com/n/20160129/1506396.html

延伸阅读
标签: 服务器
桌面操作系统是什么 桌面操作系统也可以说是个人电脑系统,一般指的是安装在个人电脑上的图形界面操作系统软件。操作系统按应用领域来划分,有桌面操作系统、服务器操作系统和嵌入式操作系统3种。桌面操作系统是其中应用最为广泛的系统。 特点 1、桌面操作系统基本上是根据人在键盘和鼠标发出的命令进行工作,对人的动作和反应...
标签: 电脑入门
一、安装前的工作 准备工作: 一台已经安装Windows的DELLE6400;(带独立显卡)笔记本雪豹安装光盘dmg镜像文件(我用的是ftp://125.91.11.31 /snowleopard_10a432_userdvd.dmg,用迅雷下载);我制作的E6400雪豹安装工具包(下文中所有程序、文件、工具都在里面了,驱动程序做了傻瓜包集合)(http://www.rayfile.com/files/9b1d6a9e-0394-11df- b8d...
标签: 电脑入门
电脑是由硬件和软件组成的,缺了任何一样都无法运行。我们对电脑进行操作,都是利用操作系统来完成。最初的电脑没有操作系统,人们通过各种操作按钮来控制计算机,后来出现了汇编语言,并将它的编译器内置到电脑中,操作人员通过有孔的纸带将程序输入电脑进行编译。这些将语言内置的电脑只能由操作人员自己编写程序来运行,不利于设备、程序的...
问:术语GUI,window manager,desktop和interface间的区别(如果有的话),它们和X window有什么关系? 答:在X的世界里,事物是分成很多组件的,而不象其他的操作系统那样,任何东西都是OS的一个部分。 这里是一些定义: Interface是一个普通术语,意思是指在计算机系统的两个互不依赖的组件间的连结,一个桥。它通常用来指“user interf...
由于Unix操作系统众所周知的稳定性、可靠性,用来提供各种Internet服务的计算机运行的操作系统占很大比例的是Unix及Unix类操作系统,因此需要大量熟练掌握Unix类操作系统应用的人才。目前比较常见的运行在PC机上的Unix类操作系统有:Linux、BSD Unix、Solaris x86、SCO Unix等。一些初学者对于各种类型的Unix系统特性不熟悉,不知道如何选择,...

经验教程

415

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部