Создание Mini Linux

Дата: 14/01/2014
Тема: Linux

Для того что бы создать мини Линукс понадобится:

  1. Ядро с 2.6 и более версии
  2. Набор UNIX-утилит командной строки "BusyBox"
  3. Создать initramfs "временная файловая система, используемая ядром Linux при начальной загрузке"
  4. Загрузчик syslinux

Подготовка:

Создадим директории для будущей файловой системы

Все команды выполняются по 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



Это статья "Домашняя страничка Andy"
https://andy.od.ua

URL этой статьи: https://andy.od.ua/news_40.html

Яндекс.Метрика