Настройка и работа в Linux
adb5321d

Хорошим способом изучения железа PC


Хорошим способом изучения железа PC являетс самостоятельная сборка компьютера из б/у частей. Для запуска Linux нужна машина с процессором от 386. Это не может дорого стоить. Расспросите друзей и знакомых - наверняка что-нибудь найдете.
Загрузите, скомпилируйте и создайте загрузочный диск для Unios. (В качестве их домашней страницы значится http://www.unios.org, но это не работает) Это всего лишь загрузочная программа ``Hello World!'', состоящая из немногим более 100 строк ассемблерного кода. Было бы не плохо увидеть её преобразованной к формату ассемблера GNU as.
Откройте образ загрузочного сектора unios в шеснадцатеричном редакторе. Этот файл содержит 512 байт - ровно один сектор. Найдите "волшебное число" 0xAA55. Проделайте тоже самое с загрузочной дискетой или диском вашего компьютера. Вы можете использовать команду dd для копирования сектора в файл: dd if=/dev/fd0 of=boot.sector. Будьте весьма аккуратны при назначении параметров if
(input file) и of (output file)!
Прочитайте исходные тексты загрузчика LILO.


ЭТО ОПАСНО: будте осторожны с этими упражнениями. Здесь легко ошибиться, испортить главную загрузочную запись (MBR) и привести систему в нерабочее состояние. Убедитесь, что у вас есть работающая загрузочная дискета и вы знаете как с её помощью восстанавливать загрузочные сектора. Ниже приведена ссылка на tomsrtbt - спасательный диск, который я использую и могу рекомендовать. Лучшая предосторожность - использовать машину на которой нет ничего важного.
Установите lilo на дискету. Неважно если там не окажется ничего кроме ядра - вы получите ``kernel panic'', когда ядро будет готово загрузить init, но по крайней мере вы убедитесь, что lilo работает.
Продолжайте и наблюдайте как много системы вы сможете запихнуть на одну дискету. Кажется это второй из лучших способов изучения Linux. За справками обращайтесь к Bootdisk HOWTO и tomsrtbt (ссылки приведены ниже).
Заставьте lilo грузить unios (см. раздел железо/упражнения). Будет совсем круто, если вы сможете проделать это на дискете.
Создайте загрузочную петлю. Пусть lilo в MBR грузит lilo в одном из загрузочных секторов первичных разделов диска. Последнюю надо заставить грузить lilo из MBR... Возможно также использовать MBR и все четыре первичных раздела диска для создания пятиузлового кольца. Наслаждайтесь!


Осмысли следующее: /dev/ hda3 является файлом специального типа и описывает раздел жесткого диска. Однако он находится в файловой системе подобно другим файлам. В момент, когда ядру надо решить который из разделов будет смонтирован в качестве корневого, ядро ещё не имеет файловой системы. Как же ядру прочитать /dev/hda3 чтобы смонтировать раздел?
Постройте собственное ядро, если вы ещё не сделали этого. Прочтите всю документацию по каждой из опций настройки.


Выясните насколько маленькое (работоспособное) ядро вы сможете создать. Вы сможете многому научиться избавляясь от ошибок.
Прочтите ``The Linux Kernel'' (URL приведен ниже) и последовательно отыскивайте соответствующие части исходного кода. На момент напмсания данного документа эта книга описывала ядро версии 2.0.33, которое явно устарело. Возможно будет проще скачать исходные тексты для старой версии. Как приятно обнаруживать куски C-кода озаглавленные ``process'' и ``page''.
Хакайте! Посмотрим, сможете ли вывести какие-либо дополнительные сообщения или что-то ещё.


Используя ldd, выясните какие библиотеки использует ваше любимое приложение.
Используя ldd, выясните какие библиотеки использует программа init.
Создайте игрушечную библиотеку с одной - двумя функциями. Для создания библиотек используется программа ar, так что начать следует с чтения соответствующего ман(уала). Напишите, скомпилируйте и соберите программу, которая будет использовать эту библиотеку.


Найдите директорию rcN.d для вашего "уровня запуска" по умолчанию и выполните команду ls -l, чтобы узнать на какие файлы указывают ссылки.
Измените количество виртуальных терминалов в системе.
Уберите любую не нужную вам подсистему из "уровня запуска" по умолчанию.
Оцените сколько вам удалось сэкономить на старте.
Создайте загрузочную дискету с lilo, ядром и "статически" собранной программой "hello world", причем последнюю назовите /sbin/init. Убедитесь, что система грузится и приветствует вас как положено.
Отследите все сообщения, выдаваемые системой при запуске. Или распечатайте содержимое системного журнала /var/log/messages с момента последнего старта. Затем, начиная с inittab, проследуйте по всем выполненным скриптам, отмечая кто что делает. Вы также можете вставить в скрипты дополнительные сообщения типа
echo "Hello, I am rc.sysinit"
Это упражнение помогает также в изучении техники написания скриптов под bash. Некоторые из скриптов устроены весьма непросто, поэтому справочник по командам bash окажется весьма кстати.


Создайте очень маленькую файловую систему и рассмотрите её с помощью шестнадцатеричного вьюера. Найдите inod'ы, суперблоки и содержимое файла.
Я верю в существование программ, которые представляют файловую систему в графическом виде. Найдите, опробуйте и пришлите мне ссылку и ваши впечатления.
Исследуйте код ядра, относящийся к файловой системе ext2.


Выполните update -d, и обратите внимание на предупреждение в последней строке относительно нарушения границ (?) (``threshold for buffer fratricide''). В настоящий момент это не понятно, давайте исследовать!
Перейдите в директорию /proc/sys/vm выполните cat для файлов этой директории. Посмотрите что с этим можно сделать.


Загляните в системный журнал. Найдите непонятное вам сообщение и отыщите информацию о том что оно значит.
Направьте все сообщения на терминал (tty). (Потом верните всё обратно).


Основы bash легки в изучении. Однако вам не следует останавливаться: глубины невообразимы. Заведите привычку всегда искать лучшие пути для выполнения работы.
Читайте скрипты, найдите вещи которые вы не понимаете.


Создайте файл /etc/ passwd вручную. Пароли могут быть установлены в null и изменены программой passwd после регистрации. Прочтите ман на этот файл. Запустите его командой man 5 passwd чтобы получить информацию о файле, а не о программе.

Содержание раздела