The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Оптимизация файловой системы

Оптимизация файловой системы

Предыдущая  Содержание  Следующая  V*D*V

Построенная и отлаженная ранее файловая система может быть расположена целиком либо в Nandflash, либо в RAM.

Теперь необходимо её модифицировать так, чтобы ускорить и оптимизировать работу и съэкономить ресурс Nandflash.

 

Для этого  разбиваем файловую систему на 2 части: ramfs и rootfs.

Ramfs будет слинкована с ядром. Её задача - запуск системы и монтирование необходимых разделов.

Rootfs содержит необходимые программы и библиотеки, монтирующиеся в режиме "только чтение".

Некоторые разделы файловой системы необходимы программам при работе для записи временных файлов. Чтобы это реализовать, используется совмещение разделов в RAM в режиме "чтение и запись" и Nandflash в режиме "только чтение" в один раздел. Для такого подключения необходимо иметь в ядре включенную поддержку AUFS.

 

Внимание!

Если в качестве файловой системы на Nandflash используется UBIFS, так как UBI компилируется в составе ядра, необходимо в командную строчку ядра прописать:

ubi.mtd=rootfs

 

Если UBI компилится как модуль, перед монтированием UBIFS должно быть выполнено:

insmod lib/modules/ubi.ko mtd=rootfs

 

Внимание!

Почему-то корневая файловая система отказывается подключаться, если сборка ядра с ramfs и rootfs велась разными экземплярами buildroot (пересборка одной и тоже версии).

Создание 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

Buildroot

Предыдущая  Содержание  Следующая