Linux mini-HOWTO

         

Альтернативы


Если вам по какой-то причине не понравился lbxproxy: вас не устраивает быстродействие, он у вас не работает, или вам просто лень возиться с установкой lbxproxy на удаленном хосте, или просто интересно попробовать нечто иное, то существует, как минимум, еще один пакет для компрессирования X-протокола (у кого-нибудь есть, что-нибудь еще?)



Что лучше?


Я не знаю. И LBX, и dxpc значительно лучше компрессируют, чем ssh. С другой стороны, у ssh все значительно лучше с безопасностью. И, конечно, ничто не мешает использовать и ssh и один из двух первых способов, получив, таким образом, неплохое сжатие и безопасность. Наверно не очень сложно запустить несколько тестов, проверив быстродействие этих трех вариантов, чтобы получить и субъективное, и статистическое измерения. Но я этого не делал и не знаю никого, кто бы это пробовал.



Что мне НЕ нужно для LBX?


На УДАЛЕННОЙ системе не требуется нового X-сервера (УДАЛЕННОЙ системе вообще не требуется никакого X-сервера).

Приложение, которое вы хотите запустить, не должно быть обязательно предназначено для вашей версии X, или для каких-то библиотек; Я без особых трудностей использую коммерческие программы для X11R5 поверх LBX.

Вам не обязательно быть root-ом или другим привилегированным пользователем на УДАЛЕННОЙ системе; lbxproxy запускается под любыми разрешениями. Более того, вы можете запускать его прямо из вашего каталога: его не надо никуда устанавливать.



Что мне нужно для LBX?


На ЛОКАЛЬНОЙ машине вам понадобится X-сервер со встроенной поддержкой LBX. В серверах X11R6.3 автоматически разрешен LBX, если только его специально не отключили при сборке. Во всех серверах XFree86 3.3 LBX также по умолчанию разрешен.

Вы можете узнать, встроен ли в ваш сервер LBX, при помощи команды xdpyinfo: запустите xdpyinfo и взгляните на список прямо под надписью "number of extensions" (количество расширений); вы должны увидеть "LBX" в этом списке.

На УДАЛЕННОЙ машине вам понадобится программа lbxproxy. Это достаточно хитрая часть настройки - если удаленная машина использует систему, отличную от вашей, то ваш lbxproxy ей особенно не поможет.

К сожалению, пока не существует "выковырянной" версии исходных текстов lbxproxy, поэтому придется либо (а) найти и собрать почти полностью, если не полностью X11R6.3 для удаленной системы, или (б) найти где-нибудь собранную версию lbxproxy для вашей удаленной системы. Второй вариант, естественно, значительно проще.

lbxproxy - это простая одиночная программа. Никаких конфигурационных файлов, файлов ресурсов и т.п. к ней не прилагается.



Документация


Единственная документация по этому вопросу в стандартной поставке X - это man lbxproxy(1).

Если у вас есть доступ к исходным текстам X, то информация по LBX доступна в следующих каталогах:

xc/doc/specs/Xext/lbx.mif (Framemaker MIF)

xc/doc/hardcopy/Xext/lbx.PS.Z (Compressed Postscript)



xc/doc/hardcopy/Xext/lbxTOC.html (HTML)

Более подробное объяснение специфических алгоритмов LBX можно найти в:

xc/doc/specs/Xext/lbxalg.mif (Framemaker MIF)

xc/doc/specs/Xext/lbxalg.PS.Z (Compressed Postscript)

Если у вас нет исходных текстов X11, то этот файл можно найти на сайте X-консорциума.



Dxpc - Дифференциальный компрессор X-протокола


Исходный автор: Brian Pane

Текущий сопроводитель: Zachary Vonler

dxpc работает почти также, как LBX. Однако, вместо включения дополнения в X и изменения кода X-сервера, dxpc использует два прокси: один работает на УДАЛЕННОМ хосте, а второй на ЛОКАЛЬНОМ.

Прокси на УДАЛЕННОМ хосте работает между X-клиентами и прокси ЛОКАЛЬНОГО хоста, а прокси на ЛОКАЛЬНОМ хосте работает между X-сервером и прокси УДАЛЕННОГО хоста.

Таким образом, и X-клиенты, и X-сервер видят друг друга, будто работают на обычном X-протоколе.


Плюсы

Его значительно проще собирать и устанавливать, т.к это полностью независимое приложение, не требующее никаких изменений внутри X.

Оно поддерживается отдельно, поэтому вам не придется ждать, пока OSF выпустит новую версию X с дополнениями или исправлениями.

В нем присутствует значительно более полная и понятная статистическая информации о компрессировании, в отличие от lbxproxy.


Минусы

Эта программа не является стандартной частью X - вам придется находить и устанавливать ее отдельно.

Эту систему немного сложнее настроить, так как в ней требуются 2 прокси: на ЛОКАЛЬНОЙ и УДАЛЕННОЙ машинах.


Где можно найти dxpc?

Исходные тексты dxpc можно найти на ftp.x.org.

Также существует домашняя страница dxpc, на которой есть много интересной информации, включая ссылки на список рассылки dxpc, доступ к исходным текстам и несколько уже готовых вариантов для различных платформ:

http://ccwf.cc.utexas.edu/~zvonler/dxpc/



Где работает LBX?


Согласно документации X-Консорциума X11 релиз X11R6.3 (декабрь 1996), LBX является полным зарегистрированным расширением X-протокола. Что же касается XFree86 - это означает, что вам нужна XFree86 версии 3.3.



Как работает LBX?


LBX работает как прокси-сервер на клиентской стороне, выполняющий кэширование и компрессирование. X-сервер знает, что клиент использует прокси-сервер, и также занимается компрессией.

Ниже приведена обычная настройка для удаленных Х-клиентов. В этом тексте мы будем придерживаться следующих терминов: ЛОКАЛЬНАЯ рабочая станция - это та, непосредственно на которой вы работаете, а УДАЛЕННАЯ - это та машина, на которой работает приложение.

УДАЛЕННАЯ ЛОКАЛЬНАЯ +-----+ +-----+ |Прил.|-\ Сеть +----------+ | |\ +-----+ \--------------------------->| X Сервер |=>| +-----+ / (X-протокол) +----------+ +-----+\ |Прил.|-/ /_____// +-----+

Для использования LBX на удаленной машине используется прокси-сервер (lbxproxy), и приложения общаются с этим процессом, вместо прямой передачи данных на ЛОКАЛЬНУЮ машину. Этот процесс затем производит кэширование и компрессирование X-запросов, и направляет их серверу. Выглядит это примерно так:

УДАЛЕННАЯ ЛОКАЛЬНАЯ +-----+ +-----+ +-------+ Сеть +----------+ | |\ |Прил.|->|Прокси.|----------------------------->| X Сервер |=>| +-----+ +-------+ (LBX/X-протокол) +----------+ +-----+\ +-----+ / /_____// |Прил.|--/ +-----+

Описание конкретных протоколов и деталей кэширования и компрессирования LBX не входят в этот документ.



Как запустить LBX?


Теперь перейдем к самому главному. Замените в нижеприведенных примерах слова ЛОКАЛЬНЫЙ и УДАЛЕННЫЙ на имена соответствующих хостов (не перепутайте!)

На ЛОКАЛЬНОЙ машине:

Запустите X-сервер.

Разрешите на своей системе доступ к X-серверу извне. Используйте метод "список машин", наберите команду xhost +REMOTE. Если вы используете xauth, то вам, по-видимому, придется сделать немного больше; смотрите xauth(1) для дополнительной информации. Также вы можете прочитать Мини-HOWTO: Удаленные приложения в X, если вы не знакомы с настройкой разрешений удаленного доступа к X.

