转自:http://ancient.blogchina.com/1233537.html
为了适应现在嵌入式系统操作平台在性能、成本、可靠性等各方面的需要,论述了以Linux作为操作系统平台的优势,分析了以PC104卡和CompactFlash卡构造带图像用户界面(GUI)的Linux系统的关键技术.
0 前言
嵌入式系统的商品化操作系统十分丰富,如Palm OS、VxWorks、pSOS、Neculeus和Windows CE等。高端嵌入式系统需要许多高级的功能,但其价格也相对昂贵,一般用户难以接受。微软的Windows CE也有此类功能,却不具备大多数嵌入式系统需要的实时性能,而且难以移植。
Linux为嵌入式系统提供了一个极有吸引力的选择,对于嵌入式系统而言,性能、成本和可靠性是最至关重要的三个因素。首先,众多文献资料表明,Linux是当前可获得的最简捷、最快速的操作系统 ,其性能优越之处,是把图像处理为一个用户级的应用,图像可根据需要被选择是否运行。Linux系统中存在适度复杂的图像界面,但是他们并没有和操作系统的内核紧紧捆绑在一起,图像界面可按需求关闭。这样就能够在Linux内核上运行专门为嵌入式系统定制的图像系统,从而获得优越的性能。其次,Linux系统源代码完全公开,能够用很便宜的价格得到各种Linux分发版,不必考虑许可成本,将用户从许可证的限制中解脱出来,无需去为资金短缺而烦忧。Linux能正常运行于内存缺乏,容量紧张的系统中,减少在硬件升级上的开支。另外,在系统稳定性方面,Linux几乎不崩溃,Linux的稳定性是由于他没有像其他操作系统相同内核极其庞大。考察资料表明,Linux和其他Unix系统和大型操作系统如VMS、IBM大型机等相同具备相同的可靠性。在上述优势之外,Linux还拥有众多硬件支持的特点和强大的网络支持功能。正因为Linux在价格、性能、稳定性连同用户定制等方面的突出优势,用他来构建系统操作平台是个很不错的解决方案。
1 研发中的关键问题及解决方案
1.1 硬件及软件环境
Linux系统的硬件环境以PC104卡为核心,卡上集成美国国家半导体公司(NS Geode)GX1 300MHz CPU,SVGA/LCD/LAN接口连同增强型IDE硬盘接口,支持CompactFlash卡。硬盘和光驱接至PC104的IDE1口,配置跳线使硬盘为主设备(master),光驱为从设备(slave),CompactFlash装在IDE2口,设为主设备,这样Linux识别CompactFlah卡为/dev/hdc,而硬盘和光驱分别为/dev/had,/dev/hdb.我的Linux研发系统是Red Hat 7.2版,通过PC104上的光驱安装在硬盘上。
CompactFlash卡容量为32M,假如系统的BIOS支持自动检测,应该能够直接探测到他。假如不行的话,需要自己输入卡的各项参数。确保不要带电插拔CompactFlash卡,因为这可能导致卡上数据的丢失。
由于像Red Hat或Mandrake这样的Linux分发版体积庞大(假如带X-Windows基本都在1G以上),是不可能装在容量只有32M的CompactFlash卡上的。现在有许多小型的嵌入式Linux版本,比较有名的有:
ETLinux — 设计用于在小型工业电脑,尤其是 PC/104 模块上运行的 Linux 的完全分发版。
LEM — 运行在 386 上的小型(<8 MB)多用户、网络 Linux 版本。
LOAF — "Linux On A Floppy"分发版,运行在 386 上。
uClinux — 在没有 MMU 的系统上运行的 Linux。现在支持 Motorola 68K、MCF5206 和 MCF5207 ColdFire 微处理器。
出于深入了解Linux系统运行环境和机制的想法,建议自己构建Linux系统,这对于将来系统内核版本的升级和应用功能的拓展很有好处。选择Red Hat 7.2的Linux版本。
1.2 系统分区和格式化
首先,需要在CompactFlash卡上建立分区和格式化,在Linux下用fdisk命令能够在CompactFlash卡上创建分区,命令格式为fdisk /dev/hdc,然后用mke2fs命令创建ext2文档系统.
1.2 系统分区和格式化
首先,需要在CompactFlash卡上建立分区和格式化,在Linux下用fdisk命令能够在CompactFlash卡上创建分区,命令格式为fdisk /dev/hdc,然后用mke2fs命令创建ext2文档系统.
1.3 编译内核
接下来要做的事情是编译一个自己的内核。内核负责管理系统的进程、内存、设备驱动程式、文档和网络系统,决定着系统的性能和稳定性。从技术上而言,Linux 是个内核,而且只是个内核。其余我们通常称之为 "Linux" (例如一个 shell 和编译器)的部分实质上只是整个软件包的一部分,他们从技术上而言是和 Linux (内核)分开的。选择和研发系统相同的内核版本2.4.7,在Linux内核版本发布的官方网站 http://www.kernel.org 上能够找到内核源代码。
在编译内核的时候,由于内核是在特定的机器上使用的,所以应该对机器的情况了如指掌。另一方面,为了降低过高的复杂性,能够不用kernel module支持,把任何需要的东西直接编译到内核里。IDE支持是必不可少的,因为Linux认CompactFlash卡为IDE硬盘,Frame buffer的支持也是必要的,这来源于GUI系统—MiniGUI的需要,网络支持能够不要,但是假如认为显示屏将来有这方面的需要也能够把他加上。
1.4 创建根文档系统(Root Filesystem)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
在编译好内核后,需要在CompactFlash卡上创建根文档系统。每台机器都有根文档系统(一般在本地盘中,当然也能够在RAM盘或网络盘中),他包含系统引导和使其他文档系统得以mount所必要的文档,根文档系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏系统、恢复备份等的工具。
假如有一个任务比其他任务更能简化从头构建 Linux 根文档系统过程的话,那就是构建和安装 BusyBox 软件包。BusyBox 是个可执行文档,他提供许多其他常用命令行工具的功能,任何这些功能都合为一体。BusyBox 的文档声称构建一个有效系统所需要的全部就是 BusyBox 和"/dev、/etc 连同内核"— 而且他们没有开玩笑。
Busybox 编译出一个单个的单独执行程式,就叫做 busybox。但是他能够根据配置,执行 ash shell 的功能,连同几十个各种小应用程式的功能。这其中包括有一个迷您的 vi 编辑器,系统不可或缺的 /sbin/init 程式,连同其他诸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等这些都是个正常的系统上必不可少的。但是假如我们把这些程式的原件拿过来的话,他们的体积加在一起,让人吃不消。可是 busybox 有全部的这么多功能,大小也但是 100K 左右。而且,用户还能够根据自己的需要,决定到底要在 busybox 中编译进哪几个应用程式的功能。这样的话,busybox 的体积就能够进一步缩小了。Busybox的具体编译和配置方法请参阅Busybox的官方文档,用户能够在
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




