LiteCoding

Заметки о программировании

Коротко про YAFFS

without comments

YAFFS — довольно распространенная в файловая система, использующая преимущества и учитывая недостатки flash-накопителей. Сам я столкнулся с ней, когда разбирался с файлами прошивки для Zenithink ZT-180, но встречал упоминания о ней в контексте аудиоплееров и других карманных устройств. На данный момент есть 2 совместимые версии YAFFS (это название используется для названия всех версий этой файловой системы), но меня больше интересует yaffs2, о ней я и расскажу.

Подробнее об этой замечательной файловой системе можно прочитать на сайте, целиком ей посвященном. Однако, техническая информация так распылена по нему, что поиск чего-то конкретного представляется бестолковым занятием. Есть также репозитории с исходным кодом (двойная лицензия: GPL и коммерческая лицензия) и документацией. Но если вы собираетесь разобраться с этой файловой системой, то рекомендую начать именно с чтения исходного кода утилит mkyaffsimage и mkyaffs2image.

Эта файловая система поддерживает несколько (как минимум, 2) профилей: для NAND/NOR flash-памяти и для разделов в оперативной памяти. В силу очевидных причин меня больше интересовало первое. Забегая вперед, скажу, что в результате удалось написать небольшую утилиту, которая показывает структуру дампа файловой системы.

Профиль YAFFS для NAND представляет собой последовательность страниц фиксированной длины. Каждая страница включает в себя блок данных и служебную область также имеющие фиксированные длины. К сожалению, напрямую получить эти длины не удастся, но есть способ «угадать» их для каждого конкретного образа файловой системы. Для старой прошивки 1101 планшета ZT-180 блок данных составляет 4096 байт, а служебная область — 128 байт. Итого 4224 байта на страницу. Блок данных может содержать или заголовок, описывающий объект файловой системы, или содержимое файла.

Очень интересным может показаться тот факт, что в заголовке указан только идентификатор родительского объекта (по смещению 0x04), а идентификатор текущего объекта — в служебной области (также по смещению 0x04). Формат заголовка можно посмотреть вот тут (Java-адаптация), а формат служебной области — тут (также Java-адаптация). Во всем остальном структуры данных, используемые yaffs2 понятны и без лишних комментариев.

Кстати, образы системы, поставляемые с Android SDK тоже yaffs2.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Tumblr

Written by Дмитрий Воробьев

Вторник, Январь 22nd, 2013 at 17:50

Leave a Reply

You must be logged in to post a comment.