[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



Found in: http://www.turbolinux.com.cn/TLDN/chinese/project/unicon/chinese.html
And read http://www.turbolinux.com.cn/TLDN/chinese/project/unicon/ Please.


»ùÓÚLinuxºËÐĵĺº×ÖÏÔʾµÄ³¢ÊÔ
ÀûÆô³Ï½²Êö(chrisl@turbolinux.com.cn)
ËïϲÃ÷ÕûÀí(scotts@turbolinux.com.cn)
Ô­Àí

 ÔÚ²ûÊö¡°»ùÓÚLinuxºËÐĵĺº×ÖÏÔʾ¡±µÄ¼¼Êõϸ½Ú֮ǰ£¬ÓбØÒª½éÉÜÒ»ÏÂÔ­ÓÐlinux
µÄ¹¤×÷»úÖÆ¡£ÕâÀïÖ÷ÒªÉæ¼°µ½Á½²¿·ÖµÄ֪ʶ£¬¾ÍÊÇLinuxÏÂÖն˺ÍÖ¡»º³åµÄʵÏÖ£®
¿ØÖÆ̨£¨console£©
 ͨ³£ÎÒÃÇÔÚlinuxÏ¿´µ½µÄ¿ØÖÆ̨(console)ÊÇÓɼ¸¸öÉ豸Íê³ÉµÄ¡£·Ö±ðÊÇ/dev/tty
N£¨ÆäÖÐtty0¾ÍÊÇ/dev/console£¬tty1£¬tty2¾ÍÊDz»Í¬µÄÐéÄâÖնˣ¨virtual
console£©£©.ͨ³£Ê¹ÓÃÈȼüalt+FnÀ´ÔÚÕâЩÐéÄâÖÕ¶ËÖ®¼ä½øÐÐÇл»¡£ËùÓеÄÕâЩtty
É豸¶¼ÊÇÓÉlinux/drivers/char/console.cºÍvt.c¶ÔÓ¦¡£ÆäÖÐconsole.c¸ºÔð»æÖÆÆÁ
Ä»ÉϵÄ×Ö·û£¬vt.c¸ºÔð¹ÜÀí²»Í¬µÄÐéÄâÖնˣ¬²¢ÇÒ¸ºÔðÌṩconsole.cÐèÒª»æÖƵÄÄÚ
ÈÝ¡£vt.c°Ñ²»Í¬ÐéÄâÖÕ¶ËÏÂÐèÒª½»¸øconsole.c»æÖƵÄÄÚÈݷŵ½²»Í¬µÄ»º´æÖÐÈ¥¡£vt
.c¹ÜÀí×ÅÕâÑùÒ»¸ö»º³åÇøµÄÊý×飬²¢ÇÒ¸ºÔðÔÚÆä¼äÇл»£¬ÒÔÖ¸¶¨ÄÄÒ»¸ö»º³åÇøÊDZ»¼¤
»îµÄ¡£ÄãËù¿´µ½µÄÐéÄâÖն˾ͶÔÓ¦×ű»¼¤»îµÄ»º³åÇø¡£console.cͬʱҲ¸ºÔð½ÓÊÕÖÕ
¶ËµÄÊäÈ룬Ȼºó°Ñ½ÓÊÕµ½µÄÊäÈë·Åµ½»º³åÇø¡£
Ö¡»º³å£¨framebuffer£©
 FramebufferÊÇ°ÑÏÔ´æ³éÏóºóµÄÒ»ÖÖÉ豸£¬¿ÉÒÔͨ¹ýÕâ¸öÉ豸µÄ¶Áдֱ½Ó¶ÔÏÔ´æ½øÐÐ
²Ù×÷¡£ÕâÖÖ²Ù×÷ÊdzéÏóµÄ£¬Í³Ò»µÄ¡£Óû§²»±Ø¹ØÐÄÎïÀíÏÔ´æµÄλÖᢻ»Ò³»úÖƵȵȾß
Ìåϸ½Ú¡£ÕâЩ¶¼ÊÇÓÉFramebufferÉ豸Çý¶¯À´Íê³ÉµÄ¡£
 Framebuffer¶ÔÓ¦µÄÔ´ÎļþÔÚlinux/drivers/video/Ŀ¼Ï¡£×ܵijéÏóÉ豸ÎļþΪf
bcon.c£¬ÔÚÕâ¸öĿ¼Ï»¹ÓÐÓë¸÷ÖÖÏÔ¿¨Çý¶¯Ïà¹ØµÄÔ´Îļþ¡£
ÔÚʹÓÃÖ¡»º³åʱ£¬LinuxÊǽ«ÏÔ¿¨ÖÃÓÚͼÐÎģʽϵģ®
ÊÔÑé

 ÎÒÃÇÒÔÒ»¸ö¼òµ¥µÄÀý×ÓÀ´ËµÃ÷×Ö·ûÏÔʾµÄ¹ý³Ì¡£ÎÒÃǼÙÉèÊÇÔÚÐéÄâÖÕ¶Ë1£¨/dev/tt
y1£©ÏÂÔËÐÐÒ»¸öÈçϵļòµ¥³ÌÐò¡£ 
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;//ÎÒÃÇÓõ½ÁËd
river_data±äÁ¿
. . . . . .
currcons = vt->vc_num; //ÎÒÃÇÔÚÕâÀïµÄvc_nums¾ÍÊÇ1
. . . . . .
}
 Òª·ÃÎÊÐéÄâÖն˵Ä˽ÓÐÊý¾Ý£¬ÐèʹÓÃvc_cons[currcons].dÖ¸Õë¡£Õâ¸öÖ¸ÕëÖ¸ÏòµÄ½á
