('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical1c6cb42fb3270821de47bf2096c4fa556163ab170efb2de402a01d9a0783bdb6:[theme]=yaffs:[timezone]=Europe/London:[url]=https://jSg6Y7vIEIH3Nc3GnQ-xV_H-p1MJIX-iM3dsZ3DJc7A','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:127\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:26:56 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:8582:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\n    <title>YAFFS talk - Slide 19 - Embedded System Use | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\n    <js-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-book navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>YAFFS talk - Slide 19 - Embedded System Use</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/yaffs-talk-slide-19-embedded-system-use\" class=\"book is-promoted full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<div class=\"image\">\n<a href=\"?q=node/128\"><img width=\"640\" height=\"480\" border=\"0\" alt=\"yaffs_talk_19.jpg\" src=\"sites/yaffs.net/files/images/content/yaffs_talk_19.preview.jpg\" /></a>\n<div class=\"caption\">\n &nbsp;\n</div>\n</div>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:127\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:17:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:90:\"YAFFS talk - Slide 19 - Embedded System Use | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:4;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:5;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:6;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:9;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:40:\"/yaffs-talk-slide-19-embedded-system-use\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/127\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:40:\"/yaffs-talk-slide-19-embedded-system-use\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"8u6iGM_wf4UmD0YD343Nabc57w86TelGzMkP27sE8CIrAZLabIOm-A_ZErudzdZcllkOYuGRhQ\">\";}}}}',-1,1509067616.850,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:127 node_view rendered user:0 user:1','2744');
INSERT INTO `cache_dynamic_page_cache` VALUES ('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical1c93118eceb9686c865145988de640013f2f49991d76bdf846c8e07f4053fc46:[theme]=yaffs:[timezone]=Europe/London:[url]=https://F6iRupCiQ6KCXDEMATvG3R-cCpGomcmO4YlslTcw2h4','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:169\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:26:47 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:8542:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\n    <title>Emdebsys talk - Slide 1 - Title | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\n    <js-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-book navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>Emdebsys talk - Slide 1 - Title</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/emdebsys-talk-slide-1-title\" class=\"book is-promoted full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<div class=\"image\">\n<a href=\"?q=node/170\"><img width=\"640\" height=\"480\" border=\"0\" alt=\"talk_emdebsys_1.jpg\" src=\"sites/yaffs.net/files/images/content/talk_emdebsys_1.jpg\" /></a>\n<div class=\"caption\">\n &nbsp;\n</div>\n</div>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:169\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:78:\"Emdebsys talk - Slide 1 - Title | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:2:\" \";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:28:\"/emdebsys-talk-slide-1-title\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/169\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:28:\"/emdebsys-talk-slide-1-title\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"UPw1FCwSbmt9GOb2VlGcXE7il4378PPHxridWrw-ZEd77W6eGG0aNL4smu_47MfILm4C65yR-g\">\";}}}}',-1,1509067607.088,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:169 node_view rendered user:0 user:1','2744'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical1c93118eceb9686c865145988de640013f2f49991d76bdf846c8e07f4053fc46:[theme]=yaffs:[timezone]=Europe/London:[url]=https://caBogBn57h3bK-ZWexD5fZZcFpDIrlzgHDumkA1ZF1g','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:169\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:26:24 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:8542:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\n    <title>Emdebsys talk - Slide 1 - Title | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\n    <js-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-book navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>Emdebsys talk - Slide 1 - Title</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/emdebsys-talk-slide-1-title\" class=\"book is-promoted full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<div class=\"image\">\n<a href=\"?q=node/170\"><img width=\"640\" height=\"480\" border=\"0\" alt=\"talk_emdebsys_1.jpg\" src=\"sites/yaffs.net/files/images/content/talk_emdebsys_1.jpg\" /></a>\n<div class=\"caption\">\n &nbsp;\n</div>\n</div>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:169\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:78:\"Emdebsys talk - Slide 1 - Title | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:2:\" \";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:28:\"/emdebsys-talk-slide-1-title\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/169\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:28:\"/emdebsys-talk-slide-1-title\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"vRRgbYFsifGGRbbAArwufp5IKuoe6kAdJh78TxuZR122gutaqSFDkzN-pkEtA6YtSz_g3iyV9Q\">\";}}}}',-1,1509067584.583,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:169 node_view rendered user:0 user:1','2744'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical1d0be6db8d71c366be8b28a20293be8f3def0ff263d9346f9b1ee9a6f6886be2:[theme]=yaffs:[timezone]=Europe/London:[url]=https://HPkFzr2Pjs7HdLiC60iZg_Flr3x5N9yHCRhNVBcnwYw','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"file:82\";i:44;s:8:\"node:454\";i:45;s:9:\"node_view\";i:46;s:8:\"rendered\";i:47;s:6:\"user:0\";i:48;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:25:30 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:10880:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\n    <title>Running Yaffs Direct Tests | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\n    <js-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-article navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span property=\"schema:name\">Running Yaffs Direct Tests</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/running-yaffs-direct-tests\" typeof=\"schema:Article\" class=\"article is-promoted full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"Running Yaffs Direct Tests\" class=\"hidden\"></span>\n\n\n  \n  <div class=\"content\">\n    \n      <div class=\"field field--name-upload field--type-file field--label-hidden field--items\">\n              <div class=\"field--item\"><span class=\"file file--mime-application-pdf file--application-pdf icon-before\"><span class=\"file-icon\"><span class=\"icon glyphicon glyphicon-file text-primary\" aria-hidden=\"true\"></span></span><span class=\"file-link\"><a href=\"https://yaffs.net/sites/default/files/downloads/YaffsDirectTests.pdf\" type=\"application/pdf; length=53457\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsDirectTests.pdf</a></span><span class=\"file-size\">52.2 KB</span></span></div>\n          </div>\n  \n            <div property=\"schema:text\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>&nbsp;</p>\n<h2>1 Background</h2>\n<p>This document is intended to provide a outline to the various tests that are incorporated into Yaffs Direct. Most of these tests were written as debug tools to test error response by various Yaffs functions. These and others can be used to check if Yaffs is working properly.</p>\n<h2>2 Running the tests</h2>\n<p>All of the test directories should have a Makefile. Run it to compile the test. The Readme.txt file should tell you how to run the tests.</p>\n<h2>3 Tests</h2>\n<ul>\n<li>\n<p>is_yaffs_working_tests folder contains a the tests related to simply seeing if yaffs is working. There is only one test at the moment, test_1_yaffs_mount.c, which tests if yaffs will mount, create a file and be able to read the file after remounting.</p>\n </li>\n<li>\n<p>stress_tester folder contains yaffs_tester.c which stress tests yaffs by opening and closing files at random. This test will run forever (or until it crashes).</p>\n </li>\n<li>\n<p>handle_tests folder contains the test handle_tests.c which just creates files and duplicates the file handle.</p>\n </li>\n<li>\n<p>The yaffs_and_linux_mirror_tests folder runs a yaffs operation and then compares the response the same command run under linux. This test is used to check that yaffs responds in expected manner with respect to linux.</p>\n </li>\n<li>\n<p>quick_tests folder contains the quick_test which tests almost all of yaffs functions\' error handling and error codes.</p>\n </li>\n<li>\n<p>The threading folder contains the test_threading.c which tests the thread locking ability of yaffs.</p>\n </li>\n</ul>\n<p>&nbsp;</p>\n<p>The folder linux_tests contains the linux_test.c test which tests yaffs running under linux using the nandsim generator. &nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"file:82\";i:44;s:8:\"node:454\";i:45;s:9:\"node_view\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";i:48;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:73:\"Running Yaffs Direct Tests | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:252:\"This provides a outline to the various tests that are incorporated into Yaffs Direct. Most of these tests were written as debug tools to test error response by various Yaffs functions. These and others can be used to check if Yaffs is working properly.\";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:27:\"/running-yaffs-direct-tests\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/454\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:27:\"/running-yaffs-direct-tests\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"lN_WZNQUSKjgmbIB_EytSnQCLZ6e5HDsebCYTvehA-yVdQDQHK48NoFeIJYYY_e58pV28-dJDg\">\";}}}}',-1,1509067530.193,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site file:82 node:454 node_view rendered user:0 user:1','2750'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical1f1e8565c1ffd2c32a761e1d74071d7a1a0eea994b7580a0f5c63b4aa94943c5:[theme]=yaffs:[timezone]=Europe/London:[url]=https://7hk0-7XeC45V3r_QOgRzRNOgzYZN80FURTMbYGSbTdE','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"file:80\";i:44;s:8:\"node:453\";i:45;s:9:\"node_view\";i:46;s:8:\"rendered\";i:47;s:6:\"user:0\";i:48;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Thu, 26 Oct 2017 12:40:39 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:154203:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\n    <title>Yaffs Direct Interface | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\n    <js-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-paper navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n        <ol class=\"breadcrumb\">\n          <li >\n                  <a href=\"/documents\">Documents</a>\n              </li>\n          <li  class=\"active\">\n                  Yaffs Direct Interface\n              </li>\n      </ol>\n\n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>Yaffs Direct Interface</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/documents/yaffs-direct-interface\" class=\"paper is-promoted full clearfix\">\n\n  \n    \n\n      <footer>\n      \n      <div class=\"author\">\n        Submitted by <span><span lang=\"\" about=\"/user/admin\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Admin</span></span>\n on <span>23 July, 2012 - 12:37am</span>\n        \n      </div>\n    </footer>\n  \n  <div class=\"content\">\n    \n      <div class=\"field field--name-upload field--type-file field--label-hidden field--items\">\n              <div class=\"field--item\"><span class=\"file file--mime-application-pdf file--application-pdf icon-before\"><span class=\"file-icon\"><span class=\"icon glyphicon glyphicon-file text-primary\" aria-hidden=\"true\"></span></span><span class=\"file-link\"><a href=\"https://yaffs.net/sites/default/files/downloads/YaffsDirect.pdf\" type=\"application/pdf; length=256079\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsDirect.pdf</a></span><span class=\"file-size\">250.08 KB</span></span></div>\n          </div>\n  \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>This document describes the Yaffs Direct Interface (YDI), which allows Yaffs to be simply integrated with embedded systems, with or without an RTOS.</p>\n<p style=\"page-break-before: always\"><br />\n<br />\n</p>\n<h1 class=\"western\" style=\"page-break-before: always\">1 Background</h1>\n<p>The purpose of this document is to describe the interfacing of the Yaffs Direct Interface (YDI) as well as to provide sufficient information to allow a preliminary evaluation of Yaffs. This document tries to focus on the issues important to the system integrator without getting too detailed about how Yaffs works. Other documents provide an in-depth discussion of how Yaffs works.</p>\n<h1 class=\"western\">2 Licensing</h1>\n<p>Yaffs was originally released for Linux under the GNU Public License (GPL). Various embedded developers soon identified that Yaffs would be ideal for their applications, but were not able to use GPL based code in their systems. Aleph One <span style=\"font-style: normal\"><span style=\"font-weight: normal\">has</span></span> alternative licensing arrangements to support such applications.</p>\n<h1 class=\"western\">3 What are Yaffs and Yaffs Direct Interface?</h1>\n<p>Yaffs stands for <i>Yet Another Flash File System</i>. Yaffs was the first file system designed, from the ground up, for NAND storage.</p>\n<p>In 2002 Aleph One set out to identify file system options for using NAND Flash as a file system. Various file systems available at the time were evaluated and all were found lacking in one way or another. The need for a suitable NAND storage file system was identified and Yaffs was designed to fill that need.</p>\n<p>Although Yaffs was originally designed for NAND flash, it has been used successfully with NOR flash systems and even as a RAM file system. This allows high reliability file systems to be constructed using NOR flash, with a future migration path <span style=\"font-weight: normal\">to NAND</span> flash for higher density and performance.</p>\n<p>Yaffs was originally designed for use with the Linux operating system, but was designed in a very modular way. The operating-system-specific code was kept separate from the main Yaffs file system code. This allows Yaffs to be ported quite cleanly to other operating systems through operating system personality modules. One such personality module is the Yaffs Direct Interface (YDI) which allows Yaffs to be simply integrated with embedded systems, with or without an RTOS. </p>\n<p>Yaffs has been used for many products using various operating systems including Windows CE and various RTOSs, including <span style=\"font-weight: normal\">ThreadX, vXworks, pSOS to name just a few.</span></p>\n<p>Note that there is a native port of Yaffs to eCOS that does not use YDI. This is supported and distributed by eCocCentric.(http://www.ecoscentric.com/).</p>\n<p>Yaffs2, a more recent release of Yaffs, supports a wider range of NAND flash components including 2k page devices and devices with multi-level cells (MLC), and produces equivalent or better performance. It include Yaffs1 compatibility code so Yaffs1 images still work and migration is quite simple. Yaffs1 or Yaffs2 mode of operation are simply selected by a run-time parameter.</p>\n<p>As well as providing a NAND file system, YDI also provides a RAM emulation layer to allow Yaffs to operate as a RAM file system too. While the RAM emulation is perhaps not as efficient as a dedicated RAM file system, this does allow one well proven file system to use both RAM and flash.</p>\n<h1 class=\"western\">4 Why use Yaffs?</h1>\n<p>Yaffs is the first, and perhaps only, file system designed specifically for NAND flash. This means that Yaffs has been designed to work around the various limitations and quirks of NAND flash, as well as exploit the various features of NAND to achieve an effective file system.</p>\n<p>Some features to consider:</p>\n<ul>\n<li>\n<p>Yaffs has been well proven and has been used to ship in <span style=\"font-weight: normal\">large volumes in several products using many different operating systems, compilers and processors.</span></p>\n </li>\n<li>\n<p>Yaffs is written in portable C and is endian neutral.</p>\n </li>\n<li>\n<p>Yaffs provides <span style=\"font-weight: normal\">bad</span> <b></b><span style=\"font-weight: normal\">block</span> handling and ECC algorithms to handle deficiencies in NAND flash.</p>\n </li>\n<li>\n<p>Yaffs is a log-structured file system which makes it very robust to corruptions caused by power failures etc.</p>\n </li>\n<li>\n<p>Yaffs has highly optimised and predictable garbage collection strategies. This makes it high performance and very deterministic when compared with similar file systems.</p>\n </li>\n<li>\n<p>Yaffs has a lower memory footprint than most other log-structured flash file systems.</p>\n </li>\n<li>\n<p>Yaffs provides a wide range of POSIX-style file system support including directories, symbolic and hard links etc. through standard file system interface calls.</p>\n </li>\n<li>\n<p><span style=\"font-weight: normal\">Yaffs is h</span>ighly configurable to work with various flash geometries, various ECC options, caching options etc.</p>\n </li>\n<li>\n<p>Yaffs Direct Interface is simple to integrate in a system – only a few interface functions are required.</p>\n </li>\n<li>\n<p>Yaffs can be used with a wide range of memory technologies.</p>\n </li>\n</ul>\n<h1 class=\"western\">5 Source Code and Yaffs Resources </h1>\n<p><span style=\"font-family: Liberation Serif, serif;\">Please note the licensing terms that apply to using the Yaffs code.</span></p>\n<p><a href=\"http://www.yaffs.net/\"><span style=\"font-family: Liberation Serif, serif;\">http://www.yaffs.net</span></a><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-style: normal\"><span style=\"font-weight: normal\">serves as the hub for all Yaffs information.</span></span></span></p>\n<p><span style=\"font-family: Liberation Serif, serif;\">This document refers to the Yaffs source code extensively.<span style=\"font-style: normal\"><span style=\"font-weight: normal\">and is available via the download link on this site.</span></span></span></p>\n<p><span style=\"font-family: Liberation Serif, serif;\">There are various other documents and a Yaffs mailing list for Yaffs discussions.</span></p>\n<p><span style=\"font-family: Liberation Serif, serif;\">Consulting services are also available.</span></p>\n<h1 class=\"western\">6 System Requirements</h1>\n<p>Determining minimum system requirements is often quite difficult. The following are presented as a guideline only. Contact Aleph One for more detailed analysis if required.</p>\n<ul>\n<li>\n<p>Yaffs is endian-neutral and works fine with little-endian and big-endian processors.</p>\n </li>\n<li>\n<p>Yaffs code has been used successfully with many different 32-bit and 64-bit CPUs including MIPS, 68000, ARM, ColdFire, PowerPC and x86 variants. Yaffs has even been used with various DSP architectures. Yaffs should work with 16-bit CPUs too, but this is generally untested and might need some tuning, depending on compiler options.</p>\n </li>\n<li>\n<p>Because Yaffs is log structured, RAM is required to build up runtime data structures for acceptable performance. As a rule of thumb, budget approximately 2 bytes per <i>chunk</i> of NAND flash, where a <i>chunk</i> is typically one page of NAND. For NAND with 512byte pages, budget approximately 4kbytes of RAM per 1Mbyte of NAND. For 2kbyte page devices budget approximately 1kbyte per 1Mbyte of NAND.</p>\n </li>\n</ul>\n<h1 class=\"western\">7 How to integrate Yaffs with an RTOS/Embedded system</h1>\n<p>Yaffs Direct Interface (YDI) wraps Yaffs in a way that is simple to integrate. You need to provide a few functions for Yaffs to use to talk to your hardware and RTOS. Yaffs provides a set of POSIX-compliant functions for applications to use to talk to it.</p>\n<p>In addition to the Yaffs core file system, the YDI has three parts which are each explained in more detail in further sections:</p>\n<ul>\n<li>\n<p><b>POSIX Application Interface</b>: This is the POSIX-like interface that the application code uses to access the Yaffs file system. (<span style=\"font-family: Times New Roman;\"><i>open, close, read, write, </i></span>etc) </p>\n </li>\n<li>\n<p><b>RTOS Integration Interface</b>: These are the functions that must be provided for Yaffs to access the RTOS system resources. (<span style=\"font-family: Times New Roman;\"><i>initialise, lock, unlock, get time, </i></span><span style=\"font-family: Times New Roman;\"><i>memory allocation,</i></span><span style=\"font-family: Times New Roman;\"><i>set error, </i></span><span style=\"font-family: Times New Roman;\"><i>etc</i></span>). Note that although we use the term RTOS, the same can be done with other OSs or even with no RTOS at all in a bare-metal system.</p>\n </li>\n<li>\n<p><img src=\"data:image/png;base64,[encoded data, 27864 characters]\" width=\"485\" height=\"530\" alt=\"image\" id=\"Object1\" /> <b>Flash Device </b><b>Interface</b>: This interface support is where the flash device and appropriate device drivers are installed to provide an access path from Yaffs to the flash device(s). Multiple different devices and device types can be supported simultaneously.</p>\n </li>\n</ul>\n<h2 class=\"western\">7.1 Source Files</h2>\n<p>The following source files contain the core file system:</p>\n<table cellpadding=\"4\" style=\"width: 100%; border-spacing: 0px;\">\n<col width=\"71*\" /> <col width=\"185*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_allocator.c</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 72%;\">\n <p>Allocates Yaffs object and tnode structures.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p><br />\n  </p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p><br />\n  </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_bitmap.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Block and chunk bitmap handling code.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_checkpointrw.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Streamer for writing checkpoint data</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_ecc.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>1-bit Hamming ECC code</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p><br />\n  </p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p><br />\n  </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_guts.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>The major Yaffs algorithms.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_nameval.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Name/value code for handling extended attributes (xattr).</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_nand.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Flash interfacing abstraction.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_packedtags1.c<br />\n  yaffs_packedtags2.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Tags packing code</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_summary.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Code for handling block summaries.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_tagscompat.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Tags compatibility code to support Yaffs1 mode.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_tagsmarshall.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Tags marshalling code.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_verify.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Test verification code.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_yaffs1.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Yaffs1-mode specific code.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_yaffs2.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Yaffs2-mode specific code.</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>The Yaffs direct interface is in yaffsfs.c, with the interface functions and structures defined in yaffsfd.h.</p>\n<p><br />\n<br />\n</p>\n<table cellpadding=\"4\" style=\"page-break-inside: avoid; width: 100%; border-spacing: 0px;\">\n<col width=\"72*\" /> <col width=\"184*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_attribs.c</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 72%;\">\n <p>Attribute handling.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_error.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Error reporting code.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffsfs.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Yaffs Direct Interface wrapper code.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_hweight.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Counts the number of hot bits in a byte, word etc.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_qsort.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Qsort used during Yaffs2 scanning</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>Example flash drivers, simulators and configurations used for testing are are in direct/test-framework directory. These include:</p>\n<table cellpadding=\"4\" style=\"page-break-inside: avoid; width: 100%; border-spacing: 0px;\">\n<col width=\"72*\" /> <col width=\"184*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>nanddrv.c</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 72%;\">\n <p>A NAND driver layer that performs the commands to access NAND flash in a rudimentary manner. This code should work on many styles of CPU with little modification.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_nanddrv.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A wrapper around the NAND driver which plugs it into Yaffs.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>nandsim.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A NAND simulator layer that works with a nandstore_xxx backing store. This simulates a NAND chip.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>nandstore_file.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A storage backend for a NAND simulator that stores the data to file.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>nandsim_file.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A wrapper around nandsim.c and nandstore_file.c which makes a NAND simulator that saves its data in a file.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_nandsim_file.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A wrapper which creates a nand simulator instance, hooks up the yaffs NAND driver and then adds it to yaffs for use.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_nor_drv.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <ol>\n </ol>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_m18_drv.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A driver for Intel M18-style NOR flash.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_osglue.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>An OS glue layer example used in the test harness.</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>Example and testing build files:</p>\n<table cellpadding=\"4\" style=\"width: 100%; border-spacing: 0px;\">\n<col width=\"71*\" /> <col width=\"185*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>dtest.c</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 72%;\">\n <p>A test harness. Also has sample code that can be used for better understanding of how some function calls work.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffscfg2k.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>A test configuration.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 28%;\">\n <p>yaffs_fileem.c<br />\n  yaffs_fileem2k.c</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 72%;\">\n <p>Nand flash simulation using a file as backing store.</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>Further testing files are in direct/tests and direct/python.</p>\n<h2 class=\"western\" style=\"page-break-before: always\">7.2 Integrating the POSIX Application Interface</h2>\n<p>The application interface is defined in yaffsfs.h. These provide a POSIX file system interface. For the most part, this interface consists of the standard clib function names prefixed with <code class=\"western\">yaffs_</code>. For example, <code class=\"western\">yaffs_open(), yaffs_close()</code> etc.</p>\n<p><br />\n<br />\n</p>\n<p>There is a lot of flexibility in how these functions are used and the system integrator needs to determine the best strategy for the system.</p>\n<p>These functions can be used directly, with the code written using these names. For example</p>\n<p class=\"code-western\"><code class=\"western\">int main(...)<br />\n{<br />\n// initialisation<br />\nf = yaffs_open(...);<br />\nyaffs_read(f,...);<br />\nyaffs_close(f);<br />\n}</code></p>\n<p>The <span style=\"font-family: Times New Roman;\">yaffs</span> functions can also be wrapped in some way to allow existing code to use yaffs without modification. For example:</p>\n<p style=\"margin-bottom: 0cm; orphans: 0; widows: 0; page-break-before: auto; page-break-after: avoid\"><br />\n</p>\n<p class=\"code-western\"><code class=\"western\">#define open(path, oflag, mode) yaffs_open(path, oflag, mode)<br />\n..<br />\n<br />\nint main(...)<br />\n{<br />\n// initialisation<br />\nf = open(...);<br />\nread(f,...);<br />\nclose(f);<br />\n}</code><br />\n<br />\n<br />\n</p>\n<p style=\"margin-bottom: 0cm; orphans: 0; widows: 0; page-break-before: auto\"><br />\n</p>\n<p>A more complex approach that can be used if more than one file-system is used is to provide redirection functions. For example:</p>\n<p style=\"margin-bottom: 0cm; orphans: 0; widows: 0; page-break-before: auto; page-break-after: avoid\"><br />\n</p>\n<p class=\"code-western\"><code class=\"western\">int open(const char *path,...)<br />\n{<br />\n// Determine which file system is being used<br />\n</code><code class=\"western\">i</code><code class=\"western\">f(it_is_a_yaffs_path(path))<br />\nreturn yaffs_open(...);<br />\nelse {<br />\n// Do something else<br />\n}<br />\n}</code></p>\n<p style=\"margin-left: 1.25cm; margin-bottom: 0cm; page-break-inside: avoid; orphans: 0; widows: 0; page-break-before: auto; page-break-after: auto\"><br />\n</p>\n<p><br />\n<br />\n</p>\n<p>Some RTOS\'s provide a flexible way to integrate file systems in which case YDI can typically use these interfaces to access yaffs file systems.</p>\n<h1 class=\"western\" style=\"page-break-before: always\">8 RTOS Integration Interface</h1>\n<p>Before Yaffs can be used, it needs to be integrated with the system and configured so that the correct actions are performed.</p>\n<p>To do this, you need to modify the configuration file. An example configuration file is presented in <span style=\"font-family: Bitstream Vera Sans;\"><span style=\"font-family: Times New Roman;\">yaffscfg.c and yaffscfg2k.c.</span></span></p>\n<p>This is a relatively straight forward process and defines the RTOS access functions.</p>\n<p>The RTOS access functions are:</p>\n<ul>\n<li>\n<p><code class=\"western\">void yaffsfs_SetError(int err)</code>: Called by Yaffs to set the system error.</p>\n </li>\n<li>\n<p><code class=\"western\">void yaffsfs_Lock(void)</code>: Called by Yaffs to lock Yaffs from multi-threaded access.</p>\n </li>\n<li>\n<p><code class=\"western\">void yaffsfs_Unlock(void)</code>: Called by Yaffs to unlock Yaffs.</p>\n </li>\n<li>\n<p><code class=\"western\">u32 yaffsfs_CurrentTime(void)</code>: Get current time from RTOS.</p>\n </li>\n<li>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>void *yaffsfs_malloc(size_t size)</b></span></span>: Called to allocate memory.</p>\n </li>\n<li>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>void yaffsfs_free(void *ptr)</b></span></span>: Called to free memory.</p>\n </li>\n<li>\n<p><code class=\"western\">void yaffsfs_</code><code class=\"western\">OS</code><code class=\"western\">Initialisation(void)</code>: Called to initialise RTOS context.</p>\n </li>\n<li>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>void yaffs_bug_fn(const char *file_name, int line_no)</b></span></span>: Function to report a bug.</p>\n </li>\n<li>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>int yaffsfs_CheckMemRegion(const void *addr, size_t size, int writ</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>e_request</b></span></span>) : Function to check if accesses to a memory region is valid. This function must return zero if the test passes and negative if it fails.</p>\n </li>\n</ul>\n<p><br />\n<br />\n</p>\n<p>If Yaffs is being used in a multi-threaded environment, then typically <code class=\"western\">yaffs_LocalInitialisation()</code> will initialise a suitable RTOS semaphore and <code class=\"western\">yaffs_Lock()</code> and <code class=\"western\">yaffs_Unlock()</code> will call the appropriate functions to lock and release the semaphore.</p>\n<p><code class=\"western\">yaffs_CurrentTime()</code> can be any time increment of use to the system. If this is not required, then it is fine to just use a function that is hard-wired to return zero.</p>\n<p>Before the application code uses Yaffs, the <code class=\"western\">yaffs</code><code class=\"western\">fs</code><code class=\"western\">_</code><code class=\"western\">OSInitialisation</code><code class=\"western\">()</code> function must be called.</p>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>yaffsfs_CheckMemRegion()</b></span></span><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: 12pt; font-size: medium; font-size: medium;\"><span style=\"font-weight: normal\">is used to check addresses passed to the various yaffs_xxx functions (yaffs_open(), yaffs_read() etc)). If the function returns -1, then the yaffs_xxx function will return -EFAULT rather than attempt to dereference the address and crash.</span></span></span></p>\n<p style=\"font-weight: normal\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: 12pt; font-size: medium; font-size: medium;\">An implementation might do something like:</span></span></p>\n<p style=\"font-weight: normal\"><br />\n<br />\n</p>\n<p class=\"code-western\"><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>int yaffsfs_CheckMemRegion(const void addr, size_t size, <br />\nint write_</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>request</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>) <br />\n{<br />\nu32 uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>= (u32) addr;<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>u32 uaddrt = uaddrb + size -1;<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b><br />\nif( uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>&gt;= stack_bottom &amp;&amp; uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>&lt;= stack_top &amp;&amp;<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>uaddrt &gt;= stack_bottom &amp;&amp; uaddrt &lt;= stack_top)<br />\nreturn 0; /* </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>r/w </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>access is OK */<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b><br />\nif( uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>&gt;= </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>heap</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>_bottom &amp;&amp; uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>&lt;= </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>heap</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>_top &amp;&amp;<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>uaddrt &gt;= heap_bottom &amp;&amp; uaddrt &lt;= heap_top)<br />\nreturn 0; /* </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>r/w</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>access is OK /<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b><br />\nif( !</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>write_request &amp;&amp;<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>&gt;= </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>rom</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>_bottom &amp;&amp; uaddr</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>b</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>&lt;= </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>rom</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>_top &amp;&amp;<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>uaddrt &gt;= rom_bottom &amp;&amp; uaddrt &lt;= rom_top)<br />\nreturn 0; / </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>read </b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>access is OK /</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b><br />\n<br />\n</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>return -1; /* Bad access */</b></span></span><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b><br />\n<br />\n}</b></span></span></p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<h1 class=\"western\" style=\"page-break-before: always\">9 Yaffs NAND Model</h1>\n<p>Before defining the flash integration interface, it is important to understand the model and corresponding nomenclature used throughout Yaffs and its documentation.</p>\n<p>Yaffs uses a fairly abstract model for NAND flash. This allows a lot of flexibility in the way it can be used.</p>\n<p>Yaffs is designed for NAND flash and makes the following assumptions and definitions:</p>\n<ul>\n<li>\n<p>The flash is arranged in <i><b>blocks</b></i>. Each block is the same size and comprises an integer number of <span style=\"font-style: normal\"><span style=\"font-weight: normal\">chunks</span></span>. Each block is treated as a single erasable item. A block contains a number of chunks.</p>\n </li>\n<li>\n<p>A <i><b>chunk</b></i> equates to the allocation units of flash. For Yaffs1, each chunk equates to a 512-byte or larger NAND page (that is, a 512-byte or larger data portion and a 16-byte spare area). For Yaffs2, a chunk will typically be larger (eg. on 2k page devices, a chunk will typically be a single 2k page: 2kbytes of data and 64 bytes of spare). Yaffs2 is capable of working with smaller chunk sizes by using inband tags.</p>\n </li>\n<li>\n<p>All accesses (reads and writes) are page chunk aligned. Some reads might only read the spare area where the tags are kept.</p>\n </li>\n<li>\n<p>When programming a NAND flash, only the zero bits in the pattern being programmed are relevant, and one bits are &quot;don\'t care&quot;. For example, if a byte already contains the binary pattern b1010, then programming b1001 will result in the pattern which is the logical AND of these two patterns ie. b1000. This is different to NOR flash which would typically abort the attempt to convert a 0 into a 1.</p>\n </li>\n</ul>\n<p><br />\n<br />\n</p>\n<p>Yaffs ide<span style=\"font-weight: normal\">ntifies</span> blocks by their block number and chunks by the chunk Id. A chunk Id is calculated as:</p>\n<p><code class=\"western\">chunkId = block_id * chunks_per_block + chunk_offset_in_block</code></p>\n<p>Yaffs treats a blank (0xFF filled) block as being free or erased. Thus, the equivalent of formatting for a Yaffs partition is to erase all the blocks that are not bad.</p>\n<p>Yaffs2 has a generalised tags interface to provide better flexibility to cater for a wider range of devices with larger pages and stricter programming limitations. Yaffs2 thus handles more abstract constructs than Yaffs1 and, in older versions of Yaffs, more effort was required to interface to the NAND.</p>\n<p>In newer versions of Yaffs, the tags management has been abstracted out of the driver. This makes the driver interface far simpler.</p>\n<h2 class=\"western\">9.1 Formatting</h2>\n<p>Yaffs treats erased blocks as empty. That makes it really easy to “format” a device: just erase it.. Note that this should be done while the partition is not mounted.</p>\n<p>Unmounting will not normally work when the file system is busy (eg. files are open), Some extra non-standard unmount options are provided to enable an unmount to be forced. Note that using these will break any current handles and you will no longer be able to use open files.</p>\n<p><code class=\"western\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: 12pt; font-size: medium; font-size: medium;\"><span style=\"font-weight: normal\">There is a </span></span></span></code><code class=\"western\"><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>yaffs_format() </b></span></span></code><code class=\"western\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: 12pt; font-size: medium; font-size: medium;\"><span style=\"font-weight: normal\">function that will take care of the details.</span></span></span></code></p>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">9.2 NAND Model considerations for Yaffs1</h2>\n<p>The historical Yaffs1 tags structure was laid out in accordance with the SmartMedia specification for use with 512-byte pages. There is now much more flexibility in the way things can be configured.</p>\n<p><br />\n<br />\n</p>\n<p>Yaffs1 is capable of being used with a variety of memory layouts so long as the flash supports the ability to overwrite the tags area to set the deletion marker to zero.</p>\n<p>If the yaffs_dev\'s use_nand_ecc field is not set, then yaffs will perform the ECC calculations. If this is set then yaffs will expect the NAND driver to do any required ECC checks. On devices that are not using ECC, for example NOR, set use_nand_ecc=1 and then don\'t do any ECC anyway.</p>\n<p>The Yaffs1 flash model expects an area of 16 spare bytes, some of which are used for tags. The mapping between the spare bytes and the usage of the bytes is specified in yaffs_packedtags1.c</p>\n<p>The Yaffs1 model has been used in many NOR-based systems. One particularly instructive example is in yaffs_nor_drv.c which implements a driver for Yaffs1 mode on CFI-style NOR flash. This does not use ECC but uses checksumming instead.</p>\n<p>The yaffs_dev structure has a yaffs_driver structure which holds the function pointers to the driver. For Yaffs1 mode of operations the following are required:</p>\n<table cellpadding=\"4\" style=\"page-break-inside: avoid; width: 100%; border-spacing: 0px;\">\n<col width=\"77*\" /> <col width=\"179*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_write_chunk_fn</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 70%;\">\n <p>Write a data chunk</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_read_chunk_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Read a data chunk.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_erase_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Erase a block</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_initialise_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Initialisation.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_deinitialise_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>De-initialise</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>These functions are described later.</p>\n<h2 class=\"western\">9.3 NAND Model for Yaffs2</h2>\n<p>The Yaffs2 interface is far more flexible than Yaffs1, but that means a bit more effort must be done in the driver. In particular:</p>\n<ul>\n<li>\n<p>There is is no standard spare area/ECC layout. The driver must handle all the layout of the spare area and ECC handling.</p>\n </li>\n<li>\n<p>There is not a standard implementation for bad block markers. Thus, the driver must provide functions for checking and marking bad blocks.</p>\n </li>\n</ul>\n<p>The yaffs_driver structure for Yaffs2 mode requires the following functions:</p>\n<p style=\"margin-bottom: 0cm; orphans: 0; widows: 0; page-break-before: auto\"><br />\n</p>\n<table cellpadding=\"4\" style=\"page-break-inside: avoid; width: 100%; border-spacing: 0px;\">\n<col width=\"77*\" /> <col width=\"179*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_write_chunk_fn</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 70%;\">\n <p>Write a data chunk</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_read_chunk_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Read a data chunk.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_erase_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Erase a block</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_mark_bad_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Mark a block bad</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_check_bad_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Check bad block status of a block.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_initialise_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>Initialisation.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 30%;\">\n <p>drv_deinitialise_fn</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 70%;\">\n <p>De-initialise</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">9.4 Overview of flash driver function</h2>\n<p>The best way to understand how to write these functions is to look at the example drivers.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int (*drv_write_chunk_fn) (struct yaffs_dev *dev, int nand_chunk, </p>\n<p class=\"code-western\">const u8 *data, int data_len, </p>\n<p class=\"code-western\">const u8 *oob, int oob_len)</p>\n<p>This function writes the specified chunk data and oob/spare data to flash.</p>\n<p>This function should return YAFFS_OK on success or YAFFS_FAIL on failure.</p>\n<p>If this is a Yaffs2 device, or Yaffs1 with use_nand_ecc set, then this function must take care of any ECC that is required.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int (*drv_read_chunk_fn) (struct yaffs_dev *dev, int nand_chunk, </p>\n<p class=\"code-western\">u8 *data, int data_len, </p>\n<p class=\"code-western\">u8 *oob, int oob_len,</p>\n<p class=\"code-western\">enum yaffs_ecc_result *ecc_result)</p>\n<p>This function reads the specified chunk data and oob/spare data from flash.</p>\n<p>This function should return YAFFS_OK on success or YAFFS_FAIL on failure.</p>\n<p>If this is a Yaffs2 device, or Yaffs1 with use_nand_ecc set, then this function must take care of any ECC that is required and set the ecc_result.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int (*drv_erase_fn) (struct yaffs_dev *dev, int block_no) </p>\n<p>This function erases the specified block.</p>\n<p>This function should return YAFFS_OK on success or YAFFS_FAIL on failure.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int (*drv_mark_bad_fn) (struct yaffs_dev *dev, int block_no); </p>\n<p class=\"code-western\">int (*drv_check_bad_fn) (struct yaffs_dev *dev, int block_no); </p>\n<p>These functions are only required for Yaffs2 mode. They mark a block bad or check if it is bad.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int (*drv_initialise_fn) (struct yaffs_dev *dev); </p>\n<p class=\"code-western\">int (*drv_deinitialise_fn) (struct yaffs_dev *dev); </p>\n<p>These functions provide hooks for initialising or deinitialising the flash driver.</p>\n<p><br />\n<br />\n</p>\n<h1 class=\"western\" style=\"page-break-before: always\">10 Configuration and flash driver installation</h1>\n<p>For an example of how to do the configuration, refer to yaffs_cfg2k.c and one of the drivers such as yaffs_nand_drv.c</p>\n<p>The old mechanism was static and required a table of devices that was installed at start up. This mechanism had shortcomings – in particular it broke modularity and did not allow devices to be added dynamically.</p>\n<p>Things are different now. As any time, a yaffs_dev structure can be configured and then registered with Yaffs by using the yaffs_add_device() function.</p>\n<p>A yaffs_dev structure has two parts which must be configured before yaffs_add_device() is called: the paramers (dev-&gt;param) and the driver (dev-&gt;drv). The driver configuration (plugging in the driver functions) has already been described above, so we will now look at the yaffs parameters.</p>\n<p><br />\n<br />\n</p>\n<p>The yaffs_param structure must be set before the yaffs_dev is added with yaffs_add_device() and should not be modified after that.</p>\n<p>The params are defined in the Yaffs Tuning Document.</p>\n<h1 class=\"western\" style=\"page-break-before: always\">11 Using the POSIX file system interface</h1>\n<p>This section is directed to readers that might not be very familiar with accessing a file system via POSIX and POSIX-like interfaces.</p>\n<h2 class=\"western\">11.1 Difference to Windows POSIX-like interfaces</h2>\n<p>MSDOS and Windows provide a POSIX-lke interface. If you are familiar with this then that will help you. There are are however some slight differences, most importantly:</p>\n<ul>\n<li>\n<p>Windows has no concept of links and has a 1:1 mapping between file names and files.POSIX supports files with zero, one or many names. Refer to the sections on linking and unlinking files. For instance POSIX allows you to unlink a file (ie delete the name for a file) while it is still in use. You can continue to read/write the file but it will be deleted as soon as the last file handle to the file is closed. Windows, on the other hand, does not allow you to unlink a file while it is in use.</p>\n </li>\n<li>\n<p>Windows names drives with a letter. POSIX has no drive letters. The whole POSIX file system is in a single directory tree.</p>\n </li>\n<li>\n<p>Directories and “folders” are the same thing.</p>\n </li>\n</ul>\n<h2 class=\"western\">11.2 Fundamental concepts</h2>\n<table cellpadding=\"4\" style=\"width: 642px; border-spacing: 0px;\">\n<col width=\"126\" /> <col width=\"499\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>File</p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 499px;\">\n <p>A file is an object that is stored in the file system. yaffs supports the following file types:</p>\n <p>A regular file is a sequence of bytes stored in the file system.</p>\n <p>A directory holds links to other files.</p>\n <p>A symbolic link holds a name to another file.</p>\n <p>A special file holds device ids or similar information.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>Directory</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>This is a structure that holds links and allows a file to be found by name. Note that a single file may have many links(ie names) and many be found in many places in the directory structure.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>Link</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>This is a name that allows the file to be found. There are two types of link: real links (sometimes called hard links) and symbolic (or soft) links. </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>Handle</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>A file handle provides a context from which a file can be accessed and manipulated. A handle has a current file position pointer which points to where the file is being read or written. Multiple handles can simultaneously access a single file.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>File mode</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>The mode is the set of flags that define the type of file as well as the current permissions associated with the file.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>Path</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>This is a string that defines the directories and file name. For example:</p>\n <p>“/data/direct-1/file1”</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>File metadata</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>This is the information about the file, excluding the file contents. The metadata includes the name, mode, size and other details.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>Mount,<br />\n  partition,<br />\n  file system</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>These terms all refer to a single mounted flash area. Each mount is hooked into a common directory structure.<br />\n  The term file system can sometimes be confusing because it is used both for a single mounted partition as well as the the file system code. In other words, we might say that both “/boot” is a file system and might also say that yaffs is a file system.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 126px;\">\n <p>inode number</p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 499px;\">\n <p>The inode number is a unique number that identifies the object within the mount. Note that inodes are not unique between two or more mounts. There is no way to reach a file by inode, only via its links.</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.3 Error code</h2>\n<p>Most functions result in error codes if the function does not execute successfully. In these cases yaffs calls a function called <code class=\"western\">yaffs_SetError()</code> with the error value. This function can be configured to deliver the error into the system\'s error mechanism.</p>\n<p>In the case of functions that return integers, a returned value smaller than 0 indicates an error occurred. Functions returning pointers will return NULL if an error occurred.</p>\n<h2 class=\"western\">11.4 Links – the hard kind (not symbolic links)</h2>\n<p>At first we\'re just considering real links and not symbolic links. Sometimes real links are also called hard links to differentiate them from symbolic links (which are sometimes called soft links).</p>\n<p>The difference between links and files is subtle and can be confusing. Briefly:</p>\n<ul>\n<li>\n<p>a file is the stored object in the file system</p>\n </li>\n<li>\n<p>the link is how it is hooked into the directory structure.</p>\n </li>\n</ul>\n<p><br />\n<br />\n</p>\n<p>The first link to a file is created by using the file creation calls: <code class=\"western\">yaffs_open()</code>, <code class=\"western\">yaffs_mknod()</code>, <code class=\"western\">yaffs_symlink()</code> and <code class=\"western\">yaffs_mkdir()</code>.</p>\n<p>A link can be destroyed by using the <code class=\"western\">yaffs_unlink()</code> function. Directories are destroyed using the <code class=\"western\">yaffs_rmdir()</code> function (oh, and the directory must be empty).</p>\n<p>Once a file is both unused (there are no handles open to it) and there are no links to it it is then deleted.</p>\n<p>A link can be renamed by using the <code class=\"western\">yaffs_rename()</code> function.</p>\n<p>A file may have many links. These may be created using the <code class=\"western\">yaffs_link()</code> function. All the links access the same file and there is no one link that is considered “the real link” and others being “the duplicate link”. All links to a file have the same priority. If you look at the inode number for “a” and for “b” then they will be the same because they are refering to exactly the same file.</p>\n<p>Thus:</p>\n<ol>\n<li>\n<p>If we start with a file called “a” and then call <code class=\"western\">yaffs_link(“a”, “b”)</code> we now have two links to the same file. We can\'t tell them apart.</p>\n </li>\n<li>\n<p>If we now unlink “a”, the file still exists under the link “b”.</p>\n </li>\n<li>\n<p>If we now unlink “b” the file will no longer be linked. If there is a handle open to the file then we can still access the file through the handle and continue to read or modify the file. If there is no link to the file it is deleted.</p>\n </li>\n<li>\n<p>If an unlinked file was kept alive because of a handle being open, the file will not show up in the directory structure (because it has no link) and will be deleted as soon as the handle is closed (or if the file system is unmounted).</p>\n </li>\n</ol>\n<p>There are some limitations in how links are used:</p>\n<ul>\n<li>\n<p>The existing file you are linking to must exist.</p>\n </li>\n<li>\n<p>The file you are linking to must be in the same mount (partition) as the link you are creating.</p>\n </li>\n<li>\n<p>You cannot create a link to a directory because this would allow the creation of recursive loops.</p>\n </li>\n<li>\n<p>The new link name must not exist.</p>\n </li>\n</ul>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.5 Symbolic links</h2>\n<p>Now that you understand how hard links work, we\'ll introduce symbolic (or soft) links.</p>\n<p>A symbolic link holds an alias for a different object. When you use that symbolic link in a path the alias is used instead. To that extent symbolic link and hard links are the same.</p>\n<p>You can remove symbolic links with the <code class=\"western\">yaffs_unlink()</code> function, just like hard links.</p>\n<p>There are, however, some important differences. A symbolic link only does its linking function when the path is being evaluated and thus:</p>\n<ul>\n<li>\n<p>The file you are creating an alias to does not have to exist.</p>\n </li>\n<li>\n<p>The file you are creating an alias to does not have to be in the same mount.</p>\n </li>\n<li>\n<p>You can create symbolic links to directories.</p>\n </li>\n<li>\n<p>A symbolic link will not keep a file alive by itself. Only a hard link can do that.</p>\n </li>\n</ul>\n<p>Thus:</p>\n<ol>\n<li>\n<p>If we start with a file called “a” and then call <code class=\"western\">yaffs_symlink(“a”, “b”)</code> we now have one link to the file called “a” and a symbolic link aliasising from “b” to “a”.</p>\n </li>\n<li>\n<p>If we use <code class=\"western\">yaffs_open(“a”)</code> or <code class=\"western\">yaffs_open(“b”)</code> they will open the same file. The path resolution mechanism substitutes in the alias and so will look up “a”. The same applies to almost all functions that takes a path, such as <code class=\"western\">yaffs_truncate()</code>, <code class=\"western\">yaffs_stat()</code> etc. The only exceptions are <code class=\"western\">yaffs_lstat()</code> and <code class=\"western\">yaffs_readlink()</code> which will treat the path as pointing to the symbolic link and not the file.</p>\n </li>\n<li>\n<p>You can tell “a” and “b” apart by using <code class=\"western\">yaffs_lstat()</code>. <code class=\"western\">yaffs_lstat(“a”)</code> will show the information for file “a”. <code class=\"western\">yaffs_lstat(“b”)</code> will show the information for the symbolic link itself. Note the difference with hard links. With hard links <code class=\"western\">yaffs_lstat(“a”)</code> and <code class=\"western\">yaffs_lstat(“b”)</code> would show the same results since they are EXACTLY the same thing being referenced.</p>\n </li>\n<li>\n<p>If we now unlink “a”. then the file is no longer linked and will no longer be accessible from “b”. Note the difference with hard links.</p>\n </li>\n</ol>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.6 Handle-based file handling</h2>\n<p>A handle is file accessor that allows us to access the contents of a regular file. The handle identifies the file being accessed as well as a position pointer tracking where the next read or write operation will take place.</p>\n<p>A handle is identified by an integer of value 0 or greater.</p>\n<p>A handle is created by using the <code class=\"western\">yaffs_open()</code> call and returns the handle value. If the handle could not be created then a negative value is returned and the yaffs error code is set.</p>\n<p>A handle remains valid until the handle is closed by <code class=\"western\">yaffs_close()</code>.</p>\n<p>The <code class=\"western\">yaffs_open()</code> call takes three parameters:</p>\n<ul>\n<li>\n<p>name: Full path name of the file being opened.</p>\n </li>\n<li>\n<p>access flags: Flags being used to open this handle</p>\n </li>\n<li>\n<p>creation mode: Mode flags used when creating a file.</p>\n </li>\n</ul>\n<p>The access flags are one or more of:</p>\n<table cellpadding=\"4\" style=\"width: 100%; border-spacing: 0px;\">\n<col width=\"59*\" /> <col width=\"197*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">O_CREAT</code></span></span></p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 77%;\">\n <p>Create file if it does not already exist.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">O_EXCL</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>Only use with O_CREAT. Create file if it does not exist. If the file already exists then fail.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">O_TRUNC</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>If the file exists, and opening with write access, then truncate the file to zero bytes long.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><br />\n  </p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p><br />\n  </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">O_APPEND</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>Regardless of the handle position, always write to the end of the file.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><br />\n  </p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p><br />\n  </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">O_RDWR</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>Open for read/write access.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">O_WRONLY</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>Open for write access and no read access.</p>\n <p><br />\n  </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>0 (zero)</b></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>If neither O_RDWR or O_WRONLY is set then the file will be opened for read-only access.</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>Where they are not mutually exclusive, these flags are typically combined. For example:</p>\n<p><code class=\"western\">O_CREAT | O_TRUNC | O_RDWR</code> : Create a new file if it does not exist otherwise if the file already exists then truncate to zero length. Typically used to overwrite a file or create if it does not already exist.</p>\n<p><code class=\"western\">O_CREAT | OEXCL | O_WRONLY</code> : Create a new file, opening it for write only. Fails if file already exists.</p>\n<p>There are three mode flags that can be controlled or set. These flags may be set by the open that creates the file or later by the <code class=\"western\">yaffs_chmod()</code>.</p>\n<table cellpadding=\"4\" style=\"width: 100%; border-spacing: 0px;\">\n<col width=\"59*\" /> <col width=\"197*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">S_IREAD</code></span></span></p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 77%;\">\n <p>The file may be opened for read access.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">S_IWRITE</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>The file may be opened for write access.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 23%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">S_IEXEC</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 77%;\">\n <p>The file may be opened for execution. This is not enforced by yaffs.</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<p>Once you have opened a handle you can then do various operations on the file.</p>\n<table cellpadding=\"4\" style=\"width: 605px; border-spacing: 0px;\">\n<col width=\"248\" /> <col width=\"339\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_close(handle)</code></span></span></p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 339px;\">\n <p>Close the handle. It is no longer usable.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_fsync(handle)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Flush out any cached writes to the file, as well as the file meta-data.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_datasync(handle)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Same as yaffs_fsync() but no file metadata.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_flush(handle)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Same as yaffs_fsync()</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_dup(handle)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Duplicates a handle.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_lseek(handle, offset, whence)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Set the handle read/write position. Note that this does not modify the file. You can seek past the end of the file. This does not modify the file size.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_ftruncate(handle, size)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Change the file size. It can be made bigger or smaller. This does not change the handle read/write position.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_fstat(handle, buf)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Get file status.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_fchmod(handle, mode)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Change the file mode.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><br />\n  </p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p><br />\n  </p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_read(handle, buffer, nbytes)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Read data from file at file pointer and update pointer.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_pread(handle, buffer, nbytes, position)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Read data from file at specified position. Does not modify file pointer</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_write(handle, buffer, nbytes)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Write data to file at file pointer and update pointer.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 248px;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">yaffs_pread(handle, buffer, nbytes, position)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 339px;\">\n <p>Write data to file at specified position. Does not modify file pointer</p>\n  </td>\n</tr>\n</table>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.7 Changing file size</h2>\n<p class=\"code-western\"><code class=\"western\">yaffs_truncate(path, newSize)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_ftruncate(handle, newSize)</code></p>\n<p><br />\n<br />\n</p>\n<p>These change a file\'s size. Note that truncating does not just mean make the file smaller. The file can also be made larger.</p>\n<p>Yaffs does not store bytes that it does not need to. If you use truncate to make a file larger then this will not necessarily occupt more flash space.</p>\n<p>See also <code class=\"western\">yaffs_lseek()</code> too. Note that <code class=\"western\">yaffs_lseek() </code>only changes the position of the write pointer and does not impact on the file size unless the file is written.</p>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.8 Getting/setting information about files</h2>\n<p class=\"code-western\"><code class=\"western\">yaffs_chmod(path, mode)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_fchmod(handle, mode)</code></p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\"><code class=\"western\">yaffs_access(path,amode)</code></p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\"><code class=\"western\">yaffs_stat(path, struct yaffs_stat *buf) </code> </p>\n<p class=\"code-western\"><code class=\"western\">yaffs_fstat(handle, struct yaffs_stat *buf)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_lstat(path, struct yaffs_stat *buf)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_readlink(path, buf, bufsize)</code></p>\n<p><br />\n<br />\n</p>\n<p>The chmod calls allow you to set different mode flags for the file. These can only be used to manipulate the permissions flags and not change the mode flags relating to the type of file.</p>\n<p><code class=\"western\">yaffs_access() </code>tests that the file can be accessed in the specified mode. This call returns zero on success and -1 is returned</p>\n<p>amode is a bitmask of the following values:</p>\n<table cellpadding=\"4\" style=\"width: 100%; border-spacing: 0px;\">\n<col width=\"43*\" /> <col width=\"213*\" />\n<tr valign=\"top\">\n <td style=\"border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 17%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">R_OK</code></span></span></p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 83%;\">\n <p>Check read is OK</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 17%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">W_OK</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 83%;\">\n <p>Check write is OK</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 17%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">X_OK</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 83%;\">\n <p>Check execute is OK.</p>\n  </td>\n</tr>\n<tr valign=\"top\">\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm; width: 17%;\">\n <p><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><code class=\"western\">0 (zero)</code></span></span></p>\n  </td>\n <td style=\"border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm; width: 83%;\">\n <p>Just checks the file exists</p>\n  </td>\n</tr>\n</table>\n<p>These can be combined.</p>\n<p>For example:</p>\n<p class=\"code-western\"><code class=\"western\">if(yaffs_access(path, R_OK | W_OK) == 0)</code></p>\n<p class=\"code-western\"><code class=\"western\">the file exists and can be read and written</code></p>\n<p class=\"code-western\"><code class=\"western\">if(yaffs_access(path, 0) == 0)</code></p>\n<p class=\"code-western\"><code class=\"western\">the file exists</code></p>\n<p><br />\n<br />\n</p>\n<p>The stat calls retrieve a yaffs_stat structure of data which is defined in yaffsfs.h. There are three versions:</p>\n<p><code class=\"western\">yaffs_fstat</code>: Takes a handle.</p>\n<p><code class=\"western\">yaffs_stat</code>: Takes a path name and follows symbolic links.</p>\n<p><code class=\"western\">yaffs_lstat</code>: Takes a path but does not follow symbolic links.</p>\n<p><br />\n<br />\n</p>\n<p>Thus, if path is a symbolic link, <code class=\"western\">yaffs_fstat() </code>will give information on the file that the link points to while <code class=\"western\">yaffs_lstat()</code> will give information about the link itself.</p>\n<p><code class=\"western\">yaffs_readlink()</code> will read the read the link value into the buffer provided. For example:</p>\n<p class=\"code-western\"><code class=\"western\">yaffs_symlink(“target”,”/link”); /* create a link called link to target */</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_readlink(“/link”,buffer,10); /* now buffer contains “target” */</code></p>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.9 Changing the directory structure and names</h2>\n<p class=\"code-western\"><code class=\"western\">yaffs_open(path, flags, mode)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_mkdir(path, mode)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_symlink(targetPath, linkPath)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_mknod(pathname, mode, dev)</code></p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\"><code class=\"western\">yaffs_link(existingPath, newath)</code></p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\"><code class=\"western\">yaffs_unlink(path)</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_rmdir(path)</code></p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\"><code class=\"western\">yaffs_rename(oldPath, newPath)</code></p>\n<p><br />\n<br />\n</p>\n<p>Files of various types, and their first link, are created via the <code class=\"western\">yaffs_open()</code><code class=\"western\"><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-weight: normal\">,</span></span></code><span style=\"font-family: Courier New, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"></span></span><code class=\"western\">yaffs_mkdir()</code><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">, </span></span><code class=\"western\">yaffs_symlink()</code> and <code class=\"western\">yaffs_mknod()</code><span style=\"font-family: Liberation Serif, serif;\"><span style=\"font-size: 12pt; font-size: medium; font-size: medium;\"></span></span>functions.</p>\n<p><code class=\"western\">yaffs_link()</code> can be used to create subsequent links to files. Note that you cannot create a link to a directory.</p>\n<p><code class=\"western\">yaffs_rename()</code> allows you to rename a link. Note that renaming one link over another link is an atomic operation. That means that even if the operation is interrupted by a power failure, the result will either complete or not happen at all. If the target link is for a directory, then the rename will only work if the target directory is empty.</p>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.10 Searching directories</h2>\n<p class=\"code-western\"><code class=\"western\">yaffs_DIR *yaffs_opendir(const YCHAR *dirname) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">void yaffs_rewinddir(yaffs_DIR *dirp) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">int yaffs_closedir(yaffs_DIR *dirp) ; </code> </p>\n<p><br />\n<br />\n</p>\n<p>Searching is performed by the following sequence of operations:</p>\n<ul>\n<li>\n<p>Open the directory for reading with <code class=\"western\">yaffs_opendir()</code>.</p>\n </li>\n<li>\n<p>Iterate through the entries in the directory using <code class=\"western\">yaffs_readdir()</code>. Each read will advance the directory read position.</p>\n </li>\n<li>\n<p>You can reset to the start of the directory with <code class=\"western\">yaffs_rewinddir()</code>.</p>\n </li>\n<li>\n<p>Close the directory when finished with <code class=\"western\">yaffs_closedir()</code>.</p>\n </li>\n</ul>\n<h2 class=\"western\">11.11 Searching directories (fd interface)</h2>\n<p class=\"code-western\"><code class=\"western\">int </code><code class=\"western\">yaffs_open(const YCHAR *dirname, </code><code class=\"western\">O_RDONLY, 0</code><code class=\"western\">) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">struct yaffs_dirent *yaffs_readdir_</code><code class=\"western\">fd</code><code class=\"western\">(</code><code class=\"western\">int fd</code><code class=\"western\">) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">void yaffs_rewinddir_</code><code class=\"western\">fd</code><code class=\"western\">(</code><code class=\"western\">int fd</code><code class=\"western\">) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">int yaffs_close(</code><code class=\"western\">int fd</code><code class=\"western\">) ; </code> </p>\n<p><br />\n<br />\n</p>\n<p>This is not a POSIX interface, but provides an alternate interface for reading directories.</p>\n<p><br />\n<br />\n</p>\n<p>Searching is performed by the following sequence of operations:</p>\n<ul>\n<li>\n<p>Open the directory for reading with <code class=\"western\">yaffs_open( </code><code class=\"western\">name, O_RDONLY, 0</code><code class=\"western\">)</code>.</p>\n </li>\n<li>\n<p>Iterate through the entries in the directory using <code class=\"western\">yaffs_readdir_</code><code class=\"western\">fd</code><code class=\"western\">()</code>. Each read will advance the directory read position.</p>\n </li>\n<li>\n<p>You can reset to the start of the directory with <code class=\"western\">yaffs_rewinddir_</code><code class=\"western\">fd</code><code class=\"western\">()</code>.</p>\n </li>\n<li>\n<p>Close the directory when finished with <code class=\"western\">yaffs_close()</code>.</p>\n </li>\n</ul>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.12 Mount control and similar</h2>\n<p class=\"code-western\"><code class=\"western\">yaffs_mount(path) ; </code> </p>\n<p class=\"code-western\"><code class=\"western\">yaffs_mount2(path, readOnly); </code> </p>\n<p class=\"code-western\"><code class=\"western\">yaffs_unmount(path);</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_unmount2(path, int force); </code> </p>\n<p class=\"code-western\"><code class=\"western\">yaffs_remount(path, force, readOnly);</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_sync(path) ;</code></p>\n<p class=\"code-western\"><code class=\"western\">yaffs_format(const YCHAR *path, </code> </p>\n<p><code class=\"western\"></code> <code class=\"western\">int unmount_flag, </code> </p>\n<p><code class=\"western\"></code> <code class=\"western\">int force_unmount_flag, </code> </p>\n<p><code class=\"western\"></code> <code class=\"western\">int remount_flag) </code> </p>\n<p><br />\n<br />\n</p>\n<p>A partition must be mounted to be accessed. <code class=\"western\">yaffs_mount()</code> will mount the partition for read/write access. <code class=\"western\">yaffs_mount2()</code> can be used to control whether the access is read/write or read only.</p>\n<p>A partition can be unmounted to remove it from use. <code class=\"western\">yaffs_unmount()</code> will fail if any files are in use whereas <code class=\"western\">yaffs_unmount2()</code> allows you to force the unmount even if files are open. Note that any file handles will then be broken and will no longer access the files.</p>\n<p><code class=\"western\">yaffs_remount()</code> can be used to change the access to a currently mounted partition and is equivalent to making an <code class=\"western\">unmount2()</code> call followed by a <code class=\"western\">mount2()</code> call.</p>\n<p><code class=\"western\">yaffs_sync()</code> does not change the mount status but flushes out any pending data on a partition that is mounted with write access.</p>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>yaffs_format()</b></span></span> provides a mechanism to format a device. It has various parameters.<br />\n<span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>unmount_flag</b></span></span>: If set, yaffs_format() will unmount the device before formatting. If this flag is not set and the device is mounted, then the format will fail with EBUSY.</p>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>force_unmount</b></span></span>: If set, then an unmount is allowed even if the device is busy (eg. files open). If not set, then yaffs_format() will fail (EBUSY) if files are open.</p>\n<p><span style=\"font-family: Liberation Mono, monospace;\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"><b>remount_flag</b></span></span>: If set, then the device will be remounted after the format if it was mounted.</p>\n<p>The force_unmount and remount_flag options only have meaning if unmount_flag is set.</p>\n<h2 class=\"western\">11.13 Extended attributes (xattrt)</h2>\n<p>Extended attributes provide a mechanism to attach a limited amount of extra data to a file without actually modifying the file. Each xattribute is a named pair of name and some data. Each file can have as many xattribs as there is space for. In Yaffs, this is around chunk-size – 512 bytes. So on devices with 2kbyte chunks you can store up to 1.5kbytes of xattribute information.</p>\n<p>Although there are 12 xattr functions, there are really only four basic functions, each with 3 different flavours.</p>\n<p>The basic functions are: set an xattr, get an xattr, remove an xattribute and list the xattribute names.</p>\n<p class=\"code-western\">int yaffs_setxattr(const char *path, const char *name, </p>\n<p class=\"code-western\">const void *data, int size, int flags); </p>\n<p class=\"code-western\">int yaffs_lsetxattr(const char *path, const char *name, </p>\n<p class=\"code-western\">const void *data, int size, int flags); </p>\n<p class=\"code-western\">int yaffs_fsetxattr(int fd, const char *name, </p>\n<p class=\"code-western\">const void *data, int size, int flags); </p>\n<p>These functions are called with name being the name of the xattr, a pointer to the data and the size of the data, and flags.</p>\n<p>The flags are:</p>\n<p>XATTR_CREATE: Create a new xattr, fail with -EEXIST if the xattrib already exists.</p>\n<p>XATTR_REPLACE: Replace an existing xattr, fail with -ENOATTR if it does not exist.</p>\n<p>zero: Just create with no checks, replace if it already exists.</p>\n<p><br />\n<br />\n</p>\n<p>Setting can fail with -ENOSPC if there is not enough space to store the xattrib.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int yaffs_getxattr(const char *path, const char *name, </p>\n<p class=\"code-western\">void *data, int size); </p>\n<p class=\"code-western\">int yaffs_lgetxattr(const char *path, const char *name, </p>\n<p class=\"code-western\">void *data, int size); </p>\n<p class=\"code-western\">int yaffs_fgetxattr(int fd, const char *name, </p>\n<p class=\"code-western\">void *data, int size); </p>\n<p>These get (fetch) an xattrib.</p>\n<p>If the call succeeds, the length of the retrieved xattrib is returned. This call can fail with -ENOATTR if the requested xattr does not exist or -ERANGE if the buffer was too small.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int yaffs_removexattr(const char *path, const char *name); </p>\n<p class=\"code-western\">int yaffs_lremovexattr(const char *path, const char *name); </p>\n<p class=\"code-western\">int yaffs_fremovexattr(int fd, const char *name); </p>\n<p>These functions delete an existing xattr. If the xattr does not exist then -ENOATTR is returned.</p>\n<p><br />\n<br />\n</p>\n<p class=\"code-western\">int yaffs_listxattr(const char *path, char *list, int size); </p>\n<p class=\"code-western\">int yaffs_llistxattr(const char *path, char *list, int size); </p>\n<p class=\"code-western\">int yaffs_flistxattr(int fd, char *list, int size); </p>\n<p>These functions fetch a list of the xattrib names into the list buffer. The names are NUL terminated. eg. “attrib0\\0attrib1\\0...”.</p>\n<p>The function returns the length of the list, otherwise if the list buffer is too short it returns -ERANGE.</p>\n<p>Note: If you call these functions with a list buffer size of zero, this acts as a query of the required buffer size. No data is actually transferred into the list.</p>\n<p><br />\n<br />\n</p>\n<p>For example we might choose to add some xattribs to a media file:</p>\n<p class=\"code-western\">//Set description</p>\n<p class=\"code-western\">yaffs_fsetxattr(fd, “user-comment”, “I hate this song!”,18);</p>\n<p class=\"code-western\">yaffs_fsetxattr(fd, “price-in-cents”, &amp;cost, sizeof(cost));</p>\n<p class=\"code-western\">// Get the comment</p>\n<p class=\"code-western\">yaffs_fgetxattr(fd, “user_comment”, buffer, sizeof(buffer);</p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\">//List the attributes in a NUL delimited list</p>\n<p class=\"code-western\">yaffs_flistxattr(fd, list_buf, sizeof(list_buf));</p>\n<p class=\"code-western\">// Now list_buf has user-comment\\0price-in-cents\\0</p>\n<p class=\"code-western\">yaffs_fremovexattr(fd, ”user-comment”);</p>\n<p><br />\n<br />\n</p>\n<h2 class=\"western\">11.14 Other</h2>\n<p class=\"code-western\"><code class=\"western\">yaffs_freespace(path); </code> </p>\n<p class=\"code-western\"><code class=\"western\">yaffs_totalspace(path); </code> </p>\n<p class=\"code-western\"><code class=\"western\">yaffs_inodecount(path); </code> </p>\n<p><br />\n<br />\n</p>\n<p>These functions provide information on the free and total space (in bytes) for the mount that the path addresses.</p>\n<p><code class=\"western\">yaffs_inodecount()</code> returns the number of files on the mount that the path addresses.</p>\n<h1 class=\"western\" style=\"page-break-before: always\">12 Example: yaffs_readdir() and yaffs_stat()</h1>\n<p>This code snippet illustrates using <code class=\"western\">yaffs_readdir()</code> and associated functions to iterate through a directory. It also shows how to use <code class=\"western\">yaffs_lstat() </code>to get information on a file and interpret it.</p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">void dump_directory(const char *dname) </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">{ </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">yaffs_DIR *d; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">yaffs_dirent *de; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">struct yaffs_stat s; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">char str[100]; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"></span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">d = yaffs_opendir(dname); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"></span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">if(!d) { </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">printf(&quot;opendir failed\\n&quot;); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">} else { </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">while((de = yaffs_readdir(d)) != NULL) { </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">sprintf(str,&quot;%s/%s&quot;,dname,de-&gt;d_name); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"></span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">yaffs_lstat(str,&amp;s); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"></span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">printf(&quot;%s inode %d length %d mode %X &quot;,</span></code></p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">str,s.st_ino,(int)s.st_size,s.st_mode); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">switch(s.st_mode &amp; S_IFMT) { </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">case S_IFREG: printf(&quot;data file&quot;); break; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">case S_IFDIR: printf(&quot;directory&quot;); break; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">case S_IFLNK: printf(&quot;symlink --&gt;&quot;); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">if(yaffs_readlink(str,str,100) &lt; 0) </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">printf(&quot;no alias&quot;); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">else </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">printf(&quot;\\&quot;%s\\&quot;&quot;,str);</span></code></p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">break; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">default: printf(&quot;unknown&quot;); break; </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">}</span></code></p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">printf(&quot;\\n&quot;); </span></code> </p>\n<p class=\"code-western\"><br />\n<br />\n</p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">if((s.st_mode &amp; S_IFMT) == S_IFDIR)</span></code></p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">dump_directory_tree_worker(str); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">} </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\"></span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">yaffs_closedir(d); </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">} </span></code> </p>\n<p class=\"code-western\"><code class=\"western\"><span style=\"font-size: 10pt; font-size: small; font-size: small;\">} </span></code> </p>\n<p><br />\n<br />\n</p>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"file:80\";i:44;s:8:\"node:453\";i:45;s:9:\"node_view\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";i:48;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:69:\"Yaffs Direct Interface | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:142:\"This describes the Yaffs Direct Interface (YDI), which allows Yaffs to be simply integrated with embedded systems, with or without an RTOS.\n \";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:33:\"/documents/yaffs-direct-interface\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/453\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:33:\"/documents/yaffs-direct-interface\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"YKrGewoEe3jhR6rADFvQTbWZLF4k0DO0XCJva485tC4pbTNZxGph5OqTeY7gY5fk9sbhwN0wBw\">\";}}}}',-1,1509021639.145,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site file:80 node:453 node_view rendered user:0 user:1','2749'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical1f644f584eb1d4a4c70ad5b70ac75a7e6a8bd4e78f8a08875adb50c6690b59df:[theme]=yaffs:[timezone]=Europe/London:[url]=https://FnmFd_CD8nwo_E6GxXXJx-fCGmM_fLvxCOGeqWLzt9E','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:31:\"config:filter.format.basic_html\";i:37;s:30:\"config:filter.format.full_html\";i:38;s:29:\"config:filter.format.raw_html\";i:39;s:22:\"config:search.settings\";i:40;s:26:\"config:system.menu.account\";i:41;s:23:\"config:system.menu.main\";i:42;s:24:\"config:system.menu.tools\";i:43;s:18:\"config:system.site\";i:44;s:8:\"node:400\";i:45;s:9:\"node_view\";i:46;s:8:\"rendered\";i:47;s:6:\"user:0\";i:48;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Tue, 19 Sep 2017 13:19:51 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:8291:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\n    <title>Bernina | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\n    <js-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-yaffs-user-logo navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>Bernina</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/logos/bernina\" class=\"yaffs-user-logo full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p>Bernina use Yaffs.</p></div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:31:\"config:filter.format.basic_html\";i:37;s:30:\"config:filter.format.full_html\";i:38;s:29:\"config:filter.format.raw_html\";i:39;s:22:\"config:search.settings\";i:40;s:26:\"config:system.menu.account\";i:41;s:23:\"config:system.menu.main\";i:42;s:24:\"config:system.menu.tools\";i:43;s:18:\"config:system.site\";i:44;s:8:\"node:400\";i:45;s:9:\"node_view\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";i:48;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:54:\"Bernina | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:18:\"Bernina use Yaffs.\";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:14:\"/logos/bernina\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/400\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:14:\"/logos/bernina\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"Q257MGx9OnyBOihm-QMfL-VDOU1cRbQOjNO1DVPcUnfk3tLwd4HcZCbRchugu1BW7Bq2nSybVw\">\";}}}}',-1,1505827191.454,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.basic_html config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:400 node_view rendered user:0 user:1','2754'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical2309cdc0936938a074e5fc97fc5c9416b07d2f34d263d46b3cba711f2993403e:[theme]=yaffs:[timezone]=Europe/London:[url]=https://kf_ZaJxqA5qXSYPjK0J6z53FKlwJt0VvThq9j-dwFps','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"file:78\";i:44;s:8:\"node:420\";i:45;s:9:\"node_view\";i:46;s:8:\"rendered\";i:47;s:6:\"user:0\";i:48;s:6:\"user:6\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:24:51 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:69717:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\n    <title>YAFFS Robustness and Testing | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\n    <js-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-paper navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n        <ol class=\"breadcrumb\">\n          <li >\n                  <a href=\"/documents\">Documents</a>\n              </li>\n          <li  class=\"active\">\n                  YAFFS Robustness and Testing\n              </li>\n      </ol>\n\n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>YAFFS Robustness and Testing</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/documents/yaffs-robustness-and-testing\" class=\"paper is-promoted full clearfix\">\n\n  \n    \n\n      <footer>\n      \n      <div class=\"author\">\n        Submitted by <span><span lang=\"\" about=\"/user/charles-manning\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Charles Manning</span></span>\n on <span>8 June, 2012 - 2:35am</span>\n        \n      </div>\n    </footer>\n  \n  <div class=\"content\">\n    \n      <div class=\"field field--name-upload field--type-file field--label-hidden field--items\">\n              <div class=\"field--item\"><span class=\"file file--mime-application-pdf file--application-pdf icon-before\"><span class=\"file-icon\"><span class=\"icon glyphicon glyphicon-file text-primary\" aria-hidden=\"true\"></span></span><span class=\"file-link\"><a href=\"https://yaffs.net/sites/default/files/downloads/YaffsRobustnessAndTesting.pdf\" type=\"application/pdf; length=143414\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsRobustnessAndTesting.pdf</a></span><span class=\"file-size\">140.05 KB</span></span></div>\n          </div>\n  \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>Many embedded systems need to store critical data, making reliable file systems an important part of modern embedded system design. That robustness is not achieved through chance. Robustness is only achieved through design and extensive testing to verify that the file system functions correctly and is resistant to power failure.</p>\n<p>This document describes some of the important design criteria and design features used to achieve a robust design.</p>\n<p style=\"page-break-before: always\"></p>\n<h1 class=\"western\">1 Background</h1>\n<p>Cheaper CPUs and flash have driven up embedded system functionality. These increased functions often require file system storage.</p>\n<p>The original flash file storage mechanisms were the use of a flash translation layer (FTL) – a driver model which makes flash memory appear as a disk drive – in conjunction with a disk-oriented file system such as FAT. This storage methodology has various performance and robustness limitations, leading to the development of file systems designed specifically for flash memory. These are known as flash file systems.</p>\n<p>Flash memory has various limitations when compared with a disk. For example, flash memory pages cannot be individually re-written but instead the whole block must be erased and rewritten with the modified page. Typical FTL achieve this with various logical to physical mapping schemes. Thus emulating disk-like behaviour on flash memory adds an extra layer of software which slows down write performance. Worse still, it adds extra state which is prone to corruption due to power failure.</p>\n<p>A typical FTL-based solution will use a file system such as FAT. FAT always stores tables in the same disk blocks and must thus change the same blocks often. Since flash memory blocks can endure a limited number of write/erasure cycles, the FTL must move the physical location of the block around to prevent the high traffic blocks from wearing out. This requires wear levelling – a further burden.</p>\n<p>Some systems try to mitigate against the performance penalties by caching a lot of data to reduce writes. While this can go some way towards reducing the apparent write time, it does make the solution prone to data loss in the event of a power failure.</p>\n<p>As well as limitations, flash memory also has certain advantages when compared to rotating media. There is no spin up time, making it more responsive. There is no read head so there is no read penalty if data is fragmented. Flash file systems can be designed to exploit these advantages.</p>\n<p>True flash file systems<a class=\"sdfootnoteanc\" name=\"sdfootnote1anc\" href=\"#sdfootnote1sym\" id=\"sdfootnote1anc\"><sup>1</sup></a>, on the other hand, are a single code body designed to take the features and limitations of flash into consideration. Flash file systems can thus be far more “flash friendly”. Well designed flash file systems will avoid using “flash unfriendly” techniques such as allocation tables and in-place rewriting.</p>\n<p>Yaffs is a flash file system, originally designed specifically for NAND flash though also used with great success on NOR flash too. Yaffs development started in 2001 when 32Mbytes of flash was considered large. Since then, Yaffs has been expanded to work properly with different flash types and far larger memory arrays (many GBytes).</p>\n<p>Yaffs was originally deployed in Linux, but was written in an OS neutral way, mainly to facilitate modular development and testing. This turned out to be useful when we had requests to port Yaffs to other operating systems. Since then, Yaffs has been used in many different products in a wide variety of applications from consumer products such as cell phones and sewing machines to aerospace, industrial and medical applications including process control, building management, communications infrastructure and many others.</p>\n<p>Yaffs is not tied to any endian ordering and has been used on a wide variety of architectures including ARM, MIPS, PowerPC, x86, some DSPs. Yaffs has been deployed using a wide variety of compilers from many different vendors.</p>\n<p>Nor is Yaffs tied to any particular operating system. Yaffs has been used with Linux, eCOS, Windows Embedded Compact (previously Windows CE), VxWorks and others.</p>\n<h1 class=\"western\">2 Flash File System considerations</h1>\n<p>There are many criteria that are important when selecting a flash file system. These are some that out customers have found to be most important:</p>\n<ul>\n<li>\n<p>Robustness: It really is not worth having a file system that loses or corrupts data and prevents the system from working properly. Some flash file systems are only robust when synced (flushed) after files have been written. That requires extra code, slows the system and leaves the file system in a non-deterministic state until the sync has been completed. Some file systems need to perform disk repair operations (eg. check disk) in the event of a power failure. This can add considerable time to the start up, preventing the system from being operational.</p>\n </li>\n<li>\n<p>Performance: In many embedded system designs, slow read/write performance can delay tasks and cause system degradation or even failure. It is thus important that read/write performance be acceptable. Note that many flash file systems need to perform extra actions such as garbage collection. In some cases these actions can cause the file system to stall for a long time. It is thus important that these factors be taken into consideration. Performance can sometimes be improved by adding a write caching layer. These caching layers make the file system calls (write etc) proceed quickly, without actually writing the data to flash. This is a two-edged sword as data in the cache will be lost on a power failure and syncing the file system will take a long time. Thus, most flash file systems offer either speed or robustness – not both.</p>\n </li>\n<li>\n<p>Proven: It is very easy for a file system vendor to provide a list of claims saying “100% power safe” or similar, but what evidence do they have to back this up? All file systems, including flash file systems, are complex bodies of software with extremely complex state. They need very significant testing to prove that they work correctly.</p>\n </li>\n<li>\n<p>Portable: Software is a huge investment and it is increasingly important to be able to port the software between OSs and CPU architectures. Most flash file systems are limited to a single operating system which makes it difficult to migrate software between different platforms. In Yaffs\' case portability extends to being able to seamlessly migrate the core Yaffs code into a test framework which enhances testing.</p>\n </li>\n</ul>\n<h1 class=\"western\">3 How Yaffs achieves robustness and performance</h1>\n<p>Yaffs was designed from the ground up specifically to work well with NAND flash. The author had already developed another flash file system, so was already familiar with the design challenges of flash.</p>\n<p>As Yaffs is not just adapting a disk-oriented file system to work with flash it is not surprising that Yaffs is very different in design to most other file systems. The key difference is that Yaffs is a log-structured. file system<a class=\"sdfootnoteanc\" name=\"sdfootnote2anc\" href=\"#sdfootnote2sym\" id=\"sdfootnote2anc\"><sup>2</sup></a>.</p>\n<p>In essence, a log structured file system writes file system changes as a sequential log. The log structure is particularly suitable for various reasons including:</p>\n<ul>\n<li>\n<p>All writes are at the end of the log. When a file is modified, there is no need to erase and rewrite a part of the flash. Changes are just appended to the log. Thus there is no need to erase and copy old data just to change some existing pages in a file. This tends to make writes much faster. There is no need to do a lot of caching to achieve performance. Data can be written to the log immediately meaning that sync time is very low. Data robustness is improved dramatically.</p>\n </li>\n<li>\n<p>There are no allocation tables or similar. This reduces the amount of data being written to the flash, and that there are no tables to corrupt.</p>\n </li>\n<li>\n<p>Since all writes are to the end of the log there are no “high traffic” blocks. This means Yaffs only needs a simpler wear leveling strategy.</p>\n </li>\n<li>\n<p>In the event of a power failure, the file system state is easily re-created from the log. This means there is no need to perform disk repair operations to correct for an unclean shutdown.</p>\n </li>\n</ul>\n<p>So why don\'t we see many log structured file systems for disk file systems? The answer to this is that log file systems tend to spread the writes around on the media. That is typically very problematic for mechanical storage which must physically move the read/write head from one location to another making the access time very slow. Of course that does not apply for flash memory. By designing specifically for flash, Yaffs can ignore this issue and write fast.</p>\n<p>Many flash file systems need make a compromise between robustness against performance. Thanks to the log structure, Yaffs does not need to. Yaffs can provide high performance without giving up on robustness.</p>\n<p>Those familiar with log structured file system design will know that some log structured file systems have problems with garbage collection<a class=\"sdfootnoteanc\" name=\"sdfootnote3anc\" href=\"#sdfootnote3sym\" id=\"sdfootnote3anc\"><sup>3</sup></a>. Garbage collection is used to clean up the log and make more free space available. Some log structured file system designs did not pay enough attention to garbage collection and can stall for a considerable time while garbage collection happens. Yaffs was designed differently. The potential impact of garbage collection was considered throughout the Yaffs design process. As a result, Yaffs has a very simple garbage collection model that allows a lot of flexibility in garbage collection scheduling. This prevents the garbage collection from making the file system unresponsive.</p>\n<p>Most file systems are developed within the context, and framework of, a single operating system. This typically makes the code difficult to explore, debug and port. Yaffs on the other hand was developed from the start inside a portable development/testing framework. Yaffs is then ported to various operating systems through the addition of glue code.</p>\n<p><br />\n<br />\n</p>\n<p><img src=\"data:image/png;base64,[encoded data, 38784 characters]\" width=\"552\" height=\"524\" alt=\"image\" id=\"Object1\" /> <br />\n<br />\n</p>\n<p>There are many benefits to this approach:</p>\n<ul>\n<li>\n<p>A development framework runs in user space which provides a richer development environment than inside an OS kernel. It is much easier to attach debuggers and perform logging and create reproducible testing.</p>\n </li>\n<li>\n<p>The code is structured to be portable. That makes it relatively easy to port to a new OS or RTOS with a high level of confidence.</p>\n </li>\n<li>\n<p>There is a choice of porting interfaces allowing more flexibility to determine which porting method will be simpler. For example, the Linux wrapper accesses the Yaffs core directly while the Windows CE wrapper access the Yaffs Direct Interface<a class=\"sdfootnoteanc\" name=\"sdfootnote4anc\" href=\"#sdfootnote4sym\" id=\"sdfootnote4anc\"><sup>4</sup></a>.</p>\n </li>\n<li>\n<p>Each different environment provides different test tools. For example, Linux provides a raft of file system test tools that do different kinds of testing to the power fail test harness. Since the vast majority of the code is in the portable Yaffs core, that code gets the advantage of all test methods combined. The many millions of Android phone users that use Yaffs-based devices are helping test the core code that is also used on a wide variety of different operating systems and a wide range of different device types.</p>\n </li>\n<li>\n<p>Its Open Source status means any interested person can take a version from git and test it to make sure that it meets their needs.</p>\n </li>\n</ul>\n<h1 class=\"western\">4 Testing</h1>\n<p>It is all very well to design software to be robust, but it needs thorough testing to build confidence in the software and in the code authors and supplier.</p>\n<p>File systems have incredibly complex state so it is not at all surprising that operating system designers find file systems some of the most challenging code to test.</p>\n<p>There is no single test methodology that can test all cases, and exhaustive state testing is impossible. The best we can do is to have a suite of test methodologies that combine to provide thorough testing.</p>\n<p>Approximately 60% of Yaffs development effort is directed towards testing and improving the test environment. We are constantly researching new methodologies.</p>\n<p>The following are descriptions of the most important test strategies used in Yaffs.</p>\n<h2 class=\"western\">4.1 Power Fail Stress Testing</h2>\n<p>By far the most important consideration in Yaffs testing is that it is robust to corruptions caused by power failure. We want Yaffs to provide the basis for reliable products in typical embedded system environments.</p>\n<p>The first power fail testing was done by companies integrating Yaffs into their products. Some of these built test jigs which would automatically interrupt power while running a real hardware device. This approach is better than nothing, but has some limitations:</p>\n<ul>\n<li>\n<p>It is relatively costly to set up. Flash has a limited lifetime meaning that test devices wear out with time and must be replaced.</p>\n </li>\n<li>\n<p>It is relatively slow since each cycle takes many seconds to boot, run the application for a while and then reboot.</p>\n </li>\n<li>\n<p>Many, and perhaps most, of the power interruptions will happen at times when the file system is inactive and thus be wasted cycles.</p>\n </li>\n</ul>\n<p>In 2008 we developed a simulated power-fail-test environment. This simulates power failures using simulated flash memory while running various consistency checks.</p>\n<p>The benefits of a software-based test harness are numerous:</p>\n<ul>\n<li>\n<p>The test harness controls the point at which the simulated power failures happen. That means every test cycle counts.</p>\n </li>\n<li>\n<p>No special hardware is required.</p>\n </li>\n<li>\n<p>Test loops run faster. A quad-core computer can simulate ten to twenty power failures per second. That means about a million power failure simulations per day.</p>\n </li>\n</ul>\n<p>The effectiveness of the new software based testing is dramatic.. A few times we have tested some user-suggested changes that had passed a week or more of real-world power fail testing only to have problems caught by the software simulation in a matter of minutes.</p>\n<p>We regularly run the power fail simulation test over a weekend, testing millions of power fail cycles.</p>\n<h2 class=\"western\">4.2 Testing the Yaffs Direct Interface API</h2>\n<p>Yaffs Direct Interface (YDI) is a POSIX-like wrapper around the Yaffs core. This provides a set of function calls, yaffs_open(), yaffs_write() and the like.</p>\n<p>Each function can return numerous error codes and has to handle numerous different parameters.</p>\n<p>Although there were already significant tests for the YDI, an extensive test harness was developed in 2010 to comprehensively test each of the error paths and generate all of the required errors.</p>\n<p>This provides a high level of confidence that the test interfaces do what they should and that POSIX-like functionality provides relatively clean porting of existing code.</p>\n<h2 class=\"western\">4.3 Linux Testing</h2>\n<p>The main purpose of the Linux testing is to test the Linux wrapper code. It does, however, still exercise the Yaffs core code differently to other testing and thus adds to the test fabric.</p>\n<p>The Linux testing does not do power fail testing but instead tests other aspects such as clean shutdowns, cache integrity and write performance. This gives a useful way to assess the effects of modifications.</p>\n<p>Linux testing is done on both real hardware and on simulated hardware using the Linux mtd nand simulator.</p>\n<p>As with the Power Fail Stress Testing described above, the simulated testing is done using a scrippted environment which is typically run for a few days at a time.</p>\n<h2 class=\"western\">4.4 Fuzz Testing</h2>\n<p>Fuzz testing deliberately corrupts the flash image and ensures that Yaffs still mounts. This is done to ensure that Yaffs does not crash on corrupted data.</p>\n<p>Clearly fuzz testing can corrupt the contents of individual files (that\'s its job), but the file system integrity should not be compromised. </p>\n<h2 class=\"western\">4.5 Software checking</h2>\n<p>Although code checking is not actual testing per se, it does help to verify code changes.</p>\n<p>The Yaffs code has been checked with Coverity<a class=\"sdfootnoteanc\" name=\"sdfootnote5anc\" href=\"#sdfootnote5sym\" id=\"sdfootnote5anc\"><sup>5</sup></a> – a market leader in code checking.</p>\n<p>We are investigating the use of KLEE and other tools.</p>\n<h2 class=\"western\">4.6 Open Source Usage</h2>\n<p>Open Source usage of Yaffs opens it up to testing by the many different projects. Many of these participate in some way with the Yaffs mailing list, helping to uncover issues and generally provide feedback.</p>\n<p>Each different project uses Yaffs in a different way, meaning that a wider range of operation sequences are tested.</p>\n<h2 class=\"western\">4.7 Universities</h2>\n<p>Over its lifetime, Yaffs has been used as a teaching framework for various university course in many different counties around the world.</p>\n<p>For example, Oregon State and Utah State Universities have used Yaffs as a test bench for their post-graduate software testing courses. They essentially test the test tools by injecting errors into the Yaffs code and seeing if these are discovered by the test tools they are testing. Of course this has the side effect of running these tests over the original Yaffs code too. </p>\n<p>Those interested in test methods are encouraged to read some of the university papers in the references of this document.</p>\n<p>We expect to adopt and extend some of the Oregon State ideas and use these to extend our in-house test suite.</p>\n<h1 class=\"western\">5 Conclusions</h1>\n<p>Software development is an iterative process of design and testing. Robust software solutions are only possible with extensive testing.</p>\n<p>Embedded systems increasingly need to store data in file systems as a critical part of their operation. It is thus important to have a file system that is predictable and robust to power failure and similar interruptions.</p>\n<p>Yaffs has been designed from scratch to be robust to power failure and that robustness has been verified with a multi-pronged test strategy that is continuously being improved.</p>\n<h1 class=\"western\" style=\"page-break-before: always\">6References</h1>\n<p>Charles Manning, “How Yaffs Works”.<br />\n<a href=\"http://users.actrix.co.nz/manningc/yaffs-docs/HowYaffsWorks.pdf\">http://users.actrix.co.nz/manningc/yaffs-docs/HowYaffsWorks.pdf</a></p>\n<p><br />\n<br />\n</p>\n<p>A. Groce et al, “Swarm Testing” from Oregon State University, School of EE and Computer Science and Utah State University, School of Computing, 2011.<br />\n<a href=\"http://www.ct.utah.edu/~regehr/papers/swarm12.pdf\">http://</a><a href=\"http://www.ct.utah.edu/~regehr/papers/swarm12.pdf\">www.ct.utah.edu/~regehr/papers/swarm12.pdf</a></p>\n<p><br />\n<br />\n</p>\n<p><em>Wu CH, “Efficient Initialization and Crash Recovery</em> for. <em>Log</em>-<em>based File Systems</em> over Flash Memory” from National Taiwan University, Dept of Computer Science, <span style=\"font-style: normal\">2006.<br />\nhttp://</span><cite>www.cis.nctu.edu.tw/~lpchang/papers/SAC_wu_sac06.pdf</cite></p>\n<p style=\"font-style: normal\"><br />\n<br />\n</p>\n<div id=\"sdfootnote1\">\n<p class=\"sdfootnote-western\"><a class=\"sdfootnotesym\" name=\"sdfootnote1sym\" href=\"#sdfootnote1anc\" id=\"sdfootnote1sym\">1</a>Note that flash translation layers (FTLs) are erroneously refered to as flash file systems. For example, despite the name, M-Systems TrueFFS is not a flash file system but a flash translation layer (FTL).</p>\n</div>\n<div id=\"sdfootnote2\">\n<p class=\"sdfootnote-western\"><a class=\"sdfootnotesym\" name=\"sdfootnote2sym\" href=\"#sdfootnote2anc\" id=\"sdfootnote2sym\">2</a>This document only provides a brief overview of the Yaffs architecture and design. The “How Yaffs Works” document provides an in-depth explanation of the Yaffs design and architecture.</p>\n</div>\n<div id=\"sdfootnote3\">\n<p class=\"sdfootnote-western\"><a class=\"sdfootnotesym\" name=\"sdfootnote3sym\" href=\"#sdfootnote3anc\" id=\"sdfootnote3sym\">3</a>Refer to the “How Yaffs Works” document to understand the need for garbage collection and how Yaffs does garbage collection.</p>\n</div>\n<div id=\"sdfootnote4\">\n<p class=\"sdfootnote-western\"><a class=\"sdfootnotesym\" name=\"sdfootnote4sym\" href=\"#sdfootnote4anc\" id=\"sdfootnote4sym\">4</a>For more information on Yaffs Direct Interface, please read the various documents on the subject.</p>\n</div>\n<div id=\"sdfootnote5\">\n<p class=\"sdfootnote-western\"><a class=\"sdfootnotesym\" name=\"sdfootnote5sym\" href=\"#sdfootnote5anc\" id=\"sdfootnote5sym\">5</a>http://www.coverity.com</p>\n</div>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:49:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"file:78\";i:44;s:8:\"node:420\";i:45;s:9:\"node_view\";i:46;s:6:\"user:0\";i:47;s:6:\"user:6\";i:48;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:75:\"YAFFS Robustness and Testing | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:230:\"This document describes some of the important design criteria and design features used to achieve a robust design suitable for modern embedded systems which need to store critical data.  The test methodologies are also described.\";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:39:\"/documents/yaffs-robustness-and-testing\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/420\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:39:\"/documents/yaffs-robustness-and-testing\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"b6S5AhZncMPaOfyCvvp_DIndvjxbLIO4I5eiUv39Bu7O2a1niVcy2lm0pHm5VizUwIXvCA4ZVg\">\";}}}}',-1,1509067492.002,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site file:78 node:420 node_view rendered user:0 user:6','2746'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical29e2fa0fe99805376957be51ad0fac29b73b5c0edf6741cd0d6467d87c96c726:[theme]=yaffs:[timezone]=Europe/London:[url]=https://r5Xi_m_9vyRM99qDSMwqW8EimHcimiFfWNFa2ne14e0','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:377\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:26:20 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:8165:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\n    <title>YAFFS - Block states | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\n    <js-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-image navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>YAFFS - Block states</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/yaffs-block-states\" class=\"image is-promoted full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:377\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:17:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:67:\"YAFFS - Block states | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:4;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:5;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:6;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:9;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:19:\"/yaffs-block-states\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/377\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:19:\"/yaffs-block-states\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"8HLRCOT8xue_L4x8yaCU2T60D0BPwVWjpfR_KK9163utxwy_4ksVo6qFpfh-3PMRMZcB2VIBLw\">\";}}}}',-1,1509067580.418,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:377 node_view rendered user:0 user:1','2744'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical2c63674ba5ac1f3e23d2ce19c94a340407255a580471a4fe2d10cc1a33ed7a7b:[theme]=yaffs:[timezone]=Europe/London:[url]=https://vzKsfGQmFZAk3D206NSWZmGxQw8GE6LzTcX2FPbXtgM','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:479\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Thu, 26 Oct 2017 12:00:06 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:25098:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\n    <title>Yaffs for VxWorks | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\n    <js-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-paper navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n        <ol class=\"breadcrumb\">\n          <li >\n                  <a href=\"/documents\">Documents</a>\n              </li>\n          <li  class=\"active\">\n                  Yaffs for VxWorks\n              </li>\n      </ol>\n\n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>Yaffs for VxWorks</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/documents/yaffs-vxworks\" class=\"paper is-promoted full clearfix\">\n\n  \n    \n\n      <footer>\n      \n      <div class=\"author\">\n        Submitted by <span><span lang=\"\" about=\"/user/admin\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Admin</span></span>\n on <span>11 January, 2016 - 3:28pm</span>\n        \n      </div>\n    </footer>\n  \n  <div class=\"content\">\n    \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>The source and the definitive version of this document can be found in our git repository,&nbsp;<a href=\"http://www.aleph1.co.uk/gitweb/?p=yaffs-docs;a=tree;h=f4fcbdc9da052aa926c4bc2275547ca310eebbd8;hb=9d50c62a1c24f1b9dd00ec3eb6d0bddff0aed17d\">together with other Yaffs documents</a>.</p>\n<h2>1 Background</h2>\n<p>The purpose of this document is to describe the Yaffs-for-VxWorks wrapper as well as provide sufficient information to port Yaffs to the VxWorks BSP. This document assumes a working knowledge of VxWorks.</p>\n<p>This document does not describe the inner workings of Yaffs and a study of other Yaffs documents is recommended. Documents shown below in <em>italics</em> are available at <em><a href=\"http://www.yaffs.net/documents\">http://www.yaffs.net/documents</a>...</em></p>\n<h2>2 Licensing</h2>\n<p>Yaffs was originally released for Linux under the GNU Public License (GPL). Various embedded developers soon identified that Yaffs would be ideal for their applications, but were not able to use GPL based code in their systems. Aleph One Ltd has alternative licensing arrangements to support such applications.</p>\n<p>Since VxWorks is proprietary code that is incompatible with GPL, alternative licensing arrangements must be sought to use Yaffs with VxWorks or most other embedded RTOSs.</p>\n<h2>3 What are Yaffs and Yaffs Direct Interface?</h2>\n<p>Yaffs stands for Yet Another Flash File System and was the first file system designed from the ground up for NAND flash storage.</p>\n<p>In 2002 Aleph One set out to identify file system options for using NAND Flash as a file system. Various file systems available at the time were evaluated and all were found lacking in one way or another. The need for a suitable NAND storage file system was identified and Yaffs was designed to fill that need.</p>\n<p>Although Yaffs was originally designed for NAND flash, it has been used successfully with NOR flash systems and even as a RAM file system. This allows high reliability file systems to be constructed using NOR flash, with a future migration path to NAND flash for higher density and performance.</p>\n<p>Yaffs was originally designed for use with the Linux operating system, but was designed in a very modular way. The operating-system-specific code was kept separate from the main Yaffs file system code. This allows Yaffs to be ported quite cleanly to other operating systems through operating system personality modules. One such personality module is the Yaffs Direct Interface (YDI) which allows Yaffs to be simply integrated with embedded systems, with or without an RTOS. See <a href=\"http://www.yaffs.net/documents/yaffs-direct-interface\">http://www.yaffs.net/documents/yaffs-direct-interface</a></p>\n<p>The current version is Yaffs2, which supports a wider range of NAND flash components including 2k/4k/8k or even 16k page devices and devices with multi-level cells (MLC), and produces equivalent or better performance. Yaffs2 include Yaffs1 compatibility code so Yaffs1 images still work and migration is quite simple. Yaffs1 or Yaffs2 mode of operation are simply selected by a run-time parameter.</p>\n<p>As well as providing a NAND file system, YDI also provides a RAM emulation layer to allow Yaffs to operate as a RAM file system too. While the RAM emulation is perhaps not as efficient as a dedicated RAM file system, this does allow one well proven file system to use both RAM and flash.</p>\n<p>Yaffs has been used for many products using various operating systems including Windows Embedded Compact (previously called Windows CE) and various RTOSs, including ThreadX, vXworks, pSOS to name just a few. Note that there is a native port of Yaffs to eCOS that does not use YDI. This is supported and distributed by eCocCentric.(<a href=\"http://www.ecoscentric.com/\">http://www.ecoscentric.com/</a>).</p>\n<h2>4 Why use Yaffs?</h2>\n<p>For an in depth understanding of the advantages of Yaffs, please read <em><a href=\"http://www.yaffs.net/documents/considerations-choosing-flash-file-system\">http://www.yaffs.net/documents/considerations-choosing-flash-file-system</a></em></p>\n<p>For a brief overview: Yaffs is the first, and perhaps only, file system designed specifically for NAND flash. This means that Yaffs has been designed to work around the various limitations and quirks of NAND flash, as well as exploit the various features of NAND to achieve an effective file system.</p>\n<p>Some features to consider:</p>\n<ul>\n<li>Yaffs has been well proven and has been used to ship in large volumes in several products using many different operating systems, compilers and processors.</li>\n<li>Yaffs is written in portable C and is endian neutral.</li>\n<li>Yaffs provides bad block handling and ECC algorithms to handle deficiencies in NAND flash.</li>\n<li>Yaffs is a log-structured file system which makes it very robust to corruptions caused by power failures etc.</li>\n<li>Yaffs has highly optimised and predictable garbage collection strategies. This makes it high performance and very deterministic when compared with similar file systems.</li>\n<li>Yaffs has a lower memory footprint than most other log-structured flash file systems.</li>\n<li>Yaffs provides a wide range of POSIX-style file system support including directories, symbolic and hard links etc. through standard file system interface calls.</li>\n<li>Yaffs is highly configurable to work with various flash geometries, various ECC options, caching options etc.</li>\n<li>Yaffs Direct Interface is simple to integrate in a system – only a few interface functions are required.</li>\n<li>Yaffs can be used with a wide range of memory technologies.</li>\n</ul>\n<h2>5 What is Yaffs -for-VxWorks?</h2>\n<p>Many organizations have used Yaffs on VxWorks with just Yaffs Direct Interface (YDI). So what benefit does Yaffs-for-VxWorks offer?</p>\n<p>YDI provides a POSIX-like API, but with Yaffs specific names. For example: yaffs_open(), yaffs_read(), yaffs_close() etc.</p>\n<p>While YDI provides a solution for many systems, and is very well proven, it has one major drawback. It is not a native file system. That means:</p>\n<ul>\n<li>Existing code that calls open(), read(), write() etc cannot be immediately used with YDI. The code needs to be rewritten to call the YDI functions: yaffs_open(), yaffs_read()... This porting is costly and error prone.</li>\n<li>Code written for YDI is then locked to Yaffs and makes portability/testability problems.</li>\n<li>Tools such as the VxWorks console shell cannot be used to access Yaffs files via YDI.</li>\n</ul>\n<p>Yaffs-for-VxWorks fixes these limitations..</p>\n<p>Yaffs-for-VxWorks is a wrapper around YDI that plugs YDI in as a native file system (ie. Yaffs becomes a file system that is accessed no different from any of the other file systems on system. This makes it really easy to migrate existing VxWorks software, or develop new VxWorks software to get the benefits of Yaffs.</p>\n<p>Yaffs-for-VxWorks follows the VxWorks operating system model used by other VxWorks file systems, so it is easy for VxWorks developers to integrate Yaffs and integrate it with their normal workflow.</p>\n<p>As mentioned above, Yaffs-for-VxWorks is a wrapped version of YDI. That means all the testing and experience of using YDI since 2002 is incorporated into Yaffs-for-VxWorks.</p>\n<p>Yaffs is already supported in u-boot, so if you\'re using u-boot as a boot loader then there is already seamless support for Yaffs file system access between the boot loader and VxWorks.</p>\n<p>Some organizations have developed their own VxWorks wrappers for Yaffs, but using the Yaffs-for-VxWorks wrapper saves a lot of integration and testing effort.</p>\n<p>Once the Yaffs-for-VxWorks file system code is loaded into the kernel, flash devices are added using yaffs_devAdd(). They are then available in the VxWorks file system for access just like any other files in the system.</p>\n<p><img alt=\"Yaffs and VxWorks conceptual relationships\" src=\"/sites/yaffs.net/files/images/yaffs-vxworks.png\" /></p>\n<p>&nbsp;</p>\n<h2>6 Yaffs-for-VxWorks code</h2>\n<p>Yaffs-for-VxWorks is supplied as a VxWorks Downloadable Kernel Module (DKM) project with full source code. This can then be modifies into a BSP layer or library and compiled directly into the kernel.</p>\n<p>The code comprises Yaffs Direct Interface (YDI) plus two wrapper files:</p>\n<ul>\n<li>yaffs_drv.c: This file does all the iosLib interfacing (ie. plugs Yaffs in as a VxWorks file system and plugs in the flash devices as file system devices. This file provides one externally visible function call: yaffs_devAdd() which allows Yaffs devices (ie. Flash drivers) to be plugged in.</li>\n<li>yaffx_vx_glue.c: This file provides all the OS resources that Yaffs needs from VxWorks. For example, it initialises a semaphore and does any error code routing.</li>\n</ul>\n<p>In addition, if the Yaffs filesystem driver is build as a DKM, a file called yaffs_dkm.c provides the dummy DKM start() function.</p>\n<p>The code is provided as a DKM project. This includes the specification of the DEFINES needed to compile Yaffs under VxWorks. If the code is moved out of the DKM then it is important to make sure the correct DEFINES are set up.</p>\n<h2>7 Example Simulated Flash Driver</h2>\n<p>The Yaffs-for-VxWorks package provides an example Yaffs device that runs on a RAM simulator. This allows the file system to be tested in a simulation target without flash memory (eg the VxWorks simulator). This also provides an example for how to develop a flash driver and plug it in to Yaffs.</p>\n<h2>8 Example Real Time Process(RTP)</h2>\n<p>An example RTP is provided that performs some basic file system operations and demonstrates a working filesystem.</p>\n<p>This RTP uses standard file system calls (open(), read(), write()...) demonstrating that the Yaffs-for-VxWorks layer is operating as a native file system.</p>\n<h2>9 Integrating a Flash Device</h2>\n<p>Integrating a flash device is a relatively straight-forward process.</p>\n<p>The device is set up as a yaffs_device structure, which is then installed into Yaffs by calling the yaffs_devAdd() function.</p>\n<p>The NAND simulator can serve as an example for how to do this. The following snippet outlines the requirements. For a better description of the params and drv sub-structures refer to <a href=\"http://www.yaffs.net/yaffs-tuning-and-configuration\">http://www.yaffs.net/yaffs-tuning-and-configuration</a>.</p>\n<p>&nbsp;</p>\n<p><code>struct yaffs_dev *yramsim_CreateRamSim(...)<br />\n{<br />\n...<br />\n&nbsp; dev = malloc(sizeof(*dev));<br />\n...<br />\n&nbsp; /* First set everything to NULL. */<br />\n&nbsp; memset(dev, 0, sizeof(*dev));<br />\n&nbsp;<br />\n&nbsp; /*&nbsp;<br />\n&nbsp; &nbsp;* There are three sections to the yaffs_dev structure<br />\n&nbsp; &nbsp;* that needs to be initialised:<br />\n&nbsp; &nbsp;* * The params sub-structure which are all the control<br />\n&nbsp; &nbsp;* parameters.<br />\n&nbsp; &nbsp;* * The drv sub-structure which holds the driver functions.<br />\n&nbsp; &nbsp;* * The context which holds a private pointer (used to hold a<br />\n&nbsp; &nbsp;* driver context).<br />\n&nbsp; &nbsp;*/<br />\n&nbsp; p = &amp;dev-&gt;param;<br />\n&nbsp; p-&gt;name = strdup(name);<br />\n&nbsp; p-&gt;start_block = start_block;<br />\n&nbsp; p-&gt;end_block = end_block;<br />\n&nbsp; p-&gt;total_bytes_per_chunk = DATA_SIZE;<br />\n&nbsp; p-&gt;spare_bytes_per_chunk= SPARE_SIZE;<br />\n&nbsp; p-&gt;chunks_per_block = PAGES_PER_BLOCK;<br />\n&nbsp; p-&gt;n_reserved_blocks = 2;<br />\n&nbsp; p-&gt;use_nand_ecc = 1;<br />\n&nbsp; p-&gt;inband_tags = 0;<br />\n&nbsp; p-&gt;is_yaffs2 = 1;<br />\n&nbsp;<br />\n&nbsp; d= &amp;dev-&gt;drv;<br />\n&nbsp; d-&gt;drv_initialise_fn = yramsim_initialise;<br />\n&nbsp; d-&gt;drv_deinitialise_fn = yramsim_deinitialise;<br />\n&nbsp; d-&gt;drv_read_chunk_fn = yramsim_rd_chunk;<br />\n&nbsp; d-&gt;drv_write_chunk_fn = yramsim_wr_chunk;<br />\n&nbsp; d-&gt;drv_erase_fn = yramsim_erase;<br />\n&nbsp; d-&gt;drv_check_bad_fn = yramsim_check_block_bad;<br />\n&nbsp; d-&gt;drv_mark_bad_fn = yramsim_mark_block_bad;<br />\n&nbsp;<br />\n&nbsp; dev-&gt;driver_context= (void *)sim;<br />\n&nbsp;<br />\n&nbsp; return dev;<br />\n}<br />\n&nbsp;<br />\n&nbsp;<br />\nvoid start(void)<br />\n{<br />\n&nbsp; int result;<br />\n&nbsp; struct yaffs_dev *dev;<br />\n&nbsp;<br />\n&nbsp; printf(\"Yaffs RAMSIM started\\n\");<br />\n&nbsp;<br />\n&nbsp; /* Create and add a RAM simulator device.<br />\n&nbsp; &nbsp;* To add a different sort of device, set up the device<br />\n&nbsp; &nbsp;* and call yaffs_devAdd.<br />\n&nbsp; &nbsp;*&nbsp;<br />\n&nbsp; &nbsp;*/<br />\n&nbsp; dev = yramsim_CreateRamSim(\"/yramsim\", 0, 400, 0, 399);<br />\n&nbsp; printf(\"device is %p\\n\", dev);<br />\n&nbsp;<br />\n&nbsp; if (dev) {<br />\n&nbsp; result = yaffs_devAdd(dev);<br />\n&nbsp; printf(\"yaffs_devAdd() returned %d\\n\", result);<br />\n&nbsp; printf(\"yaffs RAM simulator now available in file system as %s\",<br />\n&nbsp; dev-&gt;param.name);<br />\n&nbsp;<br />\n}<br />\n}</code></p>\n<p>&nbsp;</p>\n<h2>10 Appendix: Running the examples on the VxWorks simulator</h2>\n<p>Once you have built the Yaffs_filesystem_driver and Yaffs_RAMSIM_device projects, you can start up Yaffs on the simulator as follows:</p>\n<ol>\n<li>Start the simulator.</li>\n<li>Load the Yaffs_filesystem_driver DKM by right clicking on the Yaffs_filesystem_driver project, then selecting Run/Debug Kernel Task...</li>\n<li>Load the Yaffs_RAMSIM_device DKM by right clicking on the Yaffs_filesystem_driver project, then selecting Run/Debug Kernel Task...</li>\n</ol>\n<p>At this stage the VxWorks console should look something like:</p>\n<pre>\n _________            _________\n\n \\77777777\\          /77777777/\n\n  \\77777777\\        /77777777/\n\n   \\77777777\\      /77777777/\n\n    \\77777777\\    /77777777/\n\n     \\77777777\\   \\7777777/\n\n      \\77777777\\   \\77777/              VxWorks 7\n\n       \\77777777\\   \\777/\n\n        \\77777777\\   \\7/     Core Kernel version: 1.0.10.2\n\n         \\77777777\\   -      Build date: Oct 13 2015 12:10:53\n\n          \\77777777\\\n\n           \\7777777/         Copyright Wind River Systems, Inc.\n\n            \\77777/   -                 1984-2015\n\n             \\777/   /7\\\n\n              \\7/   /777\\\n\n               -   -------\n\n\n              Board: SIMLINUX board\n\n     OS Memory Size: 511MB\n\n   ED&amp;R Policy Mode: Deployed\n\n        Debug Agent: Started (always)\n\n    Stop Mode Agent: Not started\n\n\nLoading symbol table from charlesqcore:/home/charles/WindRiver/workspace/VIP_1/default/vxWorks.sym ...done\n\n-&gt; \n\nYaffs file system DKM started\n\nYaffs flash devices can now be added by calling yaffs_devAdd()\n\nYaffs RAMSIM started\n\ndevice is 0x8829e010\n\nAdding Yaffs device 0x8829e010 (/yramsim)\n\nyaffs_devAdd() returned 0\n\nyaffs RAM simulator now available in file system as /yramsim</pre>\n<p>&nbsp;</p>\n<p>At this stage you should be able to see the yaffs file system is running:</p>\n<pre>\n-&gt; ls \"/yramsim\"\n\n/yramsim/lost+found \n\nvalue = 0 = 0x0\n\n-&gt; </pre>\n<p>&nbsp;</p>\n<p>If you have built the yaffs_test project, then try running that. This should show something like:</p>\n<p>&nbsp;</p>\n<pre>\nStart running Yaffs test\n\n…\n\ndump directory from pwd\n\n./lost+found inode 2 length 2048 mode 41B6 directory\n\n\nfs size: 52297728 (51072k), free 51642368 (50432k), n files 4\n\nwrite_check_test()\n\nopening a\n\nOpen of a returned 3\n\nwrite_stuff_to_file returned 100000\n\n…\n\nFinished running Yaffs test</pre>\n<p>&nbsp;</p>\n<p>Do a file listing &nbsp;again will show the file system state after running the test:</p>\n<p>&nbsp;</p>\n<pre>\n-&gt; llr \"/yramsim\"\n\n\nListing Directory /yramsim:\n\ndrwxrwxrw-  1 0       0                 2048 Nov 25 14:07 level1/\n\n-rw-rw-rw-  1 0       0                50505 Nov 25 14:07 seek-trunc \n\n-rw-rw-rw-  1 0       0               123000 Nov 25 14:07 s \n\ndrw-rw-rw-  1 0       0                 2048 Nov 25 14:06 lost+found/\n\n\nListing Directory /yramsim/level1:\n\ndrwxrwxrw-  1 0       0                 2048 Nov 25 14:07 level2/\n\n\nListing Directory /yramsim/level1/level2:\n\ndrwxrwxrw-  1 0       0                 2048 Nov 25 14:07 level3/\n\n\nListing Directory /yramsim/level1/level2/level3:\n\ndrwxrwxrw-  1 0       0                 2048 Nov 25 14:07 level4/\n\n\nListing Directory /yramsim/level1/level2/level3/level4:\n\n\nListing Directory /yramsim/lost+found:\n\nvalue = 0 = 0x0</pre>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:479\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:64:\"Yaffs for VxWorks | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:499:\"The purpose of this document is to describe the Yaffs-on-VxWorks wrapper and provide sufficient information to port Yaffs to the VxWorks BSP. It assumes a working knowledge of VxWorks.\nIt does not describe the inner workings of Yaffs, and study of other Yaffs documents is recommended. Documents shown below in Italics will be found at http://yaffs.net/documents . . .\nThe source and the definitive version of this document can be found in our git repository, together with other Yaffs documents.\";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:24:\"/documents/yaffs-vxworks\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/479\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:24:\"/documents/yaffs-vxworks\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"PD5_26w8KTKwBFCipH1lb1FpmF8a-Ef6-p0wFPG6UYoMBjmYXn5VeSiOCFj6GWbPif9A2stfuA\">\";}}}}',-1,1509019206.459,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:479 node_view rendered user:0 user:1','2746'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical315024e63eddb2a0be32b8d0d542775c2839731087677c31b3acd88b9b11dd4c:[theme]=yaffs:[timezone]=Europe/London:[url]=https://PQR8y9AKOcRqp5KT80NNdcLLfvsTh5yGNtlvhxXrT0k','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:430\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 29 Sep 2017 14:00:45 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:8145:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\n    <title>get yaffs now.png | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\n    <js-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-image navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span>get yaffs now.png</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/get-yaffs-nowpng\" class=\"image full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:8:\"node:430\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:17:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:64:\"get yaffs now.png | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:4;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:5;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:6;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:9;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:17:\"/get-yaffs-nowpng\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/430\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:17:\"/get-yaffs-nowpng\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"2IB5qSRG5m578rbtPgfIyYpRk5L32o3pJYmGKMMiJ9XXL2EXe87ixKtRMoK30SEMwYbnWut2ew\">\";}}}}',-1,1506693646.888,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:430 node_view rendered user:0 user:1','2743'),('response:[languages:language_interface]=en:[request_format]=html:[route]=entity.node.canonical3521f45a2225a2bb3316683b1631ad4c4874aff0073397c179645a775658703e:[theme]=yaffs:[timezone]=Europe/London:[url]=https://fm7dXsqFDBvCINANSI3UQKj8fyVPdRbBDidut2Ko4BI','a:5:{s:7:\"#markup\";s:0:\"\";s:9:\"#attached\";s:0:\"\";s:6:\"#cache\";a:3:{s:8:\"contexts\";a:18:{i:0;s:28:\"languages:language_interface\";i:1;s:14:\"request_format\";i:2;s:5:\"route\";i:3;s:32:\"route.menu_active_trails:account\";i:4;s:29:\"route.menu_active_trails:main\";i:5;s:30:\"route.menu_active_trails:tools\";i:6;s:5:\"theme\";i:7;s:8:\"timezone\";i:8;s:3:\"url\";i:9;s:8:\"url.path\";i:10;s:17:\"url.path.is_front\";i:11;s:15:\"url.path.parent\";i:12;s:30:\"url.query_args:_wrapper_format\";i:13;s:21:\"user.node_grants:view\";i:14;s:16:\"user.permissions\";i:15;s:10:\"user.roles\";i:16;s:20:\"user.roles:anonymous\";i:17;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"node:40\";i:44;s:9:\"node_view\";i:45;s:8:\"rendered\";i:46;s:6:\"user:0\";i:47;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:9:\"#response\";}s:9:\"#response\";O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:1:{s:8:\"no-cache\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:3:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";}s:10:\"\0*\0headers\";a:3:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:8:\"no-cache\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 27 Oct 2017 01:25:19 GMT\";}}s:15:\"\0*\0cacheControl\";a:0:{}}s:10:\"\0*\0content\";s:13279:\"<!DOCTYPE html>\n<html  lang=\"en\" dir=\"ltr\" prefix=\"content: http://purl.org/rss/1.0/modules/content/  dc: http://purl.org/dc/terms/  foaf: http://xmlns.com/foaf/0.1/  og: http://ogp.me/ns#  rdfs: http://www.w3.org/2000/01/rdf-schema#  schema: http://schema.org/  sioc: http://rdfs.org/sioc/ns#  sioct: http://rdfs.org/sioc/types#  skos: http://www.w3.org/2004/02/skos/core#  xsd: http://www.w3.org/2001/XMLSchema# \">\n  <head>\n    <head-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\n    <title>HOWTO incorporate YAFFS in Linux | Yaffs - A Flash File System for embedded use</title>\n    <css-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\n    <js-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\n  </head>\n  <body class=\"fontyourface path-node page-node-type-page navbar-is-fixed-top has-glyphicons\">\n    <a href=\"#main-content\" class=\"visually-hidden focusable skip-link\">\n      Skip to main content\n    </a>\n    <div style=\"background-color: ; color: \" id=\"environment-indicator\">\n  \n    </div>\n\n              <header class=\"navbar navbar-default navbar-fixed-top\" id=\"navbar\" role=\"banner\">\n              <div class=\"container\">\n            <div class=\"navbar-header\">\n          <div class=\"region region-navigation\">\n          <a class=\"logo navbar-btn pull-left\" href=\"/\" title=\"Home\" rel=\"home\">\n      <img src=\"/themes/custom/yaffs/logo.svg\" alt=\"Home\" />\n    </a>\n      \n  </div>\n\n                          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n              </div>\n\n                    <div id=\"navbar-collapse\" class=\"navbar-collapse collapse\">\n            <div class=\"region region-navigation-collapsible\">\n    <nav role=\"navigation\" aria-labelledby=\"block-mainnavigation-menu\" id=\"block-mainnavigation\">\n            <h2 class=\"sr-only\" id=\"block-mainnavigation-menu\">Main navigation</h2>\n\n      \n              <ul class=\"menu nav navbar-nav\">\n                            <li>\n        <a href=\"/\" data-drupal-link-system-path=\"&lt;front&gt;\">Home</a>\n                  </li>\n                        <li>\n        <a href=\"/support\" title=\"Help for Yaffs\" data-drupal-link-system-path=\"node/380\">Support</a>\n                  </li>\n                        <li>\n        <a href=\"/documents\" data-drupal-link-system-path=\"documents\">Documents</a>\n                  </li>\n                        <li>\n        <a href=\"/get-yaffs\" data-drupal-link-system-path=\"node/382\">Download</a>\n                  </li>\n                        <li>\n        <a href=\"/about-us\" data-drupal-link-system-path=\"node/325\">About us</a>\n                  </li>\n                        <li>\n        <a href=\"/contact\" data-drupal-link-system-path=\"node/73\">Contact</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n<div class=\"search-block-form block block-search block-search-form-block\" data-drupal-selector=\"search-block-form\" id=\"block-searchform\" role=\"search\">\n  \n    \n      <form action=\"/search/node\" method=\"get\" id=\"search-block-form\" accept-charset=\"UTF-8\">\n  <div class=\"form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group\">\n      <label for=\"edit-keys\" class=\"control-label sr-only\">Search</label>\n  \n  \n  <div class=\"input-group\"><input title=\"Enter the terms you wish to search for.\" data-drupal-selector=\"edit-keys\" class=\"form-search form-control\" placeholder=\"Search\" type=\"search\" id=\"edit-keys\" name=\"keys\" value=\"\" size=\"15\" maxlength=\"128\" data-toggle=\"tooltip\" /><span class=\"input-group-btn\"><button type=\"submit\" value=\"Search\" class=\"button js-form-submit form-submit btn-primary btn icon-only\" name=\"\"><span class=\"sr-only\">Search</span><span class=\"icon glyphicon glyphicon-search\" aria-hidden=\"true\"></span></button></span></div>\n\n  \n  \n  </div>\n<div class=\"form-actions form-group js-form-wrapper form-wrapper\" data-drupal-selector=\"edit-actions\" id=\"edit-actions\"></div>\n\n</form>\n\n  </div>\n\n  </div>\n\n        </div>\n                    </div>\n          </header>\n  \n  <div role=\"main\" class=\"main-container container js-quickedit-main-content\">\n    <div class=\"row\">\n\n            \n            \n                  <section class=\"col-sm-12\">\n\n                                      <div class=\"highlighted\">  <div class=\"region region-highlighted\">\n      \n<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\n\n  </div>\n</div>\n                  \n                \n                \n                                      \n                  \n                          <a id=\"main-content\"></a>\n            <div class=\"region region-content\">\n        <h1 class=\"page-header\"><span property=\"schema:name\">HOWTO incorporate YAFFS in Linux</span>\n</h1>\n\n<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>  <article role=\"article\" about=\"/archives/howto-incorporate-yaffs-linux\" typeof=\"schema:WebPage\" class=\"page is-sticky full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"HOWTO incorporate YAFFS in Linux\" class=\"hidden\"></span>\n\n\n  \n  <div class=\"content\">\n    \n            <div property=\"schema:text\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h1>Brief HOWTO on incorporating yaffs as a root fs.</h1>\n<h4>By N C Bane &lt;<a href=\"denied:mailto:nick@cecomputing.co.uk\">nick@cecomputing.co.uk</a>&gt;</h4>\n<h3>Document status</h3>\n<p>This document is very much work in progress. It currently refers to YAFFS1 and needs updating for YAFFS2. It has been edited by different people with no attempt to keep a consistent style. Beauty will come with age. </p>\n<h2>What is yaffs?</h2>\n<p>Yaffs stands for Yet Another Flash Filing System. </p>\n<p>It is a journaling filesystem designed to run on NAND flash with special reference to embedded systems. </p>\n<h2>Why would I want to use it?</h2>\n<p>NAND flash (SmartMedia cards are repackaged raw NAND chips) is cheap and has a fast erase time as compared with NOR flash. </p>\n<p>The NAND physical interface is very simple. </p>\n<p>The small size and low current requirements make it very suitable for embedded systems. </p>\n<p>However, NAND has its problems. These are mainly due to bad block management as blocks of memory can be bad when the device is shipped and further blocks can become unusable over time. </p>\n<p>Power can die unpredictably in embedded systems leading to data loss and possibly file system corruption. </p>\n<p>This is where yaffs comes in; it handles bad blocks and uses formats which are resistant to corruption. </p>\n<h2>What do I need to know?</h2>\n<p>It is assumed that the reader has a development system with direct access to NAND flash (ie not a CF/SmartMedia adaptor which). </p>\n<p>The user should be familiar with building linux kernels and patching build trees. </p>\n<p>It is strongly suggested that you also read more about NAND flash on the Linux mtd site. </p>\n<h3>Assumptions:</h3>\n<p>You have already downloaded the yaffs sources from the cvs at Aleph1. </p>\n<p>You have mtd code that exposes NAND as an mtdblock device. </p>\n<h3>Nand interface:</h3>\n<p>For yaffs to function, it must be able to be the only code that writes to the oob area on the NAND device. </p>\n<p>The existing NAND driver in kernel 2.4.19 assumes that it will do the ecc/oob management for the host fs. For yaffs, this is quite wrong. </p>\n<p>You can disable ecc/oob calculations either by hand patching the mtd code to bypass ecc calculations or by merging the latest mtd cvs. </p>\n<p>The patches at <a href=\"http://www.toby-churchill.org\">http://www.toby-churchill.org</a> have done the latter. </p>\n<h3>Including yaffs as a kernel fs:</h3>\n<p>1) Create [linux]/fs/yaffs directory in your kernel test source. </p>\n<p>2) Copy devextras.h yaffs_fs.c yaffs_gets.c yaffs_guts.h yaffs_mtdif.c yaffs_mtdif.h yaffsinterface.h and yportenv.h from the yaffs sources to that directory. </p>\n<p>3) Copy the Makefile from either the yaffs sources (Makefile.kernel) or the Balloon download site below to [linux]/fs/yaffs/Makefile. </p>\n<p>4) Modify [linux]/fs/Config.in to include the 3 lines </p>\n<p><br />\n</p>\n<p>if [ &quot;CONFIG_MTD_NAND&quot; = &quot;y&quot; ]; then </p>\n<p>tristate &quot;Yaffs filesystem on NAND&quot; CONFIG_YAFFS_FS </p>\n<p>fi </p>\n<p>5) Modify [linux]/fs/Makefile to include the yaffs fs reference </p>\n<p><br />\n</p>\n<p>subdir-$(CONFIG_YAFFS_FS) +=yaffs </p>\n<p><br />\n</p>\n<p>6) Configure the kernel to include (not modules) all the mtd nand code (incl nand_ecc and mtdblock device) and yaffs fs. </p>\n<p>You should now be able to build a kernel with yaffs as a root fs using the normal tools. </p>\n<h3>Creating a bootable yaffs partition:</h3>\n<p>You can </p>\n<p>1) Create the partition by mounting it from a running linux os and copying the data there. The mkyaffs utility in the yaffs source simply erases a NAND mtdblock device without removing bad block data. </p>\n<p>2) Make and download a filesystem image. The mkyaffsimage utility that came with the sources will create a YAFFS block list in a file from a root tree. This is a list of 512+16 byte blocks that need to be placed (in any order) on a NAND device. </p>\n<p>You will need to write code to copy these data blocks and add in the block numbers in the oob areas. </p>\n<p>Examples of a modified handhelds.org bootldr for the Balloon board can be found on the toby-churchill.org website. </p>\n<h3>Booting into yaffs:</h3>\n<p>Modify your bootloader to pass a command line to linux to specifying the mtdblock/n that refers to the root partition. </p>\n<p>&nbsp; </p>\n<p>Balloon page at <a href=\"http://www.toby-churchill.org.uk\">http://www.toby-churchill.org.uk</a> </p>\n<p>Yaffs mailing list - to join go to <a href=\"http://stoneboat.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs\">http://stoneboat.aleph1.co.uk/cgi-bin/mailman/listinfo/yaffs</a> and enter your email address </p>\n<p>Linux MTD <a href=\"http://www.linux-mtd.infradead.org/\">http://www.linux-mtd.infradead.org/</a> </p>\n<p>$Id$ </p>\n</div>\n      \n  </div>\n\n</article>\n\n\n  </div>\n\n              </section>\n\n                </div>\n  </div>\n\n      <footer class=\"footer container\" role=\"contentinfo\">\n        <div class=\"primary_footer row\">\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col1\">\n    <section id=\"block-yaffs-block-6\" class=\"block block-block-content block-block-content6c2d4b45-4dba-4b2d-8b9f-76701bf27533 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<ul class=\"fa-ul\">\n<li><i class=\"fa-li fa fa-phone\"></i>+44 (0)1223 811679</li>\n<li><i class=\"fa-li fa fa-envelope\"></i><a href=\"denied:mailto:info@aleph1.co.uk?Subject=Website contact\" target=\"_top\">info@aleph1.co.uk</a></li>\n</ul>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                \n            </div>\n            <div class=\"col-sm-3\">\n                  <div class=\"region region-footer-col4\">\n    <section id=\"block-footerlegal\" class=\"block block-block-content block-block-content78ab593d-35b6-4772-a141-30216e7fcbb2 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-right\">&nbsp;<a href=\"/legal\">Legal &amp; Cookies</a></p>\n</div>\n      \n  </section>\n\n<section id=\"block-cookieinfo\" class=\"block block-block-content block-block-content4848c58d-90df-4819-81d8-0f9568eeeaac clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p class=\"text-align-justify\"><br />\nWe use <a href=\"/legal\">cookies on this site</a>. By using it, you are giving us consent to set cookies.</p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n            </div>\n        </div>\n        <div class = \"secondary_footer row\">\n            <div class=\"col-sm-12\">\n                <div class=\"region region-footer\">\n    <nav role=\"navigation\" aria-labelledby=\"block-yaffs-account-menu-menu\" id=\"block-yaffs-account-menu\">\n            <h2 class=\"sr-only\" id=\"block-yaffs-account-menu-menu\">User account menu</h2>\n\n      \n              <ul class=\"menu nav navbar-nav navbar-right\">\n                            <li>\n        <a href=\"/user/login\" data-drupal-link-system-path=\"user/login\">Log in</a>\n                  </li>\n        </ul>\n  \n\n\n  </nav>\n\n  </div>\n\n            </div>\n        </div>\n    </footer>\n  \n    \n    <js-bottom-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\n  </body>\n</html>\n\";s:10:\"\0*\0version\";s:3:\"1.0\";s:13:\"\0*\0statusCode\";i:200;s:13:\"\0*\0statusText\";s:2:\"OK\";s:10:\"\0*\0charset\";N;s:23:\"\0*\0cacheabilityMetadata\";O:35:\"Drupal\\Core\\Cache\\CacheableMetadata\":3:{s:16:\"\0*\0cacheContexts\";a:17:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"route\";i:2;s:32:\"route.menu_active_trails:account\";i:3;s:29:\"route.menu_active_trails:main\";i:4;s:30:\"route.menu_active_trails:tools\";i:5;s:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:3:\"url\";i:8;s:8:\"url.path\";i:9;s:17:\"url.path.is_front\";i:10;s:15:\"url.path.parent\";i:11;s:30:\"url.query_args:_wrapper_format\";i:12;s:21:\"user.node_grants:view\";i:13;s:16:\"user.permissions\";i:14;s:10:\"user.roles\";i:15;s:20:\"user.roles:anonymous\";i:16;s:24:\"user.roles:authenticated\";}s:12:\"\0*\0cacheTags\";a:48:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:15:\"block_content:7\";i:3;s:18:\"block_content_view\";i:4;s:10:\"block_view\";i:5;s:32:\"config:block.block.choosingyaffs\";i:6;s:29:\"config:block.block.cookieinfo\";i:7;s:32:\"config:block.block.downloadyaffs\";i:8;s:30:\"config:block.block.footerlegal\";i:9;s:39:\"config:block.block.frontimagehighlight2\";i:10;s:32:\"config:block.block.frontpagehero\";i:11;s:39:\"config:block.block.frontpageprimeryaffs\";i:12;s:33:\"config:block.block.mainnavigation\";i:13;s:35:\"config:block.block.mainnavigation_2\";i:14;s:29:\"config:block.block.searchform\";i:15;s:31:\"config:block.block.sitebranding\";i:16;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:17;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:18;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:19;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:20;s:37:\"config:block.block.yaffs_account_menu\";i:21;s:33:\"config:block.block.yaffs_block_10\";i:22;s:32:\"config:block.block.yaffs_block_5\";i:23;s:32:\"config:block.block.yaffs_block_6\";i:24;s:32:\"config:block.block.yaffs_block_8\";i:25;s:32:\"config:block.block.yaffs_block_9\";i:26;s:36:\"config:block.block.yaffs_breadcrumbs\";i:27;s:32:\"config:block.block.yaffs_content\";i:28;s:29:\"config:block.block.yaffs_help\";i:29;s:36:\"config:block.block.yaffs_local_tasks\";i:30;s:33:\"config:block.block.yaffs_messages\";i:31;s:35:\"config:block.block.yaffs_page_title\";i:32;s:32:\"config:block.block.yaffs_user_21\";i:33;s:31:\"config:block.block.yaffsinspace\";i:34;s:17:\"config:block_list\";i:35;s:24:\"config:color.theme.yaffs\";i:36;s:30:\"config:filter.format.full_html\";i:37;s:29:\"config:filter.format.raw_html\";i:38;s:22:\"config:search.settings\";i:39;s:26:\"config:system.menu.account\";i:40;s:23:\"config:system.menu.main\";i:41;s:24:\"config:system.menu.tools\";i:42;s:18:\"config:system.site\";i:43;s:7:\"node:40\";i:44;s:9:\"node_view\";i:45;s:6:\"user:0\";i:46;s:6:\"user:1\";i:47;s:8:\"rendered\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:6:{s:7:\"library\";a:9:{i:0;s:14:\"core/html5shiv\";i:1;s:11:\"system/base\";i:2;s:15:\"bootstrap/theme\";i:3;s:20:\"yaffs/global-styling\";i:4;s:23:\"yaffs/bootstrap-scripts\";i:5;s:19:\"yaffs/yaffs-helpers\";i:6;s:17:\"bootstrap/popover\";i:7;s:17:\"bootstrap/tooltip\";i:8;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:18:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:5:\"title\";s:7:\"content\";s:79:\"HOWTO incorporate YAFFS in Linux | Yaffs - A Flash File System for embedded use\";}}i:1;s:5:\"title\";}i:1;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:13:\"news_keywords\";s:7:\"content\";s:17:\"Flash File System\";}}i:1;s:13:\"news_keywords\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:11:\"description\";s:7:\"content\";s:129:\"Simple HOWTO for getting started with YAFFS and using it as a root filesystem. If you just want the quick start info - read this.\";}}i:1;s:11:\"description\";}i:3;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"abstract\";s:7:\"content\";s:352:\"Yaffs (Yet Another Flash File System) is an open-source file system specifically designed to be fast, robust and suitable for embedded use with NAND and NOR Flash. It is widely used with Linux, RTOSs, or no OS at all, in consumer devices and critical infrastructure. It is available under GNU Public License, GPL, or on commercial terms from Aleph One.\";}}i:1;s:8:\"abstract\";}i:4;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"keywords\";s:7:\"content\";s:82:\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\";}}i:1;s:8:\"keywords\";}i:5;a:2:{i:0;a:3:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:1:{s:7:\"charset\";s:5:\"utf-8\";}s:7:\"#weight\";i:-1000;}i:1;s:24:\"system_meta_content_type\";}i:6;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:9:\"Generator\";s:7:\"content\";s:33:\"Drupal 8 (https://www.drupal.org)\";}}i:1;s:21:\"system_meta_generator\";}i:7;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:15:\"MobileOptimized\";s:7:\"content\";s:5:\"width\";}}i:1;s:15:\"MobileOptimized\";}i:8;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:16:\"HandheldFriendly\";s:7:\"content\";s:4:\"true\";}}i:1;s:16:\"HandheldFriendly\";}i:9;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:2:{s:4:\"name\";s:8:\"viewport\";s:7:\"content\";s:37:\"width=device-width, initial-scale=1.0\";}}i:1;s:8:\"viewport\";}i:10;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1151\";}i:11;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:124:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1152\";}i:12;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:122:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1153\";}i:13;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:123:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1149\";}i:14;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:129:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1150\";}i:15;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:125:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1148\";}i:16;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:126:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1147\";}i:17;a:2:{i:0;a:3:{s:5:\"#type\";s:8:\"html_tag\";s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:3:{s:3:\"rel\";s:10:\"stylesheet\";s:4:\"href\";s:128:\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\";s:5:\"media\";s:3:\"all\";}}i:1;s:21:\"fontsquirrel-api-1154\";}}s:14:\"html_head_link\";a:4:{i:0;a:1:{i:0;a:3:{s:3:\"rel\";s:13:\"shortcut icon\";s:4:\"href\";s:38:\"/sites/default/files/yaffs_favicon.png\";s:4:\"type\";s:9:\"image/png\";}}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:39:\"/archives/howto-incorporate-yaffs-linux\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:8:\"/node/40\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:39:\"/archives/howto-incorporate-yaffs-linux\";}i:1;b:1;}}s:12:\"placeholders\";a:2:{s:210:\"<drupal-render-placeholder callback=\"Drupal\\block\\BlockViewBuilder::lazyBuilder\" arguments=\"0=yaffs_local_tasks&amp;1=full&amp;2\" token=\"w23j7iE363xxUJCXKAtJQdcjG4ZZoQ4QEIV26-ZdK5w\"></drupal-render-placeholder>\";a:2:{s:6:\"#cache\";a:4:{s:4:\"keys\";a:3:{i:0;s:11:\"entity_view\";i:1;s:5:\"block\";i:2;s:17:\"yaffs_local_tasks\";}s:8:\"contexts\";a:3:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:10:\"block_view\";i:1;s:36:\"config:block.block.yaffs_local_tasks\";}s:7:\"max-age\";i:-1;}s:13:\"#lazy_builder\";a:2:{i:0;s:42:\"Drupal\\block\\BlockViewBuilder::lazyBuilder\";i:1;a:3:{i:0;s:17:\"yaffs_local_tasks\";i:1;s:4:\"full\";i:2;N;}}}s:190:\"<drupal-render-placeholder callback=\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\" arguments=\"0\" token=\"_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA\"></drupal-render-placeholder>\";a:1:{s:13:\"#lazy_builder\";a:2:{i:0;s:57:\"Drupal\\Core\\Render\\Element\\StatusMessages::renderMessages\";i:1;a:1:{i:0;N;}}}}s:14:\"drupalSettings\";a:2:{s:9:\"bootstrap\";a:25:{s:28:\"forms_has_error_value_toggle\";i:1;s:15:\"modal_animation\";i:1;s:14:\"modal_backdrop\";s:4:\"true\";s:14:\"modal_keyboard\";i:1;s:10:\"modal_show\";i:1;s:10:\"modal_size\";s:0:\"\";s:15:\"popover_enabled\";i:1;s:17:\"popover_animation\";i:1;s:17:\"popover_container\";s:4:\"body\";s:15:\"popover_content\";s:0:\"\";s:13:\"popover_delay\";s:1:\"0\";s:12:\"popover_html\";i:0;s:17:\"popover_placement\";s:5:\"right\";s:16:\"popover_selector\";s:0:\"\";s:13:\"popover_title\";s:0:\"\";s:15:\"popover_trigger\";s:5:\"click\";s:25:\"popover_trigger_autoclose\";i:1;s:15:\"tooltip_enabled\";i:1;s:17:\"tooltip_animation\";i:1;s:17:\"tooltip_container\";s:4:\"body\";s:13:\"tooltip_delay\";s:1:\"0\";s:12:\"tooltip_html\";i:0;s:17:\"tooltip_placement\";s:9:\"auto left\";s:16:\"tooltip_selector\";s:0:\"\";s:15:\"tooltip_trigger\";s:5:\"hover\";}s:14:\"ajaxTrustedUrl\";a:1:{s:12:\"/search/node\";b:1;}}s:37:\"html_response_attachment_placeholders\";a:4:{s:6:\"styles\";s:100:\"<css-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\";s:7:\"scripts\";s:99:\"<js-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\";s:14:\"scripts_bottom\";s:106:\"<js-bottom-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\";s:4:\"head\";s:101:\"<head-placeholder token=\"QB3s__ZHBAA8IA4hV_H4brqsiGGztqQXb0BGDVAUy_rwWlfP_EPab4rjtacfOVCBHno3ibZ0Eg\">\";}}}}',-1,1509067519.385,1,'block_content:18 block_content:23 block_content:7 block_content_view block_view config:block.block.choosingyaffs config:block.block.cookieinfo config:block.block.downloadyaffs config:block.block.footerlegal config:block.block.frontimagehighlight2 config:block.block.frontpagehero config:block.block.frontpageprimeryaffs config:block.block.mainnavigation config:block.block.mainnavigation_2 config:block.block.searchform config:block.block.sitebranding config:block.block.views_block__highlighted_yaffs_features_block_1 config:block.block.views_block__yaffs_admin_recent_content_block_1 config:block.block.views_block__yaffs_documents_highlights_block_1 config:block.block.views_block__yaffs_user_logos_block_1 config:block.block.yaffs_account_menu config:block.block.yaffs_block_10 config:block.block.yaffs_block_5 config:block.block.yaffs_block_6 config:block.block.yaffs_block_8 config:block.block.yaffs_block_9 config:block.block.yaffs_breadcrumbs config:block.block.yaffs_content config:block.block.yaffs_help config:block.block.yaffs_local_tasks config:block.block.yaffs_messages config:block.block.yaffs_page_title config:block.block.yaffs_user_21 config:block.block.yaffsinspace config:block_list config:color.theme.yaffs config:filter.format.full_html config:filter.format.raw_html config:search.settings config:system.menu.account config:system.menu.main config:system.menu.tools config:system.site node:40 node_view rendered user:0 user:1','2746'),