Ключевые слова:console, linux, color, boot, patch, (найти похожие документы)
From: Павел Зайцев (Stealth) <http://stealth.pp.ru/>
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Отображение картинки на этапе загрузки Linux
Оригинал: http://linux.net.ru/node/view/220
Красивая Linux консоль - это реально!
Автор: Павел Зайцев (Stealth) <http://stealth.pp.ru/>
Сайт: http://linux.net.ru
Года три назад довелось мне поставить SUSE Linux (тогда еще версии
7-8), как же красиво была оформлена загрузка ядра! Прошли года,
любимая Слака уже доросла до 10 версии, а ничего похожего так и не
было ;) Решив устроить консольку покрасивее вспомнил про SUSE. Нашел
всё, что понабилось при для украшения и приступил к делу...
Посмотреть скриншот загрузки можно тут, это и должно получиться в
итоге (http://bootsplash.de/files/themes/screenshots/Theme-TuxInfo-Slackware-silent.png).
Программа, которая должна внести красоту в мир черной конслои Linux
называется bootsplash. Точнее это патч для ядра и небольшой набор
утилит. Официальный сайт проекта http://www.bootsplash.org
почему-то не развивается, но немецкий сайт http://www.bootsplash.de
оказался к великому удивлению очень часто обновляемым и интересным.
Подготовка
----------
Итак, нам понадобятся(в квадратный скобках указаны названия файлов,
актуальные на 1 июля 2004 года):
1) Исходники ядра [linux-2.6.7.tar.bz2] (http://kernel.org)
2) Патч для ядра [bootsplash-3.1.4-sp2-2.6.7.diff](обязательно
проверьте, чтобы версия ядра и патча совпадали) (http://www.bootsplash.de/)
3) Набор утилит bootsplash [bootsplash-3.1.tar.bz2](bootsplash-3.1.tar.bz2)
ftp://ftp.suse.com/pub/people/stepan/bootsplash/rpm-sources/bootsplash/bootsplash-3.1.tar.bz2
4) Тему для загрузки [Theme-TuxInfo-Slackware.tar.bz2] (Великое
множество тем можно найти всё там же на http://www.bootsplash.de)
5) Терпение [/dev/terpenie] (http://terpenie.sf.net) :)
Примечание: архив с набором утилит bootsplash-3.1.tar.bz2 с сайта bootsplash.de
почему-то не хочет распаковываться, поэтому лучше скачать из первоисточника
ftp://ftp.suse.com/pub/people/stepan/bootsplash/rpm-sources/bootsplash/bootsplash-3.1.tar.bz2
Приступим...
------------
1) Распаковываем архив с программой и копируем нужные утилиты в /sbin/
# tar -xvjf bootsplash-3.1.tar.bz2
# cd bootsplash-3.1/Utilities
# make
# cp -p splash /sbin/
# cp -p fbmngplay /sbin/
# cp -p fbresolution /sbin/
# cp -p fbtruetype /sbin/
# cp -p splashpbm /sbin/
2) Создаем директорию /etc/bootsplash:
# mkdir /etc/bootsplash
Создаем директорию для тем:
# mkdir /etc/bootsplash/themes
3) Устанавливаем нашу тему
# tar -xvjf Theme-TuxInfo-Slackware.tar.bz2
# cp -r Theme-TuxInfo-Slackware/ /etc/bootsplash/themes/
Создаем символическую ссылку на нашу тему
# ln -s /etc/bootsplash/themes/Theme-TuxInfo-Slackware /etc/bootsplash/themes/current
4) Создаем загрузочный файл initrd.splash:
# /sbin/splash -s -f /etc/bootsplash/themes/current/config/bootsplash-1024x768.cfg >> /boot/initrd.splash
5) Правим LILO:
Открываем lilo.conf
# mcedit /etc/lilo.conf
и добавляем initrd=/boot/initrd.splash к существующей загрузке ядра,
чтобы получилось примерно следующее
image=/vmlinuz
root=/dev/hda2
label=Linux
initrd=/boot/initrd.splash
read-only
Влючаем фреймбуфер на частоте 1024x768
vga=791
В опции загрузки ядра еще можно добавить "splash=verbose" или
"splash=silent" для уточнения варианта запуска темы.
append="splash=verbose"
Если хотите, чтобы при загрузке была полоска прогресс-бара и ничего
больше, то используйте append="splash=silent" ,но тут еще на до
потрудиться над заполнением этого градусника, а точнее проставить
контрольные точки в /etc/rc.d/rc.S , /etc/rc.d/rc.M и /etc/rc.d/rc.6 .
Для начала создаем файл /etc/rc.d/rc.bootsplash следующего содержания:
#!/bin/sh
function progressbar(){
if [ $# != 1 ]
then
echo "Use: progressbar {progresso}"
exit 1
fi
echo "show $(( 65534 * $1 / 100 ))" > /proc/splash
}
Устанавливаем права доступа на запуск
# chmod 755 /etc/rc.d/rc.bootsplash
Теперь добавляем в rc.S и rc.M (в самое начало) запуск rc.bootsplash
. /etc/rc.d/rc.bootsplash
И расставляем значения прогресс-бара
progressbar [число от 0 до 100]
Вот пример как я расставил эти значения:
в rc.S
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /etc/rc.d/rc.bootsplash
progressbar 10
# Mount /proc right away:
/sbin/mount -v proc /proc -n -t proc
........
# Configure ISA Plug-and-Play devices:
if [ -r /etc/isapnp.conf ]; then
if [ -x /sbin/isapnp ]; then
/sbin/isapnp /etc/isapnp.conf
fi
fi
progressbar 20
# This loads any kernel modules that are needed. These might be required to
# use your ethernet card, sound card, or other optional hardware.
if [ -x /etc/rc.d/rc.modules -a -r /proc/modules ]; then
. /etc/rc.d/rc.modules
fi
и так далее до
progressbar 40
в rc.M
. /etc/rc.d/rc.bootsplash
echo "Going multiuser..."
# Screen blanks after 15 minutes idle time.
/bin/setterm -blank 15
# If there's no /etc/HOSTNAME, fall back on this default:
if [ ! -r /etc/HOSTNAME ]; then
echo "darkstar.example.net" > /etc/HOSTNAME
fi
# Set the hostname.
/bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`
progressbar 50
# Initialize PCMCIA devices:
.....
# Start the system logger. Normally this is started by
# rc.inet2 because /usr might be mounted via NFS.
if [ -x /etc/rc.d/rc.syslog ]; then
. /etc/rc.d/rc.syslog start
fi
fi
progressbar 60
# Remove stale locks and junk files (must be done after mount -a!)
/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null
и так далее до
progressbar 100
в rc.6
PATH=/sbin:/etc:/bin:/usr/bin
. /etc/rc.d/rc.bootsplash
/sbin/splash -s -u 0 /etc/bootsplash/themes/current/config/bootsplash-1024x768.cfg
progressbar 90
# If there are SystemV init scripts for this runlevel, run them.
if [ -x /etc/rc.d/rc.sysvinit ]; then
. /etc/rc.d/rc.sysvinit
fi
progressbar 80
# Set linefeed mode to avoid staircase effect.
stty onlcr
Если прогресс-бар не нужен, то в /etc/rc.d/ вообще лезть не надо ;) 6)
Теперь пришло время поковырять ядро ;)
Распакуем ядро в /usr/src/linux-2.6.7 и перейдем в папку с исходиками
Скопируем патч bootsplash-3.1.4-sp2-2.6.7.diff в ту же папку и
применим его
patch -p1 < bootsplash-3.1.4-sp2-2.6.7.diff
Если появляются сообщения об ошибке (FAILED), то версия ядра и патча
не совпадают!
Конфигурирем ядро с поддержкой framebuffer`а и initrd
Почитать про установку ядра 2.6 можно почитать тут
http://linux.net.ru/node/view/121 Для того, чтобы можно было
открыть меню Bootsplash configuration ---> нужно выполнить все
условия:
Processor type and features --->
[ ] Use register arguments (EXPERIMENTAL)
Device Drivers --->
Graphics support --->
[*] Support for frame buffer devices
[*] VESA VGA graphics support
Console display driver support --->
[*] Video mode selection support
<*> Framebuffer Console support
Logo configuration --->
[ ] Bootup logo
Bootsplash configuration --->
[*] Bootup splash screen
И еще включить поддержку INITRD (из-за этого долго не мог понять
почему не открывается меню bootsplash)
Device Drivers --->
Block devices --->
<*> RAM disk support
(4096) Default RAM disk size (kbytes)
[*] Initial RAM disk (initrd) support
Не забудьте отконфигурировать и всё остальное, чтобы не только было
красиво, но и работали девайсы ;)))
Собираем и устанавливаем ядро
#make install; make modules; make modules_install
Нынче установка ядра упростилась и даже не надо отдельно запускать
lilo (если конечно загрузка происходить с /vmlinuz ). Но на всякий
случай можно проверить правильность установки ядра
7) Перезагружаемся и наслаждаемся проделанной работой ;)
Если что-то не получилось или есть какие-то замечания, то оставьте
комментарий к этой статье.
Статью разрешается использовать, соблюдая лицензию GPL. Ссылка на
первоисточник http://linux.net.ru обязательна!
(с) Stealth AKA Павел Зайцев mailto: stealth[at]linux.net.ru