АНТОН БОРИСОВ
Используем LinuxBIOS на системах VIA EPIA-M
Почти каждый из вас в детстве играл в конструктор – собирал железную дорогу или машинки. По мере взросления у сильной половины человечества игрушки не исчезают, а только становятся более дорогими. В прошлом номере мы познакомились с историей развития 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 for default boot, or 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 превращается в терминальное решение.
Ссылки:
- http://en.wikipedia.org/wiki/WinChip.
- http://de.wikipedia.org/wiki/WinChip.
- http://en.wikipedia.org/wiki/Cyrix.
- ftp://ftp.chg.ru/pub/Linux/Slackware/slackware-10.0-iso.
- http://secure.netroedge.com/~lm78/archive/lm_sensors-2.9.1.tar.gz.
- http://secure.netroedge.com/~lm78/archive/i2c-2.9.1.tar.gz.
- http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2.
- http://snapshots.linuxbios.org/freebios--devel--1.0--base-0.tar.bz2.
- http://snapshots.linuxbios.org/freebios--devel--2.0--patch-51.tar.bz2.
- http://citkit.dl.sourceforge.net/sourceforge/etherboot/etherboot-5.4.0.tar.bz2 (http://rom-o-matic.net).
- http://te.to/~ts1/filo/filo-0.4.2.tar.bz.
- http://www.linuxdevices.com/links/LK8294110575.html.
- http://www.beowulf.org/archive/2002-September/008021.html.