Dual GPU configuration on Ubuntu 16.04 [closed] - ubuntu-16.04

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 4 years ago.
Improve this question
Objective:
Have a multi-monitor extended display with monitors on two identical GPUs.
Hardware:
Geforce GTX 970 (x2)
DELL E207WFP Monitor (x6)
Z97-PRO motherboard
i5-4690K CPU #3.50GHz
24GB of RAM
Software:
Ubuntu 16.04.04 LTS
4.4.0-116-generic kernel
NVIDIA driver version 384.111
Test procedure
1) Hardware Tests
Tested each monitor and their ports. (success)
Tested each Mobo PCI port one at a time with GPU & monitor. (success)
Tested each GPU and all of its display ports. (success)
NOTE: each GPU has 1 display, 1 HDMI, and 2 DVI ports.
Tested each port by itself. (success)
Tested all ports displaying at the same time. (success)
Tested all cabling involved individually. (success)
2) Software Tests
Tested if Ubuntu could handle 4 monitors on 1 GPU in extended mode. (success)
Monitor 1: Playing HD Movie in full-screen.
Monitor 2: Playing Ark survival evolved on highest quality settings.
Monitor 3: Active Discord video call.
Monitor 4: OBS software rendering game & Discord for active stream.
Tested if Nvidia X Server can see both GPU when plugged in at same time. (success)
NOTE: One GPU is disabled by default.
Attempting my objective
I have attempted a number of configurations with the xorg.conf file.
The closest to success I get most trials is:
All screens working, shows an extended screen saver image stretched
across the monitors.
The mouse is able to travel across all screens happily on the
screen saver.
Unfortunately when attempting to login in, I get an
infinite login loop that reloads the login screen and re-prompts to
login again.
xorg.conf file:
#xorg.file for 6-screen, 2-GPU setup
###############################################################
# Mouse Configuration options
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
# Keyboard Configuration options
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
###############################################################
# Monitor Configuration options
Section "Monitor"
Identifier "Monitor0"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor2"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor3"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor4"
VendorName "Dell, Inc."
ModelName "DELL E2009W"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor5"
VendorName "Dell, Inc."
ModelName "DELL E2009W"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
################################################################
# GPU Configuration options
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:2:0:0"
EndSection
################################################################
# device & monitor bindings configuration options
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
Monitor "Monitor1"
Monitor "Monitor2"
Monitor "Monitor3"
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "DFP-0"
Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor4"
Monitor "Monitor5"
Option "Stereo" "0"
Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+1050, DVI-D-0: nvidia-auto-select +3360+1050"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
#############################################################
# Xinerma & Compsite extensions
Section "Extensions"
Option "Composite" "Disable"
EndSection
##############################################################
# Screen bindings configuration options
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 1050
Screen 1 "Screen1" Above "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "1"
EndSection
###########################################################
# Unused section
Section "Files"
EndSection
Clarifications
This is not an infinite login loop question.
The infinite login loop is a symptom of my problem.
There are several infinite loop question/answers, those assume you've made a mistake and want to "fix" the problem by resetting to default. Here are several of those reset to default "fixes' that are not my problem.
login loop from ubuntu fresh install
sudo startx mistake
nvidia driver login loop
3 common login loop fixes tutorial
Ubuntu upgrade login loop
updates cause login loop
I do not want to reset to default, and can return my system to working conditions on one graphics cards after each attempt. I am asking how to further change settings/configurations so as to get my goal (without the login loop)?