¹¹º¬Óе±Ç°ÐéÄâÖÕ¶ËÉϹâ±êµÄλÖᢻº³åÇøµÄÆðʼµØÖ·¡¢»º³åÇø´óСµÈµÈ¡£

"hello, world.\n" ÖеÄÿһ¸ö×Ö·û¶¼Òª¾­¹ýconv_uni_to_pc( )Õâ¸öº¯Êýת»»³É£¸
λµÄÏÔʾ×Ö·û¡£ÕâÒª×öµÄÖ÷ҪĿµÄÊÇʹ²»Í¬ÓïÑԵĹú¼ÒÄÜ°Ñ£±£¶Î»µÄUniCodeÂëÓ³Éä
µ½8λµÄÏÔʾ×Ö·û¼¯ÉÏ£¬Ä¿Ç°»¹ÊÇÖ÷ÒªÕë¶ÔÅ·ÖÞ¹ú¼ÒµÄÓïÑÔ£¬Ó³Éä½á¹ûΪ8룬²»°üº¬
¶ÔË«×Ö½Ú£¨double byte£©µÄ·¶Î§¡£
 ÕâÖÖUNICODEµ½ÏÔʾ×Ö·ûµÄÓ³Éä¹Øϵ¿ÉÒÔÓÉÓû§×ÔÐж¨Òå¡£ÔÚȱʡµÄÓ³Éä±íÉÏ£¬»á°Ñ
ÖÐÎĵÄ×Ö·ûÓ³Éäµ½ÆäËûµÄ×Ö·ûÉÏ£¬ÕâÊÇÎÒÃDz»Ï£Íû¿´µ½Ò²ÊDz»ÐèÒªµÄ¡£ËùÒÔÎÒÃÇÓÐÁ½
¸öÑ¡Ôñ¡Ã
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ÏÔ´æÖÐÈ¥£©¡£
sw->con_putcs(vc_cons[currcons].d, (u16 *)draw_from, (u16 *)draw_to-(u16
*)draw_from, 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_data *conp, struct display *p,const
unsigned short *s, int count, int yy, int xx)
ÏÔʾÖÐÎÄ
±ÈÈç˵ÎÒÃÇÊÔͼÊä³öÒ»¾äÖÐÎÄ¡Ãputcs(¡°ÄãºÃ\n¡±);£¨¡°ÄãºÃ¡±µÄÄÚÂëΪ0xc4,0xe3
,0xba,0xc3£©¡£Õâʱºò»áÔõôÑùÄØ£¬ÓÐÒ»µã¿ÉÒԿ϶¨£¬£¢ÄãºÃ£¢¿Ï¶¨²»»á³öÏÖÔÚÆÁÄ»
ÉÏ£¬Ô­ÒòÓСÃ
 ºËÐÄÖÐûÓкº×Ö×ֿ⣬ÖÐÎÄÏÔʾ¾ÍÊÇÎÞÃ×Ö®´¶ÁË£®
