《嵌入式开发-Linux操作系统实现了在PC104 上的裁减和移植.pdf》由会员分享,可在线阅读,更多相关《嵌入式开发-Linux操作系统实现了在PC104 上的裁减和移植.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-1-嵌入式嵌入式 Linux 操作系统在操作系统在 PC104 上的实现上的实现 马记平,彭楚武,蒙娟,张斌(湖南大学电气与信息工程学院,长沙 410082)摘要摘要:论文简要分析了 Linux 操作系统启动过程,介绍了 Busybox、MiniGUI 等优秀的嵌入式专用软件,以及以 PC104 主板和 CF(CompactFlash)卡构建带图象用户界面(GUI)的嵌入式 Linux 操作系统的关键技术。关键词关键词:启动过程;Linux;GUI;MiniGUI 中国分类号:中国分类号:TP36 TP36 文献标识码:文献标识码:B Implementation of Embedded L
2、inux on PC104 Motherboard MA Ji-ping,PENG Chu-wu,MENG Juan,ZHANG Bin(College of Electric and Information Engineering,Hunan University,Changsha,China 410082)Abstract:This paper analyses the startup process of linux,and introduces some embedded software such as Busybox、MiniGUI.The key technique of usi
3、ng PC104 board and CompactFlash card to design a Linux system with GUI(graphic user interface)are analysed.Keyword:startup process;Linux;GUI;MiniGUI 1 引言1 引言 Linux 从问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,可运行在 X86、MIPS、ARM、Motorola、NEC 等多种硬件平台,而且开放源代码,可以定制,在新兴的嵌入式操作系统领域获得了飞速的发展。采用 PC104 主板,可以大大减小体积,系统更
4、加紧凑可靠,而且 PC104主板上的 CPU 一般都是 X86 结构,方便于 linux 在其上的裁减和移植,Linux 在 PC104 上可成功移植为系统的后续快速开发奠定基础。2 Linux 的启动过程分析的启动过程分析 为了更好的理解嵌入式 Linux 操作系统在 PC104 上的实现,首先讨论一下 Linux 操作系统的启动过程,下面以内核引导程序 GRUB 为例,介绍 Linux 在 X86 PC 机上的启动过程。启动过程分为五个阶段:加电复位;BIOS 自举阶段;MBR 中的 GRUB 的启动;Linux 内核的运行及系统的初始化;init 进程的运行。系统加电或复位后,指令指针指
5、向地址 0 xFFFF0【6】,这个地址在系统的 ROM-BIOS 空间,存放 BIOS启动代码。进入 BIOS 启动后,首先上电自检,完成内存检验、键盘检验、DMA 控制器测试、8259 中断控制器测试等,然后对系统内的硬件设备进行监测和连接。若检查出致命错误则停机,并显示错误信息,把测试所得数据存放到 BIOS 的数据区。最后判断磁盘设备是否准备好,若无磁盘设备相连或没有主引导记录,则显示出错信息。否则将 MBR 的 Boot Loader 调至内存 0 x07C00 处【6】,并将控制权交给 Boot Loader。硬盘的 0 磁道的第一个扇区称为 MBR(Master Boot Rec
6、order),它的大小是 512 字节。Boot Loader 通常是一段汇编代码,存放在 MBR 中,作用是将系统启动代码读到内存中,GRUB(GRand Unified Bootloader)是一个独立于作业系统之外的开机程序,可以进行多操作系统的引导。若将 GRUB 安装在 MBR 中,GRUB将完成用户信息的显示、操作系统的选择、命令行参数的传递,然后加载操作系统内核,最后将控制权交给操作系统,内核接下来会完成一些硬件设备的初始化,初始化完成后,内核创建第一个进程(初始进程),该进程为系统的第 0 号进程,接着初始化文件系统,挂载根文件系统,再执行 init 进程;系统自此进入了用户态
7、。init 程序接着将依照 inittab 配置文件中的选项依次执行来完成剩下的启动任务。到这里用户才得到真正实用操作系统了。init 读取/etc/inittab 时,首先找到标明 sysinit 的一行,并执行其后指定的脚本文件,这个脚本文件通常类似/etc/init.d/rcS,它是一组建立基本系统服务的 shell 指令,诸如:(1)挂载/etc/fstab 文 _ 湖南省2004年度重点科技攻关项目(04GK2012)-2-件中指定的分区到指定的目录;(2)载入一些编译内核时生成的模块;(3)启动 GUI 程序。当/etc/init.d/rcS执行结束后,控制权回到 init 上,接
8、下来 init 进程会根据/etc/inittab 的说明运行相应进程。至此 Linux 操作系统启动过程结束。3 Linux 在在 PC104 上的实现上的实现 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:引导加载程序、Linux 内核、文件系统、图形用户界面。以下就从这四个方面论述嵌入式 Linux 在 PC104 上的实现。3.1 引导加载程序引导加载程序 简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将
9、系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。目前可选用的引导工具很多,如 LILO 或 GRUB。我们选用了 GRUB,安装 GRUB 首先要根据用户系统的搭建情况编辑/etc/grub.conf 文件,下面是/etc/grub.conf 文件:default=0 timeout=5 title cflinux root(hd0,0)kernel/boot/vmlinuz-2.4.18 ro root=/dev/hdc1 vga=0 x0314 首先将 cf 卡格式化,建立 grub 所需要的目录,在 cf 卡上安装 grub 引导程序,将/etc/grub
10、.conf 写到CF 卡上,开机重启,设置从 CF 卡启动,如果系统可以运行出现 cflinux 条符,说明 GRUB 安装成功。3.2 Linux 内核裁减内核裁减 内核,是 Linux 操作系统的核心。它负责管理系统的进程和进程调度、CPU、内存、设备驱动程序、文件、I/O 处理等,决定着系统的性能和稳定性。其它系统程序都必须通过它才可以使用系统资源,获取系统服务。一切系统行为无论巨细都要通过内核参与。标准 Linux 在 PC 机上的最大安装大约需要至少 2G 的磁盘空间,由于嵌入式系统中资源有限,不能使用标准 Linux 的安装,而且嵌入式系统是针对特定应用的,不同的应用要求突出嵌入式
11、操作系统某方面的功能,而对其他的功能则很少使用或者根本不需要,这就需要根据具体的应用对内核进行裁减,使其适应某专用系统。根据目标板的硬件特点配置内核的编译选项,为了减低不必要的复杂性,内核中不采用 kernel module支持,把需要的东西直接编译到内核里,根据 PC104 主板的配置需要将有关 CPU、内存管理、system V支持、doc 驱动、闪存 MTD 驱动、JFFS2 文件系统支持、串口支持、IDE 支持、Frame buffer 的支持(也是必要的,这来源于 MiniGUI 系统的要求)等功能编译进内核,这样编译出的内核只有 400KB 左右。3.3 文件系统的实现文件系统的实
12、现 文件系统是指在一个物理设备上的任何文件组织和目录,它构成了 Linux 系统上所有数据的基础,Linux 程序、库、系统文件和用户文件都驻留其中,因此它是系统中庞大复杂且又是最为基本和重要的资源。值得提出的是,Linux 系统中的文件不仅包括普通的文件和目录,每个和设备相关的实际实体也都被映射为一个文件,例如磁盘、打印机、终端等等,这样的设备文件又称为特殊文件。所以,Linux 下的文件是操作系统服务和设备的简单而又统一的接口,从某种意义上可以说,Linux 里的一切事物都是文件。Linux 支持 ext2、ext3、nfs、JFFS2 等类型的文件系统,由于我们的操作系统是放在 CF 卡
13、上的,所以我们选用了 JFFS2 文件系统,JFFS2 作为用于微型嵌入式设备的原始闪存芯片的实际文件系统而出现。JFFS2 文件系统是日志结构化的,相对于 Ext2 文件系统,JFFS2 有以下优点:JFFS2 在扇区级别上执行闪存擦除写读操作要比 Ext2 文件系统好。JFFS2 提供了比 Ext2fs 更好的崩溃掉电安全保护【5】。当需要更改少量数据时,Ext2 文件系统将整个扇区复制到内存(DRAM)中,在内存中合并新数据,并写回整个扇区。这意味着为了更改单个字,必须对整个扇区(64 KB)执行读擦除写例程这样做的效率非常低。要是运气差,当正在 DRAM 中合并数据时,发生了电源故障或
14、其它事故,那么将丢失整个数据集合,因为在将数据读入 DRAM 后就-3-擦除了闪存扇区。JFFS2 附加文件而不是重写整个扇区,并且具有崩溃掉电安全保护这一功能。JFFS2 是专门为象闪存芯片那样的嵌入式设备创建的,所以它的整个设计提供了更好的闪存管理【5】。根文件系统主要由配置文件、设备文件、Linux 基本命令、基本 C 语言库组成。后两者是主要的,也是占空间最大的,用 Busybox 和 uClibc 的组合够建这两部分内容,可以大大节省空间。Busybox 是一个集成了一百多个最常用 Linux 命令和工具的软件,用户可以根据自己的需要,在 Busybox 中编译进自己需要的应用程序的
15、功能,我们动态编译后的 Busybox 只有 133.7KB【1】。uClibc 是专用于嵌入式系统的基本 C 函数库,比 GNU 的基本 C 函数库 glibc 小很多,只要用 uClibc 提供的 C 语言编译器对应用程序的源代码进行重新编译,就可以在uClibc的基础上使用应用程序了。配置文件主要有/etc/inittab、/etc/init.d/rcS、/etc/fstab、/etc/MiniGUI.cfg(针对 GUI),下面是/etc/inittab 文件::sysinit:/etc/init.s/rcS:respawn:/sbin/getty 9600 ttyS0:respawn
16、:/bin/sh:ctrlaltdel:/bin/umount a r:shutdown:/bin/umount a r/etc/init.d/rcS 文件:#!/bin/sh mount-a cd/usr./minigui/etc/fstab 文件:/dev/hda1 /ext2 defaults 1 1 none /proc proc defaults 0 0 busybox 内建的 init 程序用到的 inittab 文件的语法和一般的不一样,不能直接把原系统/etc 下 inittab文件拷贝过来,可以把 busybox 目录下是示例文件拷贝过来修改用。3.4 图形用户界面图形用户界
17、面 现在面向嵌入式 Linux 系统的图形用户界面很多,如 MiniGUI、Qt/Eembedded、OpenGUI、MicoroWindows 等,我们选用 MiniGUI,其目标是为基于 Linux 嵌入式系统提供一个轻量级的图形用户界面支持系统。MiniGUI 主要运行于 Linux 控制台,是一个多窗口 GUI 支持系统,采用了类 Win32 的 API接口,遵循 LGPL 条款的纯自由软件,可以运行在任何具有 POSIX 兼容系统上。因为 MiniGUI 是以源代码的形式发布的,在硬盘上以编译的方法产生的 MiniGUI 的 libminigui 目录下包含了这些源代码以及编译时生成
18、的中间文件,所以需要的空间很大,是不可能将它全部拷贝到容量受限的嵌入式系统上的,我们需要的文件有:MiniGUI 的函数库,包括 libminigui、libvcongui 和 libmgext【3】等,还包括其他的应用程序函数库。MiniGUI 的配置文件,即/usr/local/etc/MiniGUI.cfg 文件。MiniGUI 所使用的资源文件,在 PC 上安装之后,MiniGUI 的资源文件保存在usr/local/lib/minigui/res 目录下。因为我们的 cf 卡空间有限制,需要对上述文件继续裁减:MiniGUI 的函数库的裁减,在运行./configure 时进行定制,
19、取消不需要的功能;裁减后的库大小为 500KB;MiniGUI 配置文件的修改,删除不需要的字体等配置选项;MiniGUI 资源文件裁减,根据配置文件将不需要的资源文件删除。裁减后的资源文件大小为318.1KB。此一个在拥有图形用户界面的嵌入式 Linux 操作平台已经搭建完成,用户可以在开发系统上写自己的应用程序了。Linux 的体系结构及其占用空间如表 1 所示.:-4-表 1 Linux 体系结构表 操作系统组成部分占用空间大小 Linux 内核 395KB busybox 基本命令578KB uClibc 400KB minigui 900KB 4 结束语结束语 本文通过分析 Linu
20、x 的启动过程,详细说明了 Linux 内核裁减、文件系统定制、MiniGUI 裁减的过程,即 Linux 在 PC104 主板上移植的工作。实现了一个小巧且拥有用户界面的嵌入式 Linux 操作系 统,具有体积小、网络功能强、执行效率高、用户界面友好等特点,有很好的推广应用前景。本文作者创新点本文作者创新点:在 PC104 上实现了一个具有人机交互界面的仅 2M 左右的 Linux 操作系统。参考文献:参考文献:1 busybox 主页EB.http:/ uclibc 主页EB.http:/uclibc.org/.3 minigui 主页EB.http:/minigui.org/.4 李善平
21、等.Linux 与嵌入式系统M.北京:清华大学出版社,2003 5 YAGHMOURV.构建嵌入式 Linux 系统M.北京:中国电力出版社,2004.12 6 DANIEL P.BOVET,MARCO CESATI.深入理解 Linux 内核M.北京:中国电力出版社,2004.7 张永强,田紫君,申利永,赵齐.基于 ARM 的 HM30C7202 平台的嵌入式 Linux 移植J.微计算机信息,2005,(4)125-126;作者简介:作者简介:马记平,女,1979 年出生,汉族,硕士研究生,研究方向:嵌入式系统的研究与应用;E-mail: 或 ;彭楚武,男,1949 年出生,教授,研究方向
22、:嵌入式系统及 CIMS 的研究;Author brief introduction:Ma Jiping,female,born in 1979,the Han nationality,a graduate student,Research Area:study and application of the embedded system;Peng Chuwu,male,born in 1949,Professor,Research Area:the embedded system and CIMS.(410082 长沙 湖南大学电气与信息工程学院)马记平 彭楚武 蒙娟 张斌(College of Electric and Information Engineering,Hunan University,Changsha410082,China)MaJjPing PengChuWu MengJuan Zhang Bin 联系地址:(410082 湖南大学电气与信息工程学院 407 室)马记平