도와주세요!!
글 수 15,339
2008.01.23 12:28:41 (*.135.254.29)
7590
여차저차 nano-x를 arm7에 포팅하고 각종 데모들이 연결된 lcd를 프레임버퍼로 실행되는것을 확인하였습니다.
마우스는 usb 마우스를 사용할 예정이고 커널컴파일 과정에서 hid 부분을 추가하여
리눅스 상에서 마우스를 끼면 hid 마우스인식은 잘 되는거 같습니다만
nano-x에서 마우스포인터도 안나타나고 어떻게 인식시켜야 할지 모르겠습니다
마이크로윈도우 폴더에 기본으로 마우스 관련 스크립트가 어서 열어보니 gpm 데몬을 사용하는거 같은데
gpm 컴파일은 아직 하지 않아서..
마우스가 작동이 안되더라도 화면 중앙에 마우스 포인터라도 떠준다면 뭔가 좀 가망성이 보일것도 같은데
마우스 포인터 조차 나오지 않으니..;;
nano-x에서 usb 마우스 사용해보신분 계신지..
마우스는 usb 마우스를 사용할 예정이고 커널컴파일 과정에서 hid 부분을 추가하여
리눅스 상에서 마우스를 끼면 hid 마우스인식은 잘 되는거 같습니다만
nano-x에서 마우스포인터도 안나타나고 어떻게 인식시켜야 할지 모르겠습니다
마이크로윈도우 폴더에 기본으로 마우스 관련 스크립트가 어서 열어보니 gpm 데몬을 사용하는거 같은데
gpm 컴파일은 아직 하지 않아서..
마우스가 작동이 안되더라도 화면 중앙에 마우스 포인터라도 떠준다면 뭔가 좀 가망성이 보일것도 같은데
마우스 포인터 조차 나오지 않으니..;;
nano-x에서 usb 마우스 사용해보신분 계신지..
USB 마우스는 이 커널에서 input event 으로 접속이 가능 합니다.
그러나 어떤 시스템인가를 잘 모르겠내요.
nano-X의 마우스는 해당 시스템 상황을 파악해서 설정해야 하는데, 현재 USB에서 어떤 방식으로 마우스가 연결되는지를 파악해야 합니다.
GPM 마우스의 경우 nano-X의
src/drivers/mou_gpm.c
에 포팅되어 있습니다. 여기서
#define GPM_DEV_FILE "/dev/gpmdata"
이와같이 디바이스 파일 이름이 설정되어 있는데 이것을 현재의 장치 이름과 맞추어 주어야 합니다.
이것은
GPM_Open(MOUSEDEVICE *pmd)
{
mouse_fd = open(GPM_DEV_FILE, O_NONBLOCK);
if (mouse_fd < 0)
return -1;
return mouse_fd;
}
에서 open 함수에 의해 열려야 하는데, 이 함수 open이 되지 않으면 return -1;되고 이 리턴값은 nano-X 서버에서
실패로 보고 마우스 포인트를 없애고 진행 합니다.
이 open 함수가 열리지 않은 경우 이것은 우서
/dev 디렉토리에 가서 /dev/gpmdata이 있는가를 확인하고 이 를 바꾸어 nano-X을 재 컴파일 해야 합니다.
만약 이 과정이 성공하면, 마우스 포인터가 보이고 마우스 움직이 되면 마우스는 문제가 없으나 open이 잘되었다고 해서 문제가 전부 해결되지 않는 경우가 있습니다. 마우스를 움직였을 때 nano-X가 죽으면 이것은 현재 열린 마우스 형태가 맞지 않아서 입니다. GPM 마우스가 아닌 것이죠.
이것은 커널의 버전과 내 시스템를 파악해야 합니다.
static int
GPM_Read(MWCOORD *dx, MWCOORD *dy, MWCOORD *dz, int *bp)
{
static unsigned char buf[5];
static int nbytes;
int n;
while((n = read(mouse_fd, &buf[nbytes], 5 - nbytes))) {
if(n < 0) {
if ((errno == EINTR) || (errno == EAGAIN))
return 0;
else return -1;
}
여기에서 read가 되었을 때,
if(nbytes == 5) {
/* button data matches defines, no conversion*/
*bp = (~buf[0]) & 0x07;
*dx = (signed char)(buf[1]) + (signed char)(buf[3]);
*dy = -((signed char)(buf[2]) + (signed char)(buf[4]));
*dz = 0;
nbytes = 0;
return 1;
여기에서 재대로 된 데이터가 아니라는 이야기 입니다.
즉, 버퍼의 데이터가 GPM 포맷과 맞지 않는다는 이야기 입니다.
dolicom@naver.com
http://blog.naver.com/dolicom