Нет фреймбуферного устройства: как его включить?

23

Я пытаюсь заставить работать карту тюнера PCMCIA на моем безголовом домашнем сервере, на котором работает Debian Squeeze. Теперь, когда у меня очень большие проблемы с поиском правильной командной строки для захвата, транскодирования и потоковой передачи видео в сеть с помощью VLC, я решил пойти шаг за шагом и сначала поработать над локальным выводом.

Вот в чем проблема: кажется, нет устройства кадрового буфера (/ dev / fb0) для доступа к отображению графики на подключенном экране!И действительно, я заметил, что у меня нет образа Linux-пингвина при загрузке (не обращал внимания до того, как экран подключен, но всегда выключен, и в любом случае компьютер всегда включен).

Поскольку я не очень знаком с графикой Linux, я хотел бы понять:

  • Это связано с моим конкретным оборудованием (см. Ниже)? Или это специфично для Debian Squeeze / версии ядра / ...?
  • Есть ли какой-нибудь драйвер, который мне нужно установить / загрузить вручную?

Теперь немного общей информации:

  • На компьютере нет выделенной графической карты, но есть встроенный графический чипсет (Intel G31 Express), встроенный в материнскую плату (Gigabyte G31M-ES2L)
  • Я не хочу устанавливать полнофункциональный X-сервер, просто есть устройство кадрового буфера для этого конкретного теста

Есть идеи / комментарии по этому вопросу?

Federico
источник
1
Как только вы приступите /dev/fb0к работе, обязательно примите мой ответ. Редко люди с реальным опытом по менее распространенной теме, обойти, чтобы дать HQ ответ. Они существуют в UNIX-SE, это довольно необычная тема, поэтому существует меньше экспертов.
JM Becker

Ответы:

36

Я могу ответить на ваш вопрос, предварительно поработав с Linux FB.

Как Linux делает свой FB.

  1. Во-первых, вам нужно иметь поддержку FrameBuffer в вашем ядре, соответствующую вашему оборудованию. Большинство современных дистрибутивов имеют поддержку через модули ядра. Не имеет значения, если ваш дистрибутив поставляется с предварительно настроенным логотипом загрузки, я не использую его и поддерживаю FB.

  2. Неважно, если у вас есть выделенная видеокарта, интегрированная будет работать, пока поддерживается аппаратный кадровый буфер.

  3. Вам не нужен X, который является наиболее заманчивым аспектом наличия FrameBuffer. Некоторые люди не знают лучше, поэтому они отстаивали какую-то форму X, чтобы обойти свои недоразумения.

  4. Вам не нужно работать с FB напрямую, что многие люди ошибочно полагают. Очень хорошая библиотека для разработки с FrameBuffer - DirectFBона даже имеет некоторую базовую поддержку ускорения. Я всегда советую хотя бы проверить это, если вы запускаете полнофункциональный проект на основе FB (Web Browser, Game, GUI ...)

Специфично для вашего оборудования

  1. Используйте Vesa Generic FrameBuffer, его модули называются vesafb. Вы можете загрузить его, если он у вас есть, с помощью команд modprobe vesafb. во многих дистрибутивах его предварительно отключить, вы можете проверить /etc/modprobe.d/. blacklist vesafbможет быть необходимо закомментировать с #, в blacklist-framebuffer.confили другом файле черного списка.

  2. Лучший вариант - аппаратный драйвер KMS. Основным для Intel является Intel GMA, не знаю, как называются его модули. Вам нужно будет прочитать об этом из ваших документов дистрибутива. Это самый эффективный вариант FB, лично я всегда буду идти KMS первым, если это возможно.

  3. Используйте драйверы FB для устаревшего аппаратного обеспечения, не рекомендуется, так как они иногда содержат ошибки. Я бы избежал этого варианта, если только в крайнем случае не нужно.

Я считаю, что это покрывает все ваши вопросы, и должен предоставить информацию, чтобы получить это /dev/fb0 доступ устройству. Для чего-то более конкретного потребуется информация о распространении, и если у вас есть некоторый опыт, RTFM должен быть всем, что вам нужно. (после прочтения).

