[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®Ö¤ßªºº~¦rÅã¥Üªº¹Á¸Õ
§Q±Ò¸ÛÁ¿­z(chrisl@turbolinux.com.cn)
®]³ß©ú¾ã²z(scotts@turbolinux.com.cn)
­ì²z

 ¦bÄÄ­z¡§°ò¤_Linux®Ö¤ßªºº~¦rÅã¥Ü¡¨ªº§Þ¥º²Ó¸`¤§«e¡A¦³¥²­n¤¶²Ð¤@¤U­ì¦³linux
ªº¤u§@¾÷¨î¡C³o¨½¥D­n¯A¤Î¨ì¨â³¡¤Àªºª¾ÃÑ¡A´N¬OLinux¤U²×ºÝ©M´V½w¨Rªº¹ê²{¡D
±±¨î¥x¡]console¡^
 ³q±`§Ú­Ì¦blinux¤U¬Ý¨ìªº±±¨î¥x(console)¬O¥Ñ¤L­Ó³]³Æ§¹¦¨ªº¡C¤À§O¬O/dev/tty
N¡]¨ä¤¤tty0´N¬O/dev/console¡Atty1¡Atty2´N¬O¤£¦PªºµêÀÀ²×ºÝ¡]virtual
console¡^¡^.³q±`¨Ï¥Î¼öÁäalt+Fn¨Ó¦b³o¨ÇµêÀÀ²×ºÝ¤§¶¡¶i¦æ¤Á´«¡C©Ò¦³ªº³o¨Çtty
³]³Æ³£¬O¥Ñlinux/drivers/char/console.c©Mvt.c¹ïÀ³¡C¨ä¤¤console.c­t³dø¨î«Ì
¹õ¤Wªº¦r²Å¡Avt.c­t³dºÞ²z¤£¦PªºµêÀÀ²×ºÝ¡A¦}¥B­t³d´£¨Ñconsole.c»Ý­nø¨îªº¤º
®e¡Cvt.c§â¤£¦PµêÀÀ²×ºÝ¤U»Ý­n¥æµ¹console.cø¨îªº¤º®e©ñ¨ì¤£¦Pªº½w¦s¤¤¥h¡Cvt
.cºÞ²zµÛ³o¼Ë¤@­Ó½w¨R°Ïªº¼Æ²Õ¡A¦}¥B­t³d¦b¨ä¶¡¤Á´«¡A¥H«ü©w­þ¤@­Ó½w¨R°Ï¬O³Q¿E
¬¡ªº¡C§A©Ò¬Ý¨ìªºµêÀÀ²×ºÝ´N¹ïÀ³µÛ³Q¿E¬¡ªº½w¨R°Ï¡Cconsole.c¦P®É¤]­t³d±µ¦¬²×
ºÝªº¿é¤J¡AµM¦Z§â±µ¦¬¨ìªº¿é¤J©ñ¨ì½w¨R°Ï¡C
´V½w¨R¡]framebuffer¡^
 Framebuffer¬O§âÅã¦s©â¶H¦Zªº¤@ºØ³]³Æ¡A¥i¥H³q¹L³o­Ó³]³ÆªºÅª¼gª½±µ¹ïÅã¦s¶i¦æ
¾Þ§@¡C³oºØ¾Þ§@¬O©â¶Hªº¡A²Î¤@ªº¡C¥Î¤á¤£¥²Ãö¤ßª«²zÅã¦sªº¦ì¸m¡B´«­¶¾÷¨îµ¥µ¥¨ã
Åé²Ó¸`¡C³o¨Ç³£¬O¥ÑFramebuffer³]³ÆÅX°Ê¨Ó§¹¦¨ªº¡C
 Framebuffer¹ïÀ³ªº·½¤å¥ó¦blinux/drivers/video/¥Ø¿ý¤U¡CÁ`ªº©â¶H³]³Æ¤å¥ó¬°f
bcon.c¡A¦b³o­Ó¥Ø¿ý¤UÁÙ¦³»P¦UºØÅã¥dÅX°Ê¬ÛÃöªº·½¤å¥ó¡C
¦b¨Ï¥Î´V½w¨R®É¡ALinux¬O±NÅã¥d¸m¤_¹Ï§Î¼Ò¦¡¤Uªº¡D
¸ÕÅç

 §Ú­Ì¥H¤@­Ó²³æªº¨Ò¤l¨Ó»¡©ú¦r²ÅÅã¥Üªº¹Lµ{¡C§Ú­Ì°²³]¬O¦bµêÀÀ²×ºÝ1¡]/dev/tt
y1¡^¤U¹B¦æ¤@­Ó¦p¤UªºÂ²³æµ{§Ç¡C 
main ( )
{
puts("hello, world.\n");
}
puts¨ç¼Æ¦V¯Ê¬Ù¿é¥X¤å¥ó(/dev/tty1)µo¥X¡§¼g¡¨ªº¨t²Î½Õ¥Îwrite(2)¡C¨t²Î½Õ¥Î¨ì
linux®Ö¤ß¨½­±¹ïÀ³ªº®Ö¤ß¨ç¼Æ¬Oconsole.c¤¤ªºcon_write( )¡A con_write()³Ì²×·|
½Õ¥Îdo_con_write( )¡C¦bdo_con_write( )¤¤­t³d§â"hello, world.\n"³o­Ó¦r²Å¦ê
©ñ¨ìtty1¹ïÀ³ªº½w¨R°Ï¤¤¥h¡C
do_con_write( )ÁÙ­t³d³B²z±±¨î¦r²Å©M¥ú¼Ðªº¦ì¸m¡CÅý§Ú­Ì¨Ó¬Ý¤@¤Udo_con_write
()³o­Ó¨ç¼ÆªºÁn©ú¡C
static int do_con_write(struct tty_struct * tty, int from_user, const
unsigned char *buf, int count)
 ¨ä¤¤tty¬O«ü¦Vtty_structµ²ºcªº«ü°w¡A³o­Óµ²ºc¨½­±¦s©ñµÛÃö¤_³o­Óttyªº©Ò¦³«H
®§¡]½Ð°Ñ·Ólinux/include/linux/tty.h¡^¡Ctty_structµ²ºc¤¤©w¸q¤F³q¥Î¡]©Î°ª¼h¡^
ttyªºÄÝ©Ê¡]¨Ò¦p¼e«×©M°ª«×µ¥¡^¡C 
¦bdo_con_write( )¨ç¼Æ¤¤¥Î¨ì¤Ftty_structµ²ºc¤¤ªºdriver_dataÅܶq¡C
 driver_data¬O¤@­Óvt_struct«ü°w¡C¦bvt_structµ²ºc¤¤¥]§t³o­Óttyªº§Ç¦C¸¹¡]§Ú
­Ì¥¿¨Ï¥Îtty1¡A©Ò¥H³o­Ó§Ç¸¹¬°1¡^¡Cvt_structµ²ºc¤¤¦³¤@­Óvcµ²ºcªº¼Æ²Õvc_cons¡A
³o­Ó¼Æ²Õ´N¬O¦UµêÀÀ²×ºÝªº¨p¦³¼Æ¾Ú¡C
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;//§Ú­Ì¥Î¨ì¤Fd
river_dataÅܶq
. . . . . .
currcons = vt->vc_num; //§Ú­Ì¦b³o¨½ªºvc_nums´N¬O1
. . . . . .
}
 ­n³X°ÝµêÀÀ²×ºÝªº¨p¦³¼Æ¾Ú¡A»Ý¨Ï¥Îvc_cons[currcons].d«ü°w¡C³o­Ó«ü°w«ü¦Vªºµ²
ºc§t¦³·í«eµêÀÀ²×ºÝ¤W¥ú¼Ðªº¦ì¸m¡B½w¨R°Ïªº°_©l¦a§}¡B½w¨R°Ï¤j¤pµ¥µ¥¡C

"hello, world.\n" ¤¤ªº¨C¤@­Ó¦r²Å³£­n¸g¹Lconv_uni_to_pc( )³o­Ó¨ç¼ÆÂà´«¦¨¢·
¦ìªºÅã¥Ü¦r²Å¡C³o­n°µªº¥D­n¥Øªº¬O¨Ï¤£¦P»y¨¥ªº°ê®a¯à§â¢°¢µ¦ìªºUniCode½X¬M®g
¨ì8¦ìªºÅã¥Ü¦r²Å¶°¤W¡A¥Ø«eÁÙ¬O¥D­n°w¹ï¼Ú¬w°ê®aªº»y¨¥¡A¬M®gµ²ªG¬°8¦ì¡A¤£¥]§t
¹ïÂù¦r¸`¡]double byte¡^ªº­S³ò¡C
 ³oºØUNICODE¨ìÅã¥Ü¦r²Åªº¬M®gÃö¨t¥i¥H¥Ñ¥Î¤á¦Û¦æ©w¸q¡C¦b¯Ê¬Ùªº¬M®gªí¤W¡A·|§â