Alright, I answered my question through some extensive research and testing. If you have a multi-gpu, multi-monitor system that you wanted a unified desktop across (this means windows snap to monitors, and can drag program windows across monitors regardless of which monitor is on which gpu). Then the short answer is SLI/base Mosaic for Nvidia graphics cards.
However, There are multiple points of information that are lost unless you spend 60+ hours reading documentation and talking with others (which is what I did).
I am going to give multiple links and clarification points that should help with other peoples frustration and endeavors. Understand all of the commands and advice is from a Ubuntu 16.04, Unity DE, Nvidia Geforce driver v380+ standpoint, and may not work for other systems and hardware.
Nvidia --> X server & RandR
There are several points of [mis]communication between:
RandR (native installed display manager, also in CLI referred to as xrandr)
X server (The main management/connection system between inputs and outputs, this encompasses the Xorg, xorg.conf aspects)
Nvidia-settings (Nvidia's display manager that sends information to X server and RandR)
When using nvidia-settings, Nvidia will configure and send misinformation to both x server and RandR and then internally handle the logic itself.
Nvidia has its own xinerama separate from the X server xinerama. If you enable xinerama in the xorg.conf file, that is the X server's own Xinerma not Nvidia's (So don't do that if you are trying to do things through nvidia-settings.
Nvidia will place all monitors under 1 screen and present this screen as a unified desktop to X server, while using its own internal xinerama logic to allow RandR to see the separate monitors properly.
This means making separate screens, monitors, device sections in the xorg.conf is breaking nvidia-settings natural way of of managing the desktop (I.E. disabling Nvidia's internal xinerama). This will then require X server's xinerama to be enabled in the xorg.conf file as a result (however this tends to break one of the unified desktop expectations that I mentioned at the beginning).
Even when handling multiple gpus to render a desktop, it still presents as 1 screen to X server while using its internal logic to report to RandR all of the monitors available. This will require an option called base/SLI Mosaic, but I need to clarify that below as well.
End of Nvidia --> RandR & X server explanations
Nvidia --> xorg.conf
How Nvidia uses the xorg.conf file is not reflective of what you read about in X server, X org, and xorg.conf documentation. Instead you need to focus on reading Nvidia documentation. However pay attention to the URL when you go to the docs.
The number before '/README/' needs to be your Nvidia driver version number, which is the '390.42' in this example URL below. A lot of google hits to nvidia-settings documentation are really old docs to old drivers. This will throw you through a loop if you get old documentation.
Example:
http://us.download.nvidia.com/XFree86/Linux-x86_64/390.42/README/index.html
As said before, Nvidia reports only a single screen to X server. Here I will show you examples of the Section "Screen" of a xorg.conf file to clarify.
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "DFP-0"
Option "metamodes" "GPU-0.DFP-0: nvidia-auto-select +0+0,
GPU-0.DFP-4: nvidia-auto-select +1680+0,
GPU-1.DFP-0: nvidia-auto-select +3360+0,
GPU-1.DFP-4: nvidia-auto-select +5040+0,
Option "MultiGPU" "Off"
Option "SLI" "on"
Option "BaseMosaic" "on"
SubSection "Display"
Depth 24
EndSubSection
EndSection
As you can see its still one screen but the metamode can be specific
to which gpu and port to use.
Another point is that MultiGPU is not referring to the number of graphics cards on your motherboard.
The nvidia-auto-select takes care of your Horizon sync, vertical Refresh range, monitor resolutions for you, but as you can see from the trailing numbers that are for monitor placement, I am expecting it will set my system resolutions to 1680x1050.
A less ambiguous Section Screen is:
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "DFP-0"
Option "metamodes" "GPU-a0bd4a65-1c2b-f765-eeb2-db96b3f4b25a.GPU-0.DVI-I-1: nvidia-auto-select +0+0,
GPU-a0bd4a65-1c2b-f765-eeb2-db96b3f4b25a.GPU-0.DVI-D-0: nvidia-auto-select +1680+0,
GPU-a85ce4bc-1e9b-6275-2aee-0d1ed8bd7ce2.GPU-1.DVI-I-1: nvidia-auto-select +3360+0,
GPU-a85ce4bc-1e9b-6275-2aee-0d1ed8bd7ce2.GPU-1.DVI-D-0: nvidia-auto-select +5040+0"
Option "MultiGPU" "Off"
Option "SLI" "on"
Option "BaseMosaic" "on"
SubSection "Display"
Depth 24
EndSubSection
EndSection
By adding the GPU hash you are directly saying which graphics cards to use and not leaving it to the system to interpret.
The DVI-D-0 is == to DFP-4 on my system and so there isn't any interpretation left up to the system, however I think using the port type instead of the DFP placement removes ambiguity for the user.
End of Nvidia --> xorg.conf
SLI/Base Mosiac catch 22
So The eventual answer is SLI Mosiac is needed when using nvidia-settings for the unified desktop I want. However, It will only allow three screens to be enabled across 2 or more GPUs if they are not Quadro or NVS selected GPU families. This is not because the technology of my precious Geforce GTX 970's cant handle it, it's because Nvidia artificially limited this in the nvidia-settings code to promote their newer GPU. I can note this from both this Nvidia forum, and from looking at the source code in testing repository.
In fact, originally you could have more than 3 screens across 2 non-selected GPU up until 296 driver where they forced the change.
If you do attempt anyways without the proper GPU it will result in all screens being shown in both RandR GUI as well as Nvidia-settings GUI. However, you will notice all but three monitors will be disabled, and they can only be enabled if you disable 1 of the 3 already enabled.
Useful commands
xrandr --version
xrandr --listproviders
sudo Xorg -version
sudo lspci -vvv |grep -i -A 20 nvidia
nvidia-smi
nvidia-xconfig --query-gpu-info
nvidia-settings
cat /var/log/Xorg.0.log
nvidia-xconfig -t
Fully functional xorg.conf
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "Geforce GTX 970"
BusID "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "DFP-0"
Option "metamodes" "GPU-a0bd4a65-1c2b-f765-eeb2-db96b3f4b25a.GPU-0.DVI-I-1: nvidia-auto-select +0+0,
GPU-a0bd4a65-1c2b-f765-eeb2-db96b3f4b25a.GPU-0.DVI-D-0: nvidia-auto-select +1680+0,
GPU-a85ce4bc-1e9b-6275-2aee-0d1ed8bd7ce2.GPU-1.DVI-I-1: nvidia-auto-select +3360+0,
GPU-a85ce4bc-1e9b-6275-2aee-0d1ed8bd7ce2.GPU-1.DVI-D-0: nvidia-auto-select +5040+0"
#GPU-a0bd4a65-1c2b-f765-eeb2-db96b3f4b25a.GPU-0.DP-1: nvidia-auto-select +1680+1050,
#GPU-a0bd4a65-1c2b-f765-eeb2-db96b3f4b25a.GPU-0.HDMI-0: nvidia-auto-select +0+1050,
#GPU-a85ce4bc-1e9b-6275-2aee-0d1ed8bd7ce2.GPU-1.HDMI-0: nvidia-auto-select +3360+1050,
#GPU-a85ce4bc-1e9b-6275-2aee-0d1ed8bd7ce2.GPU-1.DP-1: nvidia-auto-select +5040+1050"
Option "MultiGPU" "Off"
Option "SLI" "on"
Option "BaseMosaic" "on"
SubSection "Display"
Depth 24
EndSubSection
EndSection

I recently had occasion to do something very similar: 2 Nvida GPUs,
each driving 3 monitors. Some things I found during the process of
getting it to work are:
If you are driving multiple monitors from a single GPU, you will
need to have a Device section for each head, and each Device section
needs a 'Screen number' option, where 'number' varies from 0 to one
less than the number of connected monitors.
I think you will need one Screen section for each monitor. From the
xorg.conf man page: 'A “screen” represents the binding of a graphics
device (Device section) and a monitor (Monitor section).'
The screen-num parameter in the Screen option in the ServerLayout
section has no relation to the screen number parameter in the Screen
option in the Device sections.
Something I found helpful when debugging X windows configuration
problems is to start the system in multiuser mode (append a '3' to the
kernel parameters in the early boot screen), create a trivial .xinitrc
file (say, with just the line 'xterm' (assuming you have xterm
installed)), and then start X with 'startx'. Then, if (when) it
fails, you'll be able to look at the log file in /var/log/Xorg.0.log,
make changes to xorg.conf, and try again.
I made some edits to your xorg.conf file. I commented out some options
in the Screen sections, since they will depend on your local port
names, and you will certainly want to change how the screens are
arranged in the ServerLayout section.
I hope you can use this as a basis to get a working setup. It's
annoying, because everything has to be just right for it to work at
all.
#xorg.file for 6-screen, 2-GPU setup
###############################################################
# Mouse Configuration options
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
# Keyboard Configuration options
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
###############################################################
# Monitor Configuration options
Section "Monitor"
Identifier "Monitor0"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor2"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor3"
VendorName "Dell, Inc."
ModelName "DELL E207WFP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor4"
VendorName "Dell, Inc."
ModelName "DELL E2009W"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Monitor"
Identifier "Monitor5"
VendorName "Dell, Inc."
ModelName "DELL E2009W"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
################################################################
# GPU Configuration options
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:1:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:1:0:0"
Screen 1
EndSection
Section "Device"
Identifier "Device2"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:1:0:0"
Screen 2
EndSection
Section "Device"
Identifier "Device3"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:2:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Device4"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:2:0:0"
Screen 1
EndSection
Section "Device"
Identifier "Device5"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 970"
BusID "PCI:2:0:0"
Screen 2
EndSection
################################################################
# device & monitor bindings configuration options
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
Option "Stereo" "0"
#Option "nvidiaXineramaInfoOrder" "DFP-0"
#Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor1"
Option "Stereo" "0"
#Option "nvidiaXineramaInfoOrder" "DFP-0"
#Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen2"
Device "Device2"
Monitor "Monitor2"
Option "Stereo" "0"
#Option "nvidiaXineramaInfoOrder" "DFP-0"
#Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen3"
Device "Device3"
Monitor "Monitor3"
Option "Stereo" "0"
#Option "nvidiaXineramaInfoOrder" "DFP-0"
#Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen4"
Device "Device4"
Monitor "Monitor4"
Option "Stereo" "0"
#Option "nvidiaXineramaInfoOrder" "DFP-0"
#Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen5"
Device "Device5"
Monitor "Monitor5"
Option "Stereo" "0"
#Option "nvidiaXineramaInfoOrder" "DFP-0"
#Option "metamodes" "DVI-I-1: nvidia-auto-select +1680+0, HDMI-0: nvidia-auto-select +3360+0, DP-1: nvidia-auto-select +5040+0, DVI-D-0: nvidia-auto-select +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
#############################################################
# Xinerma & Compsite extensions
Section "Extensions"
Option "Composite" "Disable"
EndSection
##############################################################
# Screen bindings configuration options
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 1050
Screen 1 "Screen1" Above "Screen0"
Screen 2 "Screen2" Above "Screen1"
Screen 3 "Screen3" Above "Screen2"
Screen 4 "Screen4" Above "Screen3"
Screen 5 "Screen5" Above "Screen4"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "1"
EndSection
###########################################################
# Unused section
Section "Files"
EndSection

Related

clock watchdog timeout when starting Nox Player

When I start Nox Player, the loading bar freezes at 45% and Windows shows a blue screen of death with an error _CLOCK_WATCHDOG_TIMEOUT. My system settings:
AMD Ryzen 7 5700G
Gigabyte x570 UD rev 1.0
Kingston Fury Renegade 3600
Be quiet 500W
BIOS updated to version F37c. the Amd Adrenalin has the latest drivers installed
Open BIOS, turn on virtualization

UEFI Shell: Access disabled device

Is there any way (by UEFI Shell commands or UEFI app) to access a device which was disabled in the "BIOS" menu?
Long Story:
When I enable the UART in the "BIOS" menu I get the following lines when calling devices:
78 R - - - 1 1 Serial(0x1)
…
15A D - - 1 - - Serial(0x1)/Uart(115200,8,N,1)/UartFlowCtrl(Hardware)
The corresponding driver looks like this (output shortened)
Handle B5 (D40B5D18) ...
Driver Name : <NONE>
Image Name : FvFile(54891A9E-763E-4377-8841-8D5C90D88CDE)
Driver Type : BUS
Managing :
Ctrl[78] : Serial(0x1)
Child[15A] : Serial(0x1)/Uart(115200,8,N,1)/UartFlowCtrl(Hardware)
Ctrl[14E] : PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
Child[158] : PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)/Uart(115200,8,N,1)/UartFlowCtrl(Hardware)
If the UART is disabled I do not get the device entries and the driver drives only the PciRoot.
I thought I might get the device by reinitialize the driver. But as it has no name I have no idea how to do so.
No, if the device is disabled in the BIOS settings, then it is literally turned off, so it’s not just a question of loading a driver for it. Hardware configurations set by the BIOS are locked after the BIOS writes to them, so they cannot be changed by software later without a reboot. You have to change the BIOS setting to enable the device.

Atollic couldn't verify ST device?

trying to program and debug STM32F103 (Bluepill) from Atollic TrueStudio 9.3 I got following message:
STMicroelectronics ST-LINK GDB server. Version 5.1.0 Copyright (c)
2018, STMicroelectronics. All rights reserved.
Starting server with the following options:
Persistent Mode : Disabled
Logging Level : 1
Listen Port Number : 61234
Status Refresh Delay : 15s
Verbose Mode : Disabled
SWD Debug : Enabled
Vendor = 0x55
Error in initializing ST-LINK device. Reason: ST-LINK: Could not
verify ST device! Abort connection.
Trying to do the same thing in St-Link utility works without any problems (also erasing and programming):
What could be the problem with this, why does it have problems with verification ?
Tnx for helping in advance!
The problem is that the ID of the STM32F103 on the BluePill and the ID, defined the debugger config files are different. Often the BluePills have counterfeit ICs on them in order to keep the price low, but these do not have the same ID as genuine ICs.
The Instructions/video below are made for STM32CubeIDE however they should also work for TrueSTUDIO.
Video about a workaround: https://youtu.be/bJYp8o7FoYo
Open the Debug Configuration Window
Select ST-LINK(OpenOCD) in the Debug Probe Dropdown
Search stm32f1x.cfg file the C:\ST\STM32CubeIDE_1.2.0\STM32CubeIDE and open it using notepad.
Search for this Line
Now change the ID from 0x1ba01477 to 0x2ba01477 as shown here
Save the file, now debugging should work
this solution also works for clone chips like CH32F103 which is in some cases on BluePill
the other solution is to change a parameter in "stm32f1x.cfg"
open it with a text editor and find this line:
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
change "$_CPUTAPID" to zero at the end of line it should be like this:
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0
after that :Open the Debug Configuration Window like picture above and choose "Select ST-LINK(OpenOCD)" in the Debug Probe Dropdown
then click "Show generator options…” and in Mode setup change"Reset Mode”For“Software system reset”.
both of ways works and i've tested them with CubeIDE and CH32f103c8t6.
remember to change jumper on board
jumpers : up = 0 ; down = 1

OpenOCD multiple STLinks

I need to be connect to 2 STM32s over 2 ST-Links at the same time. I found this issue described here.
However, solution doesn't work for me.
ST-Link ID1: 55FF6B067087534923182367
ST-Link ID2: 49FF6C064983574951291787
OpenOCD cfg file:
source [find interface/stlink-v2.cfg]
hla_serial "55FF6B067087534923182367"
source [find target/stm32f4x.cfg]
# use hardware reset, connect under reset
reset_config srst_only srst_nogate
I get:
$ openocd.exe -f stm32f4_fmboard.cfg
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Error: open failed
in procedure 'init'
in procedure 'ocd_bouncer'
I do not know if solved but:
pi#raspberrypi:~/prog/bootloader $ st-info --probe
Found 1 stlink programmers
serial: 363f65064b46323613500643
openocd: "\x36\x3f\x65\x06\x4b\x46\x32\x36\x13\x50\x06\x43"
flash: 0 (pagesize: 0)
sram: 0
chipid: 0x0000
descr: unknown device
this tool shows serial of st-links and there is option called openocd. When I put hla_serial "\x36\x3f\x65\x06\x4b\x46\x32\x36\x13\x50\x06\x43" in file then it works for me. Your way does not. It also does not work in command line given as argument. It works only as I described in cfg file
The format of the configuration file seems to have changed recently. The following applies for Open On-Chip Debugger 0.10.0+dev-00634-gdb070eb8 (2018-12-30-23:05).
Find out the serial number with lsusb, st-link, or with ls -l /dev/serial/by-id. The latter yields (with two STLink/V2.1 connected):
total 0
lrwxrwxrwx 1 root root 13 Nov 30 14:31 usb-STMicroelectronics_STM32_STLink_066CFF323535474B43125623-if02 -> ../../ttyACM0
lrwxrwxrwx 1 root root 13 Dec 30 23:55 usb-STMicroelectronics_STM32_STLink_0672FF485457725187052924-if02 -> ../../ttyACM1
The specification on the .cfg-file is now plain hex. Do not use the C string syntax any longer. For selecting the latter device, simply write:
#hla_serial "066CFF323535474B43125623"
hla_serial "0672FF485457725187052924"

How do I make the pi-topCEED screen work with Android Things

When I try Android Things DP3 with the pi-topCEED, the boot screen isn't displayed properly:
How can I configure Android Things w/ the appropriate display parameter:
Resolution: 1366x768
Refresh rate: 60hz
Mount the sdcard image boot partition
# on my system
mount /dev/sdb1 /mnt/disk
Append the following value to config.txt
# Define new custom HDMI mode <width> <height> <refresh_rate>
hdmi_cvt 1366 768 60
# Select HDMI DMT mode (computer screen)
hdmi_group=2
# Select custom mode defined earlier
hdmi_mode=87
Unmount and eject your sdcard
umount /dev/disk
sync
(Source, Previous Answer)