[ubuntu-ko] Re: 한영키 1차 커널 패치입니다.

Vincent Lee handrake at gmail.com
Sat Mar 11 18:01:45 GMT 2006


2차 패치입니다. 1차 패치는 테스팅을 해보니 안되서 (...)
다시 분석해 보고 만들었습니다. 테스팅을 해주신 gana코코넛님께
진심으로 감사드립니다. 이 패치를 쓰면 키코드는 제대로
맵핑이 됩니다. 우선 setkeycodes를 쓸 필요가 없다는 말이죠.
다만 showkey에 반응하지 않는걸로 봐서 atie님께서 말씀하신
hotkey-setup의 버그가 아닐까 합니다. 이것도 한번 살펴보겠습니다.

--- a/drivers/input/keyboard/atkbd.c    2006-01-31 01:25:07.000000000 -0500
+++ b/drivers/input/keyboard/atkbd.c    2006-03-11 12:55:25.000000000 -0500
@@ -81,9 +81,9 @@ static unsigned char atkbd_set2_keycode[

 #else
          0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
-         0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
+         0, 56, 42, 93, 29, 16,  2,  0,  0,123, 44, 31, 30, 17,  3,  0,
          0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
-         0, 49, 48, 35, 34, 21,  7,184,  0,  0, 50, 36, 22,  8,  9,185,
+         0, 49, 48, 35, 34, 21,  7,184,  0,122, 50, 36, 22,  8,  9,185,
          0, 51, 37, 23, 24, 11, 10,  0,  0, 52, 53, 38, 39, 25, 12,  0,
          0, 89, 40,  0, 26, 13,  0,  0, 58, 54, 28, 27,  0, 43,  0, 85,
          0, 86, 91, 90, 92,  0, 14, 94,  0, 79,124, 75, 71,121,  0,  0,
@@ -149,8 +149,6 @@ static unsigned char atkbd_unxlate_table
 #define ATKBD_RET_EMUL0                0xe0
 #define ATKBD_RET_EMUL1                0xe1
 #define ATKBD_RET_RELEASE      0xf0
-#define ATKBD_RET_HANGUEL      0xf1
-#define ATKBD_RET_HANJA                0xf2
 #define ATKBD_RET_ERR          0xff

 #define ATKBD_KEY_UNKNOWN        0
@@ -303,7 +301,6 @@ static irqreturn_t atkbd_interrupt(struc

                if (atkbd->emul ||
                    !(code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1 ||
-                     code == ATKBD_RET_HANGUEL || code == ATKBD_RET_HANJA ||
                     (code == ATKBD_RET_ERR && !atkbd->err_xl) ||
                     (code == ATKBD_RET_BAT && !atkbd->bat_xl))) {
                        atkbd->release = code >> 7;
@@ -332,12 +329,6 @@ static irqreturn_t atkbd_interrupt(struc
                case ATKBD_RET_RELEASE:
                        atkbd->release = 1;
                        goto out;
-               case ATKBD_RET_HANGUEL:
-                       atkbd_report_key(atkbd->dev, regs, KEY_HANGUEL, 3);
-                       goto out;
-               case ATKBD_RET_HANJA:
-                       atkbd_report_key(atkbd->dev, regs, KEY_HANJA, 3);
-                       goto out;
                case ATKBD_RET_ERR:
                        printk(KERN_DEBUG "atkbd.c: Keyboard on %s
reports too many keys pressed.\n", serio->phys);
                        goto out;


On 3/11/06, Vincent Lee <handrake at gmail.com> wrote:
> 커널을 빌드해서 www.freebsdcity.org/~handrake
> 에 올려놓았습니다. 이 패치는 한영키를 setkeycodes를 하지 않은 상태에서도
> showkey에 반응을 할 수 있게 하는 패치입니다. xmodmap는 여전히 해줘야
> 한글키로 인식을 제대로 할 겁니다. PS/2 키보드용입니다.
>
> On 3/8/06, Vincent Lee <handrake at gmail.com> wrote:
> > 요 며칠동안 커널 분석한 것을 바탕으로 한영키 패치를 만들어 보았습니다.
> > 최대한 기존 키보드 드라이버의 디자인을 해치지 않는 방법을 찾다보니
> > 역시 원래 있는 키맵을 이용하는 것이 제일이더군요.
> >
> > 제가 한글 키보드가 없는 관계로 테스트를 못하였습니다. 테스트를 해주시고
> > 결과를 여기에 리플로 달아주시면 제가 보고 틀린 점이 있으면 고쳐보겠습니다.
> > 이론상으로는 올바르게 짰다고 생각하지만 한번에 생각했던 것처럼 될지
> > 100% 장담은 못하겠네요.
> >
> > 테크니컬한 부분은 http://www.ubuntu.or.kr/wiki.php/한글키보드문제
> > 에 정리를 해 두겠습니다. 관심 있으신 부분은 보시고 틀린 거 같으면
> > 지적도 해주세요.
> >
> > 패치는 diff -up를 써서 만들어졌습니다.
> >
> > --- a/drivers/input/keyboard/atkbd.c    2006-01-02 22:21:10.000000000 -0500
> > +++ b/drivers/input/keyboard/atkbd.c    2006-03-08 15:13:16.000000000 -0500
> > @@ -98,7 +98,14 @@ static unsigned char atkbd_set2_keycode[
> >           0,  0,  0,  0,  0,  0,  0,  0,  0,107,  0,105,102,  0,  0,112,
> >         110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,
> >
> > -         0,  0,  0, 65, 99,
> > +         0,  0,  0, 65, 99,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> > +         0,123,122,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> >  #endif
> >  };
> >
> > @@ -149,8 +156,6 @@ static unsigned char atkbd_unxlate_table
> >  #define ATKBD_RET_EMUL0                0xe0
> >  #define ATKBD_RET_EMUL1                0xe1
> >  #define ATKBD_RET_RELEASE      0xf0
> > -#define ATKBD_RET_HANGUEL      0xf1
> > -#define ATKBD_RET_HANJA                0xf2
> >  #define ATKBD_RET_ERR          0xff
> >
> >  #define ATKBD_KEY_UNKNOWN        0
> > @@ -303,7 +308,6 @@ static irqreturn_t atkbd_interrupt(struc
> >
> >                 if (atkbd->emul ||
> >                     !(code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1 ||
> > -                     code == ATKBD_RET_HANGUEL || code == ATKBD_RET_HANJA ||
> >                      (code == ATKBD_RET_ERR && !atkbd->err_xl) ||
> >                      (code == ATKBD_RET_BAT && !atkbd->bat_xl))) {
> >                         atkbd->release = code >> 7;
> > @@ -332,12 +336,6 @@ static irqreturn_t atkbd_interrupt(struc
> >                 case ATKBD_RET_RELEASE:
> >                         atkbd->release = 1;
> >                         goto out;
> > -               case ATKBD_RET_HANGUEL:
> > -                       atkbd_report_key(atkbd->dev, regs, KEY_HANGUEL, 3);
> > -                       goto out;
> > -               case ATKBD_RET_HANJA:
> > -                       atkbd_report_key(atkbd->dev, regs, KEY_HANJA, 3);
> > -                       goto out;
> >                 case ATKBD_RET_ERR:
> >                         printk(KERN_DEBUG "atkbd.c: Keyboard on %s
> > reports too many keys pressed.\n", serio->phys);
> >                         goto out;
> >
>


More information about the ubuntu-ko mailing list