1 ÔÚ¸ºÔð×Ö·ûÏÔʾµÄvoid fbcon_cfb8_putcs( )º¯ÊýÖУ¬Ô­ÓвÙ×÷ÈçÏ¡Ã
¶ÔÓÚÿ¸öÒªÏÔʾµÄ×Ö·û£¬ÒÀ´Î´ÓÐéÄâÖն˻º³åÇøÖÐÒÔWORDΪµ¥Î»¶ÁÈ¡£¨µÍλ×Ö½ÚÊÇA
SCIIÂ룬¸ß8λÊÇ×Ö·ûµÄÊôÐÔ£©£¬ÓÉÓÚºº×ÖÊÇË«×Ö½Ú±àÂ뷽ʽ£¬ËùÒÔÕâÖÖ²Ù×÷ÊDz»¿É
ÄÜÏÔʾ³öºº×ֵģ¬Ö»ÄÜÏÔʾ³öxxxx_putcs()ÊÇÒ»¸öÒ»¸öVGA×Ö·û£®
Òª½â¾öµÄÎÊÌâ¡Ã
È·±£ÔÚdo_con_write( )ʱuni¡õpcת»»²»»á¸Ä±äÔ­ÓбàÂë¡£Ò»¸öºÜÖ±½ÓµÄʵÏÖ·½Ê½¾Í
ÊǼÓÔØÒ»¸öÎÒÃÇ×Ô¼º¶¨ÖƵÄUNICODEÓ³Éä±í£¬loadunimap direct.uni£¬»òÕßÖ±½Ó°Ñd
irect.uniÖÃΪºËÐĵÄȱʡӳÉä±í¡£
Õë¶ÔÈçÉÏÎÊÌ⣬ÎÒÃÇÒª×öµÄµÚÒ»¸ö³¢ÊÔ·½°¸ÊÇÈçÏ¡£
Ê×ÏÈÐèÒªÔÚºËÐÄÖмÓÔغº×Ö×ֿ⣬ȻºóÐÞ¸Äfbcon_cfb8_putcs( )º¯Êý£¬ÔÚfbcon_cf
b8_putcs( )ÖÐÒ»´Î¶ÁÁ½¸öWORD£¬¼ì²éÕâÁ½¸öWORDµÄµÍλ×Ö½ÚÊÇ·ñÄÜÆ´³ÉÒ»¸öºº×Ö£¬
Èç¹û·¢ÏÖÄÜÆ´³ÉÒ»¸öºº×Ö£¬¾ÍËã³öÕâ¸öºº×ÖÔÚºº×Ö×Ö¿âÖеÄÆ«ÒÆ£¬È»ºó°ÑËüµ±³ÉÒ»¸ö
16 x 16µÄVGA×Ö·ûÀ´ÏÔʾ¡£
ÊÔÑéµÄ½á¹û±íÃ÷¡Ã
1 Äܹ»Êä³öºº×Ö£¬µ«ÈÔÓÐÐí¶à²»ÀíÏëµÄµØ·½£¬±ÈÈç˵£¬Êä³öÒÔ°ë¸öºº×Ö¿ªÊ¼µÄÒ»´®
ºº×Ö£¬ÔòÕâ°ë¸öºº×ÖºóÃæµÄºº×Ö¶¼»áÊÇÂÒÂë¡£ÕâÊÇ¡°°ë¸öºº×Ö¡±µÄÎÊÌâ¡£
2 ¹â±êÒƶ¯»áÆÆ»µºº×ÖµÄÏÔʾ¡£±íÏÖΪ£¬¹â±êÒƶ¯¹ýµÄºº×Ö»á±ä³ÉÂÒÂë¡£ÕâÊÇÒòΪ
¹â±êµÄ¸üÐÂÊÇͨ¹ýxxxx_putc( )º¯ÊýÀ´Íê³ÉµÄ¡£
xxxx_putc( )º¯ÊýÓëxxxx_putcs( )º¯ÊýʵÏֵŦÄÜÀàËÆ£¬µ«ÊÇxxxx_putc( )º¯ÊýÖ»
Ë¢ÐÂÒ»¸ö×Ö·û¶ø²»ÊÇÒ»¸ö×Ö·û´®£¬Òò¶øxxxx_putc( )µÄÊäÈë²ÎÊýÊÇÒ»¸öÕûÊý£¬¶ø²»ÊÇ
Ò»¸ö×Ö·û´®µÄµØÖ·¡£ xxxx_putc( )º¯ÊýµÄÉùÃ÷ÈçÏ¡Ã
void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int
yy, int xx)
ÏÂÒ»¸ö³¢ÊÔ·½°¸¾ÍÊÇͬʱÐÞ¸Äxxxx_putcs( )º¯ÊýºÍxxxx_putc( )º¯Êý¡£ÎªÁ˽â¾ö°ë
¸öºº×ÖµÄÎÊÌ⣬ÿһ´ÎÊä³ö֮ǰ£¬¶¼´ÓÆÁÄ»µ±Ç°ÐеÄÆðʼλÖÿªÊ¼É¨Ã裬ÒÔÈ·¶¨ÒªÊä
³öµÄ×Ö·ûÊÇ·ñÂäÔÚ°ë¸öºº×ÖµÄλÖÃÉÏ¡£Èç¹ûÊÇ°ë¸öºº×ÖµÄλÖã¬Ôò½øÐÐÏàÓ¦µÄµ÷Õû£¬
¼´´ÓÏòÇ°Òƶ¯Ò»¸ö×Ö½ÚµÄλÖÿªÊ¼Êä³ö¡£ 
Õâ¸ö·½°¸ÓÐÒ»¸öÀ§ÄÑ£¬¼´xxxx_putc( )º¯Êý²»Óûº³åÇøµÄµØÖ·£¬¶øÊÇÓÃÒ»¸öÕûÊý×÷Ϊ
²ÎÊý¡£ËùÒÔxxxx_putc( ) ÎÞ·¨Ö±½ÓÀûÓÃÏàÁÚµÄ×Ö·ûÀ´Åбð¸Ã¶¨·ûÊÇ·ñÊǺº×Ö¡£
½â¾ö·½°¸ÊÇ£¬ÀûÓÃxxxx_putc( )µÄ¹â±êλÖòÎÊý£¨yy, xx£©£¬¿ÉÒÔÄæÍƳö¸Ã×Ö·ûÔÚ»º
³åÇøÖеÄλÖᣵ«ÈÔÓÐһЩСÂé·³£¬ÔÚLinuxµÄÐéÄâÖÕ¶ËÏ£¬Óû§¿ÉÄÜ»áÉϾí¸ÃÆÁÄ»
£¨shift + pageup£©£¬µ¼Ö¹â±êµÄy×ù±êºÍÏàÓ¦×Ö·ûÔÚ»º³åÇøµÄÐÐÊý²»Ò»Ö¡£ÏàÓ¦µÄ
½â¾ö·½°¸ÊÇ£¬ÔÚÄæÍƵĹý³ÌÖУ¬¿¼ÂǾíÆÁµÄ²ÎÁ¿¡£
 ÕâÑùÒ»À´£¬ÎÒÃǾÍÓÖ½øÁËÒ»²½£¬µÃµ½ÁËÒ»¸öÏà¶Ô¸üºÃµÄ°æ±¾¡£µ«ÈÔÓÐÎÊÌâûÓнâ¾ö¡£
