LINUX.ORG.RU

Случайно выдернул видеокарту из слота, как починить без ребута?

 , ,


1

1

Перетыкая VGA-кабель случайно приподнял видеокарту, в которую он воткнут, от материнки, и она перестала показывать картинку на монитор даже после того как я восстановил её положение в слоте. Сервер при этом работает как и раньше, проблема только с видео.

Видеокарта PCI (вроде S3 Trio какое-то, не помню), вылезли из слота те контакты которые ближе к задней стенки (передняя часть прижата к материнке конструкцией корпуса, а вот сзади должен был быть болт но его нет).

Можно ли как-то переинициализировать видеокарту не ребутая комп целиком? ОС FreeBSD, набирать что-то можно только вслепую т.к. сетевого доступа к руту нет.

upd: Таки ребутнул - лучше сейчас планово чем возиться потом когда срочно консоль потребуется. Видео ожило. В практическом плане проблема решена, но вопрос «как починить без ребута» так и не отвечен, так что пусть тема не будет помечена решённой.

★★★★★

Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от sparkie

Я ж пишу - после восстановления её правильного положения картинка назад не появилась. Вероятно у неё контроллер питание терял.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)

Перетыкая VGA-кабель случайно приподнял видеокарту

Cлучайно перевоткни.

Видеокарта PCI (вроде S3 Trio какое-то, не помню

Подари ее мсьям, знающим толк.

ОС FreeBSD, набирать что-то можно только вслепую т.к. сетевого доступа к руту нет.

Физический жы есть. А VGA-кабель куда-то идет?

anonymous
()
Ответ на: комментарий от anonymous

Подари ее мсьям, знающим толк.

Тогда мне некуда будет монитор подключать, на материнке видеочипа нет, в проце тоже.

Физически есть клавиатура но нет монитора теперь. Кабель разумеется шёл к монитору.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Тогда мне некуда будет монитор подключать

все это старьё значит подари.

anonymous
()
Ответ на: комментарий от anonymous

Ребутнуть всегда можно успеть, но хотелось бы без этого. Видеокарт запасных похожих ещё 10-20 штук есть так что это как раз не проблема.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Ребутнуть всегда можно успеть, но хотелось бы без этого.

Ну значит без этого смоги. Доложи тут, как изощрился.

anonymous
()

Те, кто умеют пользоваться ИИ ассистентами в таких случаях просто запускают рескан. По всем параметрам ответ «да», во FreeBSD можно на горячую переинициализировать PCIe S3 Trio видеокарту.

Но вы не признаёте помощь ИИ ассистентов. Значит «нет».

VIT ★★★
()

У тебя там что, управление ядерным реактором на эту древность завязано или пуск баллистических ракет по вероятному противнику? Почему ребутнуть нельзя и зачем вообще обслуживать на горячую?

anonymous
()

ОС FreeBSD, набирать что-то можно только вслепую т.к. сетевого доступа к руту нет.

Что, и через последовательный порт нет?
Видеокарта и монитор на сервере - это лишнее.

MirandaUser2 ★★
()

Перетыкая VGA-кабель случайно приподнял видеокарту, в которую он воткнут, от материнки

сервак без корпуса что ли? Когда видюшка прикручена с трудом представляю как ее можно приподнять.

P.S. Интересно зачем серваку видео … хотя если мать старая она может без видюхи и не включится.

anonymous
()
Ответ на: комментарий от devl547

Конкретно эта команда не помогает. А он разве проинициализирует текстовый режим итд при обнаружении карты?

firkax ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Когда видюшка прикручена

Она не прикручена - задняя её планка почему-то была геометрически несовместима с корпусом/материнкой, уже не помню конкретики, и я её отвинтил.

Интересно зачем серваку видео

Затем чтобы иметь доступ к физической консоли. Доступ к хосту (вне контейнеров) в целях безопасности только с неё, и изредка он оказывается нужен (не сейчас, сейчас я просто вернул назад кабель который вытащил оттуда раньше для других целей).

firkax ★★★★★
() автор топика

Уважаемый, видеокарта скорее всего вмэрла, по моему опыту. Слышал о подобных историях, хорошо что хоть карта не дорогая.

unclestephen ★★★★★
()
Последнее исправление: unclestephen (всего исправлений: 1)

Так, придумал делать так

( command 2>&1 ) | jexec ... tee /tmp/1

и теперь можно видеть вывод команд через контейнерный доступ.

devctl rescan pci0 просто ничего не пишет, видимо успешно отрабатывает.

devinfo -v и devinfo -r выдают среди прочего следующее:

nexus0
  ...
  acpi0
    ...
    pcib0 pnpinfo _HID=PNP0A03 _UID=0 _CID=none at handle=\_SB_.PCI0
      pci0
        ...
        isab0 pnpinfo vendor=0x1002 device=0x439d subvendor=0x1002 subdevice=0x439d class=0x060100 at slot=20 function=3 dbsf=pci0:0:20:3 handle=\_SB_.PCI0.LPC0
          isa0
            sc0
            vga0 pnpinfo pnpid=PNP0900
                I/O ports:
                    0x3c0-0x3df
                I/O memory addresses:
                    0xa0000-0xbffff
            orm0 pnpinfo pnpid=ORM0000
                I/O memory addresses:
                    0xc0000-0xc7fff     <--- адрес где по идее биос видеокарты
                    0xc8000-0xcafff
            ...
        pcib5 pnpinfo vendor=0x1002 device=0x4384 subvendor=0x0000 subdevice=0x0000 class=0x060401 at slot=20 function=4 dbsf=pci0:0:20:4 handle=\_SB_.PCI0.P2P_
          pci5
            vgapci0 pnpinfo vendor=0x5333 device=0x8811 subvendor=0x0000 subdevice=0x0000 class=0x030000 at slot=8 function=0 dbsf=pci0:5:8:0
                pcib5 memory window:
                    0xf4000000-0xf7ffffff
              drm0
              drmn0
            vr0 <-- это сетевуха она в соседнем с видеокартой слоте

Непонятно почему видео и в isa0 и в pci5.

devctl rescan isa0

devctl: Failed to rescan isa0: Device not configured

devctl rescan pci5

пустой вывод

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от devl547

А как ты иксам/вяленду скажешь, что новое устройство надо вместо старого использовать? Когда я работал над тем, чтобы подружить неподдерживаемый вай-фай с моим ноутом, я пробовал загрузиться и воткнуть модуль на горячую. Модуль спарен с блютусом, но последний на USB, а не на PCI-E, и мне rescan не помог – ожидаемо блютус увиделся, а вафля – нет.

yars068 ★★★★★
()
Ответ на: комментарий от yars068

Графики там нет, но, подозреваю, с текстовым режимом аналогичная проблема.

firkax ★★★★★
() автор топика

На фряхе есть аналог sysfs? Возможно, стоит покопать в эту сторону и изучить, нет ли там файла, через который можно дать команду перечитать устройства на шине и переинициализировать их.

anonymous
()
Ответ на: комментарий от vbcnthfkmnth123

Эх ладно, ребутнул, хоть и не хотелось. Лучше сейчас планово, чем заниматься починкой когда вдруг срочно консоль потребуется.

Видео запустилось успешно после этого.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Выше уже подсказали команду devctl

Делать reset устройству не пробовал? А затем attach.

iron ★★★★★
()
Последнее исправление: iron (всего исправлений: 2)
Ответ на: комментарий от iron

Не пробовал. Уже поздно :(

Если ещё раз такое случится проверю, но надеюсь что не случится.

firkax ★★★★★
() автор топика
Ответ на: комментарий от sparkie

А почему тогда видеовыход отключился? По-моему если отключить даже всё кроме питания - карта станет недоступна для софта на проце, но картинку отдавать должна продолжить ту что у неё в видеопамяти осталась.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Не помню, как я действовал в подобной ситуации, по-моему это программно решается.

sparkie ★★★★★
()
Ответ на: комментарий от James_Holden

Упрямство - первый признак тупости. Нет, не сразу, но здесь не смог, там не справился, и такие случаи начинают накапливаться. И вот уже ты не конкурентноспособен. А виноват, конечно же, AI! Дураков учить не нужно, они необучаемы.

VIT ★★★
()

Я, вот возился с USB-контроллером, обнаружил, что PCI (PCIe) устройство способно зависнуть. В прямом смысле, перестаёт обрабатывать команды и т.д. Причём, иногда может быть, что интерфейс к PCI-шине живой, а дальше зависло. Некоторые PCI устройства делают RESET при переводе в Sleep и обратно, а некоторые нет. Таким устройствам поможет только аппаратный сигнал #Reset по шине. Крутые компы имеют послотовое управление этим сигналом (контактом слота), а ширпотреб — нет. То есть, если вашей видеокарте сплохело от уровней напряжений в моменте на PCI линиях, то только ребут.

А второе, многие видеокарты нужно обязательно инициализировать, иначе у них видеочип «пустой», он ни размеров ни таймингов видеопамяти не знает. Эти занимается Video BIOS oprom. То есть, после аппаратного reset нужно каким-то образом запустить этот oprom, который real mode, для чего там эмулятор x86 используют, то ещё развлечение (vbetool).

В общем, удачи, в поиске решения. Вот тема про горячее перетыкание видеокарты Делаю одноплатный компьютер из WIFI-Роутера.. Нужна помощь с Драйвером «atyfb» , не совсем ваш случай, но близко.

mky ★★★★★
()
Ответ на: комментарий от mky

Хм, а может быть вместо рескана pci надо было только видео-биос как-то запустить и больше ничего. Ведь текстовый режим через 0x000B8000 адрес в памяти работает, видеокарта после инициализации сама туда заново замапит видеопамять, и режим 80х25 тоже видеобиос ей включает. Может быть больше ничего и не нужно было.

Но если так, то возню с организацией запуска видеобиоса, да ещё и в неинтерактивном режиме консоли, было бы очень сложно делать.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Может быть. Хотя не уверен, я не помню инициализацию PCI, вроде, там в регистры устройства нужно писать, какие адреса ему выделены. То есть, сначала рескан pci, а потом выполнение oprom.

Но сложно сказать какие контакты разрывались и в какое состояние попала карта. Там в начале слота (у задней стенки) на A2 питание +12 В, но, скорее всего, его карта не использует. Питается карта, скорее всего, от +5 В, оно есть и в начале и в конце разъёма, возможно, обесточивания чипа не было. Но, Reset на контакте A15, если он оказывался в воздухе, вполне возможно, что карта на это и среагировала. Но, лучше не экспериментировать с выдёргиваниями, чтобы отработать команды, можно и сжечь что-то (видеокарту или матплату).

mky ★★★★★
()
Ответ на: комментарий от firkax

но картинку отдавать должна продолжить ту что у неё в видеопамяти осталась

А у неё внешнее питание? На картинках я отдельный разъём не вижу. Подозреваю у неё стартовый опрос, а не просто цикл, типа данные появились и пошли в обработку.

Скорми гуглу этот вопрос: «есть ли у видеокарт стартовый опрос, или все же карта может давать на выход, когда запиталась и получила данные?»

AZJIO
()
Последнее исправление: AZJIO (всего исправлений: 3)
Ответ на: комментарий от mky

это нормально :) если устройство представляет собой процессор,выполняющий прошивку, то зависоны вполне естественны.
у меня так ft323 - usb-485 без гальваноразвязки зависал от импульсов по 485. передергиваешь усб и дальше работает.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pfg

устройство представляет собой процессор,выполняющий прошивку

Дак, других устойств и не осталось :) Причём, ведь внутри одного чипа может быть несколько таких устройст, у каждого своя прошивка, недоступная снаружи. И на всех один RESET. Причём, вроде, у меня было, что просто reboot/reset компа не помогал, так как питание оставалось, нужно было именно выкл/вкл сделать.

