Автор Тема: [Решено] Чёрный экран в вируальных терминалах с ядром led-vs, текущий сизиф  (Прочитано 1235 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Предыстория, - копипаст отсюда:
https://forum.altlinux.org/index.php?topic=36177.msg276022#msg276022
https://forum.altlinux.org/index.php?topic=36177.msg276026#msg276026

Кто-то спрашивал на форуме, можно ли старым машинкам сидеть на сизифе, будущем p8.

Нарисовалось вот что:

Долго рассматривал ядро led-vs в связи с проблемой кулера и рандомного ступора приводящему вплоть до SysRq на 4-тых сизифных ядрах.
Первое положительное впечатление от led-vs:
- При выходе из спячки нет большой задержки на окне предупреждения, кулер уходит в лёгкий пик и тут же сбрасывает обороты, показания 'acpi -t' всегда в норме, т.е. всё как надо;
- В отличие от ядра led-ws (p7), нет бага со сменой разрешения экрана.

На update-kernel ядро подтянет один модуль:
Следующие НОВЫЕ пакеты будут установлены:
  kernel-image-led-vs#3.15.10-alt8 kernel-modules-drm-led-vs#3.15.10-alt8

Всё остальное надо вворачивать руками:
*sound* - алсовые модули, *video* - intelfb
$ rpm -qa|grep led-vs
kernel-modules-drm-led-vs-3.15.10-alt8
kernel-modules-video-led-vs-3.15.10-alt8
kernel-image-led-vs-3.15.10-alt8
kernel-modules-sound-led-vs-3.15.10-alt8

$ uname -r
3.15.10-led-vs-alt8
$ cat /etc/altlinux-release
ALT Linux Sisyphus (unstable)

Но с разбегу ударился об стену - вместо виртуальных терминалов, чёрный фон:

Фреймбуфер
# fbset

mode "1024x768"
    geometry 1024 768 1024 768 32
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode


Но геометрия виртуальных терминалов в знакоместах выглядит так (4-й виртуальный терминал):
готовим чтобы увидеть поле виртуального терминала
Для пробного просмотра
# cat /dev/vcs4 > vcs4.txt

Длинна строки в символах определялась вслепую, по позиции первых символов в строках с Welcome.to и comp-pentium -- фразы идут одна за другой построчно и начинаются с начала строки.

Когда размер по X в знакоместах виртуального терминала был определён, на строки нарезалось со вставкой кода перевода строки, - здесь 80, это длина строки окна виртуального терминала
# fold -w 80 /dev/vcs4 > vcs4.txt

Потом создавалась копия для обработки
# cp vcs4.txt vcs4-2.txt

по которой прошёлся sed, чтобы увидеть пробелы во всём поле виртуального терминала и определить геометрию виртуального терминала в знакоместах
# sed -i 's/ /\./g' vcs4-2.txt

Т.е. невидимое поле виртуального терминала в знакоместах -- каждая точка - знакоместо, набор был вслепую:
# cat vcs4-2.txt
................................................................................
Welcome.to.ALT.Linux.Sisyphus.(unstable)./.tty4.................................
comp-pentium-m-e6b072.login:.pcuser.............................................
Password:.......................................................................
Last.login:.Wed.Jan.20.21:33:40.MSK.2016.from.localhost.on.tty4.................
[pcuser@comp-pentium-m-e6b072.~]$...............................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
Т.е. поле виртуального терминала, это поле 80x25 знакомест.

А размер символа составляет
# echo $((1024/80))x$((768/25))
12x30
на поле 80x25 знакомест при размере фреймбуфера 1024x768 для которого в знакоместах поле должно быть:
# echo $((1024/8))x$((768/16))
128x48

8 и 16 это матрица символа фонта для виртуальных терминалов
# cat /etc/sysconfig/consolefont
SYSFONT=UniCyr_8x16

Подсмотреть в комментарии негде - конфиг пустой
# cat /etc/sysconfig/console/setterm
#

Кириллические фонты в системе
# find /lib -name "UniCyr*"
/lib/kbd/consolefonts/UniCyr_8x16.psf.gz
/lib/kbd/consolefonts/UniCyr_8x14.psf.gz
/lib/kbd/consolefonts/UniCyr_8x8.psf.gz
/lib/kbd/consolefonts/UniCyrExt_8x16.psf.gz

Надо как-то смотреть как виртуальному терминалу возвращается установками его размер в знакоместах.
Ткнул бы кто носом туда где не увидел или сморозил. Сходу пока не вижу. Был бы безмерно благодарен. И ядро led-vs можно было бы использовать смело. А старые машинки скорее всего могли бы продолжать жить на p8. Это по крайней мере грубыми прикидками на nx6110 с сизифным led-vs.


# lspci -k|grep -A2 VGA
00:02.0 VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
Subsystem: Hewlett-Packard Company NX6110/NC6120
Kernel driver in use: i915
# fbset -db /etc/fb.modes

mode "1024x768"
    geometry 1024 768 1024 768 32
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

# fbset -i -v
Linux Frame Buffer Device Configuration Version 2.1 (23/06/1999)
(C) Copyright 1995-1999 by Geert Uytterhoeven

Opening frame buffer device `/dev/fb0'
Using current video mode from `/dev/fb0'

mode "1024x768"
    geometry 1024 768 1024 768 32
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

Getting further frame buffer information
Frame buffer device information:
    Name        : inteldrmfb
    Address     : 0xc0020000
    Size        : 3145728
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 1
    YPanStep    : 1
    YWrapStep   : 0
    LineLength  : 4096
    Accelerator : No
# grep -H FRAMEBUFFER /boot/config-*
/boot/config-3.15.10-led-vs-alt8:CONFIG_FRAMEBUFFER_CONSOLE=m
/boot/config-3.15.10-led-vs-alt8:CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
/boot/config-3.15.10-led-vs-alt8:CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
/boot/config-4.4.0-un-def-alt1:CONFIG_FRAMEBUFFER_CONSOLE=y
/boot/config-4.4.0-un-def-alt1:CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
/boot/config-4.4.0-un-def-alt1:CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y

В ядрах *-def стоит в yes
CONFIG_FRAMEBUFFER_CONSOLE=y


Решение

Суть решения:
Цитировать
http://www.gentoo.ru/node/22234#comment-163635

в вики же черным по белому написано

If you have blackscreens on boot, it may be because you've built both Framebuffer Console support and the i915 driver (with KMS enabled) as modules. i915 loads & enables KMS, but fbcon never loads so nothing is displayed.

смените
CONFIG_FRAMEBUFFER_CONSOLE=m
на
CONFIG_FRAMEBUFFER_CONSOLE=y
Цитировать
http://gentoo-en.vfose.ru/wiki/Intel_GMA#Blackscreen

Blackscreen

If you have blackscreen on boot, it may be because you've built both Framebuffer Console support and the i915 driver (with KMS enabled) as modules. The blackscreen is a result of the i945 driver probing for displays before the fbcon module is loaded. As it can't find any console display(because the fbcon driver isn't loaded yet) it simply turns it off.

To solve this you have to set the fbcon module to load at boot:
File: /etc/conf.d/modules

modules="fbcon"


i915 это KMS-драйвер.
Здесь ранее модуль fbcon
# rpm -qf $(find /lib/modules/3.15.10-led-vs-alt8/ -name "*fbcon.ko")
kernel-image-led-vs-3.15.10-alt8

не был загружен
led-vs :

# lsmod
Module                  Size  Used by
msr                     1508  0
uinput                  4528  0
michael_mic             1224  4
arc4                    1256  2
ecb                     1064  0
lib80211_crypt_tkip     4944  1
lib80211_crypt_ccmp     2808  1
ipv6                  211178  16
cpufreq_stats           2136  0
af_packet              18096  2
dm_mod                 55863  0
ohci_pci                1668  0
ohci_hcd               13582  1 ohci_pci
pcmcia                 23060  0
mousedev                6548  0
hp_wmi                  4860  0
sparse_keymap           1817  1 hp_wmi
sdhci_pci               9088  0
sdhci                  16570  1 sdhci_pci
mmc_core               58128  2 sdhci,sdhci_pci
ppdev                   3804  0
snd_intel8x0           18636  1
yenta_socket           13812  0
pcmcia_rsrc             6433  1 yenta_socket
firewire_ohci          20772  0
firewire_core          32346  1 firewire_ohci
snd_ac97_codec         68581  1 snd_intel8x0
ac97_bus                 576  1 snd_ac97_codec
snd_pcm                43836  2 snd_ac97_codec,snd_intel8x0
snd_timer              10802  1 snd_pcm
snd                    32012  6 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm
soundcore               3156  1 snd
led_class               1751  1 sdhci
pcmcia_core             7578  3 pcmcia,pcmcia_rsrc,yenta_socket
tifm_7xx1               2520  0
microcode               7277  0
crc_itu_t               1007  1 firewire_core
tifm_core               2798  1 tifm_7xx1
pcspkr                  1036  0
ipw2200                99620  0
libipw                 16391  1 ipw2200
psmouse                57032  0
lib80211                2287  4 lib80211_crypt_ccmp,lib80211_crypt_tkip,libipw,ipw2200
cfg80211              131619  2 libipw,ipw2200
lpc_ich                11400  0
rfkill                  5843  3 cfg80211,hp_wmi
sr_mod                 10175  0
led_triggers            3153  3 mmc_core,rfkill,led_class
mfd_core                1980  1 lpc_ich
led_core                1084  2 led_triggers,led_class
regulator              25067  3 mmc_core,sdhci,mfd_core
cdrom                  23617  1 sr_mod
8250_pci               23927  0
thermal                 9416  0
fan                     1556  0
wmi                     5483  1 hp_wmi
battery                 5344  0
parport_pc             21733  0
parport                20824  2 ppdev,parport_pc
8250                   23165  1 8250_pci
serial_core            13739  1 8250
tpm_infineon            4100  0
uhci_hcd               14160  0
ehci_pci                2472  0
ehci_hcd               27620  1 ehci_pci
tpm                    14484  1 tpm_infineon
usbcore               106762  5 uhci_hcd,ohci_hcd,ohci_pci,ehci_hcd,ehci_pci
usb_common              1056  1 usbcore
acpi_cpufreq            4340  0
processor              18545  2 acpi_cpufreq
ac                      2348  0
ext4                  248930  3
crc16                    995  1 ext4
mbcache                 3981  1 ext4
jbd2                   38246  1 ext4
ata_generic             2064  0
pata_acpi               1684  0
atkbd                  10288  0
libps2                  3011  2 atkbd,psmouse
serio_raw               2668  0
ata_piix               17876  4
i915                  479866  2
libata                112628  3 pata_acpi,ata_generic,ata_piix
i2c_algo_bit            3430  1 i915
vga_switcheroo          5188  1 i915
drm_kms_helper         28207  1 i915
firmware_class          4126  4 drm_kms_helper,pcmcia,microcode,ipw2200
drm                   157628  5 i915,drm_kms_helper
i2c_core               13358  4 drm,i915,drm_kms_helper,i2c_algo_bit
intel_agp               6400  0
intel_gtt               7385  3 i915,intel_agp
agpgart                17239  3 drm,intel_agp,intel_gtt
video                   9030  1 i915
thermal_sys            13019  4 fan,video,thermal,processor
hwmon                   1720  1 thermal_sys
evdev                   6536  13
button                  2986  1 i915

Если с
# grep FRAMEBUFFER_CONSOLE= /boot/config-3.15.10-led-vs-alt8
CONFIG_FRAMEBUFFER_CONSOLE=m

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

Чтобы исправить эту проблему, необходимо fbcon добавить в список загружаемых модулей
# echo fbcon >> /etc/modules

чтобы файл /etc/modules привести к виду
# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.

button
fbcon

и тогда на последующей загрузке системы  модуль fbcon загрузится,
# lsmod|grep fbcon
fbcon                  26856  72
bitblit                 3182  1 fbcon
fbcon_rotate            1390  1 bitblit
fbcon_ccw               3598  1 fbcon_rotate
fbcon_ud                3597  1 fbcon_rotate
fbcon_cw                3545  1 fbcon_rotate
softcursor               801  4 fbcon_cw,fbcon_ud,fbcon_ccw,bitblit
font                    6928  1 fbcon
tileblit                1319  1 fbcon

а содержимое виртуальных терминалов отобразится.


В решении этой проблемы, огромная благодарность выражается:
- за наводку на решение проблемы, Хихину Руслану и русскоговорящим гентушниками ресурса www.gentoo.ru;
- англоговорящим гентушникам ресурса gentoo-en.vfose.ru за объяснение сути проблемы и решение.


Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Отправлен багрепорт:
Ошибка 31728 - Чёрный экран в виртуальных терминалах с ядром led-vs
https://bugzilla.altlinux.org/show_bug.cgi?id=31728