You are on page 1of 31

uClinux 简介

xlanchen@2007.5.28
μClinux
 uClinux 是应用于嵌入式设备的最著名、应用
最广泛一个 Linux 发行版本,它也是一个开放
源码的项目, uClinux 的源代码和开发工具可
以免费从 http://www.uclinux.org 上下载得到

 uClinux 的含义:
Micro-Control-Linux :专门针对微控制器领域
而设计的嵌入式 Linux 系统

xlanchen@2007.5.28 Embedded operating system


主要内 容
 uClinux 的特点
 uClinux 的开发环境

 uClinuc 的实时解决方案

 uClinux 的内存管理

 uClinux 的源代码结构和 Makefile

xlanchen@2007.5.28 Embedded operating system


uClinux 的特点 ( 1 )
 和主流的 Linux 相比, uClinux 有以下的特点
1 .简化了内核加载方式
uClinux 的内核有两种可选的运行方式:可以在
flash 上直接运行,也可以加载到内存中运行。
( 1 ) Flash 运行方式:
把内核的可执行映象烧写到 flash 上,系统启动时
从 Flash 的某个地址开始逐句执行。这实际上是很
多嵌入式系统采用的方法。

xlanchen@2007.5.28 Embedded operating system


uClinux 的特点 ( 1 )
( 2 )内核加 载方式:
把内核的压缩文件存放在 flash 上,系统启动时读
取压缩文件在内存里解压,然后开始执行,这种方
式相对复杂一些,但是运行速度可能更快( ram 的
存取速率要比 flash 高)。同时这也是标准 Linux
系统采用的启动方式。

xlanchen@2007.5.28 Embedded operating system


uClinux 的特点 ( 2 )
2 .采用了 romfs 文件系统作为 root 文件系统
romfs 文件系统相对于一般的 ext2 文件系统要求更
少的空间。空间的节约主要来自两个方面:
( 1 )内核支持 romfs 文件系统比支持 ext2 文件
系统需要更少的代码
( 2 ) romfs 文件系统相对简单,建立文件系统的
超级块需要更少的存储空间。
Romfs 文件系统不支持动态擦写,对于系统需要动
态保存的数据采用 RAM 盘的方法处理, RAM 盘
采用 ext2 文件系统。

xlanchen@2007.5.28 Embedded operating system


uClinux 的特点 ( 3 )
3 .使用 Flat 可执行 文件格式
elf 格式有很大的文件头, flat 文件对文件头和一些
段信息做了简化。
gcc 的编译器不能直接形成这种文件格式,但是可
以形成 coff 或 elf 格式的可执行文件,这两种文件
需要 coff2flt 或 elf2flt 工具进行格式转化,形成 flat
文件。
coff ( common object file format ):
一种通用的对象文件格式
elf ( excutive linked file ):
一种为 Linux 系统所采用的通用文件格式,
xlanchen@2007.5.28
支持动态连接 Embedded operating system
uClinux 的特点 ( 4 )
4 .重写了应用程序库
uClinux 重写了应用程序库,相对于越来越大且
越来越全的 glibc 库, uClibc 对 libc 做了精简。
uClinux 对用户程序采用静态连接的形式,这种做
法会使应用程序变大,但是基于内存管理的问题,
不得不这样做,同时这种做法也更接近于通常嵌入
式系统的做法。

xlanchen@2007.5.28 Embedded operating system


uClinux 的开发 环境
 uClinux 源码包
http: //www.uclinux.org/pub/uClinux/dist/
 uClinux 、 uClibc 以及用户应用程序

 交叉编译环境

http: //www.uclinux.org/pub/.../arm-elf-tools/
 交叉编译器、 Binutils 工具以及 Gdb 等

xlanchen@2007.5.28 Embedded operating system


uClinux 的实时 解决 方案
 uClinux 本身并没有关注实时问题,它并不是
为了 Linux 的实时性而提出的。
 uClinux 可以使用 Rt-linux 的 patch ,以增强
其实时性,使得 uClinux 可以应用于工业控
制、进程控制等一些实时要求较高的应用。
 Rt-linux 在前面已经介绍过。它的执行管理器把普
通 Linux 的内核当成一个任务运行,同时还管理
了实时进程。而非实时进程则交给普通 Linux 内核
处理。

xlanchen@2007.5.28 Embedded operating system


uClinux 的实时 解决 方案
 这种方法已经应用于很多的操作系统以增强操作系
统的实时性,包括一些商用版 UNIX 系统,
Windows NT 等等。
 这种方法优点:
( 1 )实现简单,且实时性能容易检验。
( 2 )由于非实时进程运行于标准 Linux 系统,同其它
Linux 商用版本之间保持了很大的 兼容性。
( 3 )可以支持硬实时时钟的应用。

