Sometimes you want to do something and sometimes you need to do something. Playing with very old Fedora Core was not a want, it was a need to be able to get some other old creaky software running that needs a Linux 2.4 Kernel.

Getting a very old Fedora Core (yarrow) Release 1 running has it quirks, especially if you are also trying to do this by creating QEMU / KVM virtual machines.

Status: 30th August 2020 - still testing.


The Problem

I have an old SGI Onyx 350 (O350) machine. This consist of a number of chassis linked together via a Numalink router all controlled via a device known as an L2 Controller and each individual machine has an L1 controller which are connected to the L2 Controller via USB. These in turn can be managed via an L3 Controller (or just Telnet to the L2) which is provided as a software solution running on RedHat Linux.

The Linux based L3 software also includes an L2 emulation capability and needs a 32 bit Linux 2.4 kernel. So running this requires a Linux from around 2002 - 2004.

Additional needs include: Korn Shell & USB support.

Finally on top of the physical machine software needs I have tried to move the L2 Controller onto a QEMU / KVM VM on top of Ubuntu 20.04. This bring need to have support for EvTouch USB Tablet driver as well. EvTouch was originally introduced around 2002 (based on code copyright notice).

The USB driver and other device input code within Linux was under rapid development at this time, so there are many dependencies that can stop this stack from working,


The Options

As the SGI software was officially released for RedHat Linux the obvious answer is to use this. The original RedHat version would likely be RedHat Linux Release 8/9. However RedHat has pretty much deprecated its original RedHat Linux releases for RHEL and RedHat 9 series merged into Fedora Core project.

My Linux distribution preference is Ubuntu but the first Ubuntu release was already Linux kernel 2.6. So Fedora  was the selected option, as it closest to RedHat and Fedora Core R1 is built on top of 2.4 kernel.

My initial choice was to build the L3 Controller on top of VMWare, but this was abandoned when it proved impossible to get USB working, so I dug out an old PC of simillar vintage. Getting physical machine running on Fedota  Core R1, was a straight forward installation. The steps are basically same as documented here, but without X11 Pointer Device issues.

So next option is to see if it is possible to get this running QEMU / KVM on Ubuntu 20.04 which adds the need to try to get EvTouch USB input or some other Tablet option running.


The Hick-ups

Along the way I had to deal with the following hickups.

SSH/SFTP and Encrpytion Negotiation

A common problem with old devices and systems is that ssh/sftp connections request fail with encryption exchange failure due to deprecating support of older and less secure protocols. So you can resort to using telnet which has no encryption at all or try to see if you can get your existing client to connect with one of the less secure protocols.

Here is typical sequence:

# ssh YOUR-ID@HOST.DOMAIN
Unable to negotiate with 192.168.XXX.XXX port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

--- Try again with proposed key exchange method...

# ssh -oKexAlgorithms=+diffie-hellman-group1-sha1  YOUR-ID@HOST.DOMAIN
Unable to negotiate with 192.168.XXX.XXX port 22: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se

--- Now add the encryption ciper...

# ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes192-cbc YOUR-ID@HOST.DOMAIN
YOUR-ID@HOST.DOMAIN's password:

--- ok now good to go

Finding a yum repository...

When dealing with "Vintage" releases like Fedora Core R1 (yarrow) you will find that the original yum/apt repositories are no longer available. For historical Fedora core I found the following repositories.

Base:

Updates:

So configure /etc/yum.conf approrpriately (I used the mirror as using processor cycles to encrypt this repository, is a waste of CPU cycles and electricity ;-) ).

# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1

