嵌入式 Linux: uClinux 操作系统移植
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 体系结构,这一部分代码不具有可移植性。在移植操作系统时,这部分代码必须加以
改写。
评论0