让嵌入式Linux变身为低价计算机 (上)

本文作者:admin       点击: 2007-05-08 00:00
前言:

前言

嵌入式系统发展至今,已逐渐成为明星级的产业了。它之所以成为众所瞩目的焦点,必然有其技术的特殊性与需求性。以目前家庭最常见的宽带网关器为例,若没有嵌入式系统这项技术,则使用者将必须以一台PC系统,来完成原本宽带网关器要完成的功能。我们会发现,PC系统有很强的运算能力,但通常只用到一小部分,而为了这一小部分的运算功能,却要耗费每小时可能几百瓦的电力。扣除买的成本与电费不算,要让一台PC系统可以固定执行IP分享的功能,将会耗费掉使用者许多的心力去学习与设定,甚至可以说,那不是一般使用者做得到的事。总而言之,个人计算机绝对可以执行嵌入式系统所要完成的工作,但却无法让人接受。因此嵌入系统逐渐展露头角,它有着低功耗、低成本、适当的CPU运算效能与友善的软件接口……等优点。

然而嵌入式系统虽然有上述优点,却有着高门坎的软硬件开发技术需要建立。若所用的CPU是ARM或MIPS等RISC架构,则软件还需要非常大的开发或移植成本。要完成一项嵌入式系统的产品研发,往往需要投入大量的人力,而产品的成功机率,更因此增添了许多不确定性。

本文所要介绍的嵌入式系统是使用金丽科技的x86 SOC,它有着低温、低功耗和低成本等优点。低温使整个系统无需使用风扇,而低于0.9瓦的功耗,则非常适合长时间待机使用。x86 SOC还能让开发技术的门坎降低,使开发平台与目标平台的差距缩到最小,甚至目标平台可以看成是PC on a Chip。目前科技产品有许多创新的应用,皆是先由PC系统常用的软件功能开始,进而独立成为产品。例如MP3随身听,就是从计算机里的MP3播放软件独立出来。因此,若想把PC系统里独具特色的软件功能变为一项大众化且易用的产品,也就是PC in Box的概念,使用金丽科技的x86 SOC将是最佳选择。

目前最热门的低价即是一项PC in Box的应用,它有着嵌入式系统的优点,但仍然保有PC系统具有的软件功能,可说是集两者的优点于一身。而使用Linux操作系统,不但操作系统稳定且免费,更立即拥有充足的驱动程序支持,还有着极为丰富的自由软件可应用。因此本文将从嵌入式Linux系统开始,进而分析Linux低价计算机的整个开发过程。
  
系统硬件架构

自从SOC(System On a Chip)的技术逐渐成熟后,嵌入式系统皆使用高整合的SOC为主要芯片。也就是在一块开发板里,都尽量做到IC芯片越少越好。一颗高整合的SOC可以简化生产流程,并且大幅降低成本。本文所使用的金丽科技x86 SOC,里面包含一个333 MHz x86兼容的CPU、南北桥芯片组和Ethernet MAC,也有PCI BUS可外接VGA显示卡和USB 2.0 Host。图1是采用RDC x86 SOC的PC in Box系统方块图。

在系统方块图里,DDR2共有64 Mbytes,是系统执行时的主存储器。另外SPI-Flash共有4 MBytes,它可以储存BIOS的Firmware,使其成为像一般个人计算机一样的启动方式;也可以储存Boot-Loader、Linux核心和档案系统等等,也就是使用一般常见的嵌入式Linux系统架构。另外在VGA显示卡的部分,使用的是XGI Z9s PCI显示卡。一张VGA显示卡通常都有一段VGA BIOS烧录在显示卡的EEPROM里面,由于VGA BIOS是使用x86指令集,因此要使用这种VGA显示卡,系统必须要有能力可以执行x86指令。目前SOC只有像金丽科技这种使用x86兼容的CPU才有办法执行。

在开发板外部,透过USB 2.0 Host,分别接USB Keyboard、USB Mouse、USB Audio和USB Flash。其中USB Flash就是目前最经济实用的随身碟。本文系统将以这个外接的随身碟当成根目录档案系统,也就是相当于原本计算机硬盘的角色。另外由Ethernet PHY向外,将有一个RJ-45的LAN Port可接局域网络;以及一个VGA Port可外接LCD屏幕。结合上述几项外围,一部计算机的基本输出入系统皆已备齐。从系统中也可看出,这样的PC-in-Box系统架构与一般计算机比较起来,是极为低成本的设计。

嵌入式Linux系统分析

目前Linux在服务器、PC系统以及嵌入式系统等领域,皆获得广大的采用。在嵌入式系统领域里,若使用ARM或MIPS等RISC,则Linux核心将有别于PC系统,也就是Linux的核心将需要切换成特定的CPU架构,并且需要开发BSP;若使用x86 SOC,则Linux核心与PC系统所使用的相同。差别只在于嵌入式系统不像PC系统有硬盘等大型储存装置,因此启动和储存方式需要使用不同方法。