передергиваешь усб и дальше

А PCI/PCIe лучше не передёргивать...

mky ★★★★★
()
Ответ на: комментарий от yars068

Аппаратный reset, вроде как, можно только на всю шину подать, и то, если мост это поддерживает. В ядре Линукс есть отдельная функция pci_probe_reset_bus(), которая отвечает, можно ли подать reset на шину, и, если эта функция отвечает 0, то можно дёрнуть pci_reset_bus(). Но, по моим ковыряниям, я не нашёл железяку, что бы там такое можно было попробовать. Как я понимаю, на старом десктоп железе такого не было.

mky ★★★★★
()
Ответ на: комментарий от mky

uart-232, uart-485 и иже с ними кондовая линейная логика %) оптико-ethernet медиаконвертор наверн, но в нем не уверен :)
по идее такие косяки должон ловить ватчдог и сбрасывать железку. но ватчдот вне пром.железок и требовательных к живучести не попадается практически - ну редкость таких требования для «обычного бытового десктопа/ноута» :)

к примеру програмный-драйвер усб устройства имеет спец.команду что-то типа

echo 1 > /sys/bus/usb/devices/usb*/driver/unbind
echo 1 > /sys/bus/usb/devices/usb*/driver/bind 

пришлось пользоваться, когда усб-устройства зависали изза наводок. т.е. програмно отключил, включил - и усб-порт со всеми подчиннеными реинициализируется. удобно.
но то усб, у которого на древнем фундаменте выбито «поддерживает все издевательствавключения/отключения наживую» :), не уверен что подобное есть в драйвере видеокарты.