Надеюсь, я помог, Тебе повезло, что ты спросил об одной из моих тем! Это тема, которой пренебрегают в UNIX-SE, поскольку не все (сознательно) используют Linux FrameBuffer.

ПРИМЕЧАНИЕ: UvesaFB или VesaFB?

Вы, возможно, читали, что люди используют uvesafbболее vesafb, поскольку это имело лучшую производительность. Это в целом верно, но не в современном дистрибутиве с современным аппаратным обеспечением. Если ваше графическое оборудование поддерживает защищенный режим VESA (VESA> = 2.0), и у вас есть несколько новое ядро vesafb, то сейчас лучший выбор.

Дж. М. Беккер
источник
1
Большое спасибо за ваш ответ !!! Это намного больше, чем я ожидал с точки зрения глубины и качества! Я действительно ценю, когда я могу найти пост / ответы, подобные вашему, потому что они не только дают решения по конкретной проблеме, но, что более важно, они дают общую информацию о внутренней работе, которая может быть полезна другим для тех же или связанных ситуаций !!
Федерико
1
Что касается моей проблемы, я рассмотрю ее, основываясь на ваших комментариях, и доложу здесь, как только получу удовлетворительные результаты ...
Федерико
3
Поэтому я попытался modprobe vesa(что я помню, пытался, прежде чем задавать вопрос здесь), что не получается, потому что модуль не существует в моей системе ( FATAL: Module vesafb not found.) -> должен будет понять, связано ли это с моим оборудованием или моим дистрибутивом Linux (Debian Squeeze ). Хорошая новость в том, что modprobe uvesafbработает и создает /dev/fb0устройство. Однако теперь, когда я прочитал ваш ответ, я постараюсь правильно настроить все и найти драйвер KMS ...
Федерико
1
Я проголосовал за ваши комментарии, я рад, что могу помочь! Что касается вашего последнего комментария, вы ошибаетесь в решении 2. Вы можете АБСОЛЮТНО получить KMS без X, но, как я уже сказал, реальные ответы буквально тонут в мусоре. Имя правильного аппаратного модуля называется inteldrmfb, я выяснил это, проведя небольшое исследование. У меня всегда есть ATI, поэтому поддержка Intel GPU не самая сильная сторона. Вы можете необходимо установить пакет для него, но я буду видеть , если я могу узнать.
JM Becker
1
О, подожди, я ошибся ... Я только что проверил мой нетбук Intel и модуль есть i915, но он загружает Framebuffer, известный как inteldrmfb. Вам может потребоваться установить пакет libdrm-intel1или проверить, установлен ли он.
JM Becker
10

Я наконец нашел решение своей проблемы !!

Прежде всего, большое спасибо всем, кто внес свой вклад, в частности TechZilla, и подробному объяснению, которое он дал, без которого, я думаю, я бы давно отказался!

В общем, все, что нужно сделать - это включить modesetting ( modeset=1) при i915загрузке модуля ядра. Это можно сделать обычными способами:

  • через параметр ядра GRUB,
  • через файл конфигурации в /etc/modprobe.d
  • или в командной строке:

    # rmmod i915
    # modprobe i915 modeset=1
    

На самом деле, вам не нужно ничего делать, если вы устанавливаете пакет xserver-xorg-video-intel, который создает /etc/modprobe.d/i915-kms.confсодержимое options i915 modeset=1. Однако, если кто-то не хочет устанавливать X (как в моем случае), то KMS не включается автоматически, что объясняет, почему устройство FrameBuffer не было создано ...

