загрузка видео-драйверов

Все LiveCD пока опираются на Vesa-драйвер. Но сие не катит для Xen -- не признает он BIOS-зависимых драйверов. Посему встает задача загрузить-или-не-загрузить нужный не-VESA-видео-драйвер с параметрами.

В Gentoo initrd не поддерживает загрузку видеодрайверов. То есть в Gentoo при желании получить нужный видеорежим сразу (в initrd) нужно все видеодрайвера компилить статически. И все равно при этом не понятно -- как в таком случае передать драйверам параметры типа
video=nvidiafb:1024x768-32@85 Ибо без параметров хавается совсем не тот режим. И даже если не компилить драйвера статически, а ждать запуска udev (он подгружает драйвер автоматом). то опять проблема с передачей параметров остается. Как и проблема не подгружать данный драйвер по udev (как это делается?).

Нужны советы.

PS: экспериментировал с initrd от RHEL5. Цель -- проверить, что с initrd от Gentoo все в порядке и он освобождает initrd-память (память, выделенную под initrd). Вопрос вызывало сообщение init-скриптов, что найдено доступной памяти на 6 мег меньше, чем есть на машинах.

Выяснилось, что 6 Мег уходит скорее всего под ядро, ибо и с initrd от RHEL5 размер общей памяти (сообщаемой и по free) не увеличился.

Кроме того, в RedHat init-скрипты умеют работать и при смонтированных уже /proc, /sys /dev. В Gentoo наличие смонтированных указанных каталогов вызывало панику (initrd от RedHat монтирует указанные каталоги и не размонтирует их при запуске init на корневом разделе). В Arch-linux в initrd, как и в RedHat, для загрузки драйверов используется udev. Но при передаче управления init на корневом разделе все смонтированные каталоги размонтируются и сам udev останавливается.

В общем, модификация основных rc от Gentoo на предмет анализа наличия смонтированных /proc /sys /dev не помешала бы. Как и использование в initrd udev для подгрузки драйверов. А то нынче, например, грузятся (пытаются подгрузиться) все скази-драйвера. Даже если у нас такого железа и нет.

PPS: а размер памяти, занимаемого xen-монитором, зависит от общей памяти машины. Чем больше RAM на машине, тем больше памяти занимает и xen-монитор (версии 3.0.3 ... 3.1)

Текущее состояние по этому вопросу

Из-за того, что XEN-монитор не позволяет в dom0 использовать x86-эмуляцию, vesa-видеодрайвера исользовать нельзя. Но решение по загрузке видео-драйвера и установке режима уже вырисовалось.

В linux-ядре при конфигурации выбираем все видеодрайвера (кроме vesa) как модули. Параметр video и vga в рагрузчике -- не указываем. Сначала загрузка идет в режиме 80x25. Потом стартует udev и грузит нужный видеодрайвер. У меня пока грузится radeonfb. Он по умолчанию устанавливает режим 1024x768-24. Чтоб устанавливался другой режим -- прописал в /etc/modules.d/video (создал новый файл) строчку
option radeonfb mode_option=1024x768-32@85
и выполнил modules-update. Так приходится делать, ибо сам драйвер при загрузке в виде модуля на парамер загрузки video= не смотрит. Ну и шут с ним. Но такое задаие режима -- не правильно. Ибо драйвер вообще может не иметь такого параметра (или это -- обязательный параметр?) Правильнее -- задать при загрузке параметр типа xscreen=1024x768-32@85 и установить разрешение экрана в rc-скрипте. При этом будет создан файл /etc/fb.modes. Текущая задача -- преобразовать вывод ddcxinfo-knoppix (формат xfree86) в формат fbset

Скрипт написан

Он в конце. Попутно выяснилось, что dom0 c xen-3.0.3-монитором зависает при попытке установить видеорежим при помощи fbset. То же ядро, только собранное нормально (без xen) -- не зависает


#!/usr/bin/perl -w

use strict;

my @Depth = ( 8, 16, 32);

my $date=localtime();
print "# /etc/fb.modes\n";
print "# produced $date\n";
print "# modes are detected by 'ddcxinfo-knoppix -monitor'\n";
print "# and converted to fb.modes format by ddc2fbset perl script\n\n";

while(<>) {
chomp;
my ($ModeLine,$ModeName,$DotFrequency,$h1,$h2,$h3,$h4,$v1,$v2,$v3,$v4,$hs,$vs)=split " ";
if ( $ModeLine =~ "ModeLine" ) {
print "# ", join( " ",$ModeLine,$ModeName,$DotFrequency,$h1,$h2,$h3,$h4,$v1,$v2,$v3,$v4,$hs,$vs),"\n";

my $hs2="high";
my $vs2="high";
if( $hs =~ "-") { $hs2="low"; };
if( $vs =~ "-") { $vs2="low"; };

my $d;
foreach $d ( @Depth ) {
my $VerticalFrequency = sprintf( "%0.2f", $DotFrequency * 1000000 / ($h4 * $v4));
my $HorizontalFrequency = sprintf( "%0.2f", ($DotFrequency * 1000 / $h4));
my $DotPicoseconds = int(1000000 / $DotFrequency);

my $LeftMargin = $h4 - $h3;
my $HSyncLength = $h3 - $h2;
my $RightMargin = $h2 - $h1;

my $UpperMargin = $v4 - $v3;
my $VSyncLength = $v3 - $v2;
my $LowerMargin = $v2 - $v1;

my $ModeName2 = $h1 . "x" . $v1 . "-$d@" . int($VerticalFrequency);

print "mode " . '"' . "$ModeName2" . '"' . "\n";
print " # D: $DotFrequency MHz H: $HorizontalFrequency kHz V: $VerticalFrequency Hz\n";
print " geometry $h1 $v1 $h1 $v1 $d\n";
print " timings $DotPicoseconds $LeftMargin $RightMargin $UpperMargin $LowerMargin $HSyncLength $VSyncLength\
print " hsync $hs2\n";
print " vsync $vs2\n";
print "endmode\n\n";
}
}
}

Вопрос не много

Вопрос не много ни к месту, но все же.
А реально ли к dom0 прикрутить дрова от Nvidia?

Наверно реально

Ибо кроме vesa все должно работать... У меня на другой машине nVidia Corporation NV4 [RIVA TNT] и dom0 проблем с ней не имеет (грузит при загрузке)

Что ж, сессию

Что ж, сессию сдам можно будет и попробовать поиграться с XEN'ом.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".