еще был вариант запуска переинициализации усб-устройства через udevadm. но оно было мудренее и посему не трогал.
удев аккурат заведуют поиском и инициализацией устройств и реинициализровать должон уметь.

pfg ★★★★★
()

S3 Trio

Как в прошлое дверца, у меня была S3 Trio64V+ в конце 2000 годов.

Смотри чтобы было, если бы ты умел пользоваться и имел доступ до хороших моделей облачных LLM.

Коротко: **надёжно — нет**. В твоей ситуации я бы не пытался делать PCI reset вслепую.

Обычный PCI со старой S3 Trio **не рассчитан на hot-plug**. Когда карта частично вышла из слота на работающей машине, она могла потерять питание или часть PCI-линий. После того как ты вставил её обратно, BIOS уже не выполняет заново VGA POST/Option ROM initialization. FreeBSD сам по себе обычно не способен полностью воспроизвести ту инициализацию, которую VGA получает при старте машины.

Есть одна относительно безопасная вещь, которую имеет смысл попробовать вслепую:

    vidcontrol 80x25

или:

    vidcontrol VGA_80x25

`vidcontrol` заставляет FreeBSD переключить видеорежим консоли и тем самым перепрограммировать часть VGA-регистров.

Если карта всё ещё нормально видна системе, а отвалилось только состояние VGA/CRT controller, **картинка теоретически может вернуться**.

