Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Обновление и конфигурирование ядра

Linux на Дискете.

Опубликовал: Andrew E. Kuznetsoff aka Разгильдяй на обкуренной
Дата: 03.02.2004
постоянный адрес статьи: http://linuxportal.ru/entry.php/P838_0_3_0/


1.Предисловие.
2. Права и отказ от обязательств.
3. О чем мужик шумит.
4. Минимальные требования.
5. К барьеру.
5.1 Файловая система.
6. Что на диске твоем.
7. Как быть дальше.
8. Обработка напильником.
9. Автор.
10. Литература.


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

mkbootdisk -device /dev/fd0 2.4.21


или с помощью утилиты rawrite из под Windows или MS-DOS.
2. Права и отказ от обязательств.
Вся содержащаяся в этом тексте информация предназначеная для Linux и Intel платформ, но так же может быть использована и для других процессоров. Все написанное здесь написано лишь с целью оказаться полезной информацией, но не является непосредственной инструкцией к действию.
3. О чем мужик шумит.
Загрузочным диском в данном конкретном случае я хочу назвать "полноценную" Linux - систему в миниатюре, т.е мы будем говорить о загрузочном диске самодостаточном для самостоятельного старта и работы. Наверное, вы уже встречали такие Linux - системы. Например, мне первое, что попало в руки это дискета на 3,5' с помощью которой поднимался роутер (freesco), все ПО для запуска и конфигурирования было на нем, и было самодостаточным. Честно говоря никода бы не полез в эти дебри, если бы не старое ядро. Я не буду здесь говорить о типах загрузочных дисков, все это в полной мере вы можете прочитать в Boot Disk-How-To.
4. Минимальные требования.
Для работы нам потребуется флопповод (/dev/fd0 хотя бы).
Поддержка петлевого интерфейса ядром. Проверить наличие поддержки можно набрав команду

# ls -la /dev/loop?


Нам понадобятся исходники ядра и четкое представление о том, что должен делать диск, а так же положительный опыт сборки ядра.
5. К барьеру.
Я никого не хочу пугать, но если ваша рабочая Linux - система живет как минимум на 600 Мб (приблизительный размер RedHat 7.2 в режиме разработчика без X-oв). То здесь нам придется немного попотеть, что бы запихнуть все, что нам понадобится как минимум на 1400 Кб. Почувствуйте разницу.

И так без чего никак не обойтись:
1.минимальный набор каталогов: /bin; /proc; /lib; /dev; /etc; /usr; /tmp;
2.минимальный набор утилит: mv; cp; ls; sh и прочих
3. минимальный набор конфигурационных файлов: rc; inittab; fstab и прочих
4. /dev/hd*; /dev/tt*; /dev/fd0 и прочие

5.1 Файловая система.
Сформировать файловую систему для загрузочного диска можно двумя способами:
1.Используя RAM - диск, если ваша базовое ядро поддерживает RAM - диски.Поддерживается по умолчанию линейкой 2.4.хх.
2.Используя петлевое устройство (loopback device), если ваше базовое ядро поддерживает loopback devices.
Поддержка RAM - дисков понадобится нам и для работы нашего загрузочного диска. Так как я не прибегал к первому способу формирования файловой системы, то как следствие мы будем действовать по второму.
Для начала сформируем файл заполненный 0, в котором мы будем создавать файловую систему нашего загрузочного диска.

#dd if=/dev/zero of=/tmp/fsfile bs=1k count=4000


Таким образом, мы получим файл размером 4096 Кб, этого нам будет вполне достаточно для корня файловой системы, но об этом позже.
Теперь мы его отформатируем. Есть несколько вариантом mke2fs, mkfs.ext3, mkfs.xfs и mkfs.raiserfs. Здесь выбор за вами я пользовался mke2fs преследуя только свои интересы.

#mke2fs -m 0 -N 2000 /tmp/fsfile


По правилам использования этих и других опций читайте # man mke2fs и прочии маны.

#mkdir /mnt/rootfs
#mount -o loop /tmp/filefs /mnt/rootfs


6. Что на диске твоем.
Поймите меня правильно, но я не стану сейчас описывать в какой директории, что у вас лежит или, что должно лежать это займет несколько страниц и полностью отвлечет от темы. Подробности все в том же Boot-Disk-How-To.
Создаем каталоги /bin; /sbin; /dev; /var; /usr; /proc; /etc; /lib; /mnt;на нашей файловой системе.

#mkdir /mnt/rootfs/bin


Заполняем /dev

#cp -dpR /dev/fd0* /mnt/rootfs/dev/
#cp -dpR /dev/ram? /mnt/rootfs/dev/
#cp -dpR /dev/tty[0-6] /mnt/rootfs/dev/
#cp -dpR /dev/hd[a-c]* /mnt/rootfs/dev/