На УДАЛЕННОЙ машине:

Запустите lbxproxy и укажите ему перенаправление на ЛОКАЛЬНЫЙ X-сервер, например:

$ lbxproxy -display LOCAL:0 :1

Таким образом вы заставляете lbxproxy использовать display :1 на УДАЛЕННОЙ системе; если в системе уже больше 1 дисплея, то используйте :2, или то, что вам необходимо.

Установите переменную окружения DISPLAY так, чтобы она указывала на дисплей, предоставляемый lbxproxy, вместо обычного:

$ DISPLAY=:1 $ export DISPLAY

Или, если вы используете csh или нечто подобное:

% setenv DISPLAY :1

Если вы используете xauth, то вам надо убедиться, что ваш cookie доступен. Смотрите Мини-HOWTO: Удаленные приложения в X в поисках дополнительной информации.

Запускайте свои X-приложения!

И все; все X-приложения, запущенные с указанием на дисплей :1 будут использовать LBX. Конечно, не существует никаких препятствий к одновременному запуску X-приложений, работающих с LOCAL:0 и :1.



Кому LBX не нужен?


LBX конечно бесполезен, если вы запускаете Х на одной машине, или вообще не используете Х.

LBX также мало поможет, если вы работаете в быстрой локальной сети. Некоторые говорят: "если LBX уменьшает сетевой трафик, не будет ли целесообразным использовать его и в быстрых сетях?" Возможно, если ваша цель - уменьшить трафик в сети. Но если вам необходимо ускорение работы, то, в этом случае, LBX вам вряд ли поможет. LBX включает в себя кэширование и компрессирование, для этого расходуются ресурсы на обоих концах сети (дополнительная память на кэш, дополнительное время процессора на декомпрессирование). Применение LBX на быстром соединении может привести к общему замедлению.



Кто может выиграть от использования LBX?


LBX ускорит работу соединения, если вы используете модем для работы с провайдером, и через него запускаете Х-приложения на удаленных машинах, на которых переменная DISPLAY указывает на вашу машину (или наоборот), LBX также поможет, если вы работаете очень далеко от этих машин (например, в разных странах) или на других медленных соединениях.



Мини-HOWTO: LBX


Paul D. Smith
psmith@baynetworks.com


Перевод: Станислав Рогин, ASPLinux

LBX (Low Bandwidth X) - это расширение X-сервера, которое компрессирует X-протокол. Он используется вместе с X-приложениями и X-сервером, разделенными медленным сетевым соединением, для того, чтобы увеличить скорость работы.



Проблемы


Ниже приведены различные проблемы и методы их решения:

Вопрос

lbxproxy выходит с ошибкой "access denied" (отказано в доступе).

Ответ

Это означает, что ЛОКАЛЬНАЯ система не разрешает соединения с УДАЛЕННОЙ системы из-за ошибок, связанных с разрешениями. Еще раз внимательно прочтите Мини-HOWTO: Удаленные приложения в X.

Способ проверки - попробуйте запустить простое X-приложение типа xclock на УДАЛЕННОЙ системе с дисплеем на ЛОКАЛЬНОЙ без использования lbxproxy:

$ xclock -display LOCAL:0

Если это не сработало, то проблема в xhost, или, вообще, с X, а не с LBX.



Ssh (Secure Shell)


Ken Chase замечает, что для компрессирования можно использовать ssh. Несмотря на то, что основной его задачей является безопасность, он к тому же компрессирует передаваемые данные.

Таким образом, вы можете запустить X поверх ssh-соединения, получив сразу некоторое сжатие.



Что такое "выделенная линия"


Выделенная линия - это любая связь между двумя точками, как правило, арендуемая у телефонной станции. Выделенная линия включает в себя кабеля (витая пара, коаксиальные или оптоволоконные), а также другие устройства всех видов (катушки, трансформаторы, усилители и регенераторы).

Это документ описывает:

Как сконфигурировать ваш модем и pppd для использования на двухпроводной выделенной линии.

Этот документ НЕ описывает:

SLIP, инсталяцию pppd, синхронный обмен данными, модемы с прямой передачей, xDSL.



Мини-HOWTO: Работа по выделенным линиям


Rob van der Putten
rob@sput.signature.nl
Перевод: Павел Гашев, ASPLinux

Настройка модема и pppd для работы на двухпроводных выделенных линиях.



Модем


Выделенная линия не подключается к АТС. На ней нет напряжения, и она не дает никаких гудков и сигналов. Это значит, что ваши модемы предоставлены самим себе и должны уметь работать в такой ситуации.

У вас должно быть 2 идентичных (включая номер версии) внешних модема, поддерживающих работу на выделенной линии. Убедитесь в этом! Убедитесь также, что у модема есть вся документация. Кроме того вам понадобится:

2 полностью экранированных кабеля RS232. Экран должен быть подключен к корпусу (а не к первому контакту) на обоих (а не одном) концах.

Для проверки может понадобиться тестовая заглушка RS232.

Два кабеля RJ11, на каждую сторону выделенной линии.

Знание основ `AT' команд.



Настройка


Допустим модем подключен к COM2. Локальный IP адрес - `Local_IP'. Удаленный IP адрес - `Remote_IP'. Значение MTU - 576. В этом случае, /etc/ppp/options.ttyS1 должен выглядеть примерно так:



Настройка модема


В общих чертах настройка модема такова: Настройте программу для работы с удаленным терминалом (Minicom) на максимально возможную скорость; 57600 б/с для 14400 и 115200 б/с для 28800 и выше. Многие используют очень длинные строки инициализации модема, начинающиеся с AT&F и содержащие кучу специфичных команд. Зачем так усложнять? Большинство программ используют те же настройки, и их вполне можно записать в энергонезависимую память модема и использовать `ATZ' в качестве инициализации во всех программах. При этом вы можете поменять модем без перенастройки программного обеспечения.

Большинству программ требуются следующие настройки:

Фиксированную скорость передачи

Аппаратный контроль передачи RTS-CTS (не X-ON/X-OFF)

8 бит, без четности, 1 стоповый бит

Модем должен давать ПРАВИЛЬНЫЙ DCD (&C1)

Модем НЕ должен игнорировать DTR (&D2 или &D3)

Проверьте это при помощи AT&V или AT&Ix (посмотрите документацию модема).

Эти установки могут быть не похожи на заводские (&F), так что начинать строку инициализации с AT&F в нашем случае - не очень хорошая идея. Хотя вполне логично это сделать, если вы уверены, что нарушены установки в энергонезависимой памяти. Если вы уверены, что все настроили правильно, сохраните это в энергонезависимой памяти (AT&W) и попробуйте передать пару текстовых и двоичных файлов при помощи Z-модема. Если все нормально, переходим к следующему шагу - настройке модемов на выделенную линию.

Найдите в документации, как настроить ваш модем на "тупой" (dumb) режим, и (что очень немаловажно) как его из этого режима вывести. Убедитесь, что вы действительно настроили модем на максимальную скорость. Модем в "тупом" режиме игнорирует все `AT' команды и не может настроиться на скорость COM порта - он использует скорость, хранящуюся в S-регистре модема, записанную туда командой AT&W.

Теперь настройте следующее:

Сброс модема при изменении DTR (&D3, иногда это в S-регистре). Это требуют некоторые провайдеры!

Режим выделенной линии (&L1 или &L2, посмотрите документацию модема)