ÇÃÈëturbonetcfg£¬»á·¢Ïֲ˵¥µÄ±ß¿ò×Ö·ûÒ²±»µ±³Éºº×ÖÏÔʾ¡£ÕâÊÇÒòΪ£¬ÕâÖֱ߿ò
×Ö·ûÊÇÀ©Õ¹×Ö·û£¬Ò²Ê¹ÓÃÁË×Ö·ûµÄµÚ8룬Òò¶ø±»µ±×÷ºº×ÖÀ´ÏÔʾ¡£ÀýÈ磬µ¥Ïß¡°Ò»¡±
µÄÖƱí·ûÄÚÂëΪ0xC4£¬µ±Á¬³ÉÒ»Ìõ³¤Ïß¾ÍÊÇÓÉÒ»Á¬´®0xC4×é³É£¬¶ø0xC4C4ÕýÊǺº×Ö
¡°ÄÄ¡±¡£ÓÚÊÇˮƽµÄÖƱí·û±»Ò»Á¬´®µÄ¡°ÄÄ¡±×ÖÌæ´úÁË¡£Òª½â¾öÕâ¸öÎÊÌâ¾Í·Ç³£²»ÈÝ
Ò×ÁË£¬ÒòΪÖƱí·ûµÄÖÖÀà±È½Ï¶à£¬¶øÇÒ´¹Ö±ÖƱí·ûÓëÆäºóÃæ×Ö·ûµÄ×éºÏÐÍʽÓÖ¶àÖÖ¶à
Ñù£¬Òò¶øºÜÄÑÅжϳöÏàӦλÖõÄ×Ö·ûÊDz»ÊÇÖƱí·û£¬´ÓÀíÂÛÉÏ˵£¬ÎÞÂÛ²ÉȡʲôÑùµÄ
ÅųýËã·¨£¬¶¼±ØÈ»´æÔÚÎóÅеÄÇé¿ö£¬ÒòΪ×Ü´æÔÚ¶þÒåÐÔ£¬Ã»Óгä×ãµÄÌõ¼þÀ´Íƶϳöµ±
Ç°×Ö·û¾¿¾¹ÊÇÖƱí·û»¹ÊǺº×Ö¡£
 ÎÒÃÇÒ»·½ÃæÑ°ÕÒ¸üºÃµÄÅųý×éºÏËã·¨£¬Ò»·½ÃæÊÔͼѰÕÒÆäËüµÄ½â¾ö·½°¸¡£ÒªÏë´Ó¸ù