Ну и все иные устройства, поддержка которых необходима, но не перестарайтесь.
На самом деле можно и не копировать все эти устройства, а можно заставить rc скрипт выполнять mknod для необходимых устройств. Но не забудьте, что console; mem; kmem; null; ram0 должны быть обязательно.
Заполняем /etc
Здесь все согласно ваших намерений, могу только указать то, что необходимо на 100%
1.rc
2.inittab
3.fstab
На самом деле здесь большое поле для исследовательской деятельности и все остальное, что вы внесете сюда зависит только от вашей задачи.

Самый простой rc

#!/bin/sh
/bin/mount -av
/bin/hostname Diskotech
/bin/sh


Самый простой fstab

/dev/ram0 / ext2 defaults 1 1
/proc /proc proc defaults 0 0


Самый простой inittab

id:2:initdefault
si::sysinit:/etc/rc
1: 2345: respawn: /sbin/getty 9600 /dev/tty1
2: 23: respawn: /sbin/getty 9600 /dev/tty2



Заполняем /bin
Тут Начинается самое веселое, столько всего, а места на диске практически и нет, без паники! Все лечится! Берем пакет busybox, собираем у себя и читаем мануал. В зависимости от версии "полной коробочки" у вас будут различное и ее наполнение.

# cp -R /bin/busybox /mnt/rootfs/bin/


И создаем все возможные софтлинки.
Заполняем /lib
Ну тут все совсем просто

#ldd /sbin/mke2fs
libext2fs.so.2 => /lib/libext2fs.so.2 (0x40025000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x4003c000)
libe2p.so.2 => /lib/libe2p.so.2 (0x4003e000)
libuuid.so.1 => /lib/libuuid.so.1 (0x40043000)
libc.so.6 => /lib/libc.so.6 (0x40046000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000


С помощью команды ldd мы выясним все необходимые нам библиотеки и скопируем их в
/mnt/rootfs/lib используя ключ -R дабы софтлинки были скопированы без нарушений.

Заполняем /lib/modules
В этом нам поможет modules.conf или lsmod кому, что нравится. Самое главное не забыть модулей файловой системы с которой придется работать если она отлична от файловой системы загрузочного диска. Не забудте vfat.o мне это стоило больших неприятностей, когда заказчик не смог примонтировать саму дискету. Что лежит у меня? Дрова CD_ROM. Дрова мультипортовки, и прочее.

7. Как быть дальше.
Если формирование корневого каталога закончено самое время начать волноваться посильнее. Все дело в том, что теперь могут начаться проблемы. Но об этом позже.

#umount /mnt/rootfs
#gzip -v9 /tmp/fsfile

И так образ нашей корневой файловой системы готов. В сжатом виде составляет, что-то вроде 650 Kb. Переходим к следующему этапу, формированию самого диска.

8. Обработка напильником.
Что ж переходим к этапу формирования ядра. Первоначально дабы не озадачиваться персональной сборкой ядра. Предлагаю самое простое это просто выполнить

#cd /usr/src/linux
#make bzImage

И посмотреть какого размера получится ядро. Если те же 650-800 Kb, то вполне приемлемый размер. Если ядро всетаки большое, то придется потратить часок другой на удаление лихних компонентов. Хочу напомнить, что ядро должно поддерживать в обязательном порядке RAM- диски, размер RAM диска по умолчанию 4096 байт, можно и больше в описываемом случае в этом нет необходимости. Так же в ядро должна быть вкомпилированная поддержка корневой файловой системы.
Теперь маленькая хитрость, что бы не выполнять десяток операций по созданию загрузочных записей на диске, выполним всего одну

#mkbootdisk -device /dev/fd0 2.4.21


тем самым сформируем шаблон загрузочной дискеты размером 1,44 Mb, если этого размера изначально не хватает, то сформируем дискетку побольше

#mkbootdisk -device /dev/fd0u1680 2.4.21


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

#cp /tmp/fsfile.gz /mnt/floppy


Запускаем любимый текстовый редактор, правим файл syslinux.cfg и пишем что-то вроде приведенного ниже текста.

default update
vga=4
prompt 1
display boot.msg
timeout 100
label update
kernel bzImage
append initrd=fsfile.gz rw root=/dev/ram

Вот собственно и все. Наш корневой загрузочный диск готов.

9. Автор.
Andrew E. Kuznetsoff aka Разгильдяй на обкуренной кошке.

10. Литература.
BootDisk-HowTo - последнюю версию документа ишите на http://www.tldp.org
При формировании статьи были разобраны на состравляющие.
Minimalist Linux Router от Freesco
Russian Trinux Kit дискетная версия.