Binary graphics drivers for Gentoo

In case anyone else is running 64-bit Gentoo on their TX1, I’d like to announce that I have created ebuilds for installing the binary graphics drivers with 2D and 3D acceleration from L4T.

Prerequisites:

  • Gentoo/arm64
  • R24.1 Kernel
  • Xorg server 1.17 (the drivers do not support 1.18)
  • How to use:

  • Install my overlay from https://github.com/zeldin/gentoo.overlay and then emerge "x11-drivers/jetson-tx1-drivers".
  • Use "eselect opengl" to pick the "tegra" implementation
  • Make sure that the xorg.conf is using the "nvidia" driver
  • Restart the Xorg server
  • In order to be able to GL as non-root, the permissions of /dev/nvmap and /dev/nvhost-* need to be changed. This can be made automatically by adding the following lines to your udev configuration:

    KERNEL=="nvhost-*", GROUP="video", MODE="0660"
    KERNEL=="nvmap", GROUP="video", MODE="0660"
    

    Then any member of the “video” group will be able to use GL. Note however that udev will only update the permissions on reboot.

    I am trying to use your overlay. I have successfully emerged from your zeldin repository and set up permissions (via udev) as you suggest. However, I was unable to get xorg-server-1.17 to compile bus was able to emerge xorg-server-1.19 with any problem. Is there any chance these drivers work with 1.19?

    When I run startx, the Xorg.0.log file says:

    X.Org X Server 1.19.5
    Release Date: 2017-10-12
    [ 25092.831] X Protocol Version 11, Revision 0
    [ 25092.831] Build Operating System: Linux 3.10.96 aarch64 Gentoo
    [ 25092.831] Current Operating System: Linux shieldtv 3.10.96 #1 SMP PREEMPT Thu Oct 13 05:30:55 EDT 2016 aarch64
    [ 25092.831] Kernel command line: fbcon=map:0 console=tty0 console=ttyS0,115200n8 console=ttyUSB0,115200n8 tegraid=21.1.1.0.0 memtype=0 vpr_resize ddr_die=1536M@2048M ddr_die=1536M@3584M section=256M usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=1 touch_id=0@63 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=4096@0xfdfff000 nvdumper_reserved=0xfcf00000 core_edp_mv=1125 core_edp_ma=4000 power_supply=Adapter androidboot.modem=none androidboot.serialno=0423915019000000000e androidboot.security=enabled gpt android.kerneltype=normal androidboot.touch_vendor_id=0 androidboot.touch_panel_id=63 androidboot.touch_feature=0
    [ 25092.833] Build Date: 22 November 2017 05:34:32AM
    [ 25092.833]
    [ 25092.833] Current version of pixman: 0.34.0
    [ 25092.834] Before reporting problems, check http://wiki.x.org
    to make sure that you have the latest version.
    [ 25092.834] Markers: (–) probed, () from config file, (==) default setting,
    (++) from command line, (!!) notice, (II) informational,
    (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
    [ 25092.836] (==) Log file: “/var/log/Xorg.0.log”, Time: Wed Nov 22 06:35:30 2017
    [ 25092.837] (==) Using config directory: “/etc/X11/xorg.conf.d”
    [ 25092.837] (==) Using system config directory “/usr/share/X11/xorg.conf.d”
    [ 25092.837] (==) No Layout section. Using the first Screen section.
    [ 25092.837] (==) No screen section available. Using defaults.
    [ 25092.837] (
    ) |–>Screen “Default Screen Section” (0)
    [ 25092.837] () | |–>Monitor “”
    [ 25092.838] (==) No device specified for screen “Default Screen Section”.
    Using the first device section listed.
    [ 25092.838] (
    ) | |–>Device “needed for nvidia tegra x1”
    [ 25092.838] (==) No monitor specified for screen “Default Screen Section”.
    Using a default monitor configuration.
    [ 25092.838] (==) Automatically adding devices
    [ 25092.838] (==) Automatically enabling devices
    [ 25092.838] (==) Automatically adding GPU devices
    [ 25092.838] (==) Max clients allowed: 256, resource mask: 0x1fffff
    [ 25092.838] (WW) The directory “/usr/share/fonts/misc/” does not exist.
    [ 25092.838] Entry deleted from font path.
    [ 25092.838] (WW) The directory “/usr/share/fonts/TTF/” does not exist.
    [ 25092.838] Entry deleted from font path.
    [ 25092.838] (WW) The directory “/usr/share/fonts/OTF/” does not exist.
    [ 25092.838] Entry deleted from font path.
    [ 25092.838] (WW) The directory “/usr/share/fonts/Type1/” does not exist.
    [ 25092.838] Entry deleted from font path.
    [ 25092.838] (WW) The directory “/usr/share/fonts/100dpi/” does not exist.
    [ 25092.838] Entry deleted from font path.
    [ 25092.838] (WW) The directory “/usr/share/fonts/75dpi/” does not exist.
    [ 25092.838] Entry deleted from font path.
    [ 25092.838] (==) FontPath set to:

    [ 25092.838] (**) ModulePath set to “/usr/lib64/opengl/tegra,/usr/lib64/xorg/modules”
    [ 25092.838] (II) The server relies on udev to provide the list of input devices.
    If no devices become available, reconfigure udev or disable AutoAddDevices.
    [ 25092.838] (II) Loader magic: 0x5d1b20
    [ 25092.838] (II) Module ABI versions:
    [ 25092.838] X.Org ANSI C Emulation: 0.4
    [ 25092.838] X.Org Video Driver: 23.0
    [ 25092.838] X.Org XInput driver : 24.1
    [ 25092.838] X.Org Server Extension : 10.0
    [ 25092.838] (II) no primary bus or device found
    [ 25092.838] (II) LoadModule: “nvidia”
    [ 25092.839] (WW) Warning, couldn’t open module nvidia
    [ 25092.839] (II) UnloadModule: “nvidia”
    [ 25092.839] (II) Unloading nvidia
    [ 25092.839] (EE) Failed to load module “nvidia” (module does not exist, 0)
    [ 25092.839] (EE) No drivers available.
    [ 25092.839] (EE)
    Fatal server error:
    [ 25092.840] (EE) no screens found(EE)
    [ 25092.841] (EE)
    Please consult the The X.Org Foundation support
    at http://wiki.x.org
    for help.
    [ 25092.842] (EE) Please also check the log file at “/var/log/Xorg.0.log” for additional information.
    [ 25092.842] (EE)
    [ 25092.843] (EE) Server terminated with error (1). Closing log file.

    Can anyone suggest what I am missing?

    P.S. I am running on an nvidia shield tv (gen 1)
    uname -a
    Linux shieldtv 3.10.96 #1 SMP PREEMPT Thu Oct 13 05:30:55 EDT 2016 aarch64 GNU/Linux

    Thanks for any help!

    On L4T R28.1 of a TX1 I see this version for the relevant X ABI:

    [     9.498]    X.Org Video Driver: 20.0
    

    On your version I see this for the ABI:

    [ 25092.838] X.Org Video Driver: 23.0
    

    It won’t work unless the ABI of the video driver matches the ABI of the X server. You’ll need a version of Xorg with the 20.0 ABI.

    Thank you for your reply and please excuse my ignorance here…

    Does this translate into needing a prior version of the xorg package? I am on gentoo and the package manager (portage) failed to compile xorg-server 1.17 (which was mentioned by marcus_c as the version used/provided in his overlay (zeldin). He said it was not compatible with 1.18 but I hoped that it may be compatible with 1.19. I expect I was wrong.

    Does the X.Org Video Driver: 20.0 requirement mean I need to find a way to successfully downgrade to the 1.17 xorg-server package? That is, is the xorg-server package what provides the x.org video driver? Is there a url I can look at to further explain? Again, please excuse my novice questions.

    Thanks very much for your help!

    Yes. The ABI is basically a fingerprint for how drivers will fit in to the Xorg server (different ABIs for input devices, video, so on). If the two don’t use the same ABI they cannot work together. The fingerprint/signature of the driver binary interface has to be an exact match to the fingerprint/signature of the Xorg interface.

    I do not know what your options are in this case. The ABI seems to be fairly embedded into the Xorg server, and I suspect putting an older ABI in a newer server is pointless (or nearly impossible). You will most likely have to port an older server. I do not know which server version supports the graphics driver ABI 20…whichever version fills this requirement is probably the one to use.

    marcus_c,

    I have run into roadblocks trying to find versions of xorg-server 1.17 and xorg-drivers-1.17 for gentoo.

    How hard is it to update your ebuild for xorg-server-1.19 (and the associated 23.0 ABI)?

    I looked at the T4L site and was pretty confused… It looked like it was requiring a tegra x1 development board to do anything.

    I am kind of stuck here. Any help would be greatly appreciated!

    Thanks

    linuxdev,

    How did you determine that the zeldin tegra x1 driver is using ABI 20.0?

    I want to confirm it on my system.

    Thanks!

    marcus_c,

    I have finally built (on gentoo) xorg-server-1.17 with xorg-drivers-1.17. From Xorg.0.log I now see:

    [ 8018.634] (II) Module ABI versions:
    [ 8018.634] X.Org ANSI C Emulation: 0.4
    [ 8018.634] X.Org Video Driver: 19.0
    [ 8018.634] X.Org XInput driver : 21.0
    [ 8018.634] X.Org Server Extension : 9.0

    I.e., the video driver is ABI version 19.0

    Is ABI 19.0 compatible with the L4T R28.1 version in your repository
    (specifically jetson-tx1-drivers-28.1.0.ebuild)?

    Also, could you please indicate what version of the nvidia-drivers are required (or which you are using)?

    Many thanks…

    ABI version is listed in “/var/log/Xorg.0.log” on a running Jetson (I am not familiar with zeldin). The excerpt on a TX1 under R28.1:

    [     9.498] (II) Module ABI versions:
    [     9.498]    X.Org ANSI C Emulation: 0.4
    [     9.498]    <b>X.Org Video Driver: 20.0</b>
    [     9.498]    X.Org XInput driver : 22.1
    [     9.498]    X.Org Server Extension : 9.0
    

    Each of those ABIs use their own “plugin” system. In the case of “Video Driver” this is the ABI in question.

    There may be other versions of ABI supported in earlier releases, but in R24.2.1 it is also ABI verison 20.0 for the video driver. It is possible the driver supports other ABI versions, but it can only be guaranteed that version 20.0 works with the driver supplied for R24.2.1 or R28.1 of a TX1.

    zeldin is the name of the repository which marcus_c uses to host his ebuild files (part of the gentoo linux package management system) for the tegra-x1 and tegra-x2 drivers from the l4t project.

    He is the poster responsible for the original post initiating this thread.

    I wish he would chime in here because there seems to be a contradiction between what you are saying and the information in his post in which he states (I quote from his post):

    Prerequisites:

    Gentoo/arm64
    R24.1 Kernel
    Xorg server 1.17 (the drivers do not support 1.18)

    xorg-server-1.17 provides ABI version 19.0 as indicated by my Xorg.0.log. Yet you are saying 20.0 is required for R28.1 (which is the version I installed from his repository), specifically jetson-tx1-drivers-28.1.0.ebuild.

    There is also a gentoo package called nvidia-drivers which is also necessary but for which I cannot determine the version needed.

    Thanks again for your help!

    He is also showing R24.1…my information was for R24.2.1 through R28.1. There may have been 32-bit user space applications in that release (I think R24.1 was released initially with a 32-bit sample rootfs, and then after only a short time the sample rootfs went to 64-bit).