xlanchen@2007.5.28 Embedded operating system


uClinux 的内存 管理
 uClinux
同标准 Linux 的最大区别就在于
内存管理
 下面将把 uClinux 内存管理同标准 Linux 的那
内存管理部分进行比较分析:
1 、标准 Linux 使用的虚拟存储器技术
2 、 uClinux 针对 NOMMU 的特殊处理

xlanchen@2007.5.28 Embedded operating system


1 、标准 Linux 的虚 拟存 储器 技

 标准 Linux 使用虚拟存储器技术
 用于提供比计算机系统中实际使用的物理内存大得
多的内存空间。
 使用者将感觉到好像程序可以使用非常大的内存空间,
从而使得编程人员在写程序时不用考虑计算机中的物理
内存的实际容量。
 为了支持虚拟存储管理器的管理, Linux 系统采用
分页( paging )的方式来载入进程。
 所谓分页即把实际的存储器分割为相同大小的段,例如
每个段 1024 个字节,这样 1024 个字节大小的段便称
为一个页面( page )。

xlanchen@2007.5.28 Embedded operating system


1 、标准 Linux 的虚 拟存 储器 技

 虚拟存储器由存储器管理机制及一个大容量的
快速硬盘存储器支持。它的实现
( 1 )基于局部性原理:
当一个程序在运行之前,没有必要全部装入内存,而是
仅将那些当前要运行的那些部分页面或段装入内存运行
( copy-on-write ), 其余暂时留在硬盘上。
( 2 )通过缺页中断将运行时所需的代码和数据加载
到内存中:
程序运行时如果它所要访问的页(段)已存在,则程序
继续运行,如果发现不存在的页(段),操作系统将产
生一个页错误( page fault ),这个错误导致操作系统
把需要运行的部分加载到内存中。
xlanchen@2007.5.28 Embedded operating system
1 、标准 Linux 的虚 拟存 储器 技

( 3 )使用交换技术在必要时把不需要的内存页(段
)交换到磁盘上。
 利用上述的方式管理存储器,便可把一个进程
所需要用到的存储器以化整为零的方式,视需
求分批载入,而核心程序则凭借属于每个页面
的页码来完成寻址各个存储器区段的工作。

xlanchen@2007.5.28 Embedded operating system


1 、标准 Linux 的虚 拟存 储器 技

 地址转换技术
 标准 Linux 是针对有内存管理单元的处理器设计的。
在这种处理器上,虚拟地址被送到内存管理单元
( MMU ),把虚拟地址映射为物理地址。
 每个任务具有不同的虚拟 物理地址转换映射,可
以支持不同任务之间的保护。
 每个任务中都定义有一个地址转换表,用于将其虚拟地
址空间映射到物理内存的一个部分

xlanchen@2007.5.28 Embedded operating system


 计算机的存储管理单元( MMU )一般有一组寄存
器来标识当前运行的进程的转换表。
 在当前进程将 CPU 放弃给另一个进程时(一次上下文
切换),内核通过指向新进程地址转换表的指针加载这
些寄存器。
 MMU 寄存器是有特权的,只能在内核态才能访问。这
就保证了一个进程只能访问自己用户空间内的地址,而
不会访问和修改其它进程的空间。

xlanchen@2007.5.28 Embedded operating system


1 、标准 Linux 的虚 拟存 储器 技

 当可执行文件被加载时,加载器根据缺省的 ld 文
件,把程序加载到虚拟内存的一个空间,因此实际
上很多程序的虚拟地址空间是相同的,但是由于转
换函数不同,所以实际所处的内存区域也不同。

xlanchen@2007.5.28 Embedded operating system


1 、标准 Linux 的虚 拟存 储器 技

 实现虚存系统的代价

( 1 )地址转换表和其他内存管理相关的数据结构,
占用系统中的内存。
( 2 )地址转换增加了每一条指令的执行时间,而对
于有额外内存操作的指令会更严重。
( 3 )当进程访问不在内存的页面时,系统发生缺页
失效。系统处理失效极耗时间。

xlanchen@2007.5.28 Embedded operating system


Physical and virtual memory maps for the Compaq iPAQ

xlanchen@2007.5.28 Embedded operating system


2 、 uClinux 对 NOMMU 的特殊
处理
 由于较多的嵌入式设备不带有 MMU ,
uClinux 就是专门针对没有 MMU 的处理器设
计的
 因此, uClinux 不能使用处理器的虚拟内存管
理技术,而采用了实存管理策略( real
memory management )
 uClinux 仍采用存储器的分页管理技术
 在系统启动时把实际存储器进行分页。
 在加载应用程序时程序分页加载。