¤¤¤åªº¦r²Å¬M®g¨ì¨ä¥Lªº¦r²Å¤W¡A³o¬O§Ú­Ì¤£§Æ±æ¬Ý¨ì¤]¬O¤£»Ý­nªº¡C©Ò¥H§Ú­Ì¦³¨â
­Ó¿ï¾Ü¡J
1 ¤£¶i¦æconv_uni_to_pc( )ªºÂà´«¡C
2 ¥[¸ü²Å¦XÂù¦r¸`³B²zªº¬M®gÃö¨t¡A§Y¹ï«D±±¨î¦r²Å¶i¦æ1¹ï1ªº¤£ÅܬM®g¡C§Ú­Ì¦Û¤v
©w¨îªº²Å¦X³oºØ¬M®gÃö¨tªºUNICODE½Xªí¬Odirect.uni¡C
­n·Q ¬d¬Ý / ¸Ë¸ü ·í«e¨t²Îªºunicode¬M®gªí¡A¥i¨Ï¥~³¡©R¥Oloadunimap¡C
¸g¹Lconv_uni_to_pc( )Âà´«¤§¦Z¡A"hello, world.\n"¤¤ªº¦r²Å³Q¤@­Ó¤@­Ó¦a¶ñ¼g¨ì
tty1ªº½w¨R°Ï¤¤¡CµM¦Zdo_con_write( )½Õ¥Î¤U¼hªºÅX°Ê¡A§â½w¨R°Ï¤¤ªº¤º®e¿é¥X¨ì
Åã¥Ü¾¹¤W¡]¤]´N¬Û·í¤_§â½w¨R°Ïªº¤º®e«þ¨©¨ìVGAÅã¦s¤¤¥h¡^¡C
sw->con_putcs(vc_cons[currcons].d, (u16 *)draw_from, (u16 *)draw_to-(u16
*)draw_from, y, draw_x);
¤§©Ò¥H­n½Õ¥Î©³¼hÅX°Ê¡A¬O¦]¬°¦s¦b¤£¦PªºÅã¥Ü³]³Æ¡A¨ä¹ïÀ³VGAÅã¦sªº¦s¨ú¤è¦¡¤]
¤£¤@¼Ë¡C
¤W­±ªºSw->con_putcs( )´N·|½Õ¥Î¨ìfbcon.c¤¤ªºfbcon_putcs( )¨ç¼Æ¡]con_putcs¬O
¤@­Ó¨ç¼Æªº«ü°w¡A¦bFramebuffer¼Ò¦¡¤U«ü¦Vfbcon_putcs( )¨ç¼Æ¡^¡C¤]´N¬O»¡¦bdo
_con_write( )¨ç¼Æ¤¤¬Oª½±µ½Õ¥Î¤Ffbcon_putcs( )¨ç¼Æ¨Ó¶i¦æ¦r²ÅªºÃ¸¨î¡C¤ñ¦p»¡
¦b256¦â¼Ò¦¡¤U¡A¯u¥¿­t³d¿é¥Xªº¨ç¼Æ¬O
void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p,const
unsigned short *s, int count, int yy, int xx)
Åã¥Ü¤¤¤å
¤ñ¦p»¡§Ú­Ì¸Õ¹Ï¿é¥X¤@¥y¤¤¤å¡Jputcs(¡§§A¦n\n¡¨);¡]¡§§A¦n¡¨ªº¤º½X¬°0xc4,0xe3
,0xba,0xc3¡^¡C³o®É­Ô·|«ç¤\¼Ë©O¡A¦³¤@ÂI¥i¥HªÖ©w¡A¡©§A¦n¡©ªÖ©w¤£·|¥X²{¦b«Ì¹õ
¤W¡A­ì¦]¦³¡J
 ®Ö¤ß¤¤¨S¦³º~¦r¦r®w¡A¤¤¤åÅã¥Ü´N¬OµL¦Ì¤§ª¤¤F¡D
1 ¦b­t³d¦r²ÅÅã¥Üªºvoid fbcon_cfb8_putcs( )¨ç¼Æ¤¤¡A­ì¦³¾Þ§@¦p¤U¡J
¹ï¤_¨C­Ó­nÅã¥Üªº¦r²Å¡A¨Ì¦¸±qµêÀÀ²×ºÝ½w¨R°Ï¤¤¥HWORD¬°³æ¦ìŪ¨ú¡]§C¦ì¦r¸`¬OA
SCII½X¡A°ª8¦ì¬O¦r²ÅªºÄÝ©Ê¡^¡A¥Ñ¤_º~¦r¬OÂù¦r¸`½s½X¤è¦¡¡A©Ò¥H³oºØ¾Þ§@¬O¤£¥i
¯àÅã¥Ü¥Xº~¦rªº¡A¥u¯àÅã¥Ü¥Xxxxx_putcs()¬O¤@­Ó¤@­ÓVGA¦r²Å¡D
­n¸Ñ¨Mªº°ÝÃD¡J
½T«O¦bdo_con_write( )®Éuni¡¼pcÂà´«¤£·|§ïÅܭ즳½s½X¡C¤@­Ó«Üª½±µªº¹ê²{¤è¦¡´N
¬O¥[¸ü¤@­Ó§Ú­Ì¦Û¤v©w¨îªºUNICODE¬M®gªí¡Aloadunimap direct.uni¡A©ÎªÌª½±µ§âd
irect.uni¸m¬°®Ö¤ßªº¯Ê¬Ù¬M®gªí¡C
°w¹ï¦p¤W°ÝÃD¡A§Ú­Ì­n°µªº²Ä¤@­Ó¹Á¸Õ¤è®×¬O¦p¤U¡C
­º¥ý»Ý­n¦b®Ö¤ß¤¤¥[¸üº~¦r¦r®w¡AµM¦Z­×§ïfbcon_cfb8_putcs( )¨ç¼Æ¡A¦bfbcon_cf
b8_putcs( )¤¤¤@¦¸Åª¨â­ÓWORD¡AÀˬd³o¨â­ÓWORDªº§C¦ì¦r¸`¬O§_¯à«÷¦¨¤@­Óº~¦r¡A
¦pªGµo²{¯à«÷¦¨¤@­Óº~¦r¡A´Nºâ¥X³o­Óº~¦r¦bº~¦r¦r®w¤¤ªº°¾²¾¡AµM¦Z§â¥¦·í¦¨¤@­Ó
16 x 16ªºVGA¦r²Å¨ÓÅã¥Ü¡C
¸ÕÅ窺µ²ªGªí©ú¡J
1 ¯à°÷¿é¥Xº~¦r¡A¦ý¤´¦³³\¦h¤£²z·Qªº¦a¤è¡A¤ñ¦p»¡¡A¿é¥X¥H¥b­Óº~¦r¶}©lªº¤@¦ê
º~¦r¡A«h³o¥b­Óº~¦r¦Z­±ªºº~¦r³£·|¬O¶Ã½X¡C³o¬O¡§¥b­Óº~¦r¡¨ªº°ÝÃD¡C
2 ¥ú¼Ð²¾°Ê·|¯}Ãaº~¦rªºÅã¥Ü¡Cªí²{¬°¡A¥ú¼Ð²¾°Ê¹Lªºº~¦r·|Åܦ¨¶Ã½X¡C³o¬O¦]¬°
¥ú¼Ðªº§ó·s¬O³q¹Lxxxx_putc( )¨ç¼Æ¨Ó§¹¦¨ªº¡C
xxxx_putc( )¨ç¼Æ»Pxxxx_putcs( )¨ç¼Æ¹ê²{ªº¥\¯àÃþ¦ü¡A¦ý¬Oxxxx_putc( )¨ç¼Æ¥u
¨ê·s¤@­Ó¦r²Å¦Ó¤£¬O¤@­Ó¦r²Å¦ê¡A¦]¦Óxxxx_putc( )ªº¿é¤J°Ñ¼Æ¬O¤@­Ó¾ã¼Æ¡A¦Ó¤£¬O
¤@­Ó¦r²Å¦êªº¦a§}¡C xxxx_putc( )¨ç¼ÆªºÁn©ú¦p¤U¡J
void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int
yy, int xx)
¤U¤@­Ó¹Á¸Õ¤è®×´N¬O¦P®É­×§ïxxxx_putcs( )¨ç¼Æ©Mxxxx_putc( )¨ç¼Æ¡C¬°¤F¸Ñ¨M¥b
­Óº~¦rªº°ÝÃD¡A¨C¤@¦¸¿é¥X¤§«e¡A³£±q«Ì¹õ·í«e¦æªº°_©l¦ì¸m¶}©l±½´y¡A¥H½T©w­n¿é
¥Xªº¦r²Å¬O§_¸¨¦b¥b­Óº~¦rªº¦ì¸m¤W¡C¦pªG¬O¥b­Óº~¦rªº¦ì¸m¡A«h¶i¦æ¬ÛÀ³ªº½Õ¾ã¡A
§Y±q¦V«e²¾°Ê¤@­Ó¦r¸`ªº¦ì¸m¶}©l¿é¥X¡C 
³o­Ó¤è®×¦³¤@­Ó§xÃø¡A§Yxxxx_putc( )¨ç¼Æ¤£¥Î½w¨R°Ïªº¦a§}¡A¦Ó¬O¥Î¤@­Ó¾ã¼Æ§@¬°
°Ñ¼Æ¡C©Ò¥Hxxxx_putc( ) µLªkª½±µ§Q¥Î¬Û¾Fªº¦r²Å¨Ó§P§O¸Ó©w²Å¬O§_¬Oº~¦r¡C
¸Ñ¨M¤è®×¬O¡A§Q¥Îxxxx_putc( )ªº¥ú¼Ð¦ì¸m°Ñ¼Æ¡]yy, xx¡^¡A¥i¥H°f±À¥X¸Ó¦r²Å¦b½w
¨R°Ï¤¤ªº¦ì¸m¡C¦ý¤´¦³¤@¨Ç¤p³Â·Ð¡A¦bLinuxªºµêÀÀ²×ºÝ¤U¡A¥Î¤á¥i¯à·|¤W¨÷¸Ó«Ì¹õ
¡]shift + pageup¡^¡A¾É­P¥ú¼Ðªºy®y¼Ð©M¬ÛÀ³¦r²Å¦b½w¨R°Ïªº¦æ¼Æ¤£¤@­P¡C¬ÛÀ³ªº
¸Ñ¨M¤è®×¬O¡A¦b°f±Àªº¹Lµ{¤¤¡A¦Ò¼{¨÷«Ìªº°Ñ¶q¡C
 ³o¼Ë¤@¨Ó¡A§Ú­Ì´N¤S¶i¤F¤@¨B¡A±o¨ì¤F¤@­Ó¬Û¹ï§ó¦nªºª©¥»¡C¦ý¤´¦³°ÝÃD¨S¦³¸Ñ¨M¡C
ºV¤Jturbonetcfg¡A·|µo²{µæ³æªºÃä®Ø¦r²Å¤]³Q·í¦¨º~¦rÅã¥Ü¡C³o¬O¦]¬°¡A³oºØÃä®Ø
¦r²Å¬OÂX®i¦r²Å¡A¤]¨Ï¥Î¤F¦r²Åªº²Ä8¦ì¡A¦]¦Ó³Q·í§@º~¦r¨ÓÅã¥Ü¡C¨Ò¦p¡A³æ½u¡§¤@¡¨
ªº¨îªí²Å¤º½X¬°0xC4¡A·í³s¦¨¤@±øªø½u´N¬O¥Ñ¤@³s¦ê0xC4²Õ¦¨¡A¦Ó0xC4C4¥¿¬Oº~¦r
¡§­þ¡¨¡C¤_¬O¤ô¥­ªº¨îªí²Å³Q¤@³s¦êªº¡§­þ¡¨¦r´À¥N¤F¡C­n¸Ñ¨M³o­Ó°ÝÃD´N«D±`¤£®e
©ö¤F¡A¦]¬°¨îªí²ÅªººØÃþ¤ñ¸û¦h¡A¦Ó¥B««ª½¨îªí¡¼ªÒ¡¼ªÇÄ\§}¡¼Õï·­¶~¿Æ±µË»¹¿Ë»ÎN¼Ë¡A¦]¦Ó«ÜÃø§PÂ_¥X¬ÛÀ³¦ì¸mªº¦r²Å¬O¤£¬O¨îªí²Å¡A±q²z½×¤W»¡¡AµL½×ªö¨ú¤°¤\¼Ëªº
±Æ°£ºâªk¡A³£¥²µM¦s¦b»~§Pªº±¡ªp¡A¦]¬°Á`¦s¦b¤G¸q©Ê¡A¨S¦³¥R¨¬ªº±ø¥ó¨Ó±ÀÂ_¥X·í
«e¦r²Å¨s³º¬O¨îªí²ÅÁÙ¬Oº~¦r¡C
 §Ú­Ì¤@¤è­±´M§ä§ó¦nªº±Æ°£²Õ¦Xºâªk¡A¤@¤è­±¸Õ¹Ï´M§ä¨ä¥¦ªº¸Ñ¨M¤è®×¡C­n·Q±q®Ú
¥»¤W¸Ñ¨M©w­Ó°ÝÃD¡A¥²¶·§Q¥Î¨ä¥¦ªº»²§U«H®§¡A¶È¶È±q½w¨R°Ïªº¦r²Å¨Ó§PÂ_¬O¤£°÷ªº¡C

 ¸g¹L¤@µf§V¤O¡A§Ú­Ìµo²{¡A¦bUNIX¤¤¨Ï¥ÎÂX®i¦r²Å®É¡A³£­n¥ý¿é¥X¦r²ÅÂà¸q§Ç¦C¡]
Escape sequence¡^¨Ó¤Á´«·í«e¦r²Å¶°¡C¦r²ÅÂà¸q§Ç¦C¬O¥H±±¨î¦r²ÅEsc¬°­ºªº±±¨î©R
¥O¡A¦bUNIXªºµêÀÀ²×ºÝ¤¤§¹¦¨²×ºÝ±±¨î©R¥O¡A³oºØ©R¥O¥]¬A¡A²¾°Ê¥ú¼Ð®y¼Ð¡B¨÷«Ì¡B
§R°£¡B¤Á´«¦r²Å¶°µ¥µ¥¡C¤]´N¬O»¡¦b¿é¥X¥Nªí¨îªí²Åªº¦r²Å¦ê¤§«e¡A³q±`¬O­n¥ý¿é¥X
¯S©wªº¦r²ÅÂà¸q§Ç¦C¡C¦bconsole.c¨½¡A¦³®Ú¾Ú¦r²ÅÂà¸q§Ç¦C©R¥O¨Ó°O¿ý¦r²Åª¬ºAªº
Åܶq¡Cµ²¦X¸ÓÅܶq´£¨Ñªº«H®§¡A´N¥i¥H«D±`¤z²b¦a§â¨îªí²Å»Pº~¦r°Ï§O¶}¨Ó¡C
 ¦b¦p¤W«ä¸ôªº«ü¤Þ¤U¡A§Ú­Ì¤S²£¥Í¤F·sªº¸Ñ¨M¤è®×¡C¸g¹L§ï°Ê±o¨ì¤F¥t¤@¦Uª©¥»¡D

 ¦b³o­Ó·sª©¥»¤W¡Aturbonetcfg¦bªì¦¸Ã¸¨îªº®É­Ô¡A¨îªí²Å»Pº~¦r³Q²M´·¦a°Ï¤À¶}¨Ó¡A
µ²ªG¬O«D±`¥¿½Tªº¡C¦ýÁÙ¦³·sªº°ÝÃD¦s¦b¡Jturbonetcfg¦b­«Ã¸ªº®É­Ô¡]¦p¤Á´«µêÀÀ
²×ºÝ©Î¬O²¾°Ê¹«¼Ð¥ú¼Ðªº®É­Ô¡^¡A¨îªí²ÅÁÙ¬OÅܦ¨¤Fº~¦r¡A¦]¬°­«Ã¸§¹¥þ¨Ì¿à¤_½w¨R
°Ï¡A¦Ó³o®É¥Î¨Ó°O¿ý¦r²Å¶°ª¬ºAªºÅܶq¦}¤£¤Ï¬M·í«e¦r²Å¶°ª¬ºA¡C°ÝÃDÁÙ¬O¨S¦³³Ì²×
¸Ñ¨M¡C§Ú­Ì¤S¦^¨ì¤F°_ÂI¡C¡J¢w(
 ¬Ý¨Ó°ÝÃDªº³Ì²×¸Ñ¨M¤â¬q¥²¶·¬O§â¦r²Å¶°ªºª¬ºA¦ñÀH¨C¤@­Ó¦r²Å¦s¦b½w¨R°Ï¤¤¡CÅý
§Ú­Ì¨Ó¬ã¨s¤@¤U½w¨R°Ïªºµ²ºc¡C 
 ¨C¤@­Ó¦r²Å¥e¥Î16bitªº½w¨R°Ï¡A§C8¦ì¬OASCII­È¡A§¹¥þ³Q§Q¥Î¡A°ª8¦ì¥]§t«e´ºÃC