通常在开发嵌入式Linux时,一定会有3个主要部分需要开发,分别是Boot-Loader、Linux核心以及根目录档案系统(Root-Filesystem)。这3个部分通常会制作成镜像档(Image File),并且储存在Flash里面,也就是Flash里将会有3个镜像档分别存放在不同的区段。本文系统所用的地址区段如图2所示,其中redboot.bin是Boot-Loader的镜像档,它是整个系统最先执行的程序,相当于一般PC主机板里的BIOS。图2下方的bzImage是Linux核心的镜像文件所在位置,为了节省空间,它是以压缩的方式储存在Flash里。图2中间的initrd.gz则是Ramdisk的镜像档,它解开后会放到内存里,并且由Linux核心挂载成为根目录档案系统。

目前Boot-Loader有许多选择,常用的有uboot 或Redboot,有些SOC原厂甚至会提供自行开发的Boot-Loader。其主要功能是用来初始化CPU、Flash、SDRAM、UART和Ethernet MAC等等。嵌入式系统一般都是固定的硬件规格,也就是能够做初始化的硬件通常都是固定不变的。因此若更换任何硬件组件,则Boot-Loader可能需要一些修改。另外Boot-Loader也负责把Linux核心和Ramdisk这两个镜像档从Flash里读取出来,并且解压缩放到SDRAM的定位上。当Linux核心和Ramdisk都已放到SDRAM后,Boot-Loader会把CPU控制权移转给Linux核心,亦即结束Boot-Loader的工作,并开始Linux操作系统的执行。图3是Boot-Loader执行时,Flash与SDRAM的使用过程。

Linux核心就是整个系统的操作系统,主要功能有内存管理、应用程序行程管理、档案系统管理、硬件资源管理、驱动程序挂载以及提供网络通信协议等等。Linux在上述的功能皆非常稳定,而且在档案系统、网络通信协议与驱动程序等等,皆有丰富的支持。当Linux核心执行时,它会先初使化操作系统的软硬件部分,并挂载所需的驱动程序,最后才会挂载根目录档案系统。当根目录档案系统挂载完成,Linux核心会通过执行档名为init的档案,来转移系统执行的控制权到使用者空间,因此只要善加利用init这个档案,就可使系统充分地客制化。图4是Linux核心的主要功能方块图。

在一般情况下,Linux核心所执行的init,将会是整个系统的第一个行程(Process)。init执行时会去检查inittab这个设定档,并从档案里面的叙述,继续寻找shell script来执行,通常那个shell script都设为/etc/rc.d/rc.sysinit。当系统执行到rc.sysinit时,也就代表Linux核心已完成初始化的工作,剩余的工作要开始交由使用者来决定了。一个嵌入式Linux通常都有其特定的任务需要执行,因此通过rc.sysinit这一script file,就可以设定许多的环境变量,并带起系统真正要执行的应用程序。图五是嵌入式Linux从Boot-Loader到rc.sysinit的执行过程。
  
转变为低价计算机的关键点

嵌入式系统除了具有低功耗和低成本等优点外,还有系统稳定以及永续执行等软件上的特质。因此嵌入式Linux皆把几个主要的软件制作成镜像文件,除了可缩减储存容量的成本,也可达到系统稳定与永续执行的需求。利用镜像档的方式,则不管日后系统开机几次,都将和出厂时一样;若是一般PC系统,开机数次之后,系统可能就和出厂时的状态有些许不同,也可能从而增加软件技术支持的需求。本文所设计的低价,主要是由嵌入式Linux系统架构所衍生而来,因此除了有PC系统的使用接口外,还继续保有嵌入式系统的稳定特质。
要从嵌入式系统架构扩充成为低价,主要在于储存系统与VGA显示卡这两部分。目前USB随身碟算是最经济实惠的选择,也是最省电的储存装置。因此本文系统将会制作另一根目录档案系统的镜像文件,大约250Mbytes的大小放在USB随身碟里,也就是整个系统将增加到4个镜像档,其中3个如前文所述放在Flash里,第四个则放在USB随身碟。若单就USB随身碟来看,它仍然是出厂时的FAT16档案系统,只是里面放了一个文件名为rimg的根目录档案系统镜像文件。这样的架构在日后大量生产时,将会非常方便,只要复制rimg到不同的USB随身碟即可。另外也可在同一随身碟储存两份rimg,这样当系统出问题时,可以很容易地恢复成出厂时的状态。在VGA显示卡的部分,由于本文系统使用的是x86 SOC,因此PCI的VGA卡将是便宜又方便的选择。透过此一VGA卡,外部显示器可任意选择尺寸。另外在建构X-window时,只要以VESA模式即可轻易让X-Server启动,这是其它RISC所无法达到的便利性。

系统整合

低价是一新兴的产品,在设计系统时有许多考虑与PC系统不同。其中最主要的是低成本与强韧性,因此本文从x86 SOC开始,进而介绍系统硬件,再到嵌入式Linux的许多特性分析,最后以USB随身碟与PCI的VGA显示卡来达到PC系统的基本功能。在下一篇文章里,将剖析这些系统素材该如何整合在一起,继续分享低价计算机的实作过程。