[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=http://mirrors.kernel.org/fedora-buffet/archive/fedora/linux/core/1/i386/os
#baseurl=http://fedora.redhat.com/releases/fedora-core-$releasever

[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://mirrors.kernel.org/fedora-buffet/archive/fedora/linux/core/updates/1/i386
#baseurl=http://fedora.redhat.com/updates/released/fedora-core-$releasever

#[updates-testing]
#name=Fedora Core $releasever - $basearch - Unreleased Updates
#baseurl=http://fedora.redhat.com/updates/testing/fedora-core-$releasever

Installing Korn Shell (ksh)

Korn shell is required for the SGI utilitities, but it is not installed by default. If you did not have access to repository , then you might think, "ok its just a another shell (not a born again one ;-) )". I started down this course but quickly ended up deep in the rough trying to get ksh compiled via AST source repository. The easy way is to take the penalty and go back by updating your yum repository, then its a simple yum command to get pdksh installed (I suspect that the pd == public domain):

# yum install pdksh
Gathering header information file(s) from server(s)
Server: Fedora Core 1 - i386 - Base
Server: Fedora Core 1 - i386 - Released Updates
Finding updated packages
Downloading needed headers
Resolving dependencies
Dependencies resolved
I will do the following:
[install: pdksh 5.2.14-23.i386]
Is this ok [y/N]: y
Getting pdksh-5.2.14-23.i386.rpm
pdksh-5.2.14-23.i386.rpm  100% |=========================| 180 kB    00:01     
Running test transaction:
Test transaction complete, Success!
pdksh 100 % done 1/1 
Installed:  pdksh 5.2.14-23.i386
Transaction(s) Complete

Avoiding RPM Key Check Errors...

RPM package have embedded digitial signatures and these are checked against known ones before will let you install a package, the typical error you will see is:

# rpm -i <LOCATION>/XFree86-4.3.0-55.src.rpm                   
warning: /var/tmp/rpm-xfer.rMNqgB: V3 DSA signature: NOKEY, key ID 4f2a6fd2

The work around is way simpler than most of the online "tips" advise...

# rpm -ivh --nosignature YOUR-FAVOURITE.rpm

Getting source code via RPM packages

To do USB & X11 build requires you to install the sources code RPM. These must match the version of the repository versions. To get the source you ned to invoke rpm directly now via yum:

#
---
--- Using the same repository you set up for yum,
---    look for src packages and then install these directly via rpm
---

# rpm -ivh --nosignature http://mirrors.kernel.org/fedora-buffet/archive/fedora/linux/core/updates/1/i386/SRPMS/kernel-2.4.22-1.2199.nptl.src.rpm
Retrieving http://mirrors.kernel.org/fedora-buffet/archive/fedora/linux/core/updates/1/i386/SRPMS/kernel-2.4.22-1.2199.nptl.src.rpm
   1:kernel                 ########################################### [100%]

The source code will be in either the /usr/src directory or redhat directory below this. The sources in redhat directory are in tar archives.

NOTE: Installing the src package does not result in new package install record being created.

No EvTouch USB Tablet with very old Linux

The SGI applications are X11 GUI based and need a working X11 Pointer Input Device. The only device that works correctly via VNC with QEMU / KVM /libvirt is the EvTouch USB Tablet. This provides absolute (rather than relative position) to its driver to work correctly with VNC. The other option is to capture a physical USB mouse, but this then means you cannot use the mouse with any other window as its capture means you cannot get any input to any outside windows.

The EvTouch driver was developed in around 2002 and this was the same time frame that Linux kernel 2.4 -> 2.6 was in transition to adopt "Linux Input Drivers". This code is not part of Fedora Core R1.

The EvTouch code (0.6) uses the evdev (/dev/input/eventX) interface, which is part of the "Linux Input Drivers". This is all early code in Linux 2.4 and requires compiling from source to get running.

I was able to compile EvTouch, but the EvTouch tablet get detected as an "HID" (Human Interface Device) which it is and connected to the hid driver. However the hid driver does not recognise it. Even though evdev is part of installed kernal, there is no configurable way to control which device gets directed to which driver (hid, evdev, evtouch, wacom etc).  Looking at this I found the Wacom Tablet installation instructions and code. In the wacom code you can see where it has added support for Wacom devices by updating the "hid-core.c" code to stop it passing control to "hid" driver. Here is the HID_QUIRK_IGNORE example code from the Wacom driver.

struct hid_blacklist {
	__u16 idVendor;
	__u16 idProduct;
	unsigned quirks;
} hid_blacklist[] = {
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PENPARTNER, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 1, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 2, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 1, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 2, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 3, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 4, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 1, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 2, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 3, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 4, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PL + 5, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 1, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 2, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 3, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 4, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 5, HID_QUIRK_IGNORE },
	/* Intuos2 6x8 reports as 0x47 instead of 0x42 */
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 3, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE + 4, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO, HID_QUIRK_IGNORE },

So I to get evtouch driver working with Fedora Core R1, would require at least:

  • /lib/modules/2.4.<VER>/kernel/drivers/usb/hid.o - KLM to be updated to add quirks to stop passing control to hid and
  • /lib/modules/2.4.<VER>/kernel/drivers/usb/evtouch.o - KLM to be compiled against Fedore Core R1 kernel & XFree86 versions.
  • /usr/X11R6/lib/modules/input/evtouch_drv.o - X11 input driver to be compile against Fedora Core R1 kernal and XFree86 versions.

I did test with hacked hid.o & evtouch.o but could not get any event output on /dev/input/eventX for the driver.

While doing this I noticed that while there is no EvTouch driver with Fedore Core R1, there is a USB Wacom Tablet driver and a review of QEMU documentation indicates that there is an "usb-wacom-tablet" option available, it is just not selectable via Virtual Machine Manager (virt-manager) UI. So I thought I would see if I could get the Wacom driver to work with QEMU / KVM.

QEMU Wacom Tablet alternate to EvTouch

VMM (virt-manager) libvirt UI only provides input options:

  • PS/2 Mouse & Keyboard and
  • USB Mouse, EvTouch Tablet and USB Keyboard.

There is a way to add usb-wacom-tablet into libvirt XML by using the "commandline" option. Here is sample libvirt XML snippet with Wacom USB Tablet configuration added:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>VM-DOMAIN</name>
  <uuid>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://fedoraproject.org/fedora/unknown"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-3.1'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <vmport state='off'/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>coreduo</model>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/USER/yarrow-i386-dvd.iso'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <shareable/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/USER/VM-DSK.qcow2'/>
      <target dev='hdb' bus='ide'/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='72:51:27:be:9c:05'/>
      <source bridge='br01'/>
      <model type='e1000'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich9'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='usb-wacom-tablet'/>
  </qemu:commandline>
</domain>

NOTE: Important items for usb-wacom-tablet are:

  • xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' - schema directive at start of domain XML and
  • <qemu:commandline> ... </qemu:commandline> - at end with the "-device usb-wacom-tablet" directive at the end.

After some considerable tweeking of the QEMU / KVM machine and X11 input configuration this is now working (through mouse tracking is a little erratic). I set up two machines with the same configuration, one tracks the mouse perfectly and one has pointer displaced.

Here is "/etc/X11/XFreeConfig" configuration for Wacom X11 driver.

...
... NOTE: this is only showiing Tablet configuration item
...          rest is unchanaged from what is generated automatically
...

Section "ServerLayout"
	Identifier     "Default Layout"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
	InputDevice    "DevInputMice" "AlwaysCore"
        InputDevice    "Tablet" "SendCoreEvents"
EndSection

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

...
...
...

Clonezilla'ing disk & fixing grub

I first got this going using an old IBM PC and the old Fedora Linux release.  I had attempted without succes to get a virualised environment going with VMWare (as I had never tried QEMU / KVM at that time). As I did the physical setup a few years ago I did not remember the exact steps required to get his working. As I already had working physical configuration, I virtualized this as well creating new VM from scratch to help with testing various QEMU / KVM configuration options.

This involved trying/using the following:

  • Clonezilla - image of physical disk and restore to virtual disk
  • gpartd - resizing and copying of partitions from one disk to another
  • fixing of Master Boot Record (MBR) (dd, sfdisk)
  • reinstalling GRUB via  Yarrow CD-ROM Linux Rescue

Info to follow...

SGI L1 USB Cycling on Host Machine

Final hurdle is that when SGI L1 is connected the host Ubuntu 20.04 USB driver is going through connect / disconnect cycle, which means it is not possible to get stable USB connection that can be re-directed to the VM:

$ dmesg | grep usb
[ 1777.251564] usb 3-3: USB disconnect, device number 95
[ 1779.561037] usb 3-3: new full-speed USB device number 96 using xhci_hcd
[ 1779.712779] usb 3-3: New USB device found, idVendor=065e, idProduct=1234, bcdDevice= 1.00
[ 1779.712783] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1779.712785] usb 3-3: Product: SN1 L1 System Controller
[ 1779.712788] usb 3-3: Manufacturer: Silicon Graphics, Inc.
[ 1779.712789] usb 3-3: SerialNumber: 00000000
[ 1781.291231] usb 3-3: USB disconnect, device number 96
[ 1783.601071] usb 3-3: new full-speed USB device number 97 using xhci_hcd
[ 1783.756886] usb 3-3: New USB device found, idVendor=065e, idProduct=1234, bcdDevice= 1.00
[ 1783.756890] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1783.756892] usb 3-3: Product: SN1 L1 System Controller
[ 1783.756895] usb 3-3: Manufacturer: Silicon Graphics, Inc.
[ 1783.756897] usb 3-3: SerialNumber: 00000000
[ 1785.331243] usb 3-3: USB disconnect, device number 97
[ 1787.645129] usb 3-3: new full-speed USB device number 98 using xhci_hcd
[ 1787.796866] usb 3-3: New USB device found, idVendor=065e, idProduct=1234, bcdDevice= 1.00
...
...
...