xlanchen@2007.5.28 Embedded operating system
2 、 uClinux 对 NOMMU 的特殊
处理
 uClinux系统对于内存的访问是直接的,所有
程序中访问的地址都是实际的物理地址。
 它对地址的访问不需要经过 MMU ,而是直接送到
地址线上输出
 操作系统对内存空间没有保护,各个进程实际
上共享一个运行空间
 这是因为 uClinux 的进程没有独立的地址转换表
 这实际上是很多嵌入式系统的特点。

xlanchen@2007.5.28 Embedded operating system


2 、 uClinux 对 NOMMU 的特殊
处理
 一个进程在执行前,系统必须为进程分配足够
的连续地址空间,然后全部载入主存储器的连
续空间中。
 此外,程序加载地址与预期( ld 文件中指出
的)通常都不相同,这样 relocation 过程就是
必须的。
 另外,磁盘交换空间也是无法使用的, 系统
执行时如果缺少内存将无法通过磁盘交换来得
到改善。
xlanchen@2007.5.28 Embedded operating system
2 、 uClinux 对 NOMMU 的特殊处理

关于 Relocation 的解释
 由于 uClinux 直接使用物理地址,而链接好的
用户应用程序中使用的是虚拟地址,因此当用
户执行一个应用时,内核的执行文件加载器将
对 flat 文件进行进一步处理,主要是对 reloc
段进行修正。
 需要 reloc 段的根本原因是,程序在连接时连
接器所假定的程序运行空间(虚地址)与实际
程序加载到的内存空间(物理地址)不同。

xlanchen@2007.5.28 Embedded operating system


2 、 uClinux 对 NOMMU 的特殊处
理:
关于 Relocation 的解释
 假如有这样一条指令:
jsr app_start; 这一条指令采用直接寻址,
跳转到 app_start 地址处执行。

 假设链接程序将根据 ld 文件计算出 app_start


的实际地址为 0x10000 。由于操作系统无法
保证程序将按 ld 文件加载。如果程序仍然跳
转到物理地址 0x10000 处执行,通常情况这
是不正确的。

xlanchen@2007.5.28 Embedded operating system


2 、 uClinux 对 NOMMU 的特殊处 理:
关于 Relocation 的解释

 一个解决办法是
增加一个变量 addr ,用于存储 app_start 的实
际地址,并将上述语句改为:
movl addr, a0;
jsr (a0);
增加的变量 addr 将在数据段中占用一个 4 字
节的空间,链接器将 app_start 的绝对地址存
储到 addr 中。在可执行文件加载时,加载器
计算出 app_start 在内存中的实际位置,写入
addr 变量
xlanchen@2007.5.28 Embedded operating system
2 、 uClinux 对 NOMMU 的特殊
处理
 uClinux
对在内存管理方面的减少使得对开发
人员提出了更高的要求
 从编译内核开始,开发人员必须告诉系统这个开发
板上内存的容量
 开发人员在开发应用程序时必须考虑内存的分配情
况并关注应用程序需要运行空间的大小
 由于采用实存储器管理策略,用户程序同内核以及
其它用户程序在一个地址空间,程序开发时要保证
不侵犯其它程序的地址空间,以使得程序不至于破
坏系统的正常工作,或导致其它程序的运行异常

xlanchen@2007.5.28 Embedded operating system


2 、 uClinux 对 NOMMU 的特殊
处理
 uClinux
的内存管理与标准 Linux 系统相比功
能相差很多,但这是嵌入式设备的选择
 由于成本等敏感因素的影响,普偏的采用不带有
MMU 的处理器,这决定了系统没有足够的硬件支
持实现虚拟存储管理技术
 由开发人员来维护系统的安全性

 目前应用最为广泛的 ARM7TDMI 芯片上很多


跑的都是 uClinux

xlanchen@2007.5.28 Embedded operating system


一个典 型的无 MMU 的系统 的 memory
map

0
16M 字节 SDRAM
0x01000000
空余空间,可用作
外设芯片的片选空间
0x1000000
CPU 内部寄存器
0x01001800
空余空间,可用作
外设芯片的片选空间
0xFFC00000
4M 字节的 FLASH,因为存储
OS,所以定位到地址最高端
0xFFFFFFFF
xlanchen@2007.5.28 Embedded operating system
uClinux 源代码 目录 树
 参见文件 uClinux-dist/SOURCE

xlanchen@2007.5.28 Embedded operating system


uClinux 中的 Makefile
 使用命令:
find . –name makefile
可以列出所有的 makefile
 找到最上层的 makefile(例如: 20070130 的

 找到配置规则,例如 make config 使用的规则

 找到缺省规则

xlanchen@2007.5.28 Embedded operating system

You might also like