微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于uclinux系统分析

关于uclinux系统分析

时间:08-28 来源:互联网 点击:

简介

Linux是一种很受欢迎的操作系统,它与Unix系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-CONtrol-Linux,字面上的理解就是针对微控制领域而设计的Linux系统。

uClinux小型化的做法

标准Linux可能采用的小型化方法:

1、重新编译内核

Linux内核采用模块化的设计,即很多功能块可以独立的加上或卸下,开发人员在设计内核时把这些内核模块作为可选的选项,可以在编译系统内核时指定。因此一种较通用的做法是对Linux内核重新编译,在编译时仔细的选择嵌入式设备所需要的功能支持模块,同时删除不需要的功能。通过对内核的重新配置,可以使系统运行所需要的内核显著减小,从而缩减资源使用量。

2、制作root文件系统映象

Linux系统在启动时必须加载根(root)文件系统,因此剪裁系统同时包括root file system的剪裁。在x86系统下,Linux可以在Dos下,使用Loadlin文件加载启动。

uClinux采用的小型化方法:

1、uClinux的内核加载方式

uClinux的内核有两种可选的运行方式:可以在flash上直接运行,也可以加载到内存中运行。这种做法可以减少内存需要。

Flash运行方式:把内核的可执行映象烧写到flash上,系统启动时从flash的某个地址开始逐句执行。这种方法实际上是很多嵌入式系统采用的方法。

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

2、uClinux的根(root)文件系统

uClinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。空间的节约来自于两个方面,首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。

3、uClinux的应用程序库

uClinux小型化的另一个做法是重写了应用程序库,相对于越来越大且越来越全的glibc库,uClibc对libc做了精简。

uClinux对用户程序采用静态连接的形式,这种做法会使应用程序变大,但是基于内存管理的问题,不得不这样做(这将在下文对uClinux内存管理展开分析时进行说明),同时这种做法也更接近于通常嵌入式系统的做法。

uClinux的开发环境

GNU开发套件

Gnu开发套件作为通用的Linux开放套件,包括一系列的开发调试工具。主要组件:

Gcc: 编译器,可以做成交叉编译的形式,即在宿主机上开发编译目标上可运行的二进制文件。

Binutils:一些辅助工具,包括 objdump(可以反编译二进制文件),as(汇编编译器),ld(连接器)等等。

Gdb:调试器,可使用多种交叉调试方式,gdb-bdm (背景调试工具),gdbserver(使用以太网络调试)。

uClinux的打印终端

通常情况下,uClinux的默认终端是串口,内核在启动时所有的信息都打印到串口终端(使用printk函数打印),同时也可以通过串口终端与系统交互。  uClinux在启动时启动了telnetd(远程登录服务),操作者可以远程登录上系统,从而控制系统的运行。至于是否允许远程登录可以通过烧写romfs文件系统时有用户决定是否启动远程登录服务。

交叉编译调试工具

支持一种新的处理器,必须具备一些编译,汇编工具,使用这些工具可以形成可运行于这种处理器的二进制文件。对于内核使用的编译工具同应用程序使用的有所不同。在解释不同点之前,需要对gcc连接做一些说明:

.ld(link description)文件:ld文件是指出连接时内存映象格式的文件。

crt0.S:应用程序编译连接时需要的启动文件,主要是初始化应用程序栈。

pic:position independence code ,与位置无关的二进制格式文件,在程序段中必须包括reloc段,从而使的代码加载时可以进行重新定位。

内核编译连接时,使用ucsimm.ld文件,形成可执行文件映象,所形成的代码段既可以使用间接寻址方式(即使用reloc段进行寻址),也可以使用绝对寻址方式。这样可以给编译器更多的优化空间。因为内核可能使用绝对寻址,所以内核加载到的内存地址空间必须与ld文件中给定的内存空间完全相同。

应用程序的连接与内核连接方式不同。应用程序由内核加载(可执行文件加载器将在后面讨

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top