Linux操作系统在嵌入式设计中的分析与实现

时间:2022-08-22 09:19:51

Linux操作系统在嵌入式设计中的分析与实现

【摘要】本文介绍了在嵌入式系统设计中,如何实现Linux操作系统引导加载程序,系统代码的分析与移植,Linux内核和根文件系统的定制与移植,为系统的软件开发配置合适的环境。

【关键词】Linux;嵌入式设计;移植

1.引言

Linux操作系统由于其源代码公开而且免费,人们可以任意修改,以满足自己的应用,并且查错也很容易。同时遵从GPL,无须为每例应用交纳许可证费,有庞大的开发人员群体。Linux内核精悍,运行所需资源少,利用Linux操作系统做嵌入式程序开发也越来越多。

嵌入式Linux系统从软件的角度可以分为以下4个层次。

(1)引导加载程序:系统运行前的一小段程序,它在上电时开始执行,初始化硬件设备、建立系统参数表、准备好软件环境。

(2)Linux内核:操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

(3)文件系统:包括根文件系统和建立于Flash内存设备之上的文件系统。里面包含了Linux系统能够运行所必须的应用程序、库等。

(4)用户应用程序:特定于用户的应用程序,它们也存储在文件系统中。

2.系统引导代码的分析与移植

引导代码Bootloader的实现非常依赖具体的硬件,在嵌入式系统中硬件的配置千差万别,即使是相同的CPU,它们的外设也可能不同,所以建立一个通用的Bootloader几乎是不可能的。常见的Bootloader有BLOB、VIVI、U-BOOT、E-BOOT等。主要包括:

初始化最基本的硬件如CPU、FLASH、SDRAM、网卡等。使用CPU的串口0作为终端,与用户进行交互。实现简单的网络协议,大部分情况下是TFTP服务,通过网络下载内核,或下载文件系统。烧写FLASH。

以视频监控系统为例,采用的是BLOB Boot,BLOB的启动分为两个阶段,第一个阶段主要包含依赖CPU的体系结构初始化的代码,通常都用汇编语言来实现。这个阶段主要完成的工作是:

(1)基本的GPIO寄存器及系统时钟、外部RAM等基本硬件的初始化。

(2)拷贝Blob的第二阶段的代码及数据拷贝到RAM空间中并设置好堆栈指针。

(3)跳转到阶段2的C程序入口点。

第二阶段通常用C语言完成,以便实现更复杂的功能以及可读性和可移植性,主要任务有:

(1)初始化一些设备,如CF卡接口、USB接口及网卡等。

(2)将内核映像和文件系统映像从flash上读到RAM空间中。

(3)为内核设置启动参数。

(4)等待按键进入监控模式,否则调用内核启动系统。

配置BLOB和配置Linux内核一样,我们需要根据自己的开发板进行适当的配置,保存退出后执行“make”命令开始编译。编译之前,我们需要输入以下命令进行对Bootloader的配置:

./configure--host=arm-linux--with-board=mainstone--with-linux-prefix=/pxa270_linux/linux/--enable-xlli--enable-network

编译时使用如下命令:

#make clean #make在配置好BLOB boot之后可通过JTAG接口烧写到实验板中。

3.Linux内核定制与移植

Linux内核由5个主要的子系统组成,分别为:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信,它是整个Linux系统的灵魂。

对于内核的编译模式主要有两种,系统要增加对某部分功能的支持,比如摄像头驱动,在编译时可以把相应部分编译到内核中(build-in),也可以把该部分编译为模块(module)动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能。一般的编译原则是将常用的部分直接编译到内核中,比如网卡。将那些不常用的编译成模块,就会生成“.o”文件,在使用时可以动态加载,比如编译USB摄像头驱动时就是编译成了模块动态加载,在调试时可以动态加载,但调试好之后在做成产品时就需要编译进内核中,以便在系统启动时就支持摄像头的功能。

内核的编译主要有三个步骤:内核配置、建立依存关系、建立内核。具体步骤如下:

首先内核配置主要是对需要的功能进行配置和去除不需要的模块。

其次建立依存关系,执行命令make dep,产生两个文件.depend和.hdepend。其中.hdepend表示每个.h文件都包含哪些嵌入文件,而.depend文件有多个,在每个会产生目标的文件目录下都有,它表示每个目标文件都依赖哪些嵌入文件。

最后执行make zImage命令,开始编译内核,结束后会在/arch/arm/boot/目录下生成内核镜像文件zImage,把该文件复制到/tftpboot/下供以后通过TFTP下载烧写内核镜像。

4.根文件系统的制作与移植

文件系统是Linux系统必备的一个部分,它主要是一些系统文件和应用文件存储的地方。Linux的重要特征之一就是支持多种文件系统,以JFFS2为例,它是一个日志结构(log-structured)的文件系统,包含数据和原数据的节点,这些节点在FLASH上顺序存储。

JFFS2文件系统是一种可读/写的文件系统,制作它的工具叫做mkfs.jffs2,制作时首先要在宿主机/pxa270_linux/fs/rootfs目录中创建目标板必备的文件目录,另外根据需要也可以为目标板设计其他的目录。进入宿主机/pxa270_linux/fs下,输入以下命令制作根文件系统映像

输入./mkfs.jffs2-r rootfs270-o xscale_fs.jffs2-e 0x40000-pad=0x01000000,这样就会在fs目录下生成一个名字叫做xscale_fs.jffs2的文件系统,将文件拷贝到/tftpboot目录下,为以后的烧写做准备。

烧写系统引导程序、linux内核和文件系统JFFS2时需要通过烧写flash的专用工具fwrite,烧写时因为系统文件比较大,所以需要通过TFTP简单文件传输协议先从宿主机传输到目标板的内存中,然后再通过fwrite命令根据指定的地址进行烧写。

5.结束语

由于Linux操作系统可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。随之嵌入式技术系统的发展,Linux操作系统得到了越来越广泛的应用。

参考文献

[1]孙纪坤,张小全.嵌入式Linux系统开发技术详解——基于ARM[M].北京:人民邮电出版社,2006:231-245.

[2]刘恒洋,王森.基于ARM的视频监控系统的设计与实现[J].产品设计与实现,2007,8.

[3]漆世钱,郭麦成.基于嵌入式Linux视频的网络监控系统设计[J].电子技术应用,2006,32(4):74-76.

[4]吴涛,张翼,杨鹏.基于Intel PXA27x的系统引导程序(Blob)移植与实现[J].微计算机信息,2007,23(8-2).

作者简介:杨艳(1980—),女,四川苍溪人,辽宁省交通高等专科学校讲师,研究方向:计算机通信。

上一篇:变频调速风机系统故障的分析及解决方案 下一篇:基于BP3105芯片的高效一体式LED筒灯设计