Удаленный модем настройте на автоответ (S0=1), а свой модем на вызов (S0=0)

Выключите вывод результатов (Q1, иногда в "тупом" режиме это делается автоматически)

"Тупой" режим (\D1 or %D1, иногда - перемычка). В "тупом" режиме модем игнорирует все AT команды (возможно, вам потребуется отключить символ ESC).

Запишите настройки в энергонезависимую память (&W).



PPPD


Вам нужен сам pppd (Point to Point Protocol Daemon) и понимание, как он работает. Если необходимо, прочитайте RFC или Linux PPP HOWTO. Вы не используете процедуру входа, не используете (m)getty и вам не нужна (липовая) аутентификация, вам не нужны никакие чат-скрипты. На самом деле, из-за того, что модемы тоже настроены, вам нужно настроить pppd на работу с нуль-модемным кабелем.

Для надежной связи, вам нужно использовать следующие критерии:

Сразу после загрузки системы pppd должен поднять DTR и дождаться DCD (поднимется соединение).

Если удаленная система не отвечает, pppd должен дождаться ответа.

Если соединение разрывается, pppd должен сбросить модем (сбросить и поднять DTR) и попытаться снова поднять связь.

Если качество связи ухудшается, pppd должен сбросить модем и снова поднять связь.

Должен существовать процесс, контролирующий pppd. В случае чего, он должен перезапустить pppd.



Предположения


Предполагается, что в вашей системе уже настроен и работает pppd, и есть терминальная программа, при помощи которой можно конфигурировать модем (Minicom).



и должна работать на большинстве



Hi-Tech
Это конфигурационная строка типична и должна работать на большинстве модемов
Вызывающий (локальный) модем:
ATL1&C1&D3&L2%D1&W&W1
Отвечающий (удаленный) модем:
ATM0L1&C1&D3&L2%D1S0=1&W&W1

Tornado FM 228 E
Это должно работать:
Вызывающий (локальный) модем:
ATB15L1Q1&C1&D3&L2&W&W1
Отвечающий (удаленный) модем:
ATM0B15M0Q1&C1&D3&L2S0=1&W&W1
Смените положение перемычки "немого" режима с 2-3 на 1-2.
К сожалению, модемы соединяются только после жесткого сброса (выключения питания) при установленном DTR. Я разработал схему , сбрасывающую модем при поднятии DTR. Тем не менее, FreeBSD pppd это не очень нравится. Проблема решается комбинацией &D0 и схемы - сброс модема происходит при сбросе DTR.

Tron DF
ESC символ может быть выключен установкой S2 > 127;
Вызывающий модем:
ATL1&L1Q1&C1&D3S2=171\D1&W
Отвечающий модем:
ATM0&L2Q1&C1&D3S0=1S2=171\D1&W

