进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 操作系统 -> Linux -> 文章内容  
基于Linux系统核心的汉字显示尝试

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

  控制台(console) www.goodsgy.com

  通常我们在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同时也负责接收终端的输入,然后把接收到的输入放到缓冲区。 www.goodsgy.com

  帧缓冲(framebuffer) www.goodsgy.com

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

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

  试验 www.goodsgy.com

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

www.goodsgy.com

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对应的缓冲区中去。 www.goodsgy.com

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

www.goodsgy.com

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的属性(例如宽度和高度等)。 www.goodsgy.com

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

www.goodsgy.com

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)的范围。 www.goodsgy.com

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

在百度中搜索:基于Linux系统核心的汉字显示尝试
在Google中搜索:基于Linux系统核心的汉字显示尝试
在Yahoo中搜索:基于Linux系统核心的汉字显示尝试

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· 基于VLAN技术的校园一卡通管理
· 基于Hibernate和Struts的J2EE应用开发
· [图文] Dreamweaver 入门:创建基于表格的页..
· 使用基于Windows Server 2003的计算机创建..
· 配置基于Win 2003 的服务器
· 基于Linux操作系统的目录服务的实现
· 基于Linux操作系统实现的传真系统
· 实现基于Linux操作系统的视频点播系统
· [组图] 搭建基于Linux桌面环境的影音平台
· [图文] 架设基于Linux(2.6内核)的服务器集..
 
· 十大注意事项 让Linux启动更快速
· Linux软件安装指南
· [组图] 快速体验Linux的3种方式
· Linux下Tomcat自启动的设置技巧
· 装有双系统用户 如何卸载Linux
· [组图] 在Linux操作系统上创建ADSL拨号上网..
· 高效使用Linux的七个习惯
· 基础知识:什么是Fedora Linux
· Linux操作系统下的umask函数详解
· Ubuntu Linux 8.04操作系统4月24日发布

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)