±¾ÉϽâ¾ö¶¨¸öÎÊÌ⣬±ØÐëÀûÓÃÆäËüµÄ¸¨ÖúÐÅÏ¢£¬½ö½ö´Ó»º³åÇøµÄ×Ö·ûÀ´ÅжÏÊDz»¹»µÄ¡£

 ¾­¹ýÒ»·¬Å¬Á¦£¬ÎÒÃÇ·¢ÏÖ£¬ÔÚUNIXÖÐʹÓÃÀ©Õ¹×Ö·ûʱ£¬¶¼ÒªÏÈÊä³ö×Ö·ûתÒåÐòÁУ¨
Escape sequence£©À´Çл»µ±Ç°×Ö·û¼¯¡£×Ö·ûתÒåÐòÁÐÊÇÒÔ¿ØÖÆ×Ö·ûEscΪÊ׵ĿØÖÆÃü
ÁÔÚUNIXµÄÐéÄâÖÕ¶ËÖÐÍê³ÉÖն˿ØÖÆÃüÁÕâÖÖÃüÁî°üÀ¨£¬Òƶ¯¹â±ê×ù±ê¡¢¾íÆÁ¡¢
ɾ³ý¡¢Çл»×Ö·û¼¯µÈµÈ¡£Ò²¾ÍÊÇ˵ÔÚÊä³ö´ú±íÖƱí·ûµÄ×Ö·û´®Ö®Ç°£¬Í¨³£ÊÇÒªÏÈÊä³ö
Ìض¨µÄ×Ö·ûתÒåÐòÁС£ÔÚconsole.cÀÓиù¾Ý×Ö·ûתÒåÐòÁÐÃüÁîÀ´¼Ç¼×Ö·û״̬µÄ
±äÁ¿¡£½áºÏ¸Ã±äÁ¿ÌṩµÄÐÅÏ¢£¬¾Í¿ÉÒԷdz£¸É¾»µØ°ÑÖƱí·ûÓ뺺×ÖÇø±ð¿ªÀ´¡£
 ÔÚÈçÉÏ˼·µÄÖ¸ÒýÏ£¬ÎÒÃÇÓÖ²úÉúÁËеĽâ¾ö·½°¸¡£¾­¹ý¸Ä¶¯µÃµ½ÁËÁíÒ»¸÷°æ±¾£®

 ÔÚÕâ¸öа汾ÉÏ£¬turbonetcfgÔÚ³õ´Î»æÖƵÄʱºò£¬ÖƱí·ûÓ뺺×Ö±»ÇåÎúµØÇø·Ö¿ªÀ´£¬