US Robotics Courier V-Everything
USR Sportster и USR Courier-I не поддерживают работу на выделенной линии. Вам нужен Courier V-Everything. На веб-сайте USR `описывается', как настроить Courier на выделенную линию. Тем не менее, следуя этим инструкциям, вы получите полностью тупой модем, которым нельзя управлять.
USR Courier может быть настроен перемычками, но сначала вам понадобится программная настройка. Для начала, убедитесь, что используете правильные заводские установки. В отличии от других модемов, у USR Courier их три (&F0, &F1 and &F2). Вы должны использовать &F1. Учтите, что при команде AT&F загружаются установки &F0! Для сброса модема при изменении DTR вам нужно установить бит 0 регистра S13. Кроме того, нужно настроить его на выделенную линию (&L1); ATS13=1&L1&W Переключатели должны быть выставлены следующим образом:
3
OFF Выключает вывод результата команд
4
ON Выключает AT команды
5
ON Для вызывающего, OFF Для отвечающего
8
OFF "Немой" режим

Проверка


Аналогично проверке модемов. Если все работает, установится связь с удаленной системой. В противном случае, первое, что вы должны проверить, это скорость COM портов. Часто встречающаяся ошибка - настройка модемов через Minicom на одну скорость, а pppd на другую. НЕ

выйдет! Должна быть установлена та же скорость!


Подключите модемы к двум компьютерам через кабель RS232 и соедините модемы кабелем RJ11. Запустите терминальную программу (Minicom (Linux), procom или telix (DOS)) на обоих компьютерах. Текст, набираемый но одном компьютере, должен появляться на другом, и наоборот. Если на экран выводится мусор, проверьте настройки COM порта. Отключите и снова включите кабель RJ11. Подождите пока соединение восстановится. Отключите и снова включите кабеля RS232, выключите и снова включите модемы, перезапустите Minicom. Во всех случаях модемы должны соединяться на максимально возможной скорости. Проверьте, что оба модема действительно игнорируют ESC (+++). Если необходимо, отключите его.

Если все это работает, вам осталось только выключить звук на удаленном модеме (M0) и поставить низкую громкость звука на своем (L1).



Вы можете запустить pppd во



Запуск и поддержка pppd
Вы можете запустить pppd во время запуска системы (rc скрипты). Но в этом случае, если pppd упадет, вы останетесь без связи. Более стабильным решением является запуск pppd из /etc/inittab:

Домашняя страница


http://www.enteract.com/~dbaum/nqc/index.html

Страница для NQC Linux на mattdm.org- хосте для программ NQC


http://tinyvm.sourceforge.net

http://sourceforge.net/projects/leJOS/




http://www.autobahn.org/~peterp/rcx/

http://www.demailly.com/tcl/rcx/



Дополнительные источники информации


Так как вы уже прочитали данный документ, то позвольте предложить вам еще несколько точек в сети для дальнейшего исследования и изучения Mindstorm. Большинство из них не предназначаются специально для Linux, но тем не менее почти везде есть группы и конференции, где вы наверняка найдете несколько пользователей Linux. Надеюсь, я убедил вас и настролил на дальгейшее изучение. Наслаждайтесь!



Другие инструменты Linux


Эти программы, возможно, не относятся напрямую к Mindstorm, но они могут представлять интерес для поклонников Linux/Lego.



Язык


Язык очень похож на C, называется соответственно - Не Совсем С. Любой, кто имеет самые минимальные представления о программировании, с легкостью овладеет им.


Forth, скриптоподобный язык общего назначения, обычно используется во встроенных системах.



Как применять инструментарий Linux


Разные программы под Linux для Mindstorm работают, как замена разных частей последовательности программирования (о которой только-что говорилось). Некоторые полностью заменяют программу, установленную по умолчанию некой своей ОС-подобной системой с языковым интерпретатором. Другие генерируют коды, которые совместимы с стандартным кодом Lego, и затем используют стандартное обеспечение для загрузки кода. Наконец, некоторые просто генерируют коды для дистанционного доступа, которые позволяют управлять роботом с PC-компьютера-хоста, без предоставления возможностей программирования. Эти программы также используют стандартныое Lego-обеспечение.



Кибермастер [CyberMaster] и Скаут [Scout]


Кроме данной ССР, Lego выпускает еще две другие робосистемы - Кибермастер (доступна только в Европе) и Скаут. К сожалению, мне кажется, что только один из инструментов (NQC, обсуждаемый в Разд. Не Совсем С [Not Quite C (NQC)]) будет работать с этими системами. В общем, если вы собрались покупать Скаут, и имеете к этому еще немного денег, то лучше приобретите ССР - те немногие (дополнительно вложенные) средства себя оправдают.



Краткое руководство по использованию Lego Mindstorm с Linux


Luis Villa
luge@users.sourceforge.net
Перевод: Станислав Рогин, ASPLinux

Система Создания Роботов (ССР) [Robotics Invention System (RIS)] Mindstorm от компании Lego Group, является на данный момент самым лучшим, доступным и дешевым комплектом. Тем не менее, стандартное программное обеспечение создано под MS Windows (что неудивительно). Но не отчаивайтесь - существуют несколько опций, которые позволяют пользователям Linux работать с Mindstorm под Linux. Данное Мини-Руководство предлагается как краткий обзор системы, опций для работы в Linux, и как сосредоточение ссылок на более подробную информацию.



LeoCAD


LeoCAD - это (как ясно из названия) CAD-программа для конструирования и просчета Lego моделей. Существует порт GTK, который можно посмотреть на http://leocad.gerf.org/linux.htm. Автор примечает, что он еще не полностью отлажен и работоспособен, так что использовать его пока можно только для смеха.



LUGNET


Сайт LUGNET [the Linux User Group NETwork - сеть пользователей Linux], http://www.lugnet.com/, давно уже является центром для онлайн-вселенной Lego. Там есть много групп новостей с огромным количеством пользователей. В частности, форум по роботам посещают очень много образованных читателей и участников. К тому же, некоторые разделы, затронутые выше, имеют свои собственные группы новостей в иерархии robotics/rcx/.



Необходимые комплектующие для Linux хоста


Так-как большинство инструментариев основаны на простых последовательных командах, требования к железу минимальны - в общем, любая машина с Linux может быть хостом.

Единственное исключение - это последовательный порт, который ДОЛЖЕН быть и который может не присутствовать на некоторых последних новинках "без тяжкого наследства прошлых лет". Вся связь с RCX осуществляется через ИК-утройство, которое присоединяется к машине через последовательный порт. Поэтому, если у вас нет последовательного порта, то вы не сможете использовать RCX до тех пор, пока не приобретете переходник, соответсвующий вашей системе. Более того, в дальнейшем с такой системой могут возникнуть проблемы (конфликты с прерываниями или портами). Такое часто случается, когда вы используете модем как устройство /dev/ttyS0. В таком случае есть три решения: во-первых, попытайтесь использовать второй последовательный порт для ИК-устройства. Во многих случаях это помогает 8-). А если это не помогает, то попробуйте просто не использовать ваш модем и ИК-устройство одновременно. Если это неприемлемо, то загляните в опции компиляции вашего ядра (в раздел "расширенные опции последовательного порта") в пункт "поддержка разделения системных прерываний". Убедитесь, что эта опция включена, и пересоберите ядро.

Так-как Макинтоши [Macs] не имеют стандартного последовательного порта, то пользователи LinuxPPC, вероятнее всего, должны будут достать переходники и произвести модификацию, для того, чтобы пользоваться системой. Dave Baum, автор NQC и пользователь Mac, создал инструкции

о том, как это сделать.



Обзор роботов от Lego и "Справочник по Конструированию"


Как вы, вероятно, знаете, ССР стали создаваться изначально в MIT. Создатели знаменитого "класса Lego" в MIT имеют домашние страницы, которые включают в себя не только ссылки на класс (где содержится много крутого и великолепного!), но и на "Справочник Создателя Роботов", в котором содержится много замечательных предложений по созданию роботов для исполнения всех тех крутых программ, писать которые учили вас в этом тексте.



Официальный сайт Mindstorm


Официальный сайт Mindstorm на http://www.legomindstorms.com/

содержит много интересного, включая исходники НСС для общего пользования и распространения. Однако, не ожидайте там гигантского количества информации для Linux.



это простая библиотека на языке


Прогамма Lego::RCX.pm - это простая библиотека на языке perl, предназначенная для удаленного контроля над роботом через ИК-устройство. По ИК-связи оно передает команды роботу, в котором стандартное ПО может интерпретировать их и исполнять. Если у вас уже установлен perl (а интересно у кого он все еще не установлен?), то это очень быстрый и простой способ управления роботом. Не нужно ничего инсталлировать - просто скопируйте файлы в правильный каталог (с вашими библиотеками), и добавляйте "use RCX.pm" в начале вашего скрипта на perl. Я не знаю, делал уже это кто-нибудь или еще нет, но это до смешного простой способ управления роботом - через скрипт CGI.


NQC - это компилятор байтового кода, обрабатывающий программы на С-подобном языке, и компилирующий (на стандартном ПК) код, который воспринимается ССР от Lego. Такой подход имеет свои плюсы и минусы: например, стандартное ПО для ССР может иметь только 32 переменные, что накладывает на НСС некоторые ограничения. Хотя и с ними можно сделать достаточно много серьезных программ. Программа установки очень проста, а весь проект в целом отлично документирован. Данный язык является одним из наиболее популярных альтернативных языков программирования систем, так что в случае проблем с изучением НСС, вы найдете большое количество людей, желающих и способных помочь вам в этом.
Как уже упоминалось выше, НСС - единственное (на данный момент), что поддерживается Кибермастером и Скаутом под Linux. Более того, бета-версия НСС работает с программами, встроенными в комплекты версии 2.0, являясь, таким образом, первой альтернативной программной системой, поддерживающей функциональность новых продуктов.


pbForth попросту полный интерпретатор Forth, который заменяет стандартное ПО ССР. Как только вы установите его, то можно начинать загружать в робота скрипты на Forth, а интерпретатор затем обработает и исполнит их. Нет ограничений по количеству переменных, а также существует ряд "библиотек", которые поддерживают работоспособность системы (подобно интерактивной отладке). Это одна из наиболее простых систем для управления: все, что вам надо сделать, это только загрузить систему, а затем писать программу(команды) и загружать ее в робота. Никаких посторонних программ, инструментариев, компиляторов, интерпретаторов на ПК. Говоря о простоте, существует еще кросс-платформа TCL GUI, обеспечивающая почти такую-же простоту загрузки скриптов и работы с ПК.


Как понятно из названия , TinyVM - это малая Виртуальная Машина Java [Virtual Machine], которая загружается в ССР для замены стандартного ПО. Затем на ПК создаются программы на Java, перекомпилируются и загружаются в ССР. Программа TinyVM использует стандартные библиотеки Java, а также библиотеки для контроля сенсоров, двигателей и всего, тому подобного, что есть в комплекте Mindstorm. TinyVM требует уже установленный и работоспособный комплилятор java.
leJOS - это похожий проект (фактически, ветвь того же проекта) того-же автора. По размеру он гораздо больше (около 5K дополнительно), но зато он включает в себя существенные дополнения, в том числе и операции с плавающей точкой и строковыми константами. Еще планируется создать коллекцию этих программ, а также и возможность последовательной загрузки нескольких программ.


Компилятор TCL для ССР имеет улучшенную функциональность: он может и компилировать скрипты на TCL в кодовые последовательности для ССР, а также может дистанционно управлять роботом через скрипты или интерактивную оболочку TCL. Если ваш выбор среди всех языков - TCL, то это самое оптимальное решение. Существуют две версии (по авторам), и версия от Laurent (на demailly.com) похоже, является основой для второй. Тем не менее, никакая из них не обновлялась с 1998 года.


Операционная система LegOS - это многозадачная (с предварительной обработкой данных, pre-emptive) ОС POSIX для ССР. Программы написаны в стандартном C, скомпилированы на PC с использованием gcc (встроенный кросс-компилятор [cross-compiler]), затем они загружаются в систему (RCX), где и исполняются. Проще говоря, все что вы сможете написать на C, можно создать и в legOS. Из интересных функций там есть такие, как: random(), работа с числами с плавающей точкой, связь с семафорами POSIX, возможность сохранять несколько разных программ. Также в ОС включена возможность передачи и приема данных с Linux и MS Windows компьютеров. Такую мощность (а legOS определенно одна из наиболее мощных из программных систем для ССР) вы получаете, но со следующим (незначительным) минусом: так как legOS использует gcc, то legOS является одной из самых сложных систем в плане настройки под Linux-систему, и требует наибольшей загрузки программами-инструментариями.

Основное оборудование


На случай, если вы еще не знаете: комплект Mindstorm от Lego - это конструктор роботов от "Lego Group", который сейчас продается примерно за 200 долларов США. За эти деньги вы получаете много Lego-деталей, большой блок, содержащий ЦПУ, жидкокристаллический дисплей, несколько кабелей и разьемов (называемых по тексту RCX), пару моторов, и несколько световых и тактильных сенсоров, которые позволяют системе взаимодействовать с внешним миром.

Сейчас выпусткается комплект RCX версии 1.5, который будет заменен весной 2001 года на версию 2.0. Далее, когда я говорю в тексте "RCX", я подразумеваю "RCX 1.x." Разница между версиями 1.0 и 1.5 незначительны, но изменения между версиями 1.5 и 2.0 могут быть существенны - точное содержание изменений пока еще неизвестно.

Если вы хотите знать больше о технической стороне дела (в смысле, помучить детальки, разобрать кабели и сенсоры, чтобы посмотреть, как они работают, и что заставляет их двигаться) - то для вас есть два важных сайта: Строение компонентов Mindstorm от Lego (автор Russell Nelson) и Строение компонентов сенсоров RCX (автор Kekoa Proudfoot). Без этих двух сайтов, вероятнее всего, и не было бы такого количество программного обеспечения, описанного далее по тексту.



Платформы


Разработано на x86 GNU/Linux и протестировано на PPC Linux. Также были созданы для Cygwin и DJGPP для MS Windows. Порты для Solaris и Irix попытались сделать, но, возможно, они не будут работать в некоторых приложениях.



POVRAY


Наборы от Lego для использования вместе с популярной программой POVRAY (для 3-D обработки). ЕЕ можно найти по адресу http://www.kawo1.rwth-aachen.de/~witte/projekte/lego/lego.html, а программу POVRAY - http://www.povray.org.



Сайты по оборудованию


Я уже упоминал ранее, но можно и повториться. Подробный и детальный обзор со всех сторон структуры ССП и RCX доступны для всех, кто пока не является инженерами LEGO. "Настоящий" сайт на http://www.crynwr.com/lego-robotics/

и второй на http://graphics.stanford.edu/~kekoa/rcx



Стандартное программирование RCX


Ключом к восприятию особенностей и параметров работы с Linux является понимание того, как комплекс Mindstorm работает с MS Windows. По умолчанию Lego поставляет программы для MS Windows, которые позволяют вам (или, например, 12-14 летнему ребенку) создать программу (в графической оболочке) для Mindstorm, используя мета-блочную структуру программирования кода. Как только программа таким образом "создана", программа компилирует и создает последовательность байтов. Эти последовательности - код - затем передается роботу, и его микропрограммы RCX обрабатывают этот код и руководят машиной на основе инструкций программы. Кроме анализа кода, программа RCX имеет много похожего с операционной системой: он контролирует работу аппаратных средств, ресурсов и, некоторым образом, управляет ИК [IR] портом, который используется для связи с роботом. Также он имеем возможность воспринимать отдельные специфичные команды (в противоположность закоченной программе) по ИК порту или через специальное устройство дистанционного управления, и управлять роботом на основе этих команд.

Программное обеспечение комплекта ставится, как в версии 1.0 (даже если вы приобретете RIS версии 1.5). У него есть несколько достаточно серьезных ограничений - например, так-как каждая переменная сохраняется в регистрах, а не в ОЗУ, то возможно существование только 32 переменных. Но тем не менее, можно делать достаточно клевые вещи и с такими органичениями, а в версии 2.0 микропрограммы комплекта (которая доступна сейчас в виде бета-версии на LEGO) эти ограничения будут, в основном, сняты, при этом должна остаться полная совместимость с версией 1.x.



Тип


Компилятор кода и библиотека дистанционного управления.



Важное примечание об установочном компакт-диске MS Windows


Так-как многие из программ, обсуждаемых далее, используют программы и официальную марку Lego, вам, вероятно, потребуется ваш установочный компакт-диск с MS Windows. Вам, возможно, и не потребуется даже загружать MS Windows- ваше рабочее время останется при вас :) Тем не менее, (если вы запукаете NQC или RCX.pm, среди прочих программ), вам (вероятно) придется подключить компакт-диск, чтобы перезагрузить программу в систему, когда там закончатся батарейки. Если вы не хотите постоянно делать это, то тогда найдите файл firm0309.lgo на компакт-диске и скопируйте его в надежное место в разделе Linux.



Что можно делать в момент загрузки?


Когда вы видите приглашение Lilo, вы можете нажать для того, чтобы увидеть список возможных вариантов. Если Lilo не настроен на интерактивный режим, то нажмите и держите или до появления сообщения "LILO".

Если вы выберете загрузку ядра Linux, вы можете добавить аргументы в командной строке после имени системы, которую вы выберете. У ядра достаточно аргументов командной строки. Все они описаны в документе "BootPrompt-HOWTO", автор Paul Gortmaker, я не буду пересказывать его работу здесь. Но некоторые аргументы достаточно важны, и их необходимо здесь описать:

root=: вы можете указать Linux подключить корневой раздел, отличный от того, что написано в lilo.conf. Например, в моей системе, есть маленький раздел, в котором находится минимальная установка Linux, и я смогу загрузить систему, даже если, по ошибке, полностью испорчу основной корневой раздел.

init=: ядра Linux версии 1.3.43 и новее могут исполнить команду, отличную от запуска /sbin/init, в соответствии с тем, что написано в командной строке. Если у вас возникают проблемы в процессе загрузки, вы можете получить доступ к чистой системе, набрав в командной строке init=/bin/sh (когда вы получите приглашение оболочки (shell prompt) вам скорее всего понадобится подключить диски: попробуйте "mount -w -n -o remount /; mount -a", и не забудьте сделать "umount -a" перед выключением компьютера).

Число: введя ядру в командной строке число, вы заставляете init запуститься на специфическом рабочем уровне (run-level) (по умолчанию обычно это бывают 3 или 2, в соответствии с тем, какой у вас дистрибутив). Прочтите документацию по команде init, изучите файлы /etc/inittab и /etc/rc*.d для дальнейших экспериментов.



Дополнительная информация и стандартная установка


Когда Lilo загружает систему, он использует вызовы BIOS для загрузки ядра Linux с диска (IDE, флоппи или что-либо еще). Таким образом, ядро должно находиться в некотором месте на диске, доступном BIOS.

Во время загрузки ядра Lilo не имеет возможности читать данные файловой системы, поэтому все, что вы напишете в файле /etc/lilo.conf

преобразовывается во время инсталляции (в момент исполнения команды /sbin/lilo). Время инсталляции - это то время, когда программа строит таблицы, содержащие список секторов, в которых находятся файлы для загрузки операционной системы. Как следствие этого, все эти файлы должны находиться на разделе, доступном BIOS (обычно все эти файлы находятся в каталоге /boot, то есть только корневая файловая система вашего Linux-а должна быть доступна BIOS). Вы должны переинсталлировать загрузчик (то есть запускать /sbin/lilo) каждый раз, когда изменяете настройку Lilo. Когда вы пересобираете ядро и перезаписываете старый образ ядра, вы должны переустанавливать Lilo.



Другие источники информации


В дополнение к документации по Lilo существует набор мини-HOWTO, которые вам могут пригодиться. Все они имеют название "Linux+что-то ещеOS", для нескольких операционных систем. В них описывается сосуществование Linux и других операционных систем. Например, "NT OS Loader + Linux mini-HOWTO" (автор Bernd Reichert) описывает, как добавить запись для Linux в существующее меню загрузки NT. Также документ "Multiboot-with-LILO" описывает, как различные виды Windows могут сосуществовать с Linux. Здесь мы будем говорить о том, как добавить запись для Windows NT в существующее меню Lilo.



Использование Lilo, когда BIOS не видит корневой раздел


У меня два IDE-диска, и один SCSI. SCSI-диск не виден из BIOS. Загрузчик Linux, Lilo, использует вызовы BIOS и может видеть только те диски, которые видит BIOS. Мой глупый AMI BIOS может загрузиться только с "A:" или "C:" Моя корневая файловая система находится на SCSI-диске.

Решение состоит в том, чтобы держать ядро, файл таблиц (map file) и цепочный загрузчик (chain loader) в Linux-разделе на первом IDE-диске. Заметьте, что необязательно в этом случае иметь ядро на корневом разделе.

Второй раздел на моем первом IDE-диске (/dev/hda2, Linux-раздел для загрузки системы) подключен к /u2. Вот файл /etc/lilo.conf, который я использовал.

# Установка Lilo на MBR # первого IDE-диска. # boot = /dev/hda # /sbin/lilo (установщик) копирует загрузочную запись Lilo # из следующего файла в месторасположение MBR. install = /u2/etc/lilo/boot.b # # Я написал сложное загрузочное меню. Lilo найдет его здесь. message = /u2/etc/lilo/message # Установщик создаст следующий файл. Он подскажет # загрузчику, где находятся блоки ядра. map = /u2/etc/lilo/map compact prompt # Ожидать 10 секунд, затем загрузить ядро версии 1.2.1 по умолчанию. timeout = 100 # Ядро можно скопировать туда, где его увидит BIOS командой: # cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1 image = /u2/z1.2.1 label = 1.2.1 # Lilo указывает ядру - подключить первый раздел на SCSI # в качестве корневого. Для этого BIOS не обязательно должен его видеть. root = /dev/sda1 # Этот раздел будет проверен и переподключен (remount) в скрипте /etc/rc.d/rc.S read-only # Я оставил старое ядро Slackware на случай, если я соберу нерабочее ядро # Кстати, мне это пригодилось image = /u2/z1.0.9 label = 1.0.9 root = /dev/sda1 read-only # Мой раздел с DR-DOS 6. other = /dev/hda1 loader=/u2/etc/lilo/chain.b label = dos alias = m



Использование Lilo, когда BIOS не видит загрузить корневой раздел


У меня на работе в системе установлен IDE-диск размером 1Гб. BIOS может видеть только первые 504 Мб этого диска. (Здесь Мб означает 2**10 байт, а не 10**6.) Поэтому у меня MS-DOS на 350 Мб разделе /dev/hda1 и мой корневой раздел Linux размером 120 Мб - /dev/hda2.

MS-DOS не смог установиться правильно, когда диск был чистый. У Novell DOS 7 была та же проблема. К счастью для меня, "Аксессуары от IBM" были неполными - забыли положить дискету с программой "OnTrack" в коробку с винчестером. Винчестер должен был поставляться с продуктом под названием "OnTrack Disk Manager." Если у вас только MSDOS, я думаю, вам он понадобится.

Поэтому я создал таблицу разделов при помощи команды fdisk в Linux-е. MSDOS-6.2 отказался от инсталляции в /dev/hda1. Он сказал что-то типа "Эта версия MS-DOS только для новых установок, а на вашем компьютере уже есть MS-DOS, поэтому получите версию обновления (upgrade release) от вашего дилера." А на самом деле диск был новый.

Какая неудача! Поэтому я снова запустил fdisk в Linux-е снова и удалил раздел 1. Удовлетворенная этим MS-DOS 6.2 создала такой же в точности раздел, который я только что удалил и туда себя установила. MS-DOS 6.2 также записала свой MBR на диск, но он не загружался.

К счастью, у меня было ядро Slackware на флоппи (созданное программой установки дистрибутива Slackware), поэтому я загрузил Linux и перезаписал Lilo поверх сломанного MBR MS-DOS-а. И все заработало. Вот файл /etc/lilo.conf, который я использовал:

boot = /dev/hda map = /lilo-map delay = 100 ramdisk = 0 # Отключить электронный диск (ramdisk) в ядре Slackware timeout = 100 prompt disk = /dev/hda # BIOS видит только первые 500 Мб. bios = 0x80 # выбрать первый IDE. sectors = 63 # возьмите количество секторов из руководства по диску. heads = 16 cylinders = 2100 image = /vmlinuz append = "hd=2100,16,63" root = /dev/hda2 label = linux read-only vga = extended other = /dev/hda1 label = msdos table = /dev/hda loader = /boot/chain.b

После того, как я это все установил, я выяснил, что раздел, содержащий файлы zImage, boot.b, map, chain.b и файлы сообщений, может иметь файловую систему msdos, если только она не испорчена "Stacker"-ом или "Doublespace"-ом. Поэтому мой раздел DOS на /dev/hda1 мог стать размером 500 Мб.

Я также выяснил, что система "OnTrack" записала бы таблицу разделов немного в другое место, чем обычно, и, возможно, для совместимости изменила IDE-драйвер Linux-а. Но установка этого "OnTrack" сделала бы невозможной загрузку со стандартного ядра, входящего в поставку Slackware. Кстати, потом IBM прислал мне дискету с "OnTrack". Я позвонил в службу поддержки OnTrack. Они сказали мне, что Linux - плохая система, потому что не использует BIOS. Я выкинул их дискету.



Как я должен настроить мои IDE-диски?


Я лично не использую настройки LBA и LARGE в BIOS-е (но у меня на машине только Linux); это одни из самых ужасных изобретений, вызванное неэффективностью мира PC. Такое решение требует, чтобы ядро находилось на первых 1024 цилиндрах винчестера, но это не проблема, потому что вы разбиваете диск на разделы, и выделяете под корневой раздел небольшое пространство (что вы и должны всегда делать в любом случае).

Если на вашем диске есть другая операционная система, то вам наверно нельзя будет изменить настройки BIOS, иначе эта ОС перестанет работать. Все последние версии Lilo понимают настройки LBA и LARGE.

Заметьте, что ключевое слово "linear" в файле /etc/lilo.conf может помочь решить проблемы геометрии винчестера. Эта команда инструктирует Lilo использовать линейные адреса секторов, вместо троек сектор/головка/цилиндр. Преобразование из линейных в трехмерные адреса во время загрузки немного замедляет этот процесс, но он становится менее уязвим с точки зрения проблем геометрии.

Если у вас более, чем один винчестер, и некоторые из них используются только Linux-ом, и не включаются в процесс загрузки, вы можете сказать BIOS, что их нет. Ваша система будет загружаться быстрее, а Linux автоматически определит их наличие при загрузке. Я часто меняю винчестеры в моих компьютерах, не никогда не трогаю конфигурацию BIOS.



Как мне убрать Lilo?


Когда Lilo перезаписывает загрузочный сектор, он оставляет резервную копию в файле /boot/boot.xxyy, где xxyy - главное и зависимое число устройства (major and minor numbers), в шестнадцатеричном виде. Вы можете увидеть главное и зависимое число вашего диска или раздела, набрав команду "ls -l /dev/device". Например, первый сектор устройства /dev/hda (главное число - 3, зависимое - 0) будет записано в файл /boot/boot.0300, установка Lilo на /dev/fd0 создает файл /boot/boot.0200 и установка на устройство /dev/sdb3

(главное число - 8, зависимое - 19) создаст файл /boot/boot.0813. Заметьте, что Lilo не создаст резервную копию, если файл уже существует, поэтому вам не надо беспокоиться о сохранности этой копии при переустановке Lilo (например, после сборки нового ядра). Резервные копии в каталоге /boot/

всегда отражают общую ситуацию до установки Lilo.

Если вам надо деинсталлировать Lilo (например, в очень неудачном случае - деинсталляции Linux), вам достаточно восстановить исходный загрузочный сектор. Если Lilo установлен в /dev/hda, просто наберите "dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1" (Я лично делаю "cat /boot/boot.0300 > /dev/hda", но это не совсем безопасно, так как это восстановит и стандартную таблицу разделов, которую вы могли изменить со времени сохранения загрузочного сектора). Эта команда значительно проще, чем "fdisk /mbr" из DOS-а: она позволяет вам начисто удалить Linux с диска без загрузки чего-либо, кроме Linux-а. После удаления Lilo не забудьте запустить команду fdisk Linux-а для удаления всех Linux-разделов (fdisk в DOS-е не удаляет не-DOS разделы) (Примечание переводчика: Это не верно для так называемого DOS 7.0, встроенного в Windows 95/98).

Если вы установили Lilo в корневой раздел (например, в /dev/hda2), ничего особенного не надо делать для деинсталляции Lilo. Просто уберите с диска все Linux-разделы при помощи fdisk. Вы также должны пометить DOS-раздел загружаемым (bootable).



Как справиться с большими ядрами


Если вы собираете "zImage"-ядро, и оно больше половины мегабайта (достаточно частое явление для ядер версии 2.1), то вам нужно собрать вместо zImage, большой zImage ("make bzImage") при помощи команды: "make bzImage". Для загрузки большого ядра не надо ничего дополнительно делать, но у вас должна быть версия Lilo18 или более новая . Если у вас старая версия, обновите (upgrade) пакет Lilo.



Как загрузить Windows NT из меню Lilo


Здесь я предлагаю вам способ, как можно добавить пункты в меню Lilo для того, чтобы загрузить Linux или NT:

Прежде всего я предложил бы установить свежий дистрибутив Windows NT 4.0 на ваш жесткий диск. Я предполагаю, что вы уже сделали резервную копию важных данных, тогда установка NT должна пройти без проблем. Во времы установки NT, инсталлятор не спросит вас, где разместить загрузчик NT. Он будет помещен в MBR (Главная загрузочная запись) на вашем жестком диске. Имеется возможность восстановить предыдущее содержимое MBR (например от предыдущего содержимого Lilo). Я предложил бы вам (до инсталляции NT) загрузить компьютер с дискеты DOS, имеющей программу FDISK. В командной строке a:\ введите: fdisk /mbr и снова перезагрузите компьютер (без дискеты).

После успешной установки NT, вы увидите, что система использует целый жесткий диск или определенный раздел жесткого диска (в зависимости от того, что вы выбрали в процессе установки). Т.е. рекомендуется 'сжать' раздел, где находится NT, чтобы освободить некоторое пространство на диске. На этом свободном пространстве вы установите Linux. После того, как ваш NT сконфигурирован и запускается, вы должны загрузить компьютер, используя дискету с утилитой Partition Magic. Это графическая утилита позволяет видеть все разделы на всех жестких дисках, которые у вас имеются. Вы сможете изменить разделы, не потеряв данные. Первое - сделайте ваши существующие разделы меньшего размера, т.о. вы получите некоторое свободное место на диске для других целей. Хотя я вам советую сделать резервную копию до того, как вы будете делать любые изменения разделов, я обычно делаю 'сжатие' разделов NT, когда NT установлена не полностью (т.е. если появится необходимость, то повторный запуск установки не вызовет проблем). Partition Magic (или другая подобная утилита) будет 'сжимать' ваши данные на NT разделе (NTFS или FAT) в начало или в конец раздела. Вы можете сами выбрать, где размещать данные - в начале или в конце диска (я предпочитаю, чтобы данные NT раздела были в начале, т.ч. в конце диска будет свободное пространство). После 'сжатия' вы можете перезагрузить систему (NT), чтобы проверить результат: используйте для этого Проводник Windows или Disk Administrator.


Пока все хорошо. Следующий шаг - установка Linux. Возмите ваш дистрибутив RedHat (я надеюсь, что с другими пакетами подобно), поместите установочный диск в устройство и перезагрузите компьютер. Когда вы выберите тип установки (Gnome или KDE Workstation, Custom и т.п.) можно выбрать запланированные заранее компоненты для установки, но я рекомендую сначала установить Workstation. Это лучше, т.к. установка Linux будет автоматически искать свободное пространство на (первом) жестком диске, сделайте все разделы необходимые Linux, отформатируйте их должным образом и выберите большинство опций по умолчанию, так установка пройдет лучше (позже, если вы хотите, вы можете или добавить отсутствующие компоненты, или переустановить Linux, выбрав Custom). Lilo запишется в MBR.



После окончания установки Linux, вы должны перезагрузить компьютер и после перезагрузки вы увидите только Lilo, с единственным пунктом "Linux" в меню загрузки (или может быть больше, чем один пункт, в случае, когда у вас многопроцессорная система). Но не паникуйте! Ваш Windows NT находится там, где вы его установили. Вам будет необходимо найти и отредактировать файл /etc/lilo.conf. Сначала, когда вы откроете этот файл, вы увидите только одну (или больше) записей для загрузки Linux. Вы должны точно знать расположение (читай: раздел), где установлен Windows NT, т.о. вы должны добавить соответствующую запись в файл /etc/lilo.conf. После того, как вы это сделаете, перезапустите Lilo, и при следующей перезагрузке вы увидите обе записи 'linux' и 'nt' в меню Lilo.




Куда мне установить Lilo?


Директива boot= в файле /etc/lilo.conf

указывает Lilo, где должен находиться его главный загрузчик (primary boot loader). В общем случае, вы можете выбрать либо главный загрузочный сектор (master boot record) (/dev/hda) или загрузочный сектор корневого раздела вашего Linux-а (это обычно /dev/hda1 или /dev/hda2).

Если у вас есть другая операционная система на вашем жестком диске, вам лучше установить Lilo в загрузочный сектор вашей корневой файловой системы вместо MBR. В этом случае вы должны пометить ваш корневой раздел, как "загружаемый" ("bootable"), используя команду "a" в программе fdisk или команду "b" в программе cfdisk. Если вы не измените свой MBR, вам будет проще убрать свой Linux и Lilo, если это понадобится.

Конечно всегда можно избежать "правил" подобных вышеупомянутому. Вы можете установить Lilo в MBR, даже если у вас установлена другая система. Например, если вы установили Windows NT 4.0, как первую операционную систему на вашей машине, тогда загрузчик NT будет записан в MBR, т.о. ваш NT должен был загружаться без проблем. После установки Linux и выбора - установить Lilo в MBR, Lilo перепишет загрузчик NT. В следующий раз при загрузке машины вы не сможете загрузить NT. Но нет никаких проблем. Вы просто должны отредактировать ваш /etc/lilo.conf

и добавить новую запись для NT. В следующий раз, перезагрузив систему, вы увидите в Lilo запись для меню.



Lilo mini-Howto


Miroslav Skoric
m.skoric@eunet.yu
Перевод: Станислав Рогин, ASPLinux

LILO - это наиболее распространенная версия загрузчика Linux (Linux Loader) для x86-процессоров; Я буду называть его Lilo, вместо LILO в этом документе, потому что мне не нравятся заглавные буквы. Этот файл описывает несколько стандартных конфигураций Lilo. Этот документ может рассматриваться как дополнение к Руководству Пользователя Lilo. Я думаю, что примеры будут достаточно информативны, даже если ваши настройки мало похожи на мои. Я надеюсь, мои труды уберегут вас от проблем. Lilo достаточно хорошо документирован, и если вдруг кого-то заинтерисуют детали, то читайте файлы в каталоге /usr/doc/lilo*



Настройка hdc для загрузки, как hda, и использование опции bios=


Lilo позволяет установить ядро на одно устройство и заставить BIOS читать его с другого устройства. Например, я часто устанавливаю Linux на диск, подключенный к hdc (главный диск на вторичном IDE-контроллере) и загрузиться с него, как с системы на другом компьютере. Я скопировал инсталляционный диск на маленький раздел, поэтому могу запустить команду chroot на виртуальной консоли для установки Lilo на hdc, пока я занимаюсь чем-то другим.

Файл lilo.conf, который я использую для инсталляции Lilo выглядит примерно так:

# Этот файл должен использоваться для системы, видящей этот диск как /dev/hdc boot = /dev/hdc # перезаписать MBR на hdc disk = /dev/hdc # Указать, как hdc будет выглядеть в системе: bios = 0x80 # BIOS увидит его, как первый диск delay = 0 vga = 0

image = /boot/vmlinux # это уже на /dev/hdc1 root = /dev/hda1 # но во время загрузки это будет hda1 label = Linux read-only

Этот конфигурационный файл должен читаться Lilo, запускаемым с /dev/hdc1. Таблицы Lilo, которые будут записаны в загрузочный сектор (/dev/hdc), должны описывать файлы в каталоге /boot (который в свою очередь находится на hdc); эти файлы будут доступны при доступе к hda, когда диск будет загружен в виде отдельной системы.

Я назвал этот файл /mnt/etc/lilo.conf.hdc (/mnt - это место, куда был подключен диск hdc во время инсталляции). Я устанавливаю Lilo командой "cd /mnt; chroot . sbin/lilo -C /etc/lilo.conf.hdc". Читайте документацию по chroot, если эта команда вам не понятна.

Директива "bios=" в файле lilo.conf нужна для того, чтобы указать Lilo, что думает о ваших устройствах Lilo. Вызовы BIOS определяют флоппи-диски и жесткие диски номерами: 0x00 и 0x01 означают флоппи-дисководы, 0x80 и более означают винчестеры (старые версии BIOS могли работать только с двумя дисками). Поэтому "bios = 0x80" в предыдущем примере означает "использовать 0x80 в вызовах BIOS при доступе к /dev/hdc".

Эта директива Lilo может быть применима и в другой ситуации: когда, например, ваш BIOS имеет возможность загружаться со SCSI-дисков вместо IDE. Когда есть и IDE-, и SCSI-устройства, Lilo не может определить, к которому будет относиться цифра 0x80, потому что пользователь выбирает порядок в конфигурационных меню BIOS, и они не доступны во время работы Linux.

По умолчанию Lilo считает, что IDE-диски идут первыми, поэтому, в противном случае, в файле /etc/lilo.conf должно находиться примерно следующее:

disk = /dev/sda bios = 0x80



Простая конфигурация


Многие установки Lilo используют файл, подобный приведенному ниже:



По той причине, что документация


По той причине, что документация в исходных текстах Lilo (та, что находится в каталоге /usr/doc/lilo-версия) очень сложна для понимания, у многих пользователей возникают некоторые проблемы при написании собственного файла /etc/lilo.conf. Этот документ предназначен для того, чтобы поддержать их и дать минимальную информацию, а также привести 5 примеров инсталляции Lilo:

Первый пример: классическая инсталляция "Linux и что-то еще".

Следующий пример покажет, как установить Lilo на винчестер, подключенный к /dev/hdc, который загрузится как /dev/hda. Это обычно бывает нужно, когда вы устанавливаете новый Linux на вашей уже работающей машине. В нем также описано, как загружаться со SCSI-дисков, когда ваш BIOS достаточно современен.

Третий пример показывает, как загрузить Linux, чей корневой раздел не доступен BIOS.

Следующий пример используется для больших дисков, с которыми проблемы и у BIOS-а и у DOS-а (этот пример уже немного устарел).

Последний пример показывает, как восстановить поврежденный диск, если повреждение было нанесено путем установки другой операционной системы.

Автор последних трех примеров - Cameron, cls@truffula.sj.ca.us>, он и писал оригинал документа. Alessandro rubini@linux.it> сопроводитель документа на текущий момент, не запускает на своей машине ничего кроме Linux, поэтому он не может ни проверить, ни дополнить примеры сам. Надеюсь не надо напоминать, что любые отзывы принимаются с радостью.

Загрузка с аварийного флоппи-диска


Затем, я установил Windows-95 в моем офисе. Она напрочь затерла мой прекрасный MBR Lilo, но оставила мои разделы с Linux в покое. Ядра долго загружаются с флоппи, поэтому я поработал над настройками, чтобы флоппи мог загружать ядро с IDE-диска.

Я сделал этот флоппи примерно так:

fdformat /dev/fd0H1440 # отформатировать диск mkfs -t minix /dev/fd0 1440 # создать файловую систему minix mount /dev/fd0 /mnt # подключить диск к стандартной временной точке cp -p /boot/chain.b /mnt # скопировать цепочный загрузчик (chain loader) на диск lilo -C /etc/lilo.flop # установить Lilo и его таблицы на дискету. umount /mnt

Заметьте, что дискета должна быть подключена к системе во время запуска инсталлятора Lilo, чтобы Lilo мог правильно построить свои таблицы.

Ниже приведен файл /etc/lilo.flop. Он почти такой же, как и предыдущий:

# Создает флоппи, который может загружать ядра с IDE. boot = /dev/fd0 map = /mnt/lilo-map delay = 100 ramdisk = 0 timeout = 100 prompt disk = /dev/hda # 1 Гб IDE, BIOS видит только первые 500 Мб. bios=0x80 sectors = 63 heads = 16 cylinders = 2100 image = /vmlinuz append = "hd=2100,16,63" root = /dev/hda2 label = linux read-only vga = extended other = /dev/hda1 label = msdos table = /dev/hda loader = /mnt/chain.b

И последнее. Мне понадобилась MS-DOS 6.2 в моей офисной системе, но я не хотел трогать первый диск. Я установил SCSI-контроллер и диск, создал там файловую систему msdos при помощи команды mkdosfs, и Windows-95 увидел его как "D:". Но, конечно, MSDOS не мог загрузиться с D:. Это не проблема, когда у вас есть Lilo. Я добавил следующее в файл lilo.conf из Примера 2.

other = /dev/sda1 label = d6.2 table = /dev/sda loader = /boot/any_d.b

С этим дополнением MSDOS-6.2 работает и думает, что он на диске C:, а Windows-95 - на D:.