Suspect this is due to host not being aware of how to handle the device, so need to look at how can create a USB Quirk definition for the host OS.


The Result

Here is current QEMU / KVM machine details that work with Fedora Core R1 and allow installation of the SGI software:

  • QEMU - i440FX Ver 3.1 with 2 x Cores CPU Model "coreduo"
  • e1000 - Intel NIC
  • USB 2.0 - this is very important if you do not change USB from the default 3.0 to 2.0 the VM will fail on CDROM install, at the "anaconda" HW detection stage, consistently (but sometimes it might boot and install successfully)
  • Generic PS/2 Mouse & Keyboard
  • Wacom USB Tabet (configured as above)
  • IDE CDROM & HD
  • QXL Video Driver
  • USB Redirector - to allow redirection of host connected USB device to the VM

I have now got this to running VM, the final step is to connect this to SGI O350 L1 port and verify that USB interface is working.

Steps for installation:

  1. Create new VM as above and boot into install CD
  2. During install select: Standard 3 Button PS/2 Mouse, default Monitor, Development Software (including Kernel, X11 & Gnome)
  3. Optionally configure static IP address
  4. Reboot
  5. Configure Wacom USB Tablet (as above)
  6. Configure yum repositories
  7. Reboot
  8. Do "yum install pdksh"
  9. [Optionally: for Fedora Core 6 - also install tck/tk - "yum install tk"]
  10. Do "yum update" to update to: 2.4.24-1.2199.nptl (nptl == native posix thread library)
  11. Do rpm kernel & XFree86 source install using rpm from same respository you configured for yum.
  12. Download and install the SGI L3 & L2 emulation software (see below).
  13. Reboot and you should get below.