Federico
источник
2
Вы все равно должны принять мой ответ, потому что «как включить KMS с помощью squeeze» не было вашим первоначальным вопросом. Я полагаю, что я ответил на ваш первоначальный, и указал вам на предполагаемый путь. Другая причина, вы получаете только баллы за присуждение ответов «другим» людям. Несмотря на то, что хорошо себя награждать, если никто не подходит близко, в этом случае это не имеет смысла. Вы хорошо держите свой ответ, хотя, или интегрировать информацию в вопрос. В любом случае было бы хорошо. правда, очень рад, что помог! Я очень рад, что у вас работает решение KMS, так как оно должно быть быстрее простого VESA.
JM Becker
1
Я только что вернул принятый ответ на ваш! Будучи здесь новичком, я не знал точно, что делать: поместите решение в сам вопрос, в комментарии к принятому ответу или опубликуйте новый ответ. Я подумал, что, создавая новый принятый ответ, люди будут сначала читать вопрос, а затем ваш ответ, который идет сверху, так как в нем больше голосов, а затем мой ответ ...
Федерико
Хотя другой ответ является тщательным, это должен быть принятый ответ. Независимо от того, насколько красноречиво просит автор.
Муг
-2

Вы можете попробовать виртуальный кадровый буфер, такой как Xvfb (X виртуальный кадровый буфер).

Описание пакета xvfb в squeeze

Artifex
источник
1. это «виртуальный» FrameBuffer, а не фактический аппаратный FrameBuffer. 2. Это X-сервер, и, в частности, вопрос не запрашивал X.
JM Becker
-2

Пока это стандартная установка Debian без излишеств и стандартного ядра, вы должны иметь возможность получить VGA-консоль, которая использует устройство кадрового буфера с параметром ядра, таким как «vga = 792» (что составляет 24 бита 1024 × 768). ). Конечно, ядро ​​сообщает об этом как об устаревшем, но это работает.

См. Http://www.kernel.org/doc/Documentation/kernel-parameters.txt. для параметров ядра. Интересно, что параметр "vga =" не показывается как устаревший.

Обязательно повторно запустите update-grub (2) и лайки после изменения.

Также взгляните на http://packages.debian.org/squeeze/svgalib-bin, она не идеальна, но она позволяет вам делать некоторые необычные графические вещи на консоли.

aseq
источник
3
Нет, это больше не работает, во многих обстоятельствах. Это ответ, который я всегда говорю. Если вы используете GRUB2, это работает только при загрузке с устаревшими 16замедлениями. Это также устарело, что, по крайней мере, вы признаете, прагматично, что означает НЕ СДЕЛАТЬ С НОВЫМИ НАСТРОЙКАМИ. Старый vga=мусор не сможет загрузиться, если у вас отключены аппаратные модули, /etc/modprobe.d/а многие дистрибутивы поставляются предварительно настроенными как таковые.
JM Becker
Итак, следующая проблема, svgalib-bin - это библиотека, а не устройство / dev / fb0. Все, что хочет svgalib, должно быть разработано с svgalib. Его можно использовать для замены FB, но он не «буквально» заменяет FB. Я на самом деле сделал ошибку в последнем комментарии, когда я сказал: «не удается загрузиться», я имел в виду «не удается загрузить FB, скорее всего, произойдет откат к стандартному vga»
JM Becker
3
Это действительно даже не ваша вина, наше сообщество оставляет ужасно устаревшую документацию. Каждый человек приматывает старые ответы по всему Интернету, что усложняет современное понимание зверя. Многие люди даже просто сдаются, потому что реальный ответ - новый и похороненный годами подражания устаревшим решениям.
JM Becker
1
Параметр "vga =" работает при использовании squeeze. Я просто предложил это, поскольку это легко и быстро исправить, вместо того, чтобы исследовать, чем он заменен. kernel.org/doc/Documentation/kernel-parameters.txt не показывает "vga =" как устаревшее. Единственная причина, которую я знаю, это быстрое, едва читаемое загрузочное сообщение ядра ... возникает путаница ... поэтому, согласно тексту на kernel.org, "vga =" НЕ рекомендуется. Во что нам верить?
Aseq
1
Кстати, мое предложение использовать svgalib потому, что пользователь не хочет использовать X. Я понимаю виновников svgalib, но есть несколько других вариантов.
августа