½á¹ûÊǷdz£ÕýÈ·µÄ¡£µ«»¹ÓÐеÄÎÊÌâ´æÔÚ¡ÃturbonetcfgÔÚÖØ»æµÄʱºò£¨ÈçÇл»ÐéÄâ
Öն˻òÊÇÒƶ¯Êó±ê¹â±êµÄʱºò£©£¬ÖƱí·û»¹ÊDZä³ÉÁ˺º×Ö£¬ÒòΪÖØ»æÍêÈ«ÒÀÀµÓÚ»º³å
Çø£¬¶øÕâʱÓÃÀ´¼Ç¼×Ö·û¼¯×´Ì¬µÄ±äÁ¿²¢²»·´Ó³µ±Ç°×Ö·û¼¯×´Ì¬¡£ÎÊÌ⻹ÊÇûÓÐ×îÖÕ
½â¾ö¡£ÎÒÃÇÓֻص½ÁËÆðµã¡£¡Ã¡ª(
 ¿´À´ÎÊÌâµÄ×îÖÕ½â¾öÊֶαØÐëÊÇ°Ñ×Ö·û¼¯µÄ״̬°éËæÿһ¸ö×Ö·û´æÔÚ»º³åÇøÖС£ÈÃ
ÎÒÃÇÀ´Ñо¿Ò»Ï»º³åÇøµÄ½á¹¹¡£ 
 ÿһ¸ö×Ö·ûÕ¼ÓÃ16bitµÄ»º³åÇø£¬µÍ8λÊÇASCIIÖµ£¬ÍêÈ«±»ÀûÓ㬸ß8λ°üº¬Ç°¾°ÑÕ
É«ºÍ±³¾°ÑÕÉ«µÄÊôÐÔ£¬Ò²Ã»ÓжàÓàµÄ¿Õ¼ä¿ÉÒÔÀûÓá£Òò¶øÖ»ÄÜÁíÍ⿪±ÙеĻº³åÇø¡£
ΪÁ˱£³ÖÒ»ÖÂÐÔ£¬ÎÒÃǾö¶¨ÔÚÔ­À´µÄ»º³åÇøºóÃæÌí¼ÓÏàͬ´óСµÄ»º³åÇø£¬ÓÃÀ´´æ·ÅÊÇ
·ñÊǺº×ÖµÄÐÅÏ¢¡£ 
 Ò²ÐíÓжÁÕß»áÎÊ£¬ÎÒÃÇÖ»ÐèҪΪÿ¸ö×Ö·ûÌí¼ÓÒ»bitµÄÐÅÏ¢À´±êÖ¾ÊÇ·ñÊǺº×Ö¾Í×ã¹»
ÁË£¬ÎªÊ²Ã´»¹Òª¿ª±ÙÓëÔ­»º³åÇø´óСÏàͬµÄË«±¶»º³åÇø£¬ÊDz»ÊÇÌ«ÀË·ÑÄØ£¿ 
ÎÒÃÇÏÈ·ÅÏÂÕâ¸öÎÊÌ⣬ÉÔºóÔÙ×÷»Ø´ð¡£
 Æäʵ£¬Èç¹ûÔÙÌí¼ÓÒ»bitÀ´±êÖ¾Êǵ±Ç°×Ö·ûÊǺº×ÖµÄ×ó°ë±ß»¹ÊÇÓÒ°ë±ßµÄ»°£¬¾Í»áÊ¡
ȥɨÃèÆÁÄ»Éϵ±Ç°ÕûÐÐ×Ö·û´®µÄ¹¤×÷£¬ÕâÑùÒ»À´£¬±à³Ì»á¸ü¼òµ¥¡£µ«ÊÇÓжÁÕß»áÎÊ£¬
¼´Ê¹ÊÇÕâÑù£¬Ê¹ÓÃ8bit×ܹ»ÓÃÁË°É£¿ÎªÊ²Ã´»¹ÒªÊ¹ÓÃ16bitÄØ£¿ 
ÎÒÃǵÄ×÷·¨ÊÇ¡ÃÓõÍ8λÀ´´æ·Åºº×ÖÁíÍâÒ»°ëµÄÄÚÂ룬Óøß8λÖеÄ2 bitÀ´´æ·ÅÉÏÃæ
Ëù½²µÄ¸¨ÖúÐÅÏ¢£¬¸ß8λµÄÊ£Óà6λ¿ÉÒÔÓÃÀ´´æ·Åºº×Ö»òÆäËü±àÂ뷽ʽ£¨ÈçBIG5»òÈÕÎÄ¡¢
º«ÎÄ£©µÄÐÅÏ¢£¬´Ó¶øʹÎÒÃÇ¿ÉÒÔʵÏÖͬÆÁÏÔʾ¶àÖÖË«×Ö½ÚÓïÑÔµÄ×Ö·û¶ø²»»áÓÐÏ໥¸É
ÈÅ¡£ÁíÍ⣬ÔÚ±à³Ìʱ£¬Ë«±¶»º³åÒ²±È½ÏÈÝÒ×¼ÆËã¡£ 
ÕâÑùÎÒÃǾͻشðÁËÈçÉϵÄÁ½¸öÎÊÌâ¡£
 Æù½ñΪֹ£¬ÎÒÃÇÓÐÁËÒ»Ì׳¹µ×½â¾öºº×ÖºÍÖƱí·ûÏ໥¸ÉÈÅ¡¢°ë¸öºº×ÖµÄˢС¢ÖØ»æ
µÈÎÊÌâµÄ·½°¸¡£Ê£ÏµľÍÊǾßÌå±à³ÌʵÏÖµÄÎÊÌâÁË¡£
µ«ÊÇ£¬ÓÉÓÚFramebufferµÄÇý¶¯ºÜ¶à£¬ÐÞ¸Äÿһ¸öÇý¶¯µÄxxxx_putc( )º¯ÊýºÍxxxx_p
utcs( )º¯Êý»áÊÇÒ»ÏСµÄ¹¤×÷£¬¶øÇÒ£¬¸Ä¶¯Çý¶¯³ÌÐòºó£¬Ã¿ÖÖÇý¶¯µÄ²âÊÔÒ²ÊǺÜ
Âé·³µÄ£¬ÓÈÆäÊǶÔÓÚÓÐÓ²¼þ¼ÓËÙµÄÏÔ¿¨£¬Ð޸ĺͲâÊÔ»á¸ü²»ÈÝÒס£
ÄÇô£¬´æ²»´æÔÚÒ»ÖÖ²»ÐèÒªÐÞ¸ÄÏÔ¿¨Çý¶¯³ÌÐòµÄ·½·¨ÄØ£¿
¾­¹ýÒ»·¬Å¬Á¦£¬ÎÒÃÇ·¢ÏÖ£¬¿ÉÒÔÔÚµ÷ÓÃxxxx_putcs( )»òxxxx_putc( )º¯ÊýÊä³öºº×Ö
֮ǰ£¬ÐÞ¸Ävga×Ö¿âµÄÖ¸ÕëʹÆäÖ¸ÏòËùÐèÏÔʾµÄºº×ÖÔÚºº×Ö×Ö¿âÖеÄλÖ㬼´°ÑÒ»¸ö
ºº×Öµ±³ÉÁ½¸övga ASCII×Ö·ûÊä³ö¡£Ò²¾ÍÊÇ˵£¬ÔÚÄÚºËÖдæÔÚÁ½¸ö×ֿ⣬һ¸öÊÇÔ­ÓÐ
µÄvga×Ö·û×ֿ⣬ÁíÒ»¸öÊǺº×Ö×ֿ⣬µ±ÎÒÃÇÐèÒªÊä³öºº×ÖµÄʱºò£¬¾Í°Ñvga×Ö¿âµÄÖ¸
ÕëÖ¸Ïòºº×Ö×Ö¿âµÄÏàӦλÖ㬺º×ÖÊä³öÍêÖ®ºó£¬ÔٰѸÃÖ¸ÕëÖ¸Ïòvga×Ö¿âµÄÔ­ÓÐλÖá£

 ÕâÑùÒ»À´£¬ÎÒÃÇÖ»ÐèÒªÐÞ¸Äfbcon.cºÍconsole.c£¬ÆäÖÐconsole.c¸ºÔðά»¤Ë«±¶»º³å
Çø£¬°Ñÿһ¸ö×Ö·ûµÄÐÅÏ¢´æÈ븽¼ÓµÄ»º³åÇø£»¶øfbcon.c¸ºÔðÀûÓÃË«±¶»º³åÇøÖи½¼Ó
µÄÐÅÏ¢£¬µ÷Õûvga×Ö¿âµÄÖ¸Õ룬µ÷ÓõײãµÄÏÔʾÇý¶¯³ÌÐò¡£
ÕâÀﻹÓм¸¸öÐèҪעÒâµÄµØ·½¡Ã
1£®ÓÉÓÚÆÁÄ»ÖØ»æµÈÔ­Òò£¬µ÷ÓõײãÇý¶¯xxxx_putc( )ºÍxxxx_putcs( )µÄµØ·½Óжദ¡£
ÎÒÃÇ×÷ÁËÁ½¸öº¯Êý·Ö±ð°ü×°ÕâÁ½¸öµ÷Óã¬Íê³ÉÌæ»»×Ö¿â¡¢µ÷ÓÃxxxx_putcs( )»òxxxx
_putc( )¡¢»Ö¸´×Ö¿âµÈ¹¦ÄÜ¡£
2£®ÎªÁËʵÏÖÏòÉϹöÆÁ£¨shift + pageup£©Ê±Ò²ÄÜ¿´µ½ºº×Ö£¬ÎÒÃÇÐèÒª×÷ÁíÍâµÄÐ޸ġ£

 LinuxÔÚÉè¼ÆÐéÄâÖն˵Äʱºò£¬ÌṩÁ˻ع˱»¾í³öÆÁÄ»ÒÔÍâµÄÐÅÏ¢µÄ¹¦ÄÜ£¬Õâ¾ÍÊÇÓÃ
ÈȼüÀ´ÏòÉϹöÆÁ£¨shift + pageup£©¡£µ±Ç°±»Ê¹ÓõÄÐéÄâÖÕ¶ËÓµÓÐÒ»¸ö¹«¹²µÄ»º³åÇø
£¨soft back£©£¬ÓÃÀ´´æ·Å±»¹ö³öÆÁÄ»ÒÔÍâµÄÐÅÏ¢¡£µ±Çл»ÐéÄâÖն˵Äʱºò£¬¹«¹²»º
³åÇøµÄÄÚÈݻᱻÇå³ý¶ø±»ÐµÄÐéÄâÖÕ¶ËʹÓá£ÏòÉϹöÆÁµÄʱºò£¬ÏÔʾµÄÊǹ«¹²»º³åÇø
ÖеÄÄÚÈÝ¡£Òò´Ë£¬Èç¹ûÎÒÃÇÏëÔÚÏòÉϹöÆÁµÄʱºò¿´µ½ºº×Ö£¬¹«¹²»º³åÇøÒ²±ØÐë¼Ó±¶£¬
ÒÔÈ·±£Ã»ÓÐÐÅÏ¢¶ªÊ§¡£µ±¹ö³öÆÁÄ»µÄÐÅÏ¢Ïò¹«¹²»º³åÇøÌîдµÄʱºò£¬±ØÐë°ÑÏàÓ¦µÄ¸½
¼ÓÐÅÏ¢Ò²Ìîд½ø¹«¹²»º³åÇøµÄ¸½¼ÓÇøÓò¡£Õâ¾ÍÒªÇófbcon.c±ØÐ붮µÃÀûÓù«¹²»º³åÇø
µÄ¸½¼ÓÐÅÏ¢¡£ 
 µ±È»£¬ÓÐÁíÍâÒ»ÖÖ͵ÀÁµÄ·½·¨£¬ÄǾÍÊDz»ÔÊÐíÓû§ÏòÉϹöÆÁ£¬´Ó¶ø±ÜÃâ¶Ô¹«Çø»º³å
ÇøµÄ´¦Àí¡£
3£®°Ñ²»Í¬µÄ±àÂ뷽ʽ£¨GB¡¢BIG5¡¢ÈÕÎĺͺ«ÎÄ£©Ð´³É²»Í¬µÄmodule£¬ÒÔʵÏÖ¶¯Ì¬¼Ó
ÔØ£¬´Ó¶øʹµÃÀ©Õ¹ÐµıàÂ뷽ʽ²»ÐèÒªÖØбàÒëºËÐÄ¡£
С½á

 ͨ¹ýÕâ´ÎÕë¶ÔLinuxºËÐĵÄ̽Ë÷£¬ÎÒÃÇ·¢ÏÖ£¬Ä¿Ç°LinuxµÄºËÐÄÉè¼ÆÖУ¬ÍêȫûÓп¼
Âǵ½Ë«×Ö½Ú±àÂë×Ö·ûµÄÏÔʾ¡£ÎÒÃÇÔÚÕâÖÖÇé¿öÏÂÃþË÷³öÒ»Ì×½â¾öºËÐÄϺº×ÖÏÔʾµÄ·½
·¨£¬²¢±àÂëʵÏÖÁ˸÷½°¸£® 
 ×ñÑ­ºËÐĵÄGPL°æȨÉùÃ÷£¬ÎÒÃÇͬʱ¹«²¼ÁËʵÏÖÕâÒ»¼¼ÊõµÄÔ´´úÂ룬µ±È»£¬ÕâЩ¸Ä¶¯
ÈÔÈ»ÊÇGPLµÄ£®Èç¹ûÄܶÔÑо¿ºËÐĵÄÅóÓÑÓÐËù°ïÖú£¬¼õÉÙһЩ´ó¼Ò¶ÔºËÐĵÄÉñÃظУ¬
½«ÊÇÎÒÃÇ×î´óµÄÊÕ»ñ¡£
 µ«ÊǶԺËÐĺÍÖÐÎÄ»¯À´Ëµ£¬Õâ½ö½öÊÇÒ»ÖÖ³¢ÊÔ£¬Ô¶²»ÊÇÖյ㣮ÕâÖָĶ¯¶àÉÙ´øÓÐÒ»
ЩhackµÄÉ«²Ê£¬²»Ì«¿ÉÄÜÈںϽøȨÍþµÄºËÐÄÀïÈ¥£®ÎÒÃÇÈÔÔÚ»ý¼«Ì½Ë÷Ô²Âú½â¾öÕâÒ»ÎÊ
ÌâµÄ·½·¨£¬ÏàÐÅÕâÒ»½á¹û±ØÈ»ÐèҪͨ¹ý¹úÄÚÍâLinuxȺÌåµÄ¹²Í¬Å¬Á¦²ÅÄÜʵÏÖ£®ÎÒÃÇ
Ò²·Ç³£»¶Ó­´ó¼ÒºÍÎÒÃǹ²Í¬ÌÖÂÛÕâÒ»ÎÊÌ⣮
²âÊÔ

±¾ÎÄʵÏÖµÄKernel PatchÎļþ£¨patch.kernel.chinese£©¿ÉÒÔ´Óhttp://www.turbol
inux.com.cnÏÂÔØ¡£
cd /usr/src/£¨¸ÃĿ¼ÏÂÓ¦ÓÐLinuxºËÐÄÔ´³ÌÐòËùÔÚµÄĿ¼linux/£©
patch -p0 -b < patch.kernel.chinese
make menuconfig
ÇëÑ¡ÔñConsole driversÑ¡ÏîÖеÄ
[*] Double Byte Character Display Support(EXPERIMENTAL)
[*] Double Byte GB encode (module only)
[*] VESA VGA graphics console
<*> Virtual Frame Buffer support (ONLY FOR TESTING!)
<*> 8 bpp packed pixels support
<*> 16 bpp packed pixels support
<*> VGA characters/attributes support
[*] Select compiled-in fonts
[*]VGA 8x8 font
[*]VGA 8x16 font
make dep
make bzImage
make modules
make install
make modules_install
È»ºóÓÃеĺËÐÄÆô¶¯¡£
Insmod encode-gb.o

Document converted from word 8 by MSWordView (mswordview
0.5.2)

| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| hehehehehehe

MSWordView written by Caolan
McNamara


Reply to: