0

While my framebuffer device, connected via USB, seems to work just fine, I cannot start an XServer using the fbdev driver.

I debugged the piece of xorg that opens the framebuffer device (hw/xfree86/fbdevhw/fbdevhw.c) and found that I am tripping over what seems to be a sanity check.

It says

/* only touch non-PCI devices on this path */

and ultimately things go south with this check

    if (asprintf(&sysfs_path, "/sys/class/graphics/%s", node) < 0 ||
        readlink(sysfs_path, buf, sizeof(buf)) < 0 ||
        strstr(buf, "devices/pci")) {

This looks for the framebuffer device in /sys, resolves the symlink and checks if the resolved path contains the string devices/pci.

This fails for me, because my

/sys/class/graphics/fb1

points to

../../devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10.7/1-10.7.2/1-10.7.2:1.1/0003:046D:C229.000C/graphics/fb1`

So, what is actually broken here? I can imagine the following:

  • My system is broken, because my USB device shows up in /sys/class/devices/pci0000:00/
  • A kernel driver is broken because it registers the device under /sys/class/devices/pci0000:00/
  • The sanity check the fbdevhw.c performs is not sane after all

Edit

I replaced

strstr(buf, "devices/pci")

with

(strstr(buf, "devices/pci") && strstr(buf, "/usb") == NULL )

and now I have a working XServer using my framebuffer. I don't know how well it works, but I can confirm xclock is working.

So maybe, if somebody stumbles upon this question while trying to find out why the xorg fbdev will not work and doesn't give any feedback besides

(EE) No devices detected.

then check your device in /sys/class/graphics/fb? if the symlink points to something that contains the string devices/pci you may have found your problem right there.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.