Here is screen shot with L2 emulator & UI running via QEMU / KVM machine. The SGI software is installed in: /stand/sysco

SGI Linux - L2 GUI & Emulator on QEMU/KVM Virtual Machine

Now just need to turn on o350 and validate that USB can be connected to VM (see note above about cycling USB..)

NOTE 1: I have also been testing with Fedora Core R6 (with 2.6 Kernel), but L2 crashes with segmentation fault, so this will not work.


Links & References:

EvTouch - is required to use KVM machine via VNC, here is historial page on very early EvTouch releases

Fedora Archive - Fedora Core was an offshoot of initial RedHat distirbution and went through 7 release before becoming plain "Fedora"

A YUM accessible Fedora Core Repository - having access to a bunk of RPMs is not as useful as having full set of repositories, I found this mirror which as all Fedora release. Here is yarrow i386 repository.

Linux Input Drivers - Version 1.0 documentation by Vojtech Pavlik (who is/was part of SUSE team) from back in 1999-2001. These provide an intesting case study of use of abstraction to manage a very large and diverse set of underlying input and usb devices. The starting "point" for this was with JoyStick drivers for Linux Games Console support (see Linuxconsole below).

Linux USB Project - as QEMU / KVM EvTouch USB Tablet devices is USB, the support this this requires Linux USB drivers.. here is the historical beginning of the modular USB Driver Project.

Linuxconsole Project - following the detective trial on how to test evdev led to the Linuxconsole project which us where the evtest program was sourced from. I went back to the oldest version I could find 1.24 from 2009 and needing to updated to remove a set of key definitions that are not defined in old 2.4 kernel header file.

Linux Wacom Tablet Drivers - these include early hacks (I used the 0.6 driver which supports kernel 2.4.22) to work with still under development Linux Input Drivers and required replacement: input, mouse and hid drivers to work. The number of site for this is confusing... there is SourceForge, Ubuntu Community Help & github pages/sites. I just wound back based on getting Linux kernel 2.4 going.

SGI - L3 & L2 Emulation software was distributed on IST CDROM, here is version 3.24 .

sgil1 USB Driver - I have uploaded the code to github and hacked this to try to get it working on Ubuntu 20.04

evtest hack - The hacked evtest code to get this working with old Fedora Core R1 (yarrow) is up on githib (see the retro branch)


Working Technical Notes...

What USB devices does kernel see when I have QEMU EvTouch USB Tablet & Mouse attached connected to VM ?

# cat /proc/bus/usb/devices 
T:  Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480 MxCh= 6
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 2.04
S:  Manufacturer=Linux 2.4.22-1.2199.nptl ehci_hcd
S:  Product=PCI device 8086:293a (Intel Corp.)
S:  SerialNumber=00:04.7
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=256ms
T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0627 ProdID=0001 Rev= 0.00 ==VENDOR QEMU 0627==
S:  Manufacturer=QEMU
S:  Product=QEMU USB Tablet  ==QEMU EvTouch USB Tablet==
S:  SerialNumber=42
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=hid ==HID==
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=1ms
T:  Bus=04 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0627 ProdID=0001 Rev= 0.00 ==VENDOR QEMU 0627==
S:  Manufacturer=QEMU
S:  Product=QEMU USB Mouse  ==QEMU Generic USB Mouse==
S:  SerialNumber=42
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=hid ==HID==
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=8ms
T:  Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=c1a0
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=c180
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=c160
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms

What does this mean ...

