摘要:本文讨论了基于ARM的嵌入式操作系统uClinux及其应用开发设计及实现。在32位ARM核的微处理器S3C4510B的硬件平台上结合嵌入式实时操作uClinux. 完成了系统的硬件设计uClinux的编译、移植,实现了应用程序的添加。
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。
至此整个uClinux源码的编译工作就完成了。会在/u—Clinux—Samsung/image目录下生成两个内核文件:image.ram和image.rom。image.rom~-3"借助~JTAG仿真器直接将其烧写到目标板上的FLASH存储单元,I~image-ram则可通过以太网接口。将其至目标板上就可直接运行了。
1.4 嵌入式操作系统uCfinux的应用开发
下面通过本系统的一个具体实例来描述如何将应用程序添加~UuClinux,主要的标准方法有如下几点:
(1)编写自己的源程序代码和相应Makefile文件。uClinux/Linux的应用程序通常放在OS—HOME/user目录下,我们在该目录下创建一个XDQ目录。且在该目录下创建源文件xdq.c及它相应的Makefile文件。
(2)修改uClinux—Samsung/config/config.ink件。在该文件合适的位置增加如下内容:
mainmenu_ option next comment
comment ‘xdq’
bool ‘xdq’ CONFIG_ USER_ XDQ_XDQ
endmenu
目的是在Make menuconfig时,uCLinux就会提示你是否需要编译这个新的应用程序。
(3)修改uClinux—Samsung/user/Makefile 件。在该文件合适的位置增加下面一句:
dir-$(CONFIG_USER—XDQ—XDQ)+=xdq
加上这句后,如果你在Make menuconfig时选择了这个新应用程序。则编译时就会编译这个新的应用程序。
把修改工作完成后要进行内核的编译工作,按照以前编译uClinux内核的步骤进行就可以了。
值得注意的一点是在步make menuconfig进行内核配置的时候。在Target Platform Selection,要选中Customize Vendor/User Settings fNEW),选中了该选项后,在对话框里出现的文字是在config.in文件中添加的文字,选中要编译的应用程序所在路径,就会出现另一个对话框,选中要编译的文件名,保存好内核配置后退出。用这种方法生成的可执行文件在romfs/bin目录下。
接下来就进行make dep,makeclean等内核编译的后几步。以上介绍的是一种基本的添加用户应用程序的方法,在将用户应用程序添加uClinux内核运行时,都需要对内核进行部分或全部的编译,每次对内核编译完成后,都要先将FLASH存储器中的内容擦除,然后重新烧写新编译好的内核到FLASH存储器中去。
2 结束语
ARM内核处理器具有体积小、高性能、低功耗、低成本等一系列优点,是嵌入式电子产品设备由8位机升级到32位机的理想选择。uClinux因具有稳定良好的移植性、的网络功能、完备的对各种文件系统的支持以及标准丰富的API等优点,被广泛应用于嵌入式领域应用前景广阔。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。