uClinux操作系统移植,看看

2016-01-29 18:34 42 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

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

延伸阅读
标签: windows 操作系统
Windows 操作系统的技巧现在网上很多,让人感觉不知道从何下手,下面的技巧,虽然不多,但是对你使用操作系统都有非常大的帮助,所以今天介绍给大家…… 加快开机与关机的速度: ①选“开始\运行”,键入Regedit,展开HKEY_CURRENT_USER\Control Panel\Desktop,将字符串值“HungAppTimeout”的数值更改为200,再将字符串值“WaitToKillA...
标签: 电脑入门
任务栏图标有键盘快捷方式 用户想要通过快捷键打开这些应用程序,只需按住Windows键,然后按键盘上与该图标对应的数目即可。例如,如果Internet Explorer是第一个图标,用户只需按住Windows-1,就可以打开IE浏览器。 用户可以将任务栏上的项目任意移动 也许用户可能觉得这个功能在Windows XP和Vista就已经存在了,但实际上这是Windows...
标签: windows 操作系统
以下是几个会让 Windows 启动变慢的几个原因: ·内存太少,对 Windows 95/98 来讲,最好有至少要 32 MB,Windows ME 最好要 64MB,这样的数量,才容易维持一个稳定的工作环境。 ·硬盘速度太慢,这种情形多半发生在过时的计算机安装最新的操作系统最容易发生﹙因为硬盘小、传输速率慢、而操作系统体积又太大﹚,或者,硬盘太久没有做过磁...
标签: 操作系统
自动登录Ubuntu Ubuntu默认是每次登录都是要输入用户名和密码的,这是基于安全方面的考虑,不过对于桌面版,大家都习惯自己的电脑能自动登录,类似Windows XP系统那样,通过一些设置可以实现Ubuntu自动登录。设置的方法是:点击“系统”—“系统管理”—“登录窗口” (需要输入管理员密码),然后在“安全”选项页—勾选(启用自动登录),...
标签: 服务器
桌面操作系统是什么 桌面操作系统也可以说是个人电脑系统,一般指的是安装在个人电脑上的图形界面操作系统软件。操作系统按应用领域来划分,有桌面操作系统、服务器操作系统和嵌入式操作系统3种。桌面操作系统是其中应用最为广泛的系统。 特点 1、桌面操作系统基本上是根据人在键盘和鼠标发出的命令进行工作,对人的动作和反应...

经验教程

651

收藏

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