It has recognised both Tablet and Mouse and allocated inputs to the hid (Human Interface Driver):

  • Vendor == S: QEMU with id=0627
  • Driver == I: hid (Human Interface Device) in both cases
  • Device Class = I: HID - Cls=03 (HID )

Doing lsmod to see if evdev driver is loaded shows that it is not loaded.

---
--- Check that evdev is loaded
---
# lsmod | grep evdev

---
--- Load the evdev KLM (modprobe)
---

# modprobe evdev

---
--- Check that it loaded ok (lsmod)
---

smod | grep evdev      
evdev                   5184   0 
input                   5888   0  [evdev keybdev mousedev hid]

Are we getting any event data, using evtest (from LinuxConsole project):

evtest /dev/input/event0
Input driver version is 1.0.0
Input device ID: bus 0x3 vendor 0x627 product 0x1 version 0x0
Input device name: "QEMU QEMU USB Tablet"
Supported events:
  Event type 1 (Key)
    Event code 272 (LeftBtn)
    Event code 273 (RightBtn)
    Event code 274 (MiddleBtn)
  Event type 2 (Relative)
    Event code 8 (Wheel)
  Event type 3 (Absolute)
    Event code 0 (X)
      Value      0
      Min        0
      Max    32767
    Event code 1 (Y)
      Value      0
      Min        0
      Max    32767
Testing ... (interrupt to exit)

Starts well but pressing mouse buttons and moving mouse does not show any data. So looking at USB devices show that the device is still using "hid" driver not the "evdev" driver, so that is why not events are present.

Need to look at the WACOM code to see how they got around this...

Install SGI IST (L2/L3) software

To install, download and untar the the software, then try "install -verbose".  To uninstall try "install -remove -verbose"

Here is install log from Fedora Core R1 (2.4 Kernel):

# ./install -verbose        
SGI System Controller Software Package Installer

Selecting the appropriate kernel package(s)...

NOTICE: You are currently running the Linux kernel 2.4.22-1.2199.nptl.
This package does not contain an RPM that provides SGI L1 Controller USB
connection support for this kernel.  The driver will be built as part
of this installation.

NOTICE:  No package found for 2.4.22-1.2115.nptl kernel; building and installing the driver now...
ERROR building kernel driver:
Unpacking sgisn1 L1 USB driver source....
Trying kernel 2.4.22-1.2115.nptl:
Cannot find kernel source/build directory (tried /lib/modules/2.4.22-1.2115.nptl/build and /lib/modules/2.4.22-1.2115.nptl/source), skipping.
Cleaning up...


NOTICE:  No package found for 2.4.22-1.2199.nptl kernel; building and installing the driver now...
ERROR building kernel driver:
Unpacking sgisn1 L1 USB driver source....
Trying kernel 2.4.22-1.2199.nptl:
Building and installing driver...
rm -f sgil1.o
cc -c -o sgil1.o -Wall -Wunknown-pragmas -Wno-multichar -O  -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -DUNIX -DLINUX -D_X86_=1 -Di386=1 -D_GNU_SOURCE -D__MODULE_KERNEL_i686=1 -D__BOOT_KERNEL_ENTERPRISE=0 -D__BOOT_KERNEL_SMP=0 -D__BOOT_KERNEL_UP=1   -I. -I/lib/modules/2.4.22-1.2199.nptl/build/include -include /lib/modules/2.4.22-1.2199.nptl/build/include/linux/modversions.h sgil1_24.c
sgil1.o driver installed to /lib/modules/2.4.22-1.2199.nptl/kernel/drivers/usb/sgil1.o
sgil1 initscript installed to /etc/rc.d/init.d/sgil1
Loading SGI L1 USB driver                                  [  OK  ]
Creating SGI L1 USB devices                                [  OK  ]
Cleaning up...



The following packages will be installed:
snxsc_firmware-1.62.1-1
snxsc_l3-1.62.0-1
sgidiag-1.7.3-1
snxscan-1.62.0-1
sysco_tools-1.0.2-1
sscope-1.62.0-1

****** Installing snxsc_firmware-1.62.1-1:
Installed snxsc_firmware-1.62.1-1.i386.rpm...
****** Installing snxsc_l3-1.62.0-1:
Installed snxsc_l3-1.62.0-1.i386.rpm...
****** Installing sgidiag-1.7.3-1:
Installed sgidiag-1.7.3-1.i386.rpm...
****** Installing snxscan-1.62.0-1:
Installed snxscan-1.62.0-1.i386.rpm...
****** Installing sysco_tools-1.0.2-1:
Installed sysco_tools-1.0.2-1.i386.rpm...
****** Installing sscope-1.62.0-1:
Installed sscope-1.62.0-1.i386.rpm...

