Антон Борисов
Почти каждый из вас в детстве играл в конструктор – собирал железную
дорогу или машинки. По мере взросления у сильной половины человечества игрушки
не исчезают, а только становятся более дорогими. В прошлом номере мы
познакомились с историей развития LinuxBIOS-проекта. Сегодня мы вдохнем жизнь в
barebone-систему на базе EPIA-M и LinuxBIOS.
Приготовления в аппаратной
Что для этого потребуется? Аппаратная часть, которая представлена
материнской платой VIA EPIA-M 10000, корпусом Morex Cubid 3677S, устройством
сохранения FlashROM – RD1-PL производства IOSS. В качестве носителя информации
используем обычный жесткий диск формата 3,5’, плотностью в 160 Гб (кто-то
скажет: «А почему не 500 Гб?» – что ж, у меня не оказалось под рукой
жесткого диска такого объема).
Обратимся на этом этапе к техническим
характеристикам сегодняшних компонентов. Материнская плата – в какой-то степени
шедевр на сегодняшний день. Некоторое время назад компания VIA предложила
форм-фактор для материнских плат mini-ITX – это миниатюризированный вариант
материнских плат, всего-то 17x17 см. На таком пространстве уместился процессор
C3/Nehemiah – разработка компании VIA, созданный на фундаменте достижений
компаний, приобретенных не так давно самой VIA – это Cyrix и WinChip. Тем, кто
заинтересовался историей развития этих процессоров, следует ознакомиться с
материалами [1-3]. Как и на «взрослых» платах, у этого малыша есть северный и
южный мосты, что означает, что есть PCI-слот, правда, всего лишь один, 2
IDE-канала, FireWire-контроллер (кому-то повезет, если приобретет к такой
системе FireWire-переносное устройство информации), 6 портов USB. То есть вы
начинаете понимать, какой универсальный конструктор мы сегодня рассматриваем,
не правда ли?
Помимо «взрослости» данной платы на ней также
есть ставшие уже обычным явлением интегрированные аудио- и сетевой-контроллеры.
Так как стандарт mini-ITX ориентируется на миниатюрность, то разработчикам
пришлось также интегрировать и видео-контроллер. Стоит подчеркнуть наличие
выхода S-Video и возможности построить звук в формате 5+1. Да, самое главное –
процессор на этой модели имеет тактовую частоту в 1 ГГц. Не так чтобы и много,
но, с другой стороны, и немало. Для процессора с такой частотой уже используются
активные системы охлаждения, в то время как на более младших моделях в 800 МГц
ограничились пассивным охлаждением, и поверьте, вполне хватает.
Данного малыша, или правильнее сказать малышку,
следует пристроить в хорошие руки, с хорошим питанием и экологией – все
правильно, надо подобрать правильную «одежду» – корпус. Поэтому для малыша я
выбрал «подростковый» корпус с внешним источником питания Morex Cubid 3677S.
Его габариты предусматривают использование только slim-компонентов –
CD/DVD-привода, HDD-накопителя и FDD-накопителя. К сожалению, от первого и
последнего компонента пришлось отказаться, зато вместо них удалось поставить
HDD 3,5’. Поначалу казалось, что уместить диск такого форм-фактора в столь
тонком корпусе невозможно. Но на практике оказалось иначе. Внешний источник
питания в 62 ватта мощностью подает на внутреннюю плату корпуса 12 вольт,
которые преобразуются в дальнейшем в +12, +5 вольт. Стоит отметить, что
получить 12 вольт можно и от бортовой системы автомобиля. Впрочем, область применения
мини-систем формата mini-ITX заслуживает отдельного разговора. Скажу, что
именно на базе EPIA построены некоторые автомобильные системы.
Сбереги себя сам
Чтобы не получилось ситуации «Знал бы – соломинку подложил», придется
приобрести или одолжить на некоторое время у знакомых технических специалистов
специальное устройство сохранения FlashROM. Под устройством сохранения FlashROM
подразумевается BIOS Savior – это некий симбиоз из 2 микросхем
flash-памяти – одна из которых, оригинальная, находящаяся в PLCC-слоте, –
микросхема, поставляющаяся в составе материнской платы. В ней находится PC
BIOS – в нашем случае это AwardBIOS. Вторая микросхема – резервная, на которую
записываются модификации PC BIOS. Таким образом, у нас получается вариант
устройства с 2 чипами памяти, с помощью переключателя производится выбор,
откуда делать «холодный» старт системы – или с оригинальной микросхемы с AwardBIOS,
или с резервной, на которую мы будем записывать LinuxBIOS (альтернативу AwardBIOS).
Устройство действительно необходимое, поэтому к его приобретению стоит
отнестись с вниманием. При удачном запуске системы вы записываете в
оригинальную микросхему LinuxBIOS и в дальшейшем можете прилепить на системный
блок лейбл – «Designed for LinuxBIOS».
Тонкости охлаждения
И последним аппаратным блоком сегодняшнего нашего конструктора идет жесткий
диск. Я руководствовался при его выборе в первую очередь скоростью вращения
шпинделя – главной характеристикой в конечном итоге был уровень шума. Жесткие
диски со скоростью 5400 об/минуту, по всей видимости, становятся достоянием
истории, поэтому вместо SAMSUNG SV1604N пришлось взять SAMSUNG SP1604N
(скорость вращения шпинделя – 7200 об/минуту). Впрочем, разница в пару
децибелов шума между этими винчестерами не особенно влияет на общий фон. Стоит
приглядеться, как смонтирован жесткий диск на плате. Его пришлось
повернуть с ног на голову в буквальном смысле и положить на радиаторы
охлаждения северного моста (рис. 1). Отмечу, при закрытом корпусе кажется, что
плата жесткого диска соприкасается с крышкой, на самом деле это не так, зазор
все равно остается. Благодаря зазору, а также вентиляторам на процессоре и
вентилятору на самом корпусе перегрева не происходит (рис. 2). Обращу ваше
внимание, что вентиляторы идут с датчиками вращения скорости. Однако на
корпусном вентиляторе скорость в пределах 3000 об/минуту, что характеризует его
как бесшумный, а вот вентилятор на процессоре пришлось заменить – идущий в
составе материнской платы экземпляр обладает «бешеной» скоростью в 6 тыс.
оборотов. Поэтому вентилятор был заменен на аналогичный корпусному. В итоге
температура процессора в работе в рабочем режиме стала выше на 7-8 градусов,
впрочем, не превысив допустимой нормы в 65 градусов Цельсия.

