Для того что бы создать мини Линукс понадобится:
Подготовка:
Создадим директории для будущей файловой системы
Все команды выполняются по root
mkdir ~/work mkdir ~/work/initramfs cd ~/work/initramfs mkdir bin dev etc etc/init.d lib proc mnt tmp usr root sbin sys usr/bin usr/sbin var chmod 755 . bin dev etc etc/init.d lib proc mnt tmp usr root sbin usr/bin usr/sbin sys var
Компиляция ядра:
mkdir ~/work/kernel cd ~/work/kernel wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.7.tar.bz2 tar jxf linux-3.2.7.tar.bz2 cd linux-3.2.7/ make defconfig && make –j4
make [ -j <число потоков> ] Для ускорения длительных задач используют распараллеливание вычислений внутри make-программы. Рекомендуется задавать число потоков, равное числу физических ядер CPU плюс один.
Ви можете конфигурировать ядро как вам надо одной из следующих команд:
make config (диалоговая конфигурация)
make menuconfig (псевдографическая конфигурация через ncurses)
make xconfig (графическая конфигурация)
после настройки выполните
make –j4 bzImage
Компиляция BusyBox:
BusyBox — набор UNIX-утилит командной строки, замещающий большинство UNIX приложений, хранящихся в папках /bin, /sbin, /usr/bin, /usr/sbin, вместо этого, создается единый файл (это позволяет сэкономить дисковое пространство) /bin/busybox и на него создаются ссылки sh,ls,cp и т.д. в указанных выше папках.
Используется в качестве основного интерфейса во встраиваемых операционных системах. Преимуществами этого приложения являются малый размер и низкие требования к аппаратуре.
mkdir ~/work/busybox cd ~/work/busybox wget http://www.busybox.net/downloads/busybox-1.22.0.tar.bz2 tar jxf busybox-1.22.0.tar.bz2 cd busybox-1.22.0 make defconfig && make –j4
Ви можете конфигурировать BusyBox как вам надо одной из следующих команд:
make config (диалоговая конфигурация)
make menuconfig (псевдографическая конфигурация через ncurses)
make xconfig (графическая конфигурация)
после настройки выполните
make –j4
Создание InitRamFs:
Копируем BusyBox:
cp ~/work/busybox/busybox-1.22.0/busybox ~/work/initramfs/bin/busybox
Узнаем какие библиотеки нужны для BusyBox
ldd ~/work/initramfs/bin/busybox libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00110000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x003b8000) /lib/ld-linux.so.2 (0x00eb7000)
Копируем библиотеки для BusyBox
cp -L /lib/ld-linux.so.2 ~/work/initramfs/lib/ld-linux.so.2 cp -L /lib/i386-linux-gnu/libm.so.6 ~/work/initramfs/lib/libm.so.6 cp -L /lib/i386-linux-gnu/libc.so.6 ~/work/initramfs/lib/libc.so.6
На этапе загрузки будет нужен shell
cd ~/work/initramfs/bin/ ln -s busybox sh
Скрипт начальной инициализации init
touch ~/work/initramfs/init chmod +x ~/work/initramfs/init nano ~/work/initramfs/init
Содержимое скрипта:
#!/bin/sh # Создать все символические ссылки для /bin/busybox /bin/busybox --install -s #Монтирование файловых систем mount -a #Отключаем вывод логов ядра echo 3 > /proc/sys/kernel/printk #Очистка экрана clear # Создание файлов устройств mknod /dev/ram0 b 1 0 mknod /dev/null c 1 3 mknod /dev/tty c 5 0 chmod 666 /dev/tty /dev/ram0 /dev/null mdev -s # Переменные среды PATH="/sbin:/bin:/usr/bin:/usr/sbin" HOME="/root" CONSOLE="/dev/tty1" #Настройка сети echo "Setting up IP Address" ifconfig eth0 up ifconfig eth0 192.168.0.199 netmask 255.255.255.0 echo "IP : 192.168.0.199 SUBNET MASK : 255.255.255.0" route add default gw 192.168.0.1 #Shell echo "Default Gateway : 192.168.0.1" echo "Mini-Linux build by Andy.od.ua 2003-2014" cd /root exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
Файл точек монтирования
touch ~/work/initramfs/etc/fstab nano ~/work/initramfs/etc/fstab
Содержимое файла:
proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
Нам могут понадобится дополнительные модули ядра
mkdir ~/work/initramfs/lib/modules
Ссылка на директорию modules для версии ядра в данном случае 3.2.7
cd ~/work/initramfs/lib/modules ln -s ./ 3.2.7
Файл списка зависимостей между модулями:
touch ~/work/initramfs/lib/modules/modules.dep nano ~/work/initramfs/lib/modules/modules.dep
пример содержимого файла:
# This is a comment. /lib/modules/2.5.53/kernel/a.ko: /lib/modules/2.5.53/kernel/c.ko /lib/modules/2.5.53/kernel/b.ko /lib/modules/2.5.53/kernel/b.ko: /lib/modules/2.5.53/kernel/c.ko: /lib/modules/2.5.53/kernel/b.ko
Все нужные модули можно копировать в директорию ~/work/initramfs/lib/modules/, модули должны быть собраны именно под то ядро которое будете использовать.
Теперь можно создать InitRamFs:
cd ~/work/initramfs find . | cpio -H newc -o > ~/work/initramfs.cpio cd ~/work cat initramfs.cpio | gzip > initramfs.gz
Для отладки и проверки работоспособности можно использовать Qemu (программа для эмуляции аппаратного обеспечения различных платформ)
qemu-system-i386 -M pc -m 128M -kernel ~/work/kernel/linux-3.2.7/arch/x86/boot/bzImage -initrd ~/work/initramfs.gz -net nic,model=e1000,macaddr=00:FF:11:77:44:CC,vlan=0
Создание образа:
Создание директории образа:
mkdir ~/work/iso
Копирование ядра
cp ~/work/kernel/linux-3.2.7/arch/x86/boot/bzImage ~/work/iso/bzImage
Копирование initramfs
cp ~/work/initramfs.gz ~/work/iso/initramfs.gz
Загрузчик Syslinux
mkdir ~/work/syslinux cd ~/work/syslinux wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz --no-check-certificate tar –xvf syslinux-4.05.tar.gz mkdir ~/work/iso/isolinux cp syslinux-4.05/core/isolinux.bin ~/work/iso/isolinux/isolinux.bin touch ~/work/iso/isolinux/isolinux.cfg nano ~/work/iso/isolinux/isolinux.cfg
Содержимое файла isolinux.cfg
TIMEOUT 10 DEFAULT mimilinux LABEL mimlinux KERNEL /bzImage APPEND initrd=/initramfs.gz root=/dev/ram0
Создание ISO образа
genisoimage -r -V “Mini Linux” -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ~/work/mini-linux.iso ~/work/iso/
Теперь можно записать на диск или проверить в VirtualBox