To install L2/L3 on Fedora Core 6, requires ksh & tk (tcl/tk) to also be installed. Here is install log from Fedora Core R6 (2.6 Kernel), but while this installs the L2 crashes with segmentation fault:

# ./install -verbose
SGI System Controller Software Package Installer

Selecting the appropriate kernel package(s)...

NOTICE: You are currently running the Linux kernel 2.6.22.14-72.fc6.
This package does not contain an RPM that provides SGI L1 Controller USB
connection support for this kernel.  The driver will be built as part
of this installation.

NOTICE:  No package found for 2.6.18-1.2798.fc6 kernel; building and installing the driver now...
ERROR building kernel driver:
Unpacking sgisn1 L1 USB driver source....
Trying kernel 2.6.18-1.2798.fc6:
Building and installing driver...
make -C /lib/modules/2.6.18-1.2798.fc6/build V=1 SUBDIRS=/root/documents/dev/CD/sgil1 modules
make[1]: Entering directory `/usr/src/kernels/2.6.18-1.2798.fc6-i686'
test -e include/linux/autoconf.h -a -e include/config/auto.conf || (		\
	echo;								\
	echo "  ERROR: Kernel configuration is invalid.";		\
	echo "         include/linux/autoconf.h or include/config/auto.conf are missing.";	\
	echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
	echo;								\
	/bin/false)
mkdir -p /root/documents/dev/CD/sgil1/.tmp_versions
rm -f /root/documents/dev/CD/sgil1/.tmp_versions/*
make -f scripts/Makefile.build obj=/root/documents/dev/CD/sgil1
  gcc -m32 -Wp,-MD,/root/documents/dev/CD/sgil1/.sgil1.o.d  -nostdinc -isystem /usr/lib/gcc/i386-redhat-linux/4.1.2/include -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h  -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Wstrict-prototypes -Wundef -Werror-implicit-function-declaration -Os -pipe -msoft-float -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts  -mpreferred-stack-boundary=2  -march=i686 -mtune=generic -mtune=generic -mregparm=3 -ffreestanding -Iinclude/asm-i386/mach-generic -Iinclude/asm-i386/mach-default -fomit-frame-pointer -fasynchronous-unwind-tables -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign   -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(sgil1)"  -D"KBUILD_MODNAME=KBUILD_STR(sgil1)" -c -o /root/documents/dev/CD/sgil1/.tmp_sgil1.o /root/documents/dev/CD/sgil1/sgil1.c
  Building modules, stage 2.
make -rR -f /usr/src/kernels/2.6.18-1.2798.fc6-i686/scripts/Makefile.modpost
  scripts/mod/modpost -m -a -i /usr/src/kernels/2.6.18-1.2798.fc6-i686/Module.symvers -I /root/documents/dev/CD/sgil1/Module.symvers -o /root/documents/dev/CD/sgil1/Module.symvers /root/documents/dev/CD/sgil1/sgil1.o
  gcc -m32 -Wp,-MD,/root/documents/dev/CD/sgil1/.sgil1.mod.o.d  -nostdinc -isystem /usr/lib/gcc/i386-redhat-linux/4.1.2/include -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h  -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Wstrict-prototypes -Wundef -Werror-implicit-function-declaration -Os -pipe -msoft-float -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts  -mpreferred-stack-boundary=2  -march=i686 -mtune=generic -mtune=generic -mregparm=3 -ffreestanding -Iinclude/asm-i386/mach-generic -Iinclude/asm-i386/mach-default -fomit-frame-pointer -fasynchronous-unwind-tables -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign    -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(sgil1.mod)"  -D"KBUILD_MODNAME=KBUILD_STR(sgil1)" -DMODULE -c -o /root/documents/dev/CD/sgil1/sgil1.mod.o /root/documents/dev/CD/sgil1/sgil1.mod.c
  ld -m elf_i386 -m elf_i386 -r -o /root/documents/dev/CD/sgil1/sgil1.ko /root/documents/dev/CD/sgil1/sgil1.o /root/documents/dev/CD/sgil1/sgil1.mod.o
make[1]: Leaving directory `/usr/src/kernels/2.6.18-1.2798.fc6-i686'
sgil1.o driver installed to /lib/modules/2.6.18-1.2798.fc6/kernel/drivers/usb/misc/sgil1.o
sgil1 initscript installed to /etc/init.d/sgil1
Cleaning up...