¦â©M­I´ºÃC¦âªºÄÝ©Ê¡A¤]¨S¦³¦h§EªºªÅ¶¡¥i¥H§Q¥Î¡C¦]¦Ó¥u¯à¥t¥~¶}¹@·sªº½w¨R°Ï¡C
¬°¤F«O«ù¤@­P©Ê¡A§Ú­Ì¨M©w¦b­ì¨Óªº½w¨R°Ï¦Z­±²K¥[¬Û¦P¤j¤pªº½w¨R°Ï¡A¥Î¨Ó¦s©ñ¬O
§_¬Oº~¦rªº«H®§¡C 
 ¤]³\¦³ÅªªÌ·|°Ý¡A§Ú­Ì¥u»Ý­n¬°¨C­Ó¦r²Å²K¥[¤@bitªº«H®§¨Ó¼Ð§Ó¬O§_¬Oº~¦r´N¨¬°÷
¤F¡A¬°¤°¤\ÁÙ­n¶}¹@»P­ì½w¨R°Ï¤j¤p¬Û¦PªºÂù­¿½w¨R°Ï¡A¬O¤£¬O¤Ó®ö¶O©O¡H 
§Ú­Ì¥ý©ñ¤U³o­Ó°ÝÃD¡Aµy¦Z¦A§@¦^µª¡C
 ¨ä¹ê¡A¦pªG¦A²K¥[¤@bit¨Ó¼Ð§Ó¬O·í«e¦r²Å¬Oº~¦rªº¥ª¥bÃäÁÙ¬O¥k¥bÃ䪺¸Ü¡A´N·|¬Ù
¥h±½´y«Ì¹õ¤W·í«e¾ã¦æ¦r²Å¦êªº¤u§@¡A³o¼Ë¤@¨Ó¡A½sµ{·|§ó²³æ¡C¦ý¬O¦³ÅªªÌ·|°Ý¡A
§Y¨Ï¬O³o¼Ë¡A¨Ï¥Î8bitÁ`°÷¥Î¤F§a¡H¬°¤°¤\ÁÙ­n¨Ï¥Î16bit©O¡H 
§Ú­Ìªº§@ªk¬O¡J¥Î§C8¦ì¨Ó¦s©ñº~¦r¥t¥~¤@¥bªº¤º½X¡A¥Î°ª8¦ì¤¤ªº2 bit¨Ó¦s©ñ¤W­±
©ÒÁ¿ªº»²§U«H®§¡A°ª8¦ìªº³Ñ§E6¦ì¥i¥H¥Î¨Ó¦s©ñº~¦r©Î¨ä¥¦½s½X¤è¦¡¡]¦pBIG5©Î¤é¤å¡B
Áú¤å¡^ªº«H®§¡A±q¦Ó¨Ï§Ú­Ì¥i¥H¹ê²{¦P«ÌÅã¥Ü¦hºØÂù¦r¸`»y¨¥ªº¦r²Å¦Ó¤£·|¦³¬Û¤¬¤z
ÂZ¡C¥t¥~¡A¦b½sµ{®É¡AÂù­¿½w¨R¤]¤ñ¸û®e©ö­pºâ¡C 
³o¼Ë§Ú­Ì´N¦^µª¤F¦p¤Wªº¨â­Ó°ÝÃD¡C
 ¨´¤µ¬°¤î¡A§Ú­Ì¦³¤F¤@®M¹ý©³¸Ñ¨Mº~¦r©M¨îªí²Å¬Û¤¬¤zÂZ¡B¥b­Óº~¦rªº¨ê·s¡B­«Ã¸
µ¥°ÝÃDªº¤è®×¡C³Ñ¤Uªº´N¬O¨ãÅé½sµ{¹ê²{ªº°ÝÃD¤F¡C
¦ý¬O¡A¥Ñ¤_FramebufferªºÅX°Ê«Ü¦h¡A­×§ï¨C¤@­ÓÅX°Êªºxxxx_putc( )¨ç¼Æ©Mxxxx_p
utcs( )¨ç¼Æ·|¬O¤@¶µ¤£¤pªº¤u§@¡A¦Ó¥B¡A§ï°ÊÅX°Êµ{§Ç¦Z¡A¨CºØÅX°Êªº´ú¸Õ¤]¬O«Ü
³Â·Ðªº¡A¤×¨ä¬O¹ï¤_¦³µw¥ó¥[³tªºÅã¥d¡A­×§ï©M´ú¸Õ·|§ó¤£®e©ö¡C
¨º¤\¡A¦s¤£¦s¦b¤@ºØ¤£»Ý­n­×§ïÅã¥dÅX°Êµ{§Çªº¤èªk©O¡H
¸g¹L¤@µf§V¤O¡A§Ú­Ìµo²{¡A¥i¥H¦b½Õ¥Îxxxx_putcs( )©Îxxxx_putc( )¨ç¼Æ¿é¥Xº~¦r
¤§«e¡A­×§ïvga¦r®wªº«ü°w¨Ï¨ä«ü¦V©Ò»ÝÅã¥Üªºº~¦r¦bº~¦r¦r®w¤¤ªº¦ì¸m¡A§Y§â¤@­Ó
º~¦r·í¦¨¨â­Óvga ASCII¦r²Å¿é¥X¡C¤]´N¬O»¡¡A¦b¤º®Ö¤¤¦s¦b¨â­Ó¦r®w¡A¤@­Ó¬O­ì¦³
ªºvga¦r²Å¦r®w¡A¥t¤@­Ó¬Oº~¦r¦r®w¡A·í§Ú­Ì»Ý­n¿é¥Xº~¦rªº®É­Ô¡A´N§âvga¦r®wªº«ü
°w«ü¦Vº~¦r¦r®wªº¬ÛÀ³¦ì¸m¡Aº~¦r¿é¥X§¹¤§¦Z¡A¦A§â¸Ó«ü°w«ü¦Vvga¦r®wªº­ì¦³¦ì¸m¡C

 ³o¼Ë¤@¨Ó¡A§Ú­Ì¥u»Ý­n­×§ïfbcon.c©Mconsole.c¡A¨ä¤¤console.c­t³dºûÅ@Âù­¿½w¨R
°Ï¡A§â¨C¤@­Ó¦r²Åªº«H®§¦s¤Jªþ¥[ªº½w¨R°Ï¡Q¦Ófbcon.c­t³d§Q¥ÎÂù­¿½w¨R°Ï¤¤ªþ¥[
ªº«H®§¡A½Õ¾ãvga¦r®wªº«ü°w¡A½Õ¥Î©³¼hªºÅã¥ÜÅX°Êµ{§Ç¡C
³o¨½ÁÙ¦³¤L­Ó»Ý­nª`·Nªº¦a¤è¡J
1¡D¥Ñ¤_«Ì¹õ­«Ã¸µ¥­ì¦]¡A½Õ¥Î©³¼hÅX°Êxxxx_putc( )©Mxxxx_putcs( )ªº¦a¤è¦³¦h³B¡C
§Ú­Ì§@¤F¨â­Ó¨ç¼Æ¤À§O¥]¸Ë³o¨â­Ó½Õ¥Î¡A§¹¦¨´À´«¦r®w¡B½Õ¥Îxxxx_putcs( )©Îxxxx
_putc( )¡B«ì´_¦r®wµ¥¥\¯à¡C
2¡D¬°¤F¹ê²{¦V¤Wºu«Ì¡]shift + pageup¡^®É¤]¯à¬Ý¨ìº~¦r¡A§Ú­Ì»Ý­n§@¥t¥~ªº­×§ï¡C

 Linux¦b³]­pµêÀÀ²×ºÝªº®É­Ô¡A´£¨Ñ¤F¦^ÅU³Q¨÷¥X«Ì¹õ¥H¥~ªº«H®§ªº¥\¯à¡A³o´N¬O¥Î
¼öÁä¨Ó¦V¤Wºu«Ì¡]shift + pageup¡^¡C·í«e³Q¨Ï¥ÎªºµêÀÀ²×ºÝ¾Ö¦³¤@­Ó¤½¦@ªº½w¨R°Ï
¡]soft back¡^¡A¥Î¨Ó¦s©ñ³Qºu¥X«Ì¹õ¥H¥~ªº«H®§¡C·í¤Á´«µêÀÀ²×ºÝªº®É­Ô¡A¤½¦@½w
¨R°Ïªº¤º®e·|³Q²M°£¦Ó³Q·sªºµêÀÀ²×ºÝ¨Ï¥Î¡C¦V¤Wºu«Ìªº®É­Ô¡AÅã¥Üªº¬O¤½¦@½w¨R°Ï
¤¤ªº¤º®e¡C¦]¦¹¡A¦pªG§Ú­Ì·Q¦b¦V¤Wºu«Ìªº®É­Ô¬Ý¨ìº~¦r¡A¤½¦@½w¨R°Ï¤]¥²¶·¥[­¿¡A
¥H½T«O¨S¦³«H®§¥á¥¢¡C·íºu¥X«Ì¹õªº«H®§¦V¤½¦@½w¨R°Ï¶ñ¼gªº®É­Ô¡A¥²¶·§â¬ÛÀ³ªºªþ
¥[«H®§¤]¶ñ¼g¶i¤½¦@½w¨R°Ïªºªþ¥[°Ï°ì¡C³o´N­n¨Dfbcon.c¥²¶·À´±o§Q¥Î¤½¦@½w¨R°Ï
ªºªþ¥[«H®§¡C 
 ·íµM¡A¦³¥t¥~¤@ºØ°½Ãiªº¤èªk¡A¨º´N¬O¤£¤¹³\¥Î¤á¦V¤Wºu«Ì¡A±q¦ÓÁקK¹ï¤½°Ï½w¨R
°Ïªº³B²z¡C
3¡D§â¤£¦Pªº½s½X¤è¦¡¡]GB¡BBIG5¡B¤é¤å©MÁú¤å¡^¼g¦¨¤£¦Pªºmodule¡A¥H¹ê²{°ÊºA¥[
¸ü¡A±q¦Ó¨Ï±oÂX®i·sªº½s½X¤è¦¡¤£»Ý­n­«·s½sĶ®Ö¤ß¡C
¤pµ²

 ³q¹L³o¦¸°w¹ïLinux®Ö¤ßªº±´¯Á¡A§Ú­Ìµo²{¡A¥Ø«eLinuxªº®Ö¤ß³]­p¤¤¡A§¹¥þ¨S¦³¦Ò
¼{¨ìÂù¦r¸`½s½X¦r²ÅªºÅã¥Ü¡C§Ú­Ì¦b³oºØ±¡ªp¤UºN¯Á¥X¤@®M¸Ñ¨M®Ö¤ß¤Uº~¦rÅã¥Üªº¤è
ªk¡A¦}½s½X¹ê²{¤F¸Ó¤è®×¡D 
 ¿í´`®Ö¤ßªºGPLª©ÅvÁn©ú¡A§Ú­Ì¦P®É¤½¥¬¤F¹ê²{³o¤@§Þ¥ºªº·½¥N½X¡A·íµM¡A³o¨Ç§ï°Ê
¤´µM¬OGPLªº¡D¦pªG¯à¹ï¬ã¨s®Ö¤ßªºªB¤Í¦³©ÒÀ°§U¡A´î¤Ö¤@¨Ç¤j®a¹ï®Ö¤ßªº¯«¯µ·P¡A
±N¬O§Ú­Ì³Ì¤jªº¦¬Àò¡C
 ¦ý¬O¹ï®Ö¤ß©M¤¤¤å¤Æ¨Ó»¡¡A³o¶È¶È¬O¤@ºØ¹Á¸Õ¡A»·¤£¬O²×ÂI¡D³oºØ§ï°Ê¦h¤Ö±a¦³¤@
¨Çhackªº¦â±m¡A¤£¤Ó¥i¯à¿Ä¦X¶iÅv«Âªº®Ö¤ß¨½¥h¡D§Ú­Ì¤´¦b¿n·¥±´¯Á¶êº¡¸Ñ¨M³o¤@°Ý
ÃDªº¤èªk¡A¬Û«H³o¤@µ²ªG¥²µM»Ý­n³q¹L°ê¤º¥~Linux¸sÅ骺¦@¦P§V¤O¤~¯à¹ê²{¡D§Ú­Ì
¤]«D±`Åwªï¤j®a©M§Ú­Ì¦@¦P°Q½×³o¤@°ÝÃD¡D
´ú¸Õ

¥»¤å¹ê²{ªºKernel Patch¤å¥ó¡]patch.kernel.chinese¡^¥i¥H±qhttp://www.turbol
inux.com.cn¤U¸ü¡C
cd /usr/src/¡]¸Ó¥Ø¿ý¤UÀ³¦³Linux®Ö¤ß·½µ{§Ç©Ò¦bªº¥Ø¿ý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
µM¦Z¥Î·sªº®Ö¤ß±Ò°Ê¡C
Insmod encode-gb.o

Document converted from word 8 by MSWordView (mswordview
0.5.2)

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

MSWordView written by Caolan
McNamara


-- 
[ debian-simplified-chinese@lists.debian.org is the mailing-list that ]
[ this mail was originally sent to,  and was forwarded to this list   ]
[ automatically. GB characters are also converted to Big5 at the same ]
[ time.  Note that there may be errors  during the conversion as this ]
[ is not done by a human!                                             ]


Reply to: