Top News Search Software X Window System Documentation Support Home

FreeBSD: Как перевести систему от a.out к ELF

1) Что описывает этот документ?
2) Кому и почему следует сделать это?
3) Описание процесса перехода
   3.0) Предварительные меры
   3.1) Компиляция и установка системы в формате ELF
   3.2) Компиляция и установка ядра в формате ELF
4) Полезные ссылки

1) Что описывает этот документ?
Данный документ описывает каким образом можно перевести FreeBSD с формата a.out на формат ELF.

2) Кому и почему следует сделать это?
Всем, кто использует FreeBSD и собирается в дальнейшем использовать FreeBSD.
Данная операция производится один раз. Этой операцией сдедует воспользоваться потому, что поддержка версий 2.2.X закончена, а вы, скорее всего, захотите пользоваться новым программным обеспечением, поставляемым в виде портов (aka ports).

Документ будет полезен пользователям, у которых возникли проблемы при переводе ядра из формата a.out в формат ELF.

Данную операцию aout-to-elf следует проводить для старых версий FreeBSD (aka 2.2.X и 3.0-SNAP до 15.09.1998)), а пункт 3.2 будет полезен пользователям FreeBSD-3.0, желающим перейти на 3.0-STABLE.

3) Описание процесса перехода.
3.0) Предварительные меры
Настоятельно рекомендуем осуществить резервное копирование!

Следует рассмотреть содержимое каталога /etc и сравнить его с содержимым каталога /usr/src/etc. Изменения, произошедшие, от версии 3.0-aout к версии 3.0-STABLE-ELF значительны.
Например: появились новые системные псевдо-пользователи (bind, tty, kmem).
Система при сборке захочет воспользоваться этими пользователями, а не найдя их - сборка новой версии прекратится с сообщением об ошибке...
Для проведения данной операции рекомендуется использование инструмента mergemaster из /usr/ports/sysutils.

3.1) Компиляция и установка системы в формате ELF

Перейдите в однопользовательский режим с помощью команды:

# shutdown now
либо загрузите систему с опцией -s и выполните в командной строке:
# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a
Очистите /usr/obj:
# cd /usr/obj
# chflags -R noschg *
# rm -rf *
Проверьте количество свободного пространства:
# df -k
........
БУДЬТЕ ОСТОРОЖНЫ! Обратите внимание на количество свободного места тома /usr!!!
При переходе с формата a.out на ELF понадобится около 400Mb свободного места.

(синтаксис csh)
# setenv BINFORMAT aout
# make aout-to-elf-build |& tee build.log
Можно выпить чашечку кофе и т.д. Данная операция займет несколько часов. После её окончания следует заглянуть в build.log и проверить наличие ошибок. Если ошибок нет - то можно проводить инсталляцию.
# make aout-to-elf-install
Процесс инсталляции ELF-версии достаточно интерактивен и интуитивен. В конце концов произойдет следующее:

3.2) Компиляция и установка ядра в формате ELF

# cd /sys/i386/conf
Следует рассмотреть ядро LINT. Некоторые драйверы поменяли свои название, а некоторые и вовсе были исключены.
Например: драйвер CD-ROM'а был переписан и название устройства изменено с wcd0 на acd0.

Итак, после исправлений в вашем ядре:

# config -r MY_KERNEL
# cd ../../compile/MY_KERNEL
# make depend
# make
# file kernel
kernel: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, not stripped
#
После сборки ядра ОС может выдать сообщение, о том, что новое ядро собрано в формате ELF, а загрузчик вашей ОС не поддерживает ядро в этом формате.

Следует сделать следующее:
узнать название загрузочного диска (например:wd0s1);

# cat /etc/fstab 
обязательно убедится (!!!) в существовании каталога /boot; создать файл /boot.config следующим образом:
# echo /boot/loader > /boot.config
Далее самая опасная операция:
# setenv SLICE wd0s1
# disklabel -B -b /boot/boot1 -s /boot/boot2 $SLICE
Если данная операция завершилась нормально, инсталлируем новое ядро:
# cd /sys/compile/MY_KERNEL
# make install
После перезагрузки (в момент загрузки FreeBSD) вы увидите следующее:
>> FreeBSD/i386 BOOT

4) Полезные ссылки
New i386 boot blocks
Syscons update
The time to complete the ELF transition has come
Making the world your own