NOTICE:  No package found for 2.6.22.14-72.fc6 kernel; building and installing the driver now...
ERROR building kernel driver:
Unpacking sgisn1 L1 USB driver source....
Trying kernel 2.6.22.14-72.fc6:
Building and installing driver...
make -C /lib/modules/2.6.22.14-72.fc6/build V=1 SUBDIRS=/root/documents/dev/CD/sgil1 modules
make[1]: Entering directory `/usr/src/kernels/2.6.22.14-72.fc6-i686'
test -e include/linux/autoconf.h -a -e include/config/auto.conf || (		\
	echo;								\
	echo "  ERROR: Kernel configuration is invalid.";		\
	echo "         include/linux/autoconf.h or include/config/auto.conf are missing.";	\
	echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";	\
	echo;								\
	/bin/false)
mkdir -p /root/documents/dev/CD/sgil1/.tmp_versions
rm -f /root/documents/dev/CD/sgil1/.tmp_versions/*
make -f scripts/Makefile.build obj=/root/documents/dev/CD/sgil1
  gcc -m32 -Wp,-MD,/root/documents/dev/CD/sgil1/.sgil1.o.d  -nostdinc -isystem /usr/lib/gcc/i386-redhat-linux/4.1.2/include -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Os -pipe -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2  -march=i586 -mtune=generic -mtune=generic -ffreestanding -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -Iinclude/asm-i386/mach-generic -Iinclude/asm-i386/mach-default -fomit-frame-pointer -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign   -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(sgil1)"  -D"KBUILD_MODNAME=KBUILD_STR(sgil1)" -c -o /root/documents/dev/CD/sgil1/.tmp_sgil1.o /root/documents/dev/CD/sgil1/sgil1.c
  Building modules, stage 2.
make -f /usr/src/kernels/2.6.22.14-72.fc6-i686/scripts/Makefile.modpost
  scripts/mod/modpost -m -a -i /usr/src/kernels/2.6.22.14-72.fc6-i686/Module.symvers -I /root/documents/dev/CD/sgil1/Module.symvers -o /root/documents/dev/CD/sgil1/Module.symvers -w
  gcc -m32 -Wp,-MD,/root/documents/dev/CD/sgil1/.sgil1.mod.o.d  -nostdinc -isystem /usr/lib/gcc/i386-redhat-linux/4.1.2/include -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Os -pipe -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2  -march=i586 -mtune=generic -mtune=generic -ffreestanding -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -Iinclude/asm-i386/mach-generic -Iinclude/asm-i386/mach-default -fomit-frame-pointer -g  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign    -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(sgil1.mod)"  -D"KBUILD_MODNAME=KBUILD_STR(sgil1)" -DMODULE -c -o /root/documents/dev/CD/sgil1/sgil1.mod.o /root/documents/dev/CD/sgil1/sgil1.mod.c
  ld -m elf_i386 -m elf_i386 -r -o /root/documents/dev/CD/sgil1/sgil1.ko /root/documents/dev/CD/sgil1/sgil1.o /root/documents/dev/CD/sgil1/sgil1.mod.o
make[1]: Leaving directory `/usr/src/kernels/2.6.22.14-72.fc6-i686'
sgil1.o driver installed to /lib/modules/2.6.22.14-72.fc6/kernel/drivers/usb/misc/sgil1.o
sgil1 initscript installed to /etc/init.d/sgil1
Loading SGI L1 USB driver                                  [  OK  ]
Creating SGI L1 USB devices                                [  OK  ]
Cleaning up...



The following packages will be installed:
snxsc_firmware-1.62.1-1
snxsc_l3-1.62.0-1
sgidiag-1.7.3-1
snxscan-1.62.0-1
sysco_tools-1.0.2-1
sscope-1.62.0-1

****** Installing snxsc_firmware-1.62.1-1:
Installed snxsc_firmware-1.62.1-1.i386.rpm...
****** Installing snxsc_l3-1.62.0-1:
Installed snxsc_l3-1.62.0-1.i386.rpm...
****** Installing sgidiag-1.7.3-1:
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Installed sgidiag-1.7.3-1.i386.rpm...
****** Installing snxscan-1.62.0-1:
Installed snxscan-1.62.0-1.i386.rpm...
****** Installing sysco_tools-1.0.2-1:
Installed sysco_tools-1.0.2-1.i386.rpm...
****** Installing sscope-1.62.0-1:
Installed sscope-1.62.0-1.i386.rpm...

Build and Load sgil1 USB Driver on Ubuntu 20.04 machine

To stop the cycling of L1 when connected to VM host, I thought maybe if a built the sgil1 USB driver for Ubuntu host then that would capture the L1 and stop the cycling.

Here is sgil1 USB loaded on Ubuntu 20.04 machine:

