Оптимизация файловой системы |
Предыдущая Содержание Следующая |
|
Построенная и отлаженная ранее файловая система может быть расположена целиком либо в Nandflash, либо в RAM. Теперь необходимо её модифицировать так, чтобы ускорить и оптимизировать работу и съэкономить ресурс Nandflash.
Для этого разбиваем файловую систему на 2 части: ramfs и rootfs. Ramfs будет слинкована с ядром. Её задача - запуск системы и монтирование необходимых разделов. Rootfs содержит необходимые программы и библиотеки, монтирующиеся в режиме "только чтение". Некоторые разделы файловой системы необходимы программам при работе для записи временных файлов. Чтобы это реализовать, используется совмещение разделов в RAM в режиме "чтение и запись" и Nandflash в режиме "только чтение" в один раздел. Для такого подключения необходимо иметь в ядре включенную поддержку AUFS.
Создание ramfsМинимальная ramfs:
dir /bin 755 1000 1000 slink /bin/sh busybox 777 0 0 file /bin/busybox initramfs/busybox 755 0 0 dir /dev 755 0 0 nod /dev/console 644 0 0 c 5 1 nod /dev/loop0 644 0 0 b 7 0 dir /mnt 755 0 0 dir /proc 755 0 0 dir /sys 755 0 0 file /init initramfs/init.sh 755 0 0
Создаём ramfs, копируя содержимое из созданной ранее rootfs. Полное содержание:
drwxr-xr-x root root bin -rwsr-xr-x root root busybox lrwxrwxrwx root root mkdir -> busybox lrwxrwxrwx root root mount -> busybox lrwxrwxrwx root root sh -> busybox lrwxrwxrwx root root switch_root -> busybox drwxr-xr-x root root dev crw-rw-rw- root root 5, 1 console brw-r----- root root 7, 0 loop0 brw-r----- root root 31, 0 mtdblock0 brw-r----- root root 31, 0 mtdblock1 crw-rw-rw- root root 1, 3 null -rwxr-xr-x root root init drwxr-xr-x root root mnt drwxr-xr-x root root proc drwxr-xr-x root root rom drwxr-xr-x root root sys drwxrwxrwt root root tmp
Комментарии: •busybox должен быть собран со статической линковкой. Для уменьшения размеров оставить только необходимые опции. Можно использовать для построения этот конфигурационный файл; Чтобы использовать его, скопировать его как /<buildroot-path>/package/busybox/busybox_minimal_config. Затем в меню настройки buildroot выбрать в Package Selection for the target --> "Run BusyBox's own full installation" и указать этот файл. Настройки почему-то подхватываются не всегда, так что лучше также заменить им файл /<buildroot-path>/output/build/busybox/.config; •Для подключения rootfs создаём папку /rom; •Для кеша создаём папку /tmp; •mtdblock0 и mtdblock1 используются для подключения JFFS2. Если используется другая файловая система, устройства могут быть, либо не нужны. При использовании UBIFS эти устройства не нужны; •В папке /bin создаём ссылки ash, mkdir, mount, sh, switch_root указывающие на busybox; •Если необходимо ограничить размер RAM диска, используются параметры tmpfs при монтировании. По умолчанию - половина RAM;
Если busybox не слинкована статически, при запуске ядра будет получено сообщение:
Failed to execute /init Kernel panic - not syncing: No init found. Try passing init= option to kernel. Модификация rootfsВыключаем монтирование в файле /etc/inittab:
#null::sysinit:/bin/mount -o remount,rw / #null::sysinit:/bin/mount -t proc proc /proc
Для варианта, когда необходима запись в программную директорию и в /etc, добавляем строки:
null::sysinit:/bin/mount -o remount,rw /<progdir> null::sysinit:/bin/mount -o remount,rw /etc
Проверяем наличие необходимых для работы dropbear файлов в директории /etc/dropbear/.
Изменяем настройки ProFTP в /etc/proftpd.conf:
# logs ScoreboardFile /var/tmp/proftpd.scoreboard SyslogLevel notice #TransferLog /var/log/xferlog TransferLog NONE #SystemLog /var/log/proftpd-error.log #ExtendedLog /var/log/proftpd-extended.log read,write
Обёртываем rootfs в необходимый формат: JFFS2 или UBIFS. Подключение файловой системы в режиме "только чтение"Создаём скрипт инициализации init, размещаем его в корне файловой системы ramfs и даём права на запуск (755):
#!/bin/sh
mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t tmpfs none /tmp #for ubifs #insmod /lib/modules/ubi.ko mtd=rootfs mount -t ubifs -o ro ubi:rootfs /rom #for jffs2 #mount -t jffs2 -o ro /dev/mtdblock1 /rom mkdir fs mount -t aufs -o br=/tmp=rw:/rom=ro none /fs exec switch_root /fs /sbin/init Смешанное подключение файловой системыСоздаём скрипт инициализации init, размещаем его в корне файловой системы ramfs и даём права на запуск (755):
#!/bin/sh
mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t tmpfs none /tmp #for ubifs #insmod /lib/modules/ubi.ko mtd=rootfs mount -t ubifs -o ro ubi:rootfs /rom #for jffs2 #mount -t jffs2 -o ro /dev/mtdblock1 /rom
mkdir <progdir> etc home lib root sbin usr var mount -o ro /rom/<progdir> /<progdir> mount -o ro /rom/bin /bin mount -o ro /rom/dev /dev mount -o ro /rom/etc /etc mount -o ro /rom/home /home mount -o ro /rom/lib /lib mount -o ro /rom/mnt /mnt mount -o ro /rom/root /root mount -o ro /rom/sbin /sbin mount -o ro /rom/usr /usr mount -t aufs -o br=/tmp=rw:/rom/var=ro none /var exec /sbin/init
Смотри также http://www.mjmwired.net/kernel/Documentation/filesystems/ramfs-rootfs-initramfs.txt | ||||
Предыдущая Содержание Следующая |