FAQ поддерживается Alistair Riddoch, и базируется на оригинале Brian Candler; дополнения отсылайте на ajr@ecs.soton.ac.uk. Свежую версию этого документа можно найти на http://www.elks.ecs.soton.ac.uk/. Замечание - ELKS находится на очень ранней стадии разработки и приведенная ниже информация может устареть очень быстро.
Русский перевод этого документа осуществил Роман Фещук, если у вас есть какие-либо дополнения и уточнения - отправляйте их на roma@orta.com.ua. Свежий перевод ELKS FAQ на русский язык можно найти на http://elks.orta.com.ua/. Вашему внимаю предложенна версия перевода с последними изменениями от 20/10/01.
Существует
список рассылки ELKS. Что бы подписаться,
направьте письмо на
majordomo@vger.rutgers.edu
содержащее слова subscribe linux-8086 в теле письма.
Текущий архив сообщений этого списка рассылки доступен
на http://www.mail-archive.com/linux-8086@vger.rutgers.edu/index.html.
Замечание - ELKS это не Linux, и список
рассылки это не лучшее место для
разговоров о Linux (несмотря на название).
Лучшим
решением была бы отправка таких
сообщений в специальные новостные
группы Linux, такие как comp.os.linux.misc
Если вам известны любые другие сайты, или вы сами хотели бы создать подобный сервер свяжитесь с разработчиками. Замечание переводчика - многие из этих сайтов могут оказаться недоступными, ни что не вечно под луной:(, но на момент перевода они работали.
tar -xvzf Dev86-0.0.13.tar.gz -C /usr/src tar -xvzf elks-0.0.67.tar.gz -C /usr/srcИсходные тексты среды разработки будут в /usr/src/linux-86, а ядра в /usr/src/elks. Следующим шагом надо скомпилировать утилиты разработчика, которые включают bcc компилятор:
cd /usr/src/linux-86 make installТеперь, компилируем ядро:
cd /usr/src/elks make config make dep makeMake config работает также как и для стандартного ядра Linux. Конфигурация по умолчанию работает на большинстве систем, поэтому не изменяйте опций значение которых вам не понятно. (Если вы уже создавали ядра Linux с помощью gcc, то вы удивитесь насколько это быстро :-). Результат - это образ диска с названием "Image", который вы можете скопировать на отформатированную дискету и загрузится с нее.
dd if=Image of=/dev/fd0или
make diskТеперь вы можете загрузится с этого диска, однако вы не сможете сделать ничего без монтирования корневого диска. Вы можете использовать файл образа root находящийся в images.zip, или создать свой собственный. Вам нужно использовать bcc для компиляции программы 'init' и создать корневую файловую систему minix. Как это сделать объяснено ниже.
#include <linux/vm86.h>на
#include <asm/vm86.h>
Для установки init и login скомпилируйте их оба при помощи
bcc -0 -O -ansi -s init.c -o init bcc -0 -O -ansi -s login.c -o login -0 указывает генерировать код процессора 8086 -O включает оптимизацию -ansi включает прототипы функций в ansi-стиле (только) -s символы скриптов за пределами библиотекии скопируйте их в каталог /bin на корневом диске. login нуждается в файлах /etc/passwd и /etc/group, и /bin/sh (или другой оболочке определенной в /etc/passwd).
Начиная с ядра 0.0.56 sash работает и может быть использован как и /bin/sh. Он может быть найден в elkscmd.tar.gz. для лучшего результата скопируйте /etc/passwd и /etc/group из стандартного дистрибутива Linux на корневой диск так, чтобы ls -l их отображала, и /usr/lib/liberror.txt для сообщений sash об ошибках. Версия ash также есть и работает под ELKS, однако она имеет большой размер и не работает на машинах с менее чем 640Кб ОЗУ.
dd if=root of=/dev/fd0 bs=8192или из под DOS можно использовать утилиту RAWRITE.EXE.
Иначе, вам нужно создать minix дискету содержащую необходимый джентельменский набор. Этот набор включает в себя прграммы init, login и sh в /bin/, а также passwd и group файлы в /etc/, равно как и три tty для init в каталоге /dev/. Замечание: /dev/tty отличаются от нормальных в Linux которые используют (5,0).
mkdir /usr/src/root86 # создание основной директории cd /usr/src/root86 mkdir dev # создание директории устройств cd dev # создание необходимых устройств mknod tty1 c 4 0 mknod tty2 c 4 1 mknod tty3 c 4 2 mknod fd0 b 3 128 # копирование необходимых программ cd .. mkdir bin cd bin cp path-to-elkscmd-init init cp path-to-elkscmd-login login cp path-to-elkscmd-sash sh cd .. mkdir etc cd etc # добавление файлов неоходимых login cp path-to-skeleton-passwd passwd cp path-to-skeleton-group group cd .. fdformat /dev/fd0H1440 # если дискета неотформатированна mkfs.minix -n14 /dev/fd0 1440 mount -t minix /dev/fd0 /a # нужен каталог монтирования /a cp -pR /usr/src/root86/* /a umount /aНекоторые дистрибутивы используют /dev/fd0u1440 вместо /dev/fd0H1440. Вы должны удалить пароли из файла passwd поскольку они пока не поддерживаются, и быть уверенными, что каждому пользователю в качестве оболочки прописан /bin/sh для будущей совместимости.
Есть вариант, если вы имеете ядро версии от 2.0.x и утилиту mount-2.5k, вы можете использовать loopback файловую систему для создания образа диска на вашем жестком диске и потом перенести этот образ на дискету
dd if=/dev/zero of=root.image bs=18k count=80 losetup /dev/loop0 root.image mkfs -t minix /dev/loop0 1440 mount -t minix /dev/loop0 /a ... umount /a dd if=root.image of=/dev/fd0C ядрами ELKS от 0.0.53 дискеты размеров отличных от 1.44M тоже работают. Просто следуйте приведенным выше инструкциям, корректируя только места касающиеся емкости диска. Тем не менее, если вы будете записывать дискеты на 360K на дисководах 1.2M и потом попытаетесь загрузить машину с дисководом на 360К, то для вас будут полезны приведенные ниже инструкции.
Одно из решений это подключение 360K дисковода в качестве второго на вашем Linux PC - на нем вы можете отформатировать 360K дискету командой
fdformat /dev/fd1d360и создать файловую систему как обычно.
Иначе вам надо создать образ дискеты и переслать его на ПК имеющий 360K дисковод (например с помощью линк-кабеля), потом используя rawrite.exe из-под DOS создать дискету из файла образа.
dd if=/dev/fd0 of=root.image bs=1k count=360Этот образ может быть передан на машину для которой он предназначен и записан на дискету используя как и раньше rawrite.exe. Если вы используете loopback файловую систему, то этот шаг не нужен.
Если возникает ошибка монтирования корневой файловой системы на устройстве 03c0, загрузите загрузочный образ в шестнадцатиричный редактор и найдите c003h где то в начале файла образа и измените это числом 8003h. (c003h это 03c0 используя обратную запись Intel). Это должно сработать на любой версии, однако не так уж и красиво, поскольку местоположение искомой последовательности в образе меняется от версии к версии. jose@cnct.com сообщает что загрузочный образ в ядре 0.0.62 включает эти два байта по смещению 0adf - oade.
Сначала создайте раздел с помощью fdisk. Любая версия fdisk способна сделать это, но в текущих версиях корневой диск поддерживает только bd1-bd4 первичные разделы, и если вы имеете первичный раздел DOS, то вы не сможете сделать еще один первичный раздел с помощью DOS fdisk.
Версия fdisk включенная в ELKS 0.0.67 по прежнему имеет нестабильный код, но на моей системе вроде бы работает хорошо. После создания раздела, загрузите ELKS с загрузочной и корневой дискет, и создайте файлову систему используя mkfs. Стоит воспользоваться fdisk для проверки корректного имени устройства на котором вы хотите создать файловую систему. Для создания файловой системы наберите
mkfs /dev/bd?? sizeгде bd?? это раздел, и size это размер раздела в Kb. size не может быть больше 32M. Например для создания файловой системы на первом разделе второго жесткого диска, который имеет размер 20M следует набрать:
mkfs /dev/bdb1 20000Теперь подмонтируйте раздел в точку монтирования /mnt набрав:
mount /dev/bd?? /mntгде bd?? это раздел. Корневая директория на новом разделе может выглядеть испорченной, и возможно нельзя будет запустить ls в /mnt. Я не знаю почему mkfs создает испорченную файловую систему, но я на ней работаю
Создайте следующие директории на новом корневом устройстве:
mkdir /mnt/bin mkdir /mnt/dev mkdir /mnt/usr mkdir /mnt/usr/lib mkdir /mnt/mnt mkdir /mnt/etc mkdir /mnt/root mkdir /mnt/home mkdir /mnt/var mkdir /mnt/var/run mkdir /mnt/home/user? ...Теперь скопируйте необходимые файлы. Вам нужно будет много больше файлов даже для скромной системы, однако эти одни из самых необходимых и используемых.
cp /bin/init /mnt/bin/init cp /bin/login /mnt/bin/login cp /bin/getty /mnt/bin/getty cp /bin/sh /mnt/bin/sh cp /bin/ls /mnt/bin/ls cp /bin/pwd /mnt/bin/pwd cp /bin/mount /mnt/bin/mount cp /bin/umount /mnt/bin/umount cp /bin/cp /mnt/bin/cp cp /etc/passwd /mnt/etc/passwd cp /etc/group /mnt/etc/group cp /usr/lib/liberror.txt /mnt/usr/lib/liberror.txt touch /mnt/var/run/utmpНаконец создайте следующие устройства
mknod /mnt/dev/tty1 c 4 0 mknod /mnt/dev/tty2 c 4 1 mknod /mnt/dev/tty3 c 4 2 mknod /mnt/dev/fd0 b 3 128 mknod /mnt/dev/fd1 b 3 192 mknod /mnt/dev/bda b 3 0 mknod /mnt/dev/bda1 b 3 1 mknod /mnt/dev/bda2 b 3 2 mknod /mnt/dev/bda3 b 3 3 mknod /mnt/dev/bda4 b 3 4 mknod /mnt/dev/bdb b 3 64 mknod /mnt/dev/bdb1 b 3 65 mknod /mnt/dev/bdb2 b 3 66 mknod /mnt/dev/bdb3 b 3 67 mknod /mnt/dev/bdb4 b 3 68Теперь размонтируйте новый раздел:
umount /dev/bd??Вам нужно перекомпилировать ядро с указанием нового устройства с корневой файловой системой. Что бы сделать это отредактируйте include/linuxmt/config.h в дереве исходного кода ядра ELKS, и измените CFG_ROOTDEV с 0x380 на номер устройства корневого раздела. Последние две цифры это номер раздела в шеснадцатиричной системе счисления. Номер может быть найден из списка парой строк выше. Например последний номер для bdb3 это 67 или 43h, итак ROOT_DEV имеет значение 0x343.
Наберите:
make diskдля построения нового загрузочного диска, и загрузите ELKS машину с нового диска. Новый корень должен подмонтироваться, правда можеть быть выдано предупреждение, но система запустится как обычно и много быстрее чем с дискеты. Как и раньше корневой каталог может быть испорчен, однако должна быть возможность перехода в другие директории, и система в целом должна работать нормально.
undefined symbol: _setsid undefined symbol: _fchownЭто происходит потому, что Dev86 не получил список системных вызовов от текущего исходного кода ядра. Похожая проблема может возникнуть, если Dev86 не нашел каталога include ядра, и построил связи к нему в каталоге include bcc.
ps.c:2.26: error: cannot find include file linuxmt/sched.hРешение обеих проблем состоит в следующем:
make library make install-lib
rm -rf /usr/bcc/include/linuxmt rm -rf /usr/bcc/include/arch ln -s /usr/src/elks/include/linuxmt /usr/bcc/include ln -s /usr/src/elks/include/arch /usr/bcc/include
cd /usr/src/linux-86 cp /usr/src/elks/arch/i86/kernel/syscall.dat libc/syscall/syscall.dat cp /usr/src/elks/arch/i86/kernel/syscall.dat libc/syscall/syscall.dev86 make library make install-lib
ld86: warning: _utmpname redefined in file /usr/local/bcc/lib/bcc/i86/libc.a(utnt.o); using definition in utent.oЭто происходит потому что elkscmd содержит правленные версии файлов из стандартной библиотеки C. Однажды эта правленная версия была хорошо протестированна, и она будет интегрированна в libs и удалена из Dev86.
cd /usr/src/linux-86/elksemu make module insmod binfmt_elks.oПримечание. Вам надо перезапускать 'insmod' каждый раз когда вы перезагружаетесь. Несколько простых программ bcc вы можете попробовать в /usr/src/linux-86/tests (такие как версия 'wc'). Если при создании модуля вы получаете ошибку, гласящую: "modversions.h: no such file or directory" то вам надо отредактировать Makefile и удалить ссылку на этот файл, например:
MODCFLAGS=-D__KERNEL__ -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \ -fno-strength-reduce -pipe -m486 -DCPU=486 -DMODULE -DMODVERSIONS
floppy { device /dev/fd0 threeinch }
ELKS CVS теперь находится в Source Forge. Для получения дополнительной информации по регистрации аккаунта пройдите в раздел CVS на страничке проекта ELKS в Source Forge