Linux开源技术的应用

host端:toolchain、glib、openembedded。
target端:linux kernel、kdrive、gtk+、d-bus、udev、bluez、gsmd。
toolchain
linux的开发工具(toolchain)也使用在手机系统的开发上。linux 的开发工具基础为gcc及glibc。
gcc是gnu compiler collection的缩写,也就是许多编译器的收集,目前支持的程序语言有:c、c++、objective-c、fortran 、java、ada。gcc是 richard stallman所创立的gnu计画中最重要的作品之一,gcc提供自由软件发展的高质量编译器。早期的gcc是以c、c++、objective c为主,故称为gnu c compiler;gcc一直发展到现在,已收集了各种不同语言的编译器,因此改名为gnu compiler collection。
glibc是gnu的c标准程序库,c程序库可分为2大类:system call的界面:提供程序函数供应用程序呼叫,以间接呼叫linux sytem call。常用的函式:例如标准之c函数。
glibc又称为libc6,目前的glibc,对i18n(国际化)与l10n(本地化)有较佳的支持。除此之外,glibc也符合许多标准与规格,让使用glibc的程序可以更容易移植到其它unix平台。这些标准包括:iso c、posix、svid、xpg、berkeley unix、gnu extension等。
嵌入式图形系统
对行动装置来说,最重要的技术便是「嵌入式图形界面」。目前,针对linux手机与行动装置的应用来说,有gtk+、qt、enlightenment 3大嵌入式图形界面解决方案:
gtk+全名为the gimp toolkit,这是一套跨平台的widget(图形元件)程序库,用来建立图形化界面(gui)。openmoko平台就是采用gtk+做为解决方案,此外,上述所提的gmae也是采用gtk+。gtk+原本是gnome桌面系统的核心,但近年来己经成功走入嵌入式系统应用。gtk+采取lgpl授权,是100%的foss专案,不受任何商业限制,因此,未来的行动装置的图形界面应用上,将会是非常重要的解决方案。
qt是由trolltech公司所发展的跨平台widget程序库,qt的授权模式分为gpl与qpl 2种。qt/embedded则是专门针对嵌入式系统所发展的特殊版本。
enlightenment或简称为e,是一个知名的windows manager,enlightenment专案,分为3个部分:dr16、dr17与efl(enlightenemtn foundation libraries)。enlightenment目前并没有实际的linux手机平台,但由于enlightenment己经不再只是一个window manager,还支持「desktop shell」的技术,因此efl具备高弹性的图形界面客制能力,近来也受到不少重视。

 

 

 

 

openembedded
root filesystem即是「小型的linux系统」,root filesystem里头存放linux的系统架构(filesystem hierarchy)、指令、工具、应用程序、shared libraries、驱动程序等。以手工方法建立 root filesystem 耗时又耗力,因此,必须导入「build system」。
传统的build system大多建立在makefile与script的体系上,因此有以下的缺点:
(1)无法有效解决套件间的相依(dependency)问题。
(2)对多平台(architecture)的支持缺乏弹性。
(3)跨平台编译时,可能需要修改configure.in设定档。
(4)有时必须将套件 (package) 的source code一起打包,无法设计成由网络下载。
目前最具代表性的build system是openembedded,openembedded展示了先进的"linux distribution for embedded system"做法。openembedded采用bitbake来做套件的cross compilation与管理,bitbake使用 .bb files与bbclass来建立root filesystem。
linux kernel
linux是一个操作系统核心的实作,linux kernel加上其它必要的系统工具 (utilities) 与其它专案程序码的linux操作系统则称为linux system,一般认为标准的称呼为gnu/linux (system),这是因为linux system使用的系统工具大多是gnu的程序码。
目前仍在使用本的kernel版本可分为4大分支:
1. kernel 2.0.x:已经停止发展的早期版本。
2. kernel 2.2.x:已经停止发展的早期版本。
3. kernel 2.4.x:重要的版本分支,目前仍广为使用中,因此仍然持续有驱动程序与处理器架构相关程序码的更新。
4. kernel 2.6.x:重要的linux kernel里程碑,许多新技术、新观念、驱动程序支持与操作系统架构都在此版本实作,是目前更新最频繁的版本分支。
目前(2005年)的最新kernel版本为2.6.x系列,由于kernel的开发者很早就已经转移重心至2.6系列,因此2.4系列的版本分支也将渐渐停止发展。许多2.4版本里的重大bug也只在2.6系列版本做修正。
2.4系列的kernel仍普遍使用于嵌入式系统中,但缺点是驱动程序的支持较不足;2.6系列的kernel是目前最流行的分支,这个系列的kernel加入许多新技术的实作,当然也包含对嵌入式系统的支持,并且具备较完整的驱动程序。
glib
就程序码内部的组织来说,以往我们经常重新定义一些基本的东西,并透过这些're-defidition'的巨集或函数(亦称为wrapper function)来撰写程序。有时,也能透过重新定义的方式,将框架(framework)的实作隐藏起来。这种技巧,大量被应用在许多软件专案中。
glib是gtk+计画下的「副产品」,glib原本主要是给gtk+与gnome 使用,不过,现在也有越来越多应用程序开始使用glib开发软件。glib就本质来看,他提供一套重新定义过的data type、event loop框架、thread 框架、及物件(object)系统。
glib以一种「宏观」的方式,提供c语言一套高度可移植性、简单易学且通用的工具库(toolkit)。由于glib实在太优异了,除了gtk+与gnome 本身外,也有非常多的free/open source software也开始采用glib开发软件。
kdrive
kdrive也被叫做tinyx,顾名思义,这是一个小型的x server实作,主要是针对embedded linux的应用所实作的版本。
有别于xorg-server里的其它x server,kdrive并不基于以往的xfree86程序码,而是由keith packard所实作的新版本;目前,kdrive已被应用在许多embedded system专案。例如,openmoko的framework就是使用 kdrive。
kdrive另外1个特色是,他并不是像典型的x server是在动态时期加载设定,而是在编译时间就做好参数设定。
xorg-server从7.1开始,已经将kdrive整合进来,只要下载xorg-server 7.1或更新版本的原始码,里头就包含kdrive。kdrive在embedded linux的应用中,底层部分大多是透过native framebuffer(fbdev、/dev/fb)来做图形的显示。
d-bus
使用d-bus取代传统的ipc,并与外部工具做整合。d-bus本身属于low-level的library(libdbus),实务上,采取glib binding(dbus-glib)来实作程序,简化工作。
d-bus是一种'message bus',未来将取代传统ipc的使用。传统ipc实作,必须将程序架构成monolithic process,因此在process的行为控制,以及application间整合上,都很一定的难度,非常不易于实作「系统」。
引进d-bus技术后,传统的monolithic process被区分为「pieces of d-bus services」,每个服务,都可以透过「d-bus patch」来寻找并叫用(invoke);透过d-bus所建立的框架(framework)或是架构,解决了以往难以整合各种应用程序的困境。此外,d-bus目前也透过kobject与kernel做整合,如此一来,d-bus便能轻易整合kernel、application与 desk-top,真正解决以往「系统整合」所遇到的障碍。
udev
/dev目录下摆放所谓的装置档(device file),在linux系统底下,硬件都是档案的观念,硬件装置或是子装置都被表示成一个档案。早期我们必须手动在/dev目录下建立所有的装置档,kernel 2.6透过一个工具叫udev来「动态」产生所需的装置档。
bluez
bluez是linux kernel的bluetooth protocol stack实作。
gsmd
linux手机是embedded linux的重要应用项目之1,要能具备「手机」的功能,最基本的规格之一当然就是要支持gsm(global system for mobile communications)标准,也就是我们称之为2g的行动电话标准。
gsm系统使用一种称之为gsm modem的装置(也就是我们耳熟能详的「调制解调器」)来做电话的「外拨(dial out)」与「接听(answer)」功能。因此,linux手机要能打电话与接听电话,必须将target device外接 gsm modem,并透过gsm modem的指令集(at command)来对gsm modem下拨号或接听指令。
gsm modem与target device是以uart(rs-232)界面连接,因此需要一个与gsm modem沟通的rs-232通讯程序。在此次openmoko释出的原始码里头,就包含一个gsm modem的通讯管理程序,称为gsmd(gsm daemon);此外,gsmd也包含libgsmd的api程序库供开发者使用。

 

 

qemu
qemu是一个可以模拟x86、x86_64、arm、、sparc、sparc64、powerpc、powerpc64、mips、m68k 与 sh-4 处理器的 open source 软件。简单说,qemu就是一套虚拟机器(virtual machine)的软件。
qemu提供full system emulation、user mode emulation 2种模拟模式。full system emulation模拟完整的系统,即处理器与外围;user mode emulation则是能在不同的处理器平台上,执行其它处理器平台程序。
openmoko framework提供「适用于触控屏幕的智能型手机图形界面应用程序框架」,这是一个application framework,能让我们比较简单撰写手机应用软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值