Рисунок 1. Жесткий диск лежит
на радиаторах охлаждения

Рисунок 2. Расположение
элементов охлаждения EPIA-M и дополнительный вентилятор на корпусе Morex Cubid
3677S
Теперь соберем программные компоненты нашей
системы. Это Linux-дистрибутив – Slackware Linux 10.0 [4]. Компоненты
мониторинга температуры – lmsensors [5], i2c [6], hddtemp [7]. Компоненты для
построения LinuxBIOS – сам LinuxBIOS [8]-[9], «полезная нагрузка» (payload)
– etherboot [10], filo [11]. На каком именно дистрибутиве вы будете
собирать, в конечном итоге не принципиально.
Следим за температурой
Описывать установку и настройку системы я не буду. Сразу расскажу, как мониторить
температурные режимы самой платы и жесткого диска. Если в вашем дистрибутиве
используется ядро из серии 2.6, то озадачиваться интеграцией lmsensors и i2c в
ядро, по-видимому, не стоит, т.к. по заявлениям разработчиков данные пакеты уже
есть в составе ядра. Для тех же, кто работает на ядрах линейки 2.4, стоит
прочитать в первую очередь README указанных пакетов, понять, по какому из 3
вариантов установки следует пойти – интеграция непосредственно в ядро и
дальнейшая его пересборка, сборка в качестве отдельных модулей или половинчатая
интеграция с ядром.
Я выбрал вариант сборки в виде отдельных модулей.
wget
http://secure.netroedge.com/~lm78/archive/i2c-2.9.1.tar.gz
tar xzvf i2c-2.9.1.tar.gz
cd i2c-2.9.1
su
make && make install
wget
http://secure.netroedge.com/~lm78/archive/lm_sensors-2.9.1.tar.gz
tar xzvf
lm_sensors-2.9.1.tar.gz
cd lm_sensors-2.9.1
su
make && make install
Добавим в /etc/rc.d/rc.local следующие строки для
загрузки модулей нашей платы EPIA.
# I2C adapter drivers
modprobe i2c-viapro
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe vt1211
/usr/local/bin/sensors -s
Теперь данные о температурном режиме у нас под
рукой. Запускаем:
# /usr/local/bin/sensors
eeprom-i2c-0-50
Adapter: SMBus Via
Pro adapter at 0500
Memory type:
DDR SDRAM DIMM
Memory size
(MB): 256
vt1211-isa-6000
Adapter: ISA adapter
VCore1:
+2.31 V (min = +1.79 V, max = +1.89 V) ALARM
+5V:
+4.66 V (min = +4.73 V, max = +5.24 V) ALARM
+12V:
+12.14 V (min = +10.77 V, max = +13.15 V)
+3.3V:
+3.25 V (min = +3.13 V, max = +3.45 V)
fan1: 3343
RPM (min = 3006 RPM, div = 2)
fan2: 0
RPM (min = 3006 RPM, div = 2)
ERROR: Can't get
TEMP2 data!
Proc Temp:
+44.1C (high = +65C, hyst = +60C)
MB2 Temp:
-28.4C (high = +45C, hyst = +40C)
vid:
+1.850 V (VRM Version 9.1)
Как видите, некоторые значения с датчиков,
отмеченные подстрокой ALARM, не находятся в допустимых пределах. Очевидно, что
формулы для этих значений, записанные в /etc/sensors.conf, не совсем верны,
либо диапазон допустимых значений слишком узок.
Предлагаю не рассматривать полученный результат
слишком критически, ибо в дальнейших релизах этого программного обеспечения
такие неточности будут исправлены. Приступим к настройке мониторинга
температуры жесткого диска.
wget
http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2
tar xjvf
hddtemp-0.3-beta12.tar.bz2
cd hddtemp-0.3-beta12
./configure --with-db-path=/etc/hddtemp.db
--prefix=/usr/local/hddtemp
make && make install
Добавляем в /etc/rc.d/rc.local автозагрузку
службы мониторинга:
/usr/local/hddtemp/sbin/hddtemp
-d -q /dev/hda
Теперь убедимся, что температура жесткого диска в
пределах нормы:
# telnet 127.0.0.1
7634
Trying
127.0.0.1...
Connected to
127.0.0.1.
Escape character
is '^]'.
|/dev/hda|SAMSUNG
SP1604N|35|C|Connection closed by foreign host.
Что же, 35 градусов по Цельсию – вполне
допустимая рабочая температура.
Подведем краткие итоги проделанной работы.
Дистрибутив развернут, мониторинг температуры настроен, что позволяет нам
удаленно по сети следить за температурным режимом. Осталось перевести рельсы на
использование LinuxBIOS.
Полезная нагрузка
LinuxBIOS, который было бы уместнее называть FreeBIOS, является замещением проприетарного
BIOS. С его помощью происходит первичная инициализация устройств в системе и
затем передается управление на payload. Задача payload – загрузить ядро Linux
либо по сети, либо с локального устройства. Нам в первую очередь интересно
посмотреть на загрузку Slackware Linux с жесткого диска, поэтому в качестве payload
выступит FILO – FIle Loader. Займемся подготовкой FILO.
wget
http://te.to/~ts1/filo/filo-0.4.2.tar.bz
tar xjvf filo-0.4.2.tar.bz
cd filo-0.4.2
make
Отредактируем файл Config, заменив содержимое
строки AUTOBOOT_FILE на:
AUTOBOOT_FILE = "hda3:/boot/vmlinuz
oot=/dev/hda3 console=tty0 console=ttyS0,115200"
make
cp filo.elf ~/src/payloads/filo.m2.elf
ELF-образ нашего payload положили в специально
отведенное место и назвали как filo.m2.elf.
С сайта LinuxBIOS возьмем обе ветки, и
стабильную, известную под названием V1, и текущую, которая на данный момент
находится в разработке, версия V2. Как только изменения для рабочей версии
будут завершены и оттестированы, она также станет стабильной. Принципиальные
отличия между версиями все-таки есть – это наличие только во второй версии
поддержки ACPI. Изменен синтаксис файла конфигурации. И самое главное, в новой
версии поменялся каркас построения системного ROM-файла. Считается, что он стал
удобнее для добавления нового аппаратного обеспечения.
wget
http://snapshop.linuxbios.org/freebios--devel--1.0--base-0.tar.bz2
tar xjvf freebios--devel--1.0--base-0.tar.bz2
cd freebios
Предварительно подготовим VIDEOROM от
интегрированного видеоадаптера на плате:
su
dd if=/dev/mem of=vgabios.bin
skip=1536 count=128
Предполагается, что компоновка и компилирование
происходит на EPIA-M-системе.
Получился файл размером в 64 Кб. Он нам
понадобится в дальнейшем при подготовке системного образа.
В файле freebios/HOWTO/EPIA хранится инструкция
по компоновке LinuxBIOS для EPIA-систем. Воспользуемся ею. Во-первых, нам
потребуется файл конфигурации, в котором указывается для какой системы
подготавливается системный ROM-файл, «полезная нагрузка» (так называемая
секция payload), параметры для порта RS232 и т. п. Приведу файл, который
используется у меня:
#
# LinuxBIOS config file for:
VIA epia-m mini-itx
#
target /home/anthony/epia-m
# via epia
mainboard via/epia-m
# Enable Serial Console for debugging
option SERIAL_CONSOLE=1
#option SERIAL_POST=1
option TTYS0_BAUD=115200
# for VGA support (optional)
option HAVE_FRAMEBUFFER=0
option CONFIG_VGABIOS=1
option CONFIG_REALMODE_IDT=1
dir src/bioscall
option CONFIG_PCIBIOS=1
option
VGABIOS_START=0xfffe0000
addaction romimage dd if=./vgabios.bin
of=romimage bs=65536 seek=2 conv=sync conv=notrunc
# end VGA support
option
CONFIG_EPIAMVERSIONSTRING="5.0.0E-" __DATE__ " " __TIME__
target /home/anthony/src/epia-m/freebios/
option
DEFAULT_CONSOLE_LOGLEVEL=9
option DEBUG=1
# Use 256KB Standard Flash as
Normal BIOS
option RAMTEST=1
option USE_GENERIC_ROM=1
option STD_FLASH=1
option ROM_SIZE=262144
# payload size = 192KB
option PAYLOAD_SIZE=196608
# use ELF Loader to load Etherboot
option USE_ELF_BOOT=1
# Use FILO as our payload
payload /home/anthony/src/payloads/filo.m2.elf
Сохраним конфигурацию в файл config1 и подготовим
Makefile для дальнейшей компиляции следующим образом:
python /home/anthony/src/freebios/util/config/NLBConfig.py
config1 /home/anthony/src/freebios
В итоге получили новую директорию /home/anthony/src/epia-m/freebios,
в которой и будет приготавливаться системный ROM-файл для нашей системы. Не
забудем положить в эту же директорию файл от VIDEOROM.
cd ~/src/epia-m/freebios
make
В результате получили файл romimage. Его-то нам и
нужно записать в чип flash-памяти. Для этой цели в директории ~/src/freebios/util/flash_and_burn
приготовлена утилита записи во flash-память. Соберем ее и посмотрим, какие
параметры ей необходимы.
cd
~/src/freebios/util/flash_and_burn
make
./flash_rom --h
The arguments are:
--h
./flash_rom: invalid
option -- -
usage: ./flash_rom
[-rwv] [-c chipname] [-s exclude_start] [-e exclude_end] [file]
-r: read flash and
save into file
-w: write file into
flash (default when file is specified)
-v: verify flash
against file
-c: probe only for
specified flash chip
-s: exclude start
position
-e: exclude end
postion
If no file is specified,
then all that happens is that flash info is dumped
Необходимо использовать в качестве параметра имя
файла системного ROM. Не забудем переключить с помощью BIOS Savior нужный нам
чип flash-памяти и запустим с правами суперпользователя программу записи во
flash-чип:
su
./flash_rom romimage
The arguments are:
romimage
Calibrating timer
since microsleep sucks ... takes a second
Setting up microsecond
timing loop
332M loops per second
OK, calibrated,
now do the deed
Enabling flash write
on VT8235...OK
Trying
Am29F040B, 512 KB
probe_29f040b:
id1 0x7f, id2 0x45
Trying
At29C040A, 512 KB
probe_jedec:
id1 0xbf, id2 0xb6
Trying
Mx29f002, 256 KB
probe_29f002:
id1 0xbf, id2 0xb6
Trying
SST29EE020A, 256 KB
probe_jedec:
id1 0xbf, id2 0xb6
Trying
SST28SF040A, 512 KB
probe_28sf040:
id1 0x7f, id2 0x45
Trying
SST39SF020A, 256 KB
probe_jedec:
id1 0xbf, id2 0xb6
SST39SF020A found
at physical address: 0xfffc0000
Part is
SST39SF020A
Programming Page:
0063 at address: 0x0003f000
Итак, в чип SST39SF020A записан LinuxBIOS. Во
второй чип мы предварительно записали системный AwardBIOS, с которым
поставлялась эта плата. На всякий случай.
Теперь перейдем на второй компьютер и с помощью
нуль-модемного кабеля подключим порты RS232 на EPIA-M и на нашем компьютере.
Зачем это надо? Для того чтобы отслеживать информацию, выводимую на терминал.
Запускаем терминальную программу minicom.
Устанавливаем нужный COM-порт, скорость в 115200 бод и готовимся к холодному
старту блока с LinuxBIOS на борту. Выключаем EPIA-M и, переведя дыхание,
включаем заново. Смотрим, что же получилось. Привожу не все сообщения, а только
наиболее характерные.
LinuxBIOS-1.0.0
Сбт Июн 25 21:48:38 MSD 2005 starting...
RB!0
LinuxBIOS-1.0.0
Сбт Июн 25 21:48:38 MSD 2005 starting...
80 08 07 0d 0a
01 40 00 04 60 70 00 82 08 00 01
0e 04 08 01 02
20 00 00 00 00 00 48 30 48 2a 40
75 75 45 45 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 21
00 00 00 00 00 00
00 00 03 00 00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
30 33 31 32 37
39 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
Copying LinuxBIOS
to ram.
Jumping to LinuxBIOS.
Выводятся сообщения о номере релиза LinuxBIOS и
времени компиляции. Из flash-памяти образ LinuxBIOS в дальнейшем копируется в
RAM для ускорения процесса загрузки и последующие манипуляции проводятся уже в
ОЗУ.
На определенном этапе вы увидите такое сообщение:
POST: 0x89
POST: 0x70
totalram: 96M
Initializing
CPU #0
На самом деле памяти у меня в системе почти в 2
раза больше – 256 Мб, однако в стабильной ветке LinuxBIOS 1.0 на тот
момент не существовало механизма определения количества ОЗУ. Данная проблема
решена во второй версии LB. Поэтому либо оставим как есть, либо вам
придется, исходя из ваших возможностей, поменять в исходном файле параметр,
задающий количество ОЗУ.
Далее интересная надпись – отработала инструкция
CPUID, и мы видим, что же за чудо выпускает компания VIA:
Max cpuid index
: 1
Vendor ID
: CentaurHauls
Processor Type
: 0x00
Processor Family
: 0x06
Processor Model
: 0x09
Processor Mask
: 0x00
Processor Stepping
: 0x05
Feature flags
: 0x0380b13d
CentaurHauls когда-то выпускала компания WinChip.
Следующая запись, заслуживающая вашего внимания:
Welcome to elfboot,
the open sourced starter.
January 2002, Eric
Biederman.
Version 1.2
POST: 0xf8
37:init_bytes() - zkernel_start:0xfff00000 zkernel_mask:0x0000ffff
Found ELF candidate
at offset 0
LinuxBIOS дошел до стадии загрузки «полезной
загрузки» – прошу прощения за тавтологию. В качестве payload у нас выступает FILO.
Вот что пишет FILO во время выполнения:
POST: 0xfe
FILO version
0.4.2 (anthony@athlon) Сбт Июн 25 21:47:32 MSD 2005
Press <Enter>
for default boot, or <Esc> for boot prompt... 2. .1. .timed out
boot: hda3:/boot/vmlinuz
root=/dev/hda3 console=tty0 console=ttyS0,115200
hda: LBA48
160GB: SAMSUNG SP1604N
Mounted ext2fs
Found Linux version
2.4.26 (root@tree) #8 Mon Jun 14 19:09:31 PDT 2004 bzImage.
Loading kernel...
ok
Jumping to entry
point...
Linux version
2.4.26 (root@tree) (gcc version 3.3.4) #8 Mon Jun 14 19:09:31 PDT 2004
FILO отрапортовал, что в качестве носителя найден
жесткий диск SAMSUNG SP1604N, на котором в разделе hda3 находятся ядро системы
и корневой раздел, и передал управление ядру операционной системы.
Дальнейшие записи уже вам привычны и знакомы.
С помощью SSH можно зайти в систему и проверить,
например, температуру.
# ssh -l anthony
-C via
anthony@via's password:
Last login: Sat
Jun 25 21:53:41 2005 from athlon.net
Linux 2.4.26.
anthony@via:~$ sensors
eeprom-i2c-0-50
Adapter: SMBus Via
Pro adapter at 0f00
Memory type:
DDR SDRAM DIMM
Memory size
(MB): 256
vt1211-isa-ec00
Adapter: ISA adapter
fan1: 3378
RPM (min = 3006 RPM, div = 2)
fan2: 0
RPM (min = 3006 RPM, div = 2)
Proc Temp:
+47.2C (high = +65C, hyst = +60C)
anthony@via:~$ telnet
127.0.0.1 7634
Trying
127.0.0.1...
Connected to
127.0.0.1.
Escape character
is '^]'.
|/dev/hda|SAMSUNG
SP1604N|37|C|Connection closed by foreign host.
В целом работу нашего конструктора можно считать
нормальной.
Подведем итоги. Мы скомпилировали LinuxBIOS,
записали образ в ППЗУ и удачно загрузились. Также мы научились снимать данные о
температуре с критически важных узлов нашей ПЭВМ. Полностью рабочая удаленная
станция к вашим услугам.
Автор благодарит участников проекта LinuxBIOS за
консультации при подготовке данного материала, в частности Josiah England, Jonathan
McDowell, Adam Talbot, Jun Okajima. А также за краткую историю развития проекта
LinuxBIOS за 1999-2004 года R.Minnich [12-13].
В следующем номере мы посмотрим, как запустить
EPIA-M в качестве узла Beowulf-кластера, а также запустим на EPIA-M
операционную систему Windows 2000 Professional. Плюс посмотрим, как наш блок
EPIA-M превращается в терминальное решение.
Ссылки:
1. http://en.wikipedia.org/wiki/WinChip.
2. http://de.wikipedia.org/wiki/WinChip.
3. http://en.wikipedia.org/wiki/Cyrix.
4. ftp://ftp.chg.ru/pub/Linux/Slackware/slackware-10.0-iso.
5. http://secure.netroedge.com/~lm78/archive/lm_sensors-2.9.1.tar.gz.
6. http://secure.netroedge.com/~lm78/archive/i2c-2.9.1.tar.gz.
7. http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2.
8. http://snapshots.linuxbios.org/freebios--devel--1.0--base-0.tar.bz2.
9. http://snapshots.linuxbios.org/freebios--devel--2.0--patch-51.tar.bz2.
10. http://citkit.dl.sourceforge.net/sourceforge/etherboot/etherboot-5.4.0.tar.bz2
(http://rom-o-matic.net).
11. http://te.to/~ts1/filo/filo-0.4.2.tar.bz.
12. http://www.linuxdevices.com/links/LK8294110575.html.
13. http://www.beowulf.org/archive/2002-September/008021.html.