科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基于Linux操作系统内核汉化大揭秘 (2)

基于Linux操作系统内核汉化大揭秘 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

要访问虚拟终端的私有数据,需使用vc_cons[currcons].d指针。这个指针指向的结构含有当前虚拟终端上光标的位置,缓冲区的起始地址、缓冲区大小等信息。

作者:赛迪网技术社区 来源:赛迪网技术社区 2007年10月22日

关键字: 揭秘 汉化 内核 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

要访问虚拟终端的私有数据,需使用vc_cons[currcons].d指针。这个指针指向的结构含有当前虚拟终端上光标的位置,缓冲区的起始地址、缓冲区大小等信息。“hello,world.”中的每一个字符都要经过conv_uni_to_pc()这个函数转换成8位的显示字符。这样做的主要目的是使不同语言的国家能把16位的 Unicode码映射到8位的显示字符集里,目前主要还是针对欧洲国家的语言,映射结果为8位,不包含双字节(double byte)的范围。

这种从Unicode到显示字符的映射表上,会把中文的字符映射到其他的字符上,这是我们不希望看到也是不需要的,所以我们有两种选择:

1) 不进行conv_uni_to_pc()的转换。

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

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

sw->con putcs(vc_cons[currcons].d, 

(u16 *)draw_from, (u16 *)draw_to_ 

(u16 *)draw_rwom, Y, draw_x);

之所以要调用底层驱动程序,是因为存在不同的显示设备,其对应VGA显存的存取方式也不一样。上面的Sw->con_putcs()就会调用fbcon.c中的fbcon_putcs()函数(con_putcs是一个函数的指针,在 Framebuffer模式)下指向fbcon_putcs()函数,也就是说,在do_con_write()函数中是直接调用了 fbcon_putcs()函数来进行字符的绘制,比如说在256色模式下,真正负责输出的函数是:

void fbcon_cfb8_putcs(struct vc_d 

ta *conp,struct display *p, 

const unsignde short *s, int count, int YY, int xx )
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章