文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院操作系统 Linux基于Linux系统核心的汉字显示尝试
精品推荐
特别推荐
·高效使用Linux的七个好习惯
·为何Linux比Windows更安全?
·Linux和Unix最常用的网络命令
·Linux系统下安全防护十大招数
·Linux各种服务器的架设
·Linux操作系统下用单网卡捆绑双IP
·恢复被误删除的Linux文件
·在Linux服务器上做备份和恢复
·Linux中网络参数的意义及其应用
·linux知识大全
·解析Linux服务器远程控制技术
·新手关于Linux系统的一些错误认识
·Linux系统至少有五大点比Vista更好
·Linux攻略 关于Apache安装、配置、优化
·详细讲解Linux操作系统的进程管理的功能
·解决Linux和Windows双系统的引导问题
·新手学堂:Linux操作系统安全性能检查笔记
·600个优秀网站
·提高Linux操作系统网速的方法
·Linux系统下挂载硬盘光驱和U盘的方法
热点TOP10
·Apache 使用基础
·RedHat.Enterprise.Server.3.AS升级解决办法
·Linux系统安全机制进阶分析
·绝对安全吗?Linux操作系统的病毒历史
·Linux认证考试练习题自己找答案 仅供参考
·提高Linux操作系统网速的方法
·新手入门 Linux系统下各文件目录的含义
·Novell公司SUSE Linux企业级桌面系统
·TurboLinux 下的SYBASE安装
·RedHat Linux 9软件包管理
·如何架构高性价比的分布式计算机集群(1)
·Linux内核分析方法谈
·TSM Server,Client,TDPO安装配置手记
·Slax本土化:移动硬盘上的Linux中文套件
·Linux内核模块编程--中断处理程序
·vmware配置实例one linux host + windows guest + firewall
·Sybase DB-Library For Linux
·Python Socket 编程(1)
·Cacti的使用
·RPM打包技术与典型SPEC文件分析

基于Linux系统核心的汉字显示尝试

日期:2006年12月21日 作者: 查看:[大字体 中字体 小字体]


  在阐述基于Linux核心的汉字显示的技术细节之前,有必要介绍一下原有linux的工作机制。这里主要涉及到两部分的知识,就是Linux下终端和帧缓冲的实现。

  控制台(console)

  通常我们在linux下看到的控制台(console)是由几个设备完成的。分别是/dev/ttyN(其中tty0就是/dev/console,tty1,tty2就是不同的虚拟终端(virtual console)).通常使用热键alt Fn来在这些虚拟终端之间进行切换。所有的这些tty设备都是由linux/drivers/char/console.c和vt.c对应。其中console.c负责绘制屏幕上的字符,vt.c负责管理不同的虚拟终端,并且负责提供console.c需要绘制的内容。Vt.c把不同虚拟终端下需要交给console.c绘制的内容放到不同的缓存中去。Vt.c管理着这样一个缓冲区的数组,并且负责在其间切换,以指定哪一个缓冲区是被激活的。你所看到的虚拟终端就对应着被激活的缓冲区。Console.c同时也负责接收终端的输入,然后把接收到的输入放到缓冲区。

  帧缓冲(framebuffer)

  Framebuffer是把显存抽象后的一种设备,可以通过这个设备的读写直接对显存进行操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。

  Framebuffer对应的源文件在linux/drivers/video/目录下。总的抽象设备文件为fbcon.c,在这个目录下还有与各种显卡驱动相关的源文件。在使用帧缓冲时,Linux是将显卡置于图形模式下的。

  试验

  我们以一个简单的例子来说明字符显示的过程。我们假设是在虚拟终端1(/dev/tty1)下运行一个如下的简单程序。


main ( )  

