LINUX.ORG.RU

Ответ на: комментарий от parser

Почему шутка? Вовсе нет. Ядро у меня получается около 800кб плюс инитрд тоже 800кб, т.е на дискетку 1.7МБ залазит, но мне хотелось бы на стандартную 1.4МБ дискету уместить, т.е. ядро нужно сделать около 600кб. Все что мог в ядре оключил, инитрд меньше тоже не получается. Поэтому и вопрос. Знаю, что существуют патчи под эмбеддед системы, один такой нашел, но он под старую версию 2.4.12, я его попробовал и он меня не устроил. Ищу дальше.

anonymous
()
Ответ на: комментарий от anonymous

Ну если отключить поддержку сети и большую часть драйверов, то ядро занимает 600кб без всяких инитрд, так что ковыряй дальше или поиши готовый конфиг например от дискетной версии RIP

arax ★★
()

создаем образ будущего ram диска:
dd if=/dev/zero of=ramdisk.img bs=1М count=4
форматируем
mkfs.ext2 ramdisk.img
монтируем
mkdir rootfs
mount -text2 -oloop ramdisk.img rootfs
 
скачиваем http://busybox.net/downloads/busybox-1.00.tar.bz2 (1.2Mb)
распаковываем, и командуем make menuconfig
 
в секции Build Options выбираем:
[*] Build BusyBox as static binary
 
в секции Init Utilities выбираем:
[ ] init
 
в секции System Logging Utilities выбираем:
[ ] syslogd
[ ] loggerd
 
остальное можно оставить по умолчанию, чем меньше утилит выбереш тем меньше будет размер.
make
make PREFIX=../rootfs install
 
идем в наш будущий rootfs и создаем каталоги
proc
dev
 
и устройства:
dev/console (c 5 1)
dev/fd0     (b 2 0)
dev/initrd  (b 1 250)
dev/null    (c 1 3)
dev/ram0    (b 1 0)
dev/tty     (c 5 0)
dev/tty0    (c 4 0)
dev/tty1    (c 4 1)
dev/tty2    (c 4 2)
dev/tty3    (c 4 3)
dev/zero    (c 1 5)
 
если незнаком с командой mknod то можно просто скопировать в mc.
создаем файл rootfs/sbin/init с содержанием:
---
#!/bin/ash
 
echo Mounting /proc filesystem
mount -t proc /proc /proc
/bin/ash
---
с правами на выполнение chmod +x init
 
размонтируем и сжимаем
umount rootfs
gzip -9 ramdisk.img
 
смотрим размер
ls -la ramdisk.img
 
У меня получилось порядка 420Кб, на дискете 1440 т.е. остается собрать ядро чем меньше тем лучше.
Загружаем ветку 2.4 http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.31.tar.bz2 (30Mb)
 
распаковываем, командуем
make menuconfig
УБИРАЕМ ВСЕ ЧТО ЕСТЬ ПО УМОЛЧАНИЮ ;)
оставляем:
Processor type and features -->
    (386) Processor family
General setup --->
    [*] Networking support
    [*] PCI support
    [*] ISA bus support
    [*] System V IPC
    [*] Kernel support for ELF binaries
Block devices --->
    [*] Normal floppy disk support
    [*] RAM disk support
    (4096) Default RAM disk size
    [*] Initial RAM disk (initrd) support
Networking options --->
    [*] Packet socket
    [*] Unix domain sockets
    [*] TCP/IP networking
Character devices --->
    [*] Virtual terminal
    [*] Support for console on virtual terminal
File systems --->
    [*] /proc file system support
    [*] second extended fs support
Console drivers -->
    [*] VGA text console
 
командуем:
make dep
make bzImage
 
Собралось ядро bzImage размером 560Кб, это просто фантастика... места еще куча!!
 
э... осталось поместить эти два файла bzImage и ramdisk.img.gz на одну дискету.
вставляем дискету в дисковод, командуем
dd if=bzImage of=/dev/fd0 bs=1k
выдало и это важно:
553+1 входных записей
553+1 выходных записей
далее:
dd if=ramdisk.img.gz of=/dev/fd0 bs=1k seek=554
вычисляем число:
echo "2^14 + 554" | bc -l
получаю 16938
осталось скомандовать:
rdev /dev/fd0 /dev/fd0
rdev -r /dev/fd0 16938
 
все, загрузочная дискета готова.
Имеем новое ядро с утилитами (ash chown dmesg grep ln more ps sh true zcat cp
echo gunzip ls mount pwd sleep umount cat date egrep gzip mkdir mv rm sync uname
chgrp dd false hostname mknod pidof rmdir tar usleep chmod df fgrep kill mktemp ping
sed touch vi halt ifconfig pivot_root poweroff reboot route swapoff swapon clear du
head openvt tail tty wget basename cmp env hexdump readlink tee uniq which bunzip2
cut expr id reset test unzip whoami bzcat deallocvt find install sort time uptime xargs
chvt dirname free killall strings tr wc yes chroot).
В итоге еще свободно порядка 500Кб, сжатого пространства, которое можно добавить на поддержку 
утилит busybox или расширить поддержку устройств, сетевых карт в ядре или файловых систем.
 
Чтобы добавить необходимое устройство для работы, необходимо добавить его в /dev (к примеру hda hda1 hda2 hda3 hda4 разделы HDD)
и поддержку в ядро, и далее все по пунктам.

anonymous2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.