×
嵌入式开发 > 详情

ARM的uClinux的设计与应用

发布时间:2020-07-10 发布时间:
|

1 嵌入式操作系统uClinux及其应用开发

嵌入式软件平台由以下部分组成:系统引导程序、嵌入式操作系统内核、文件系统。系统引导程序通常也称为BootLoad—er ,代码量虽少,但是作用非常大,相当于PC上的BOIS,负责将操作系统内核固化到Flash中和系统初始化工作。然后将系统控制权交给操作系统。文件系统是嵌入式软件平台占用存储量最大的一部分,也是与用户开发最相关的一部分,它存储了系统配置文件、系统程序、用户应用程序和必需的驱动程序。

近些年我们在嵌入式系统及其应用的科研工作中采用了信息产业中的最新技术,打破了学科之间的界限,感到控制的出路原来很多,尽管处处是挑战。过去我们熟悉的“控制”有很大的局限性。:一是不考虑硬件的限制, 二是不考虑控制器的复杂性及计算能力,三是不注重实用性和效益。在微处理器,微传感器和微型执行元件不断推出新产品的形势下,控制的思路与手段正经历着巨大的变化。在经过一番艰苦的实践摸索之后,我们对控制学科的研究和教学有了一些新的认识。本教材就是在我们这些年科研工作的基础上总结出来的,它还比较粗糙,还需要今后花大力气把它完善与提高。

1.1 BootLoader程序

BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

系统引导程序BootLoader是嵌入式系统加电后执行的第一个程序,一般应写入Flash存储器中并从起始物理地址0x0开始。在应用实际中BootLoader的功能主要有:① 将uCLinux内核和文件系统烧写到目标板中;②系统初始化;③系统的内存映射;④加载uClinux内核

引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

1.2 嵌入式操作系统uCiinux

uClinux就是Micro—Control—Linux,是针对控制领域的嵌入式linux操作系统,它是从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性,适合不具备内存管理单元(MMU)的微处理器/微控制器(例如ARM7TDMI),它也是一个完全符合GNU/GPL公约的操作系统,完全开放代码。和主流的Linux相比,uClinux有以下特点:① 简化了内核加载方式,uClinux的内核可以在Flash上直接运行;② 采用romfs文件系统作为root文件系统,相对于一般的ext2使用更少的存储空间;③ 使用了Flat可执行文件格式替代elf格式;④ 使用应用程序库uClibc替代libc。

1.3 uClinux的编译与移植

I-3.1 uClinux系统针对硬件的改动

uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。

目前。uClinux已被成功移植到多款微处理器芯片上。但由于嵌入式操作系统的运行是与嵌入式系统的硬件密切相关的。而硬件的设计则会因为使用场合的不同而千差万别,因此,在uClinux内核源代码中和硬件紧密相关的部分就应该针对特定的硬件作出适当的修改。

本文中所涉及的对uClinux操作系统源代码的裁剪修改主要有以下几个地方:

uClinux内核源代码中对S3C4510B片内特殊功能寄存器以及其他相关硬件信息的定义文件hardware.h首先要定义系统工作的主时钟频率,本系统的为50MHz。

/********************************/

define$3C4510b CPU master clock

/********************************/

#define MHz l0o0000

#define fMCLK_ MHz (50 MHz)

#define fMCLK (fMCLK_MHz/MHz)

#define MCLK2 (fMCLK_MHz/21

此外对系统SYSCFG寄存器也进行了相关的设置。如Cache操作使能、写缓冲使能以及设置了特殊功能寄存器组的基指针等。最后即定义系统存储器控制寄存器。

1.3.2 编译uClinux内核

在准备好uClinux的内核源代码后。利用交叉编译器就可以编译生成运行在硬件目标板上的uClinux内核。首先将U—Clinux内核源代~uClinux—Samsung一20031005.tar.gz保存到宿主机的用户目录,解压完毕后。就会在用户目录下生成uClinux—Samsung目录。

以下是编译uClinux的具体过程:

使用make menuconfig或者make xconfig命令进行内核配置:

输人命令:make dep

输入命令:make clean:

输入命令:make lib_only:

输入命令:make romfs:

输入命令:make image:

输入命令:make。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PLC控制步进电机方法