Ссылка на оригинал: http://ru.gentoo-wiki.com/HOWTO_fbsplash
С версии: 1.2
Во первых я хочу выразить благодарность gentoo-разработчику Spock за разработку gensplash (fbsplash and splashutils) и vesafb-tng. Как альтернативу этому how-to, вы можете попробовать Spock's Gensplash-in-5-easy-steps How-to.
Gensplash - это проект основаный Spock`ом, цель которого — создание набора инструментов, способных "обогатить" процесс загрузки Gentoo (отображение сообщений, анимации, полос состояния, и т. д.).
Fbsplash - это часть gensplash проекта. Согласно документации по fbsplash, "framebuffer splash - это особенность ядра которая разрешает отображать фоновые изображения на выбранных консолях и переключать первую консоль в так называемый безмолвный режим (silent mode),в то время когда система загружается/перезагружается/выключается. Доступ до устройства fbsplash осуществляется путем обращения к /dev/fbsplash. Для работы с fbsplash, требуется устройсво поддерживающее framebuffer.
Устройство frame buffer обеспечивает уровень абстракции устройствам вывода графики, что обеспечивает буфер кадров некоторых видеоустройств и интерфейс доступа к ним для программного обеспечения, т. е. программе не обязательно знать о существовании низкоуровневых системных вызовов, регистров и т. д. Доступ к устройству осуществляется через определенные файлы, обычно расположенные в ветке /dev дерева каталогов, в частности /dev/fb*.
Существует множество различных frame buffer устройств.
Некоторые из них, стандартные поддерживают большинство современных видеокарт:
vesafb (vesa frame buffer);
vesafb-tng (vesa frame buffer нового поколения).
Другие специфичные, будут работать только с определенными моделями:
rivafb (может работать с nvidia видеокартами);
radeonfb (может работать с ati видеокартами).
Предполагается, что Fbsplash будет работать на любом из frame buffer устройств (и вообще на любой видеокарте способной на 8/15/16/24/32 битную цветовую гамму и directcolor/pseudocolor режимы).
В дальнейшем как пример используется vesafb-tng frame buffer устройство. Также подразумевается что вы используете Gentoo дистрибутив.
Code: Emerging splashutils & themes |
# emerge -va splashutils splash-themes-gentoo splash-themes-livecd |
Во первых убедитесь что fbsplash и vesafb-tng заплаты установлены в вашем ядре. Начиная с версии 2.6.10 ( а может и раньше ) всё это входит в gentoo-sources. Если у вас нет этих заплат вы можете взять их с Spock's homepage
Во первых нужно включить поддержку vesafb-tng frame buffer в вашем ядре (вы можете пропустить этот шаг если у вас уже настроен framebuffer драйвер отличный от vesa-tng, например i810fb):
Device Drivers ---> Graphics support--->: <*> Support for frame buffer devices <*> VESA VGA graphics support VESA driver type (vesafb-tng) (1280x1024@60) VESA default mode
Еще вам нужна поддержка fbsplash в вашем ядре.
Device Drivers > Graphics support > Console display driver support: <*> Framebuffer Console support <*> Support for the framebuffer splash
Если вы хотите загружать initramfs изображение динамически во время загрузки ( смотрите "Загрузка initramfs изображений динамически во время загрузки" раздел этого howto), вы можете включить еще одну специальную опцию. Если вы ещё не знаете что хотите делать, включите её все равно ( это не повредит :)
Device Drivers > Block devices: <*> RAM disk support (4096) Default RAM disk size (kbytes) (NEW) [*] Initial RAM disk (initrd) support
Initial RAM disk (initrd) support теперь (в ядре 2.6.22) находится в General setup.
# cd /usr/src/linux
Вы должны убедится что не осталось файлов после предыдущей компиляции в каталоге вашего ядра:
# make mrproper
Теперь настраиваем ядро.
# make menuconfig
После того как вы настроили ваше ядро, откомпилируйте (Важно: этот шаг нужно сделать до установки splashutils). "make" скомпилирует одновременно и образ ядра('make bzImage') и модули ('make modules').
# make
Необходимо запустить genkernel со следующими ключами:
# genkernel --gensplash=livecd-2006.0 --gensplash-res=1280x1024 --menuconfig all
где ключи означают следующее:
--gensplash=livecd-2006.0 - использовать тему livecd-2006.0 (из пакета splash-themes-livecd),
--gensplash-res=1280x1024 - при загрузке необходимо использовать разрешение 1280x1024,
--menuconfig - необходимо запустить ncurses конфигуратор ядра,
all - компилировать ядро, модули и initrd образ.
Теперь настало время для установки splashutils. Splashutils это ПО используемое для загрузки изображений (а также перекодировки jpg, png).
# emerge splashutils
Конечно, /usr/src/linux должна ссылаться на исходники с установленными заплатами..
Теперь ваше ядро и система подготовлены для того чтобы показать splash screen. Для завершения компиляции и установки вашего нового ядра осталось сделать следующее.
Если /boot расположен на отдельном разделе подмонтируйте его.
mount /boot
Затем инсталируйте модули и образ ядра.
make modules_install
make install
Приведенных выше инструкций (а также второй части следующего howto, Configuring your bootloader) достаточно, чтобы получить splash screen после того как ядро будет загруженно. Однако если вы хотите чтобы сексапильная девка с пингвином на маечке появлялась раньше (сразу после инициализации - vesafb-tng), вам понадобится initramfs.
(Цитата Spock'а): "Initramfs (initial ramfs) это кусок кода который распаковывает сжатый cpio образ во время загрузки ядра.
Чтобы использовать initramfs его надо сначала создать.Образ initramfs должен содержать:
картинки,которые будут использоваться как фон;
необходимы файлы конфигурации;
утилиту помощника (splash_helper).
Изображения и конфигурационные файлы вместе образуют тему gensplash.
Существует два пути для использования initramfs image:
компиляция initramfs image непосредственно в ядро;
загрузка initramfs image динамически во время загрузки системы (с использованием 'initial ram disk' - initrd).
Вы можете сами выбирать вариант,который вам по душе. .
Сначала удалите старый образ initramfs:
# rm /usr/src/linux/usr/initramfs_data.cpio.gz
Теперь создайте новый образ initramfs, содержащий изображения, конфгурационные файлы и userspace helper. Проще всего будет сделать это при помощи splash_geninitramfs (идущим в составе splashutils). Его использование похоже на утилиту 'splash' из пакета bootsplash.
# splash_geninitramfs -v -g /usr/src/linux/usr/initramfs_data.cpio.gz -r 1024x768 emergence
При компиляции образа initramfs непосредственно в ядро, вам придется пересобрать ядро (этого недостатка лишен способ с использованием initrd):
# cd /usr/src/linux # touch usr/initramfs_data.cpio.gz # make bzImage # mount /boot # make install
Этот вариант практически идентичен сборке образа initramfs вместе с ядром. Различие заключается в том, что вместо создания образа внутри ядра (и последующей сборке его коммандой 'make' и копированием в точку монтирования /boot при помощи 'make install'), вы создадите образ initramfs как отдельный (initrd) файл и вам не придется пересобирать ядро. Однако, придется добавить строчку в конфигурационный файл загрузчика (по которой он найдет initrd файл). Этим мы и займемся в этой части howto
Сначала при помощи splash_geninitramfs создадим initrd файл (который содержит изображения, конфиги и userspace helper):
# mount /boot # cd /etc/splash # splash_geninitramfs -v -g /boot/fbsplash-emergence-1024x768 -r 1024x768 emergence
Как видно файл будет создан в точке монтирования(или каталоге) /boot.
К сожалению, по словам Spock'а,"вы не сможете дописать новую initramfs информацию к initrd образу". Это означает, что данной возможностью не смогут воспользоваться пользователи genkernel ядер, т. к. genkernel создает собственный образ initrd для процесса загурзки.
solshark [solshark_at_rambler_dot_ru]: genkernel 3.3.6 позволяет сделать так:
genkernel --gensplash=DangerGirl initrd
Так что теперь и для пользователей genkernel есть возможность воспользоваться данной фишкой.
Если вы не меняете ядро, то
просто поменяйте строку описания initrd
в grub.conf с:
root=/dev/ram0 real_root=/dev/$ROOT initrd (hd0,0)/boot/initrd
на:
root=/dev/$ROOT initrd (hd0,0)/boot/fbsplash-emergence-1024x768
Стандартная тема 'emergence' и её конфигурационные файлы находятся в /etc/splash/emergence.
Если хотите создать новую (например с названием 'newtheme'), вам следует:
1. создать для неё каталог в /etc/splash:
# mkdir /etc/splash/newtheme
2. создать каталог 'images' в /etc/splash/newtheme:
# mkdir /etc/splash/newtheme/images
и скоприовать туда картинки (в форматах png/jpg) которые будут использованы в теме.
3. создать необходимые конфигурационные файлы. Они должны иметь расширение *.cfg и находиться в каталоге темы (/etc/splash/newtheme). Образцы конфигруационных файлов можно посмотреть в теме ('emergence'):
# ls -l /etc/splash/emergence/ images/ 1024x768.cfg 1280x1024.cfg 800x600.cfg
Очень важно убедиться в том в опциях 'jpeg=' и 'silentjpeg=' (в *.cfg файлах) прописаны корректные ссылки на файлы с изображениями (в каталоге/etc/splash/newtheme/images). Если вы не используете jpeg для создания темы, замените опции на 'pic=' и 'silentpic='.
Для более близкого знакомства с форматом тем fbsplash, изучите документацию пакета splashutils:
# less /usr/doc/splashutils-version/theme_format.gz
Так же Spock сделал удобную утилиту bootsplash2fbsplash (этот скрипт идет в комплекте со splashutils) ,который сделает легким преобразование тем bootsplash формат gensplash.
Например если у вас есть тема 'gentoo-highquality' ,расположенная в /etc/bootsplash ,вам нужно только скомандовать(от рута):
# bootsplash2fbsplash gentoo-highquality
и утилита сделает gensplash-совместимую тему в каталоге /etc/splash (/etc/splash/gentoo-highquality) со всеми необходимыми файлами.
Для создания нового образа из темы которую вы только что сделали(пусть ее имя 'newtheme',а разрешение 1280x1024), вам необходимо использовать splash_geninitramfs.
Если вы решили вкомпилировать образ в ядро(первый вариант):
# splash_geninitramfs -v -g /usr/src/linux/usr/initramfs_data.cpio.gz -r 1280x1024 newtheme # cd /usr/src/linux # touch usr/initramfs_data.cpio.gz # make bzImage # mount /boot # make install
Если вы используете initrd (второй вариант):
# mount /boot # splash_geninitramfs -v -g /boot/fbsplash-newtheme-1280x1024 -r 1280x1024 newtheme
Вот что означают опции splash_geninitramfs:
-v splash_geninitramfs выводит дополнительную информацию -g указывает splash_geninitramfs создать образ initramfs (/usr/src/linux/usr/initramfs_data.cpio.gz или /boot/fbsplash-newtheme-1280x1024) -r говорит splash_geninitramfs использовать разрешение 1280x1024 -'newtheme'указывает splash_geninitramfs искать .cfg файлы в каталоге /etc/splash/newtheme
Для просмотра описания всех опций splash_geninitramfs' введите:
# splash_geninitramfs --help
Последний пункт в этой части how-to,полезный совет из документации splashutils':
Если вы хотите сохранить немного памяти и не планируете использовать все доступные разрешения вы можете скопировать .cfg файлы и фоновые картинки только для того разрешения,которое вы используете.
А теперь пришло время настроить ваш загрузчик.
Вот опции,которые необходимо добавить в конфигурационный файлы grub(lilo):
1. Необходимо указание устройства frame buffer.Вот как это может выглядеть например для драйвера vesafb-tng:
video=vesafb:ywrap,mtrr,1024x768-16@85
Вышеприведенный пример указывает на то,что мы хотим использовать разрешение 1024x768, 16 бит цвет и частоту обновления 85Hz. Если вы используете vesafb-tng, вам также необходимо удалить опцию 'vga=' из файла конфигурации вашего загрузчика(эта опция используеться только 'обычными' vesafb frame buffer устройствами):
# НЕ СТАВЬТЕ опцию 'vga=' для vesafb-tng (если она стоит,то удалите ее): vga=791 vga=0x517
2. fbsplash'у необходимы свои параметры:
splash=verbose,theme:emergence
Сначала fbsplash выбирает режим (в примере используется режим 'verbose' ). Вот цитата из документации по fbsplash "fbsplash может работать в двух режимах: verbose и silent. Первый режим подразумевает простую консоль с фоновым рисунком. Режим silent был впервые реализован в bootsplash. Когда этот режим включен, консоль переключается в графический режим. При этом, текст не печатается. Все что будет отображатся в этом режиме зависит от программ, запущенных в пользовательском пространстве. Таким образом, может быть реализован, например, индикатор прогресса загрузки.
Вторая часть парметра fbsplash позволяет указать какую тему нужно использовать (в примере используется стандартная тема 'emergence').
Для работы fbsplash необходимо указать оба параметра: режим и тему.
3. Если вы решили использовать initrd (посмотрите предыдущую главу - Загрузка образа initramfs), вам необходимы дополнительные опции в конфигурации загрузчика:
initrd /boot/fbsplash-emergence-1024x768 # Grub initrd = /boot/fbsplash-emergence-1024x768 # Lilo
В приведенном примере подразумевается?что имя рамдиска fbsplash-emergence-1024x768 (и он размещен в каталоге или разделе /boot).
Следующие примеры для обоих загрузчиков grub и lilo. Используется тема 'newtheme', разрешение 1280x1024, 32 бит цвети частота обновления 70Hz. Указан режим fbsplash 'silent' и используется initrd файл.
title Gentoo root (hd0,0) kernel (hd0,0)/kernel-2.6.8-gentoo-r1 root=/dev/hda3 video=vesafb:ywrap,mtrr,1280x1024-32@70 splash=silent,theme:newtheme initrd (hd0,0)/fbsplash-newtheme-1280x1024
Замените (hd0,0) своим загрузочным разделом (или,если /boot не на отдельном разделе,используйте корневой раздел добавив '/boot' к путям образа ядра и initrd)
Пользователи genkernel должны использовать что-то типа этого(все в одной строке):
kernel (hd0,0)/kernel-2.6.8-gentoo-r1 init=/linuxrc root=/dev/hda3 video=vesafb:ywrap,mtrr,1280x1024-32@70 splash=silent,theme:newtheme
image=/boot/kernel-2.6.8-gentoo-r1 label = "Gentoo" root = /dev/hda3 append="video=vesa:ywrap,mtrr,1280x1024-32@70 splash=silent,theme:newtheme" read-only initrd = /boot/fbsplash-newtheme-1280x1024
Не забудьте запустить lilo после изменения lilo.conf:
# mount /boot # lilo -v
После ребута и вы получите графическую загрузку.
Если вы хотите чтобы на всех консолях был сплеш (картинка из режима 'verbose'),а не только на первой,то отредактируйте /etc/conf.d/splash установив нужные опции и и добавьте splash в ваш стандартный уровень запуска:
# rc-update add splash default
Если вы используете bootsplash, удалите его из уровня запуска:
# rc-update del bootsplash
(Jakub) Я думаю этот раздел должен состоять из трех частей:
Вступление: Gensplash работает на других дистрибутивах.
Что нужно сделать по-другому (в сравнении с этим руководством) - к примеру из-за отсутствия emerge. Это касается всех дистрибутивов не подобных Gentoo.
Какие дополнительные действия нужно предпринять - например модификация загрузочных скриптов. Тоже для не Gentoo дистрибутивов.
Другая специфика не охваченная предыдущими двумя разделами.
Различия
Наложение патчей на ядро - необходимо. Мы не используем gentoo-dev-sources (хотя все возможно)
Конфигурация/сборка ядра - из-за невозможности использования genkerel.
Установка splashutils - нет package.keywords, нет emerge. Ручками:). Добавить ссылки. Предложение перейти на Gentoo было бы своевременно.
Добавление splash screen на все терминалы(и удаление bootpslash) - скорее всего зависит от дистрибутива. Способ для Gentoo скорее всего работать не будет (очевидно).
Модификация загрузочных скриптов потребуется для работы индикатора прогресса. Два варианта:
с использованием bootsplash (простой)
без использования bootsplash (более сложный)
Вариант для Debian упоминался Spock'ом на forums.gentoo.org.
Если у вас splashutils версии 0.9-pre08 и новее и каталог /usr монтируется с другого раздела, gensplash должен работать "из коробки" (без напильника). Однако, если у вас более древняя версия splashutils и, по каким-либо причинам, нет возможности ее обновить следуйте нижеописанным инструкциям.
Программы и библиотеки, которые нужны splash_util'у чтобы запустить fbset и отобразить вашу сплешку расположены в /usr/bin и /usr/lib. И если эти каталоги находятся на других разделах (например при использовании RAID или LVM2 архитектуры), они могут быть недоступны (не примонтированы)в момент, когда они нужны splash_utils и вы не сможете увидеть свою замечательную сплешку.
Как решить ? Скопируйте их в место где они доступны как описано в (спасибо aslocum и форумам Gentoo) Gensplash-How-to with progressbar!!!!! треде:
# cp /usr/bin/fbset /sbin # cp /usr/lib/libjpeg.so.62 /lib # cp /usr/lib/libpng.so.3 /lib
поправьте /sbin/splash (например при помощи nano, набрав nano -w /sbin/splash) и приведите строку 31 к виду:
res=`/sbin/fbset | grep "^mode" | sed -r 's/mode "([0-9]+x[0-9]+).*/\1/'`
Где надо только прописать /sbin/ перед fbset. Сохраните результат и выйдите из редактора, и ваша сплешка должна появиться.
Вы наверное заметили,что фоновое изображение загружается с небольшой задержкой,даже если вы используете образ initramfs .До этого момента используется разрешение 640x480 и черно-белая цветовая гамма.
Такое положение дел нормально. Единственным выходом (чтобы получил фон как можно раньше) будет использование драйвера vesafb вместо vesafb-tng. Вот ответ Spock'а по этому поводу: "Образ initramfs используется,чтобы подключить корневую ФС ,и до того как инициализируется кадровый буфер,так что не волнуйтесь по этому поводу.Как вы заметили, компъютер загружается в текстовом режиме,а не в графическом. Графический режим устанавливается после инициализации подсистемы кадрового буфера. Но до этого момента должна произойти инициализация других вещей,а это требует времени.Вот почему в течение секунды-двух вы видите сообщения ядра. Вы наверно скажете,что с vesafb у вас такого не было. И будете правы. Но vesafb исключение,а не правило (его инициализация происходит во время загрузки ядра) . Все остальные кадровые драйверы(vesafb-tng, rivafb, radeonfb)инициализируются с подсистемой fbdev".
Из форумов Gentoo:
Оффлайновая документация:
Документация по Fbsplash (/usr/src/linux/Documentation/fb/splash.txt).
Документация по кадровым буферам (/usr/src/linux/Documentation/fb/framebuffer.txt).
Документация по splashutils (/usr/share/doc/splashutils-0.9_pre07/).