Qemu: 이전 SLES 9 클라이언트는 EvTouch 태블릿을 지원합니다.

Qemu: 이전 SLES 9 클라이언트는 EvTouch 태블릿을 지원합니다.

Qemu/KVM을 통해 Centos Stream에서 SLES 9.0 게스트를 실행하고 있습니다.

자세히 알아보기 전에: 게스트를 업그레이드하는 것은 불가능합니다. 이 커널 버전(2.4.21)만 지원하는 특수 하드웨어를 실행하고 있습니다.

안타깝게도 SLES 9.0에는 Qemu를 통해 제공되는 EvTouch USB 태블릿에 대한 기본 지원이 없습니다. 검색을 통해 Kenan Esau의 오픈 소스 evtouch 드라이버를 찾았습니다(http://www.stz-softwaretechnik.de/~ke/touchscreen/evtouch.html또는http://www.conan.de/touchscreen/evtouch.html출처였나...) 페이지는 다운되었지만 인터넷 아카이브에는 여전히 타르볼이 포함된 첫 번째 URL의 복사본이 있습니다. 이런 식으로 v0.87을 제외한 모든 버전의 사전 컴파일된 패키지와 src 패키지를 성공적으로 얻었습니다. v0.87의 경우 소스 코드만 찾았습니다.

VNC를 통해 호스트에 연결할 때 필요한 게스트의 절대 포인팅을 지원하도록 드라이버를 얻으려고 합니다. 테이블 드라이버 없이는 VNC(실제로 xrdp이지만 중요하지 않음)를 통해 게스트에서 마우스를 사용할 수 없습니다.

- - - - - - - - 갱신- - - - - - - -

내가 시도한 것: 원래 SLES 9.0은 XFree4.3.0.1과 함께 제공되었습니다. xmkmf -a를 통해 드라이버를 설치하면 XFree 소스 파일이 누락되어 소스 파일을 얻어야 했습니다. 그러나 4.3.0의 소스 코드에는 드라이버가 포함하려는 모든 파일이 포함되어 있지 않습니다. 미리 컴파일된 드라이버 중 v0.8 버전만 성공적으로 로드했는데 커서가 계속 멈춰서 작동하지 않았습니다. /var/log/XF86Free.0.log에는 오류가 없습니다.

따라서 저는 Xfree ftp 서버의 바이너리에서 XFree를 업그레이드하기로 결정했습니다(SLES 9에는 해당 패키지가 없습니다). 이것은 완벽하게 작동했으며 이제 XFree 4.4.0이 생겼습니다. 또한 이제 4.4.0 소스 코드를 다운로드하고 드라이버를 직접 컴파일해 보았습니다.

추가 포함 경로를 추가하고 3개의 .def 파일과 /usr/bin/revpath를 예상되는 경로에 복사한 후 실제로 v0.8.0을 컴파일할 수 있었습니다! XFree86.0.log는 이제 로드되는 드라이버를 올바르게 언급하며 XFree4.4.0용으로 컴파일되었습니다. 그러나 동작은 사전 컴파일된 v0.8.0과 동일합니다. 오류 메시지가 없고 마우스가 움직이지 않습니다.

흥미롭게도 Imake 파일을 v0.8.8 소스에 복사하고 추가 포함(+ .c 파일 목록 조정)을 추가하여 내 장치의 최신 버전을 컴파일할 수도 있었지만 동일했습니다.

INSTall 파일을 살펴보니 DEBUG=y 및 LOG=y로도 컴파일할 수 있다는 것을 알았습니다. 나는 그렇게 했고 이제 최소한 /var/log/XFree86.0.log에 몇 가지 정보가 있습니다. 문서의 관련 부분은 다음과 같습니다.

(II) Module evtouch: vendor="Kenan Esau"
    compiled for 4.4.0, module version = 0.8.8
    Module class: XFree86 XInput Driver
    ABI class: XFree86 XInput driver, version 0.4

EVTouch: EVTouchPreInit
State: S_UNTOUCHED  Action: No Action       Button: 0
State: S_TOUCHED    Action: No Action       Button: 0
State: S_LONGTOUCHED    Action: down        Button: 1
State: S_MOVING Action: No Action       Button: 0
State: S_MAYBETAPPED    Action: click       Button: 1
State: S_ONEANDAHALFTAP Action: down        Button: 3
(**) Option "MinX" "0"
(**) Option "MaxX" "32767"
(**) Option "MinY" "0"
(**) Option "MaxY" "32767"
(**) Option "Emulate3Buttons"
(**) Option "Emulate3Timeout" "50"
(diff[0][0]/diff[0][1])=(0/0)
(diff[1][0]/diff[1][1])=(0/0)
(diff[2][0]/diff[2][1])=(0/0)
(diff[3][0]/diff[3][1])=(0/0)
(diff[4][0]/diff[4][1])=(0/0)
(diff[5][0]/diff[5][1])=(0/0)
(diff[6][0]/diff[6][1])=(0/0)
(diff[7][0]/diff[7][1])=(0/0)
(diff[8][0]/diff[8][1])=(0/0)
(**) Option "DeviceName" "touchscreen"
(**) Option "SendCoreEvents"
(**) touchscreen: always reports core events
(**) Option "CorePointer"
(**) touchscreen: Core Pointer
(**) Option "Protocol" "imps/2"
(**) Mouse[1]: Device: "/dev/mouse"
(**) Mouse[1]: Protocol: "imps/2"
(**) Option "CorePointer" "False"
(**) Option "Device" "/dev/mouse"
(**) Option "Buttons" "5"
(**) Mouse[1]: Emulate3Buttons, Emulate3Timeout: 50
(**) Option "ZAxisMapping" "4 5"
(**) Mouse[1]: ZAxisMapping: buttons 4 and 5
(**) Mouse[1]: Buttons: 5
(II) XINPUT: Adding extended input device "Mouse[1]" (type: MOUSE)
(II) XINPUT: Adding extended input device "touchscreen" (type: TOUCHSCREEN)
EVTouch: DeviceInit
EVTouch: Display X,Y: 1920 910
EVTouch: Virtual X,Y: 1920 910
EVTouch: DriverName, Rev.: vmware 657922
EVTouch: Viewport X0,Y0: 0 0
EVTouch: Viewport X1,Y1: 1919 909
EVTouch: MaxValue H,V: 0 0
EVTouch: DeviceInit btn_count=5
EVTouch: DeviceInit btn_count=5
(**) Option "Device" "/dev/input/event0"
EVTouch: DeviceOn
EVTouch: QueryHardware
(EE) touchscreen: Unable to grab device (Invalid argument).
EVTouch: DeviceOff

Imakefile 변경 사항

XFREE_TOP = /home/kmf/Desktop/xc

#INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86SRC)/loader -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86 \
#           -I$(SERVERSRC)/include -I$(SERVERSRC) -I$(XINCLUDESRC) -I$(EXTINCSRC) -I/home/kmf/Desktop/xc/include

INCLUDES = -I.  -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/common \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/loader \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/os-support \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/os-support/bus \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/xf86cfg \
        -I$(XFREE_TOP)/programs/Xserver/randr \
        -I$(XFREE_TOP)/include \
        -I$(XFREE_TOP)/programs/Xserver/include \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86 \
        -I$(XFREE_TOP)/exports/include/X11 -I$(XFREE_TOP)/include/extensions \
        -I/usr/X11R6/include

또한 0.8.8용으로 컴파일됩니다.

SRCS1 = evtouch.c libtouch.c
OBJS1 = evtouch.o libtouch.o

make의 출력은 다음과 같습니다.

rm -f ev_calibrate.o
gcc -m32 -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef    -fno-merge-constants -I.  -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common             -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/loader            -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support           -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support/bus               -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/xf86cfg           -I/home/kmf/Desktop/xc/programs/Xserver/randr           -I/home/kmf/Desktop/xc/include          -I/home/kmf/Desktop/xc/programs/Xserver/include                 -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86          -I/home/kmf/Desktop/xc/exports/include/X11 -I/home/kmf/Desktop/xc/include/extensions             -I/usr/X11R6/include  -I/home/kmf/Desktop/xc -I/home/kmf/Desktop/xc/exports/include   -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L          -D_POSIX_SOURCE -D_XOPEN_SOURCE                          -D_BSD_SOURCE -D_SVID_SOURCE                             -D_GNU_SOURCE                           -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP       -DXCSECURITY -DTOGCUP   -DXF86BIGFONT -DDPMSExtension         -DPIXPRIV -DPANORAMIX   -DRENDER -DRANDR -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH                                 -DXFreeXDGA -DXvExtension                               -DXFree86LOADER  -DXFree86Server                             -DXF86VIDMODE                           -DXvMCExtension                                 -DSMART_SCHEDULE                                -DBUILDDEBUG -DXResExtension                            -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module   -ggdb -DEVDBG  -c ev_calibrate.c
ev_calibrate.c: In function `main':
ev_calibrate.c:185: warning: ISO C90 forbids variable-size array `xy_ring_buf'
ev_calibrate.c:357: warning: ordered comparison of pointer with integer zero
ev_calibrate.c:401: warning: ISO C forbids passing arg 3 of `pthread_create' between function pointer and `void *'
ev_calibrate.c:181: warning: unused variable `p_mtx_attr'
rm -f ev_calibrate
gcc -m32 -o ev_calibrate -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef     -L/home/kmf/Desktop/xc/exports/lib   ev_calibrate.o -lXaw -lXmu -lXt -lSM -lICE -lXpm -lXext -lX11     -lpthread -L/usr/X11R6/lib -Wl,-rpath-link,/home/kmf/Desktop/xc/exports/lib
rm -f evtouch.o
gcc -m32 -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef    -fno-merge-constants -I.  -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common             -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/loader            -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support           -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support/bus               -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/xf86cfg           -I/home/kmf/Desktop/xc/programs/Xserver/randr           -I/home/kmf/Desktop/xc/include          -I/home/kmf/Desktop/xc/programs/Xserver/include                 -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86          -I/home/kmf/Desktop/xc/exports/include/X11 -I/home/kmf/Desktop/xc/include/extensions             -I/usr/X11R6/include  -I/home/kmf/Desktop/xc -I/home/kmf/Desktop/xc/exports/include   -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L          -D_POSIX_SOURCE -D_XOPEN_SOURCE                          -D_BSD_SOURCE -D_SVID_SOURCE                             -D_GNU_SOURCE                           -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP       -DXCSECURITY -DTOGCUP   -DXF86BIGFONT -DDPMSExtension         -DPIXPRIV -DPANORAMIX   -DRENDER -DRANDR -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH                                 -DXFreeXDGA -DXvExtension                               -DXFree86LOADER  -DXFree86Server                             -DXF86VIDMODE                           -DXvMCExtension                                 -DSMART_SCHEDULE                                -DBUILDDEBUG -DXResExtension                            -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module   -ggdb -DEVDBG  -c evtouch.c
evtouch.c:84:1: warning: "DBG" redefined
In file included from evtouch.c:75:
/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common/xf86Xinput.h:113:1: warning: this is the location of the previous definition
In file included from evtouch.c:95:
evtouch.h:33:21: warning: anonymous variadic macros were introduced in C99
evtouch.c: In function `emulate3Timer':
evtouch.c:201: warning: ISO C89 forbids mixed declarations and code
evtouch.c: In function `EVTouchProcessRel':
evtouch.c:355: warning: unused variable `dummy'
evtouch.c: In function `DeviceInit':
evtouch.c:590: warning: ISO C89 forbids mixed declarations and code
evtouch.c:605: warning: ISO C89 forbids mixed declarations and code
evtouch.c: In function `ReadInput':
evtouch.c:810: warning: `0' flag ignored with precision and `%x' printf format
evtouch.c:810: warning: `0' flag ignored with precision and `%x' printf format
evtouch.c: In function `ConvertProc':
evtouch.c:923: warning: ISO C89 forbids mixed declarations and code
evtouch.c:937: warning: implicit declaration of function `RRGetRotation'
evtouch.c:1080: warning: ISO C89 forbids mixed declarations and code
/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common/compiler.h: At top level:
evtouch.c:753: warning: `EVTouchRead' defined but not used
rm -f libtouch.o
gcc -m32 -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef    -fno-merge-constants -I.  -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common             -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/loader            -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support           -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support/bus               -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/xf86cfg           -I/home/kmf/Desktop/xc/programs/Xserver/randr           -I/home/kmf/Desktop/xc/include          -I/home/kmf/Desktop/xc/programs/Xserver/include                 -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86          -I/home/kmf/Desktop/xc/exports/include/X11 -I/home/kmf/Desktop/xc/include/extensions             -I/usr/X11R6/include  -I/home/kmf/Desktop/xc -I/home/kmf/Desktop/xc/exports/include   -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L          -D_POSIX_SOURCE -D_XOPEN_SOURCE                          -D_BSD_SOURCE -D_SVID_SOURCE                             -D_GNU_SOURCE                           -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP       -DXCSECURITY -DTOGCUP   -DXF86BIGFONT -DDPMSExtension         -DPIXPRIV -DPANORAMIX   -DRENDER -DRANDR -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH                                 -DXFreeXDGA -DXvExtension                               -DXFree86LOADER  -DXFree86Server                             -DXF86VIDMODE                           -DXvMCExtension                                 -DSMART_SCHEDULE                                -DBUILDDEBUG -DXResExtension                            -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module   -ggdb -DEVDBG  -c libtouch.c
rm -f evtouch_drv.o
gcc -m32 -nostdlib -r  evtouch.o libtouch.o -o evtouch_drv.o
rm -f /home/kmf/Desktop/xc/exports/lib/modules/input/evtouch_drv.o
+ cd /home/kmf/Desktop/xc/exports/lib/modules/input
+ ln -s ../../../..//home/kmf/Desktop/Evtouch/xf86-input-evtouch-0.8.8/evtouch_drv.o .

v0.8.8의 C 코드 676행에 구문 오류가 있다는 점을 언급하고 싶습니다. 이를 다음과 같이 변경했습니다(v0.8.6의 드라이버 코드를 기반으로 함).

#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
        xf86InitValuatorAxisStruct(dev, 0, 0, priv->screen_width,
                                   1024,
                                   EV_AXIS_MIN_RES /* min_res */ ,
                                   EV_AXIS_MAX_RES /* max_res */ );
        xf86InitValuatorDefaults(dev, 0);
        xf86InitValuatorAxisStruct(dev, 1, 0, priv->screen_height,
                                   1024,
                                   EV_AXIS_MIN_RES /* min_res */ ,
                                   EV_AXIS_MAX_RES /* max_res */ );
        xf86InitValuatorDefaults(dev, 1);
#else
    xf86InitValuatorAxisStruct(dev, 0, priv->min_x, priv->max_x,
                               1024, //THIS LINE WAS MISSING
                                EV_AXIS_MIN_RES /* min_res */ , //THIS LINE WAS MISSING
                                EV_AXIS_MAX_RES /* max_res */ ); //THIS LINE WAS MISSING
        xf86InitValuatorDefaults(dev, 0); //THIS LINE WAS MISSING
        InitValuatorAxisStruct (dev, 1, priv->min_y, priv->max_y, //THIS LINE WAS MISSING
                                1024, //THIS LINE WAS MISSING
                                EV_AXIS_MIN_RES /* min_res */ , //THIS LINE WAS MISSING
                                EV_AXIS_MAX_RES /* max_res */ ); //THIS LINE WAS MISSING
xf86InitValuatorDefaults(dev, 1);
#endif

dmesg는 마지막에 다음과 같이 보고합니다.

input: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb1:2.0
hid-core.c: v1.9.1 Andreas Gal, Vojtech Pavlik <[email protected]>
hid-core.c: USB HID support drivers
mtrr: type mismatch for fa000000,2000000 old: uncachable new: write-combining

오류 메시지는 다음과 같습니다. (EE) 터치스크린: 장치를 잡을 수 없습니다(잘못된 매개변수). 안타깝게도 어떤 매개변수가 실제로 유효하지 않은지에 대한 정보는 없습니다. evtouch.c의 코드를 조사한 결과 DeviceOn 함수의 다음 인스턴스에서 오류가 발생한 것을 발견했습니다.

if (ioctl(local->fd, EVIOCGRAB, (void *)1))
    xf86Msg(X_ERROR, "%s: Unable to grab device (%s).\n", local->name, strerror(errno));

여기서 EVIOCGRAB은 다음과 같이 정의됩니다.

#ifndef EVIOCGRAB
#define EVIOCGRAB _IOW('E', 0x90, int)
#endif

제가 보기엔 local->fd의 일부 옵션은 ioctl을 통해 적용할 수 없는 것 같습니다. 그런데, 손님들에게 제공되는 장비에 문제가 있어서 제대로 잡을 수 없는 것 같다는 생각이 들기 시작했습니다...

이 일을 어떻게 작동하게 합니까?

답변1

커널 2.4를 사용하여 SLES9에서 절대 포인터 지원을 얻을 수 있었지만 Evtouch를 사용하면 이를 수행할 수 없었습니다.

내가 하나 찾았어해결책은 여기에 있습니다, "아주 오래된 Linux에는 EvTouch USB 태블릿이 없음" 섹션에서 확인하세요. "EvTouch를 컴파일할 수 있지만 EvTouch 태블릿이 "HID"(휴먼 인터페이스 장치)로 감지됩니다."로 시작하지만 hid 드라이버가 이를 인식하지 못합니다.

먼저 usbhid가 이를 무시하도록 장려하기 위해 부팅 매개변수를 사용하여 SLES를 시작해 보았습니다.

usbhid.quirk=0x672:0x0001:0x4

작동하지 않습니다. 이 페이지에는 evtouch, vmmouse 및 wacom 태블릿이 언급되어 있습니다. 확인해 보니 디렉토리 wacom.o에 하나가 있습니다 /usr/X11R6/lib/module/input. 이는 2.4 커널이 wacom 장치와 호환될 것이라는 희망을 줍니다.

다음 변경 사항wacom을 작동시키는 데 필요함:

  • 개요에서 virt-manager첫 번째 줄을 다음과 같이 변경합니다.

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    
  • 하단에 다음을 추가합니다.

    <qemu:commandline>
        <qemu:arg value='-usb'/>
        <qemu:arg value='-device'/>
        <qemu:arg value='usb-wacom-tablet'/>
    </qemu:commandline>
    

-usb이 링크에 언급되지 않은 추가 콘텐츠가 여기에 있다는 점에 유의하세요 .

게스트에서 /dev/input/event0X가 중지되면(startup 사용 init 3) 가비지 출력이 표시됩니다.
이를 위해서는 설정 변경이 필요합니다 /etc/X11/XFree86.

Section "InputDevice"
  Identifier "Tablet"
  Driver "wacom"
  Option "Device" "/dev/input/event0"
  Option "DeviceName" "Wacom"
  Option "Type" "stylus"
  Option "USB" "on"
  Option "Mode" "Absolute"
  Option "SendCoreEvents"
#  Option "AlwaysCore" "On"
#  Option "BottomX" "98"
#  Option "BottomY" "43"
#  Option "TopX" "940"
#  Option "TopY" "925"
EndSection

링크도 변경되었으나 ServerLayout다음 변경 사항을 이용하시기 바랍니다.

Section "ServerLayout"
  Identifier   "Layout[all]"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Tablet" "CorePointer"
  Screen       "Screen[0]"
  Option       "Clone" "off"
  Option       "Xinerama" "off"
#  InputDevice  "Mouse[1]" "CorePointer"
EndSection

이 설정을 사용하면 잘 작동하는 것 같습니다.

관련 정보