Можно ещё попробовать переключение виртуальной консоли:

    Alt+F2
    Alt+F1

или `Alt+F3` → `Alt+F1`.

### Чего я бы не делал

В современных FreeBSD существуют команды вроде:

    devctl reset ...
    devctl rescan ...

`devctl rescan` просит PCI-шину поискать добавленные/удалённые устройства, а `devctl reset` может попытаться сбросить PCI-устройство.

Но это **не эквивалент повторного запуска VGA BIOS**. Rescan не обязан переинициализировать уже существующее VGA-устройство.

Для какой-нибудь S3 Trio времён обычного PCI я бы особенно не рассчитывал на:

    devctl reset pci0:x:y:z

У такой карты нет нормального современного PCIe FLR, а попытка сбросить устройство, являющееся системной консолью, вслепую может оставить его в ещё менее определённом состоянии.

### Что, скорее всего, произошло

    работающая S3
        |
        +-- карта наклонилась
        |
        +-- несколько PCI-контактов разомкнулись
        |
        `-- VGA перестала отвечать / потеряла состояние
                 |
                 v
          карту вставили обратно
                 |
                 v
         питание физически вернулось,
         но VGA POST больше никто не сделал

При загрузке происходит примерно следующее:

    Power-on
      |
      v
    PCI enumeration
      |
      v
    VGA BIOS / Option ROM
      |
      v
    настройка S3
      |
      v
    текстовый VGA mode
      |
      v
    FreeBSD принимает уже работающую VGA

У тебя произошёл разрыв уже **после этой инициализации**, а возвращение карты в слот не запускает начало цепочки заново.

Есть и менее приятный вариант: во время перекоса соседние PCI-контакты могли на мгновение соединиться. Conventional PCI вообще не предназначен для извлечения или перекоса карты под питанием. То, что сервер продолжает нормально работать, — хороший признак, но не доказывает, что сама VGA не пострадала.

### Что бы я сделал

Сначала вслепую:

    vidcontrol 80x25

Подождал несколько секунд. Затем:

    vidcontrol VGA_80x25

После этого попробовал:

    Alt+F2
    Alt+F1

Если изображения нет — **остановился бы на этом**. Не стал бы вслепую делать `detach`, `reset` или `rescan` PCI.

При ближайшей возможности штатно:

    shutdown -p now

После выключения:

1. Полностью обесточить сервер.
2. Вынуть S3.
3. Осмотреть контакты карты и PCI-слот.
4. Вставить карту до упора.
5. **Обязательно прикрутить bracket винтом**, чтобы задняя часть карты больше не могла выйти из слота.
6. Включить сервер заново.

Здесь предпочтителен именно **cold boot / полный power cycle**, а не просто `reboot`: после частичного извлечения под питанием карта могла остаться в некорректном электрическом состоянии, которое обычный soft reset не обязательно устранит.
gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от pfg

Оффтоп конечно, но эта команда обычно как раз не работает. Я не помню точно что именно она делает, но с ребутом usb-устройств есть два варианта:

1) передёргивать питание - на встроенных в материнку портах не работает почти никогда (всмысле, питание там припаяно и не управляется), на хабах может и сработать если повезёт

2) отсылать ребут-команды устройству - работает, только если устройство зависло не до конца и может эти команды обработать

Я это когда-то искал для usb-модема, пришёл к выводу что рабочих способов его принудительно ребутнуть после зависания, если он воткнут в интегрированный в ноут порт, нет.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от pfg

В спеке PCI-E (но, если не ошибаюсь, не PCI) заявлено, что шина поддерживает горячее подключение, и первым сигналом на подключенное устройство, по идее, должен приходить именно ресет. Как это работает в действительности, и работает ли вообще, я не знаю, не приходилось с этим сталкиваться.

yars068 ★★★★★
()
Последнее исправление: yars068 (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария