Linux控制台及图形界面操作系统
嵌入式系统(Embedded System)是将计算机直接嵌入至应用系统中,是信息技术IT的最终产品。工业控制器、仪器仪表、嵌入式智能终端设备的用户在规划新产品时对操作系统的选择均存在不同的困扰。DOS操作系统实时性好,但网络通讯及安全性差,不符合现实应用;Windows操作系统被广泛应用,但它对硬件要求较高,尤其是它庞大的安装、高昂的版权费用让用户在系统的稳定性及成本上有诸多顾虑。
通过开放源码社区,你可以得到Linux最前沿的技术和应用,应用程序的调试和维护也十分容易,这大大加快了产品开发周期;它无需支付版税,这大大降低产品研发和产品成本,在这种情况下Linux受到了普遍的欢迎。但当你决定在一个新的项目中采用嵌入式Linux以后,你会面临一个问题:就是自己花大量的时间去研究、裁剪内核还是通过支付高额费用向市场上少数嵌入式Linux服务商购买或定制自己符合自身应用的操作系统。
虽然你可以从网上获得全部的Linux资源,但是你要花费相当长的时间去研究、裁剪内核才能使他集成在一起并协调工作,这决非几周就可以完成的工作,而且还需要相当多专业的计算机硬件和操作系统的知识,此时如果有一个符合应用的嵌入式Linux操作系统,并能很轻松地把应用软件固化在固态盘中,并可根据用户的应用对其进行相应的裁剪就直接应用,就可以使你专注在你的核心业务,而不需要花费时间在操作系统的定制和裁这种繁杂的工作当中来。台湾博文科技—深圳英康仕公司在系统的定制和裁剪方面编译出了控制台(支持FrameBuffer) 、X-Window、MicroWindow、QT Embedded图形界面的嵌入式LINUX操作系统应用环境。该系统具有如下优点:
1、 内核完全自已编译,采用LINUX最新的GRUB方式引导;
2、 采用EXT3日志文件系统作为系统分区,确保非法关机重启后能恢复系统引导,系统区、用户程序区、数据存放区均可按要求设定可读可写;
3、 系统内核约700KB,支持内核模块的自动动态装载,支持多种存储设备(软驱、硬盘、DOC等)和接口(串口、并口、网络);
4、 内核提供GBK中文简体/繁体字符集的支持;
5、 可访问多种文件系统(DOS、VFAT、EXT2/3、ISO9660、NTFS、REISERFS等);
6、 系统包含GCC运行库、HTTPD/DHCP/INETD等网络运行库;
7、 系统内核模块约1.2M,用于提供通用硬件的设备驱动和内核功能扩展,可以根据用户需求进行裁剪,以节省存储空间;
8、 控制台软件支持FrameBuffer输出及SvgaLib图形支持;
1.1 FrameBuffer
FrameBuffer 是 Linux 内核的控制台图形功能 。主要优点是内核支持, 兼容性好 ;主要的缺点是只提供机制, 不提供策略, 也就是说, 没有高级的图形接口, 比如画线, 圆等。FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。该驱动程序的设备文件一般是 /dev/fb0、/dev/fb1 等等。比如,假设现在的显示模式是 1024x768-8 位色,则可以通过如下的命令清空屏幕:
$ dd if=/dev/zero of=/dev/fb0 bs=1024 count=768
在应用程序中,一般通过将 FrameBuffer 设备映射到进程地址空间的方式使用,比如下面的程序就打开 /dev/fb0 设备,并通过 mmap 系统调用进行地址映射,随后用 memset 将屏幕清空(这里假设显示模式是 1024x768-8 位色模式,线性内存模式):
int fb;unsigned char* fb_mem;fb = open ("/dev/fb0", O_RDWR);fb_mem = mmap (NULL, 1024*768, PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);memset (fb_mem, 0, 1024*768);
FrameBuffer 设备还提供了若干 ioctl 命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等等。
通过 FrameBuffer 设备,还可以获得当前内核所支持的加速显示卡的类型(通过固定信息得到),这种类型通常是和特定显示芯片相关的。比如目前最新的内核(2.4.9)中,就包含有对 S3、Matrox、nVidia、3Dfx 等等流行显示芯片的加速支持。在获得了加速芯片类型之后,应用程序就可以将 PCI 设备的内存I/O(memio)映射到进程的地址空间。这些 memio 一般是用来控制显示卡的寄存器,通过对这些寄存器的操作,应用程序就可以控制特定显卡的加速功能。
PCI 设备可以将自己的控制寄存器映射到物理内存空间,而后,对这些控制寄存器的访问,给变成了对物理内存的访问。因此,这些寄存器又被称为"memio"。一旦被映射到物理内存,Linux 的普通进程就可以通过 mmap 将这些内存 I/O 映射到进程地址空间,这样就可以直接访问这些寄存器了。
当然,因为不同的显示芯片具有不同的加速能力,对memio 的使用和定义也各自不同,这时,就需要针对加速芯片的不同类型来编写实现不同的加速功能。比如大多数芯片都提供了对矩形填 |