$ sudo modprobe sgil1
$ dmesg | grep sgi
[36640.615843] sgil1: loading out-of-tree module taints kernel.
[36640.615932] sgil1: module verification failed: signature and/or required key missing - tainting kernel
[36640.618052] usbcore: registered new interface driver sgil1
[36640.618054] /home/USER/sgil1-dev/sgil1/sgil1_54.c: v4.0 (09/30/2004):USB L3 driver for SGI L1 system controller
$ lsmod
Module                  Size  Used by
sgil1                  28672  0
nls_utf8               16384  1
isofs                  49152  1
nls_iso8859_1          16384  1
intel_rapl_msr         20480  0
intel_rapl_common      24576  1 intel_rapl_msr
kvm_intel             282624  0
kvm                   663552  1 kvm_intel
crct10dif_pclmul       16384  1
ghash_clmulni_intel    16384  0
aesni_intel           372736  0
crypto_simd            16384  1 aesni_intel
cryptd                 24576  2 crypto_simd,ghash_clmulni_intel
glue_helper            16384  1 aesni_intel
joydev                 24576  0
input_leds             16384  0
mac_hid                16384  0
serio_raw              20480  0
qxl                    61440  1
ttm                   106496  1 qxl
qemu_fw_cfg            20480  0
drm_kms_helper        184320  3 qxl
fb_sys_fops            16384  1 drm_kms_helper
syscopyarea            16384  1 drm_kms_helper
sysfillrect            16384  1 drm_kms_helper
sysimgblt              16384  1 drm_kms_helper
sch_fq_codel           20480  2
parport_pc             40960  0
ppdev                  24576  0
lp                     20480  0
parport                53248  3 parport_pc,lp,ppdev
drm                   491520  5 drm_kms_helper,qxl,ttm
virtio_rng             16384  0
ip_tables              32768  0
x_tables               40960  1 ip_tables
autofs4                45056  2
hid_generic            16384  0
usbhid                 57344  0
hid                   131072  2 usbhid,hid_generic
crc32_pclmul           16384  0
psmouse               155648  0
lpc_ich                24576  0
ahci                   40960  1
i2c_i801               32768  0
libahci                32768  1 ahci
virtio_blk             20480  3
virtio_net             53248  0
net_failover           20480  1 virtio_net
failover               16384  1 net_failover

So sgil1 USB Driver has loaded and reporting (see bottom of log):

$ dmesg | grep usb
[    0.440280] usbcore: registered new interface driver usbfs
[    0.440280] usbcore: registered new interface driver hub
[    0.440280] usbcore: registered new device driver usb
[    1.016080] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.04
[    1.016082] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.016084] usb usb1: Product: EHCI Host Controller
[    1.016085] usb usb1: Manufacturer: Linux 5.4.0-45-generic ehci_hcd
[    1.016087] usb usb1: SerialNumber: 0000:00:1d.7
[    1.018271] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 5.04
[    1.018273] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.018275] usb usb2: Product: UHCI Host Controller
[    1.018276] usb usb2: Manufacturer: Linux 5.4.0-45-generic uhci_hcd
[    1.018277] usb usb2: SerialNumber: 0000:00:1d.0
[    1.020206] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 5.04
[    1.020208] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.020209] usb usb3: Product: UHCI Host Controller
[    1.020210] usb usb3: Manufacturer: Linux 5.4.0-45-generic uhci_hcd
[    1.020211] usb usb3: SerialNumber: 0000:00:1d.1
[    1.022232] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 5.04
[    1.022234] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.022235] usb usb4: Product: UHCI Host Controller
[    1.022236] usb usb4: Manufacturer: Linux 5.4.0-45-generic uhci_hcd
[    1.022237] usb usb4: SerialNumber: 0000:00:1d.2
[    1.352004] usb 1-1: new high-speed USB device number 2 using ehci-pci
[    1.516600] usb 1-1: New USB device found, idVendor=0627, idProduct=0001, bcdDevice= 0.00
[    1.516604] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=10
[    1.516606] usb 1-1: Product: QEMU USB Tablet
[    1.516609] usb 1-1: Manufacturer: QEMU
[    1.516610] usb 1-1: SerialNumber: 42
[    1.540280] usbcore: registered new interface driver usbhid
[    1.540281] usbhid: USB HID core driver
[    1.543716] input: QEMU QEMU USB Tablet as /devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0/0003:0627:0001.0001/input/input4
[    1.543817] hid-generic 0003:0627:0001.0001: input,hidraw0: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb-0000:00:1d.7-1/input0
[    3.573534] audit: type=1400 audit(1599174412.008:9): apparmor="STATUS" operation="profile_load" profile="unconfined" name="ippusbxd" pid=555 comm="apparmor_parser"
[47347.049644] usbcore: registered new interface driver sgil1
[48846.445478] usbcore: deregistering interface driver sgil1
[53621.919319] usbcore: registered new interface driver sgil1