{  

puts("hello, world.\n");  

}

  puts函数向缺省输出文件(/dev/tty1)发出写的系统调用write(2)。系统调用到linux核心里面对应的核心函数是console.c中的con_write(),con_write()最终会调用do_con_write( )。在do_con_write( )中负责把"hello, world.\n"这个字符串放到tty1对应的缓冲区中去。

  do_con_write( )还负责处理控制字符和光标的位置。让我们来看一下do_con_write()这个函数的声明。


static int do_con_write(struct tty_struct * tty, int  

from_user, const unsigned char *buf, int count)

  其中tty是指向tty_struct结构的指针,这个结构里面存放着关于这个tty的所有信息(请参照linux/include/linux/tty.h)。Tty_struct结构中定义了通用(或高层)tty的属性(例如宽度和高度等)。

  在do_con_write( )函数中用到了tty_struct结构中的driver_data变量。 driver_data是一个vt_struct指针。在vt_struct结构中包含这个tty的序列号(我们正使用tty1,所以这个序号为1)。Vt_struct结构中有一个vc结构的数组vc_cons,这个数组就是各虚拟终端的私有数据。


static int do_con_write(struct tty_struct * tty, int  

from_user,const unsigned char *buf, int count)  

{  

struct vt_struct *vt = (struct vt_struct *)tty->  

driver_data;//我们用到了driver_data变量  

. . . . .  

currcons = vt->vc_num; file://我们在这里的vc_nums就是1  

. . . . .  

}
  要访问虚拟终端的私有数据,需使用vc_cons〔currcons〕.d指针。这个指针指向的结构含有当前虚拟终端上光标的位置、缓冲区的起始地址、缓冲区大小等等。 "hello, world.\n"中的每一个字符都要经过conv_uni_to_pc( ) 这个函数转换成8位的显示字符。这要做的主要目的是使不同语言的国家能把16位的UniCode码映射到8位的显示字符集上,目前还是主要针对欧洲国家的语言,映射结果为8位,不包含对双字节(double byte)的范围。
  这种UNICODE到显示字符的映射关系可以由用户自行定义。在缺省的映射表上,会把中文的字符映射到其他的字符上,这是我们不希望看到也是不需要的。所以我们有两个选择∶

  1不进行conv_uni_to_pc( )的转换。

  2加载符合双字节处理的映射关系,即对非控制字符进行1对1的不变映射。我们自己定制的符合这种映射关系的UNICODE码表是direct.uni。

  要想查看/装载当前系统的unicode映射表,可使外部命令loadunimap。 经过conv_uni_to_pc( )转换之后,"hello, world.\n"中的字符被一个一个地填写到tty1的缓冲区中。然后do_con_write( )调用下层的驱动,把缓冲区中的内容输出到显示器上(也就相当于把缓冲区的内容拷贝到VGA显存中去)。



[1] [2] [3] 下一页 




上一篇:sql server2000导入mdf文件

下一篇:Linux文件系统被破坏时的处理方法介绍

基于Linux系统核心的汉字显示尝试 相关文章:
·Windows系统漏洞修复软件大比拼
·Windows系统进程列表完全解析
·打造极速XP系统之绝对秘籍
·不用重装XP系统就可以解决全部故障
·将系统装到U盘中 如何自制XP@USB启动盘
·提高运行速度 教你一步一步优化XP系统
·如何显示输入法图标(输入法图标消失)
·让Windows XP系统快10倍
·XP系统运行慢?小编自用7招解决
·Windows XP操作系统中隐藏的20个秘密
基于Linux系统核心的汉字显示尝试 相关软件:
·学校源码管理系统超靓版V2008
·如何安装双系统
·电脑装机、系统维护工具盘 2003版
·余世维-核心竞争力mp3
·GHOST全自动备份还原系统光盘V3.0
·工作流管理系统 V1.1
·朗道(电脑词典,翻译系统) V5.0
·深入理解计算机系统电子杂志 PDF
·天下第一签个性签名设计系统 V1.2
·高桦医院门诊收费系统报价器版V12.83

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot