('entity_view:node:466:search_result:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:24893:\"<span>Considerations in Choosing a Flash File System</span>\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/ConsiderationsInChoosingAFlashFileSystem_0.pdf\" type=\"application/pdf; length=131376\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">ConsiderationsInChoosingAFlashFileSystem.pdf</a></span><span class=\"file-size\">128.3 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>We have been developing flash file system for embedded systems since 1995. During that time, we have gained a wealth of knowledge and experience.</p>\n<p>This document outlines some of the major issues that must be considered when selecting a Flash File system for embedded use. It also explains how using the Yaffs File System increases reliability, reduces risk and saves money.</p>\n<h1 class=\"western\" style=\"page-break-before: always\">Introduction</h1>\n<p>As embedded system complexity increases and flash storage prices decrease, we see more use of embedded file systems to store data, and so data corruption and loss has become an important cause of system failure.</p>\n<p>When Aleph One began the development of Yaffs in late 2001, we built on experience in flash file system design since 1995. This experience helped to identify the key factors in making Yaffs a fast and robust flash file system now being widely used around the world.</p>\n<p>Although it was originally developed for Linux, Yaffs was designed to be highly portable. This has allowed Yaffs to be ported to many different OSs (including Linux, BSD, Windows CE) and numerous RTOSs (including VxWorks, eCos and pSOS).</p>\n<p>Yaffs is written in fully portable C code and has been used on many different CPU architectures – both little- and big-endian. These include ARM, x86 and PowerPC, soft cores such as NIOS and Microblaze and even various DSP architectures.</p>\n<p>We believe that the Yaffs code base has been used on more OS types and more CPU types than any other file system code base.</p>\n<p>Since its introduction, Yaffs has been used in hundreds of different products and hundreds of millions of different devices in widely diverse application areas from mining to aerospace and everything in between.</p>\n<p>Specific examples include:</p>\n<ul>\n<li>\n<p>communications (two-way radios and infrastructure, mobile phones, cell towers, modems, routers...)</p>\n </li>\n<li>\n<p>retail (point of sale, inventory control...)</p>\n </li>\n<li>\n<p>entertaiment (video cameras, TV sets, DVD players, set-top boxes...)</p>\n </li>\n<li>\n<p>sewing machines and office copiers</p>\n </li>\n<li>\n<p>industrial equipment (PLCs, machinery control...)</p>\n </li>\n<li>\n<p>construction/surveying equipment (theodolites, machinery control...)</p>\n </li>\n<li>\n<p>avionics and satellite equipment</p>\n </li>\n<li>\n<p>transport (bus, train and traffic-signal management/information systems...)</p>\n </li>\n<li>\n<p>and many more.</p>\n </li>\n</ul>\n<p><br />\n<br />\n</p>\n<p><i><b>You may be using Yaffs every day without even realising it.</b></i></p>\n<p><i><b>We have a gratifying number of repeat customers for licences.</b></i></p>\n<h1 class=\"western\"><br />\n<br />\n</h1>\n<h1 class=\"western\" style=\"page-break-before: always\">Do Embedded Systems have different file system needs?</h1>\n<p>To answer this question, we really have to start by asking a slightly different question:</p>\n<p><i>How are embedded systems different than regular computers?</i></p>\n<p style=\"font-style: normal\">When a customer buys a regular computer system, they go shopping for a computer. They talk to the salesperson about Gigabytes, Megahertz and operating systems. They treat it as a computer and expect it to behave like a computer (including shutting it down properly and occasionally having file system problems or needing upgrades).</p>\n<p style=\"font-style: normal\">When they buy a fancy sewing machine, it probably has an embedded file system controlling it. The customer went shopping for a sewing machine and bought a computer that they don\'t even know about. They don\'t treat it like a computer, but like a sewing machine; they certainly do not expect it to have file system problems.</p>\n<h4 class=\"western\">How people treat computers differently from embedded systems</h4>\n<table cellpadding=\"4\" style=\"page-break-inside: avoid; width: 100%; border-spacing: 0px;\">\n<col width=\"85*\" /> <col width=\"85*\" /> <col width=\"85*\" />\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\"><b>Issue</b></span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\"><b>Computer</b></span></p>\n  </td>\n <td style=\"border: 1px solid #000000; padding: 0.1cm; width: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\"><b>Embedded system</b></span></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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Shut down</span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">User expects to do a clean shut down.</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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">User just unplugs device.</span></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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Reinstalling software</span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Users expect to have to deal with corruption and reinstall software occasionally.</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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Users do not expect to deal with upgrades or data loss or corruption.</span></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: 33%; height: 11px;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Software Upgrade Failure</span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Annoying</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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Can be devastating</span></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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Attitude to data loss</span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Annoying, but expected</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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">System has failed.</span></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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Cost of failure</span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Relatively minor</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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Can shut down factory or even cause injury/death.</span></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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Delayed boot due to file system recovery</span></p>\n  </td>\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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Annoying, but expected.</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: 33%;\">\n <p><span style=\"font-size: 11pt; font-size: small; font-size: small;\">This is as bad as a failure.</span></p>\n  </td>\n</tr>\n</table>\n<p style=\"font-style: normal\"><br />\n<br />\n</p>\n<p>So people have different attitudes to computers and embedded systems. As a result, embedded systems need to be designed differently from computers. That is particularly important with reliability issues.</p>\n<p style=\"margin-bottom: 0.01cm\"><i><b>Data corruption is a leading cause of embedded system failure, </b></i> </p>\n<p style=\"margin-bottom: 0.01cm\"><i><b>product returns and warranty costs.</b></i> </p>\n<p style=\"margin-bottom: 0.01cm\"><br />\n<br />\n</p>\n<p>The differences outlined above show some of the reasons why embedded systems must perform differently to regular computers, particularly in the way data storage is handled. These examples allow us to identify some very important product-level criteria for embedded file systems:</p>\n<ul>\n<li>\n<p>High resilience against data corruption, particularly in the event of power loss.</p>\n </li>\n<li>\n<p>Prompt file system recovery after power loss - no excessive time penalty</p>\n </li>\n<li>\n<p>Simple data integrity model to ensure data is not compromised.</p>\n </li>\n</ul>\n<p>Of course we also want the embedded file system to have some other very useful features:</p>\n<ul>\n<li>\n<p>High read/write performance with low latency.</p>\n </li>\n<li>\n<p>Familiar programming models to facilitate development.</p>\n </li>\n<li>\n<p>Proven track record to reduce risk.</p>\n </li>\n<li>\n<p>Full source code access to aid development.</p>\n </li>\n<li>\n<p>Portability to provide a future-proof solution for new products.</p>\n </li>\n</ul>\n<p><i><b>Selecting an appropriate file system is crucial to product success.</b></i></p>\n<h1 class=\"western\" style=\"page-break-before: always\">Why does power failure corrupt data?</h1>\n<p>Most power fail data loss in a File System is caused through two mechanisms:</p>\n<ul>\n<li>\n<p>Corruption of allocation tables </p>\n </li>\n<li>\n<p>Loss of cached data that was not yet written to the flash.</p>\n </li>\n</ul>\n<h2 class=\"western\">Corruption of allocation tables and similar structures.</h2>\n<p>Most file systems have allocation tables, bitmaps or similar structures which hold pointers showing which parts of the file storage medium are being used and which parts of which file are stored there. These tables are critical to looking up files and data in the file system. If they are corrupted, then files and data become corrupted. In the most dramatic cases, table corruption can destroy the whole system. </p>\n<p>Some file systems make these tables more robust by keeping two copies, or by using journaling (which keeps a short log of changes, allowing the tables to be fixed up if the table changing gets interrupted) but this causes extra writes to the media, making the file system slower.</p>\n<p>These tables are typically updated many times during writing any file, so there are multiple opportunities for the tables to be corrupted or left in an inconsistent state due to a power loss.</p>\n<p>If power is interrupted at a critical point, then some restoration (such as Microsoft chkdsk or booting in <span style=\"font-style: normal\">safe mode</span>) is often required to try to restore the tables. This may be automatic, but then system start-up is delayed.</p>\n<p>Yaffs is very different; it is a log structured file system which writes tagged data to the flash, and does not store allocation tables or such.</p>\n<p><i><b>If it isn\'t even stored, it can\'t be corrupted!</b></i></p>\n<p>This has three dramatic effects:</p>\n<ul>\n<li>\n<p>Yaffs has no tables, so is immune to these failure modes.</p>\n </li>\n<li>\n<p>There are no extra tables to be written, so Yaffs does not have to resort to caching to achieve good performance.</p>\n </li>\n<li>\n<p>Fewer flash writes means less flash wear, improving product life and reducing power consumption.</p>\n </li>\n</ul>\n<p>When a Yaffs file system is booted, the normal boot up sequence takes care of building up system state. There is thus no need for any special restoration code to be run. A boot up after a power failure is not a special recovery condition, it is just a normal boot up.</p>\n<p><i><b>Yaffs does not have, or need, special recovery handling.</b></i></p>\n<h2 class=\"western\" style=\"page-break-after: avoid\"><span style=\"font-family: Liberation Sans, sans-serif;\"><i><b>Trade-off in cached data</b></i></span></h2>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\">File systems tend to be inefficient in the way they write data. Writing just one file requires many changes to the allocation tables; writing many files requires far more changes, often to those same tables. By delaying those writes and holding data in RAM briefly the file system can do fewer writes to achieve the same set of changes. This can improve write speed, at a price.</span></span></p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Data which has not been written but just cached in RAM is vulnerable while it is there; it can all be lost if power fails, even including some that the FS had apparently written already.</span></span></p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Most file systems support functions to reduce this inefficiency and force the cache to be written out, but this may take many seconds, leaving a significant period of vulnerability, and delaying system operations. Excessive use of these functions to improve reliability will typically impair write performance.</span></span></p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\">A particularly serious example of critical data loss can occur if power or communication fails during a firmware upgrade. Such a failure cripples the product, which must be returned for servicing. Yaffs has caching policies and data integrity models which make it easier to avoid this kind of fatal failure, and which have been tested very extensively. </span></span> </p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\">Since Yaffs is inherently faster and simpler, it does not need deep caching. The Yaffs cache is small and used only for data alignment purposes and improving the throughput of very small reads and writes. Yaffs files are always flushed from the cache when they are closed. Yaffs also provides its own cache-flushing functions, but these are very fast because the cache is small.</span></span></p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\"><i><b>By the time Yaffs closes a file, all the data is guaranteed to be safe on the flash.</b></i></span></span></p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\">This simple caching policy makes it very easy for programmers to write software that is robust against power loss and avoids obscure failure modes. The simplicity confers more reliable operation, faster product development and huge savings in development and maintenance costs.</span></span></p>\n<p><span style=\"font-family: Liberation Sans, sans-serif;\"><span style=\"font-size: 11pt; font-size: small; font-size: small;\"><i><b>Reliable file systems pay for themselves many times over.</b></i></span></span></p>\n<h1 class=\"western\" style=\"page-break-before: always\">Product risk reduction</h1>\n<p>At first glance, a file system seems like it should be a simple body of code: just a few functions that read, write data and look things up by name. However, the reality is much more complex than that.</p>\n<p>One of the most challenging aspects of file systems is that errors are stored and incremental. Unlike most software errors which can be cleared by a reset, storage errors are persistent.</p>\n<p><i><b>A reboot will typically not fix file-system errors.</b></i></p>\n<p>Customers might tolerate a product that needs to be reset once in a while, but file system failures are often fatal. As a result, file system issues can be very damaging to long-term product reliability.</p>\n<p>This is further complicated by flash memory. NAND flash is the only type of semiconductor hardware which leaves the factory with known variable errors, expecting the file system software to handle the problems.</p>\n<p>Flash, NAND in particular, has its own failure modes and these are best handled by a file system specifically designed for NAND.</p>\n<p><i><b>Yaffs was specifically designed to use with NAND and NOR flash chips.</b></i></p>\n<p>Flash memory chip errors may only show up after the product has been used a while, or in a fraction of the flash parts. Typical testing during development (e.g. bench testing) will often fail to expose all types of flash chip error, and others will only be exposed during pilot- or early-production. These put release dates at risk, which can cause huge revenue losses.</p>\n<p>We have a few clients who only determined that they had file system issues when they did a pilot run. That prompted them to try Yaffs and get their products shipping. While we are glad they ended up with a good product, unfortunately they lost revenue and customer goodwill.</p>\n<p><i><b>Finding problems late in development creates business risk.</b></i></p>\n<p>It is thus not surprising that much of our business is repeat business. </p>\n<h1 class=\"western\" style=\"page-break-before: always\">Yaffs testing</h1>\n<p>Testing on its own does not create good software but it does help to verify that the software is working correctly.</p>\n<p>Yaffs has many automated tests that are run on a regular basis. Automated tests allow the testing to be run without human intervention, thus allowing more testing to be done.</p>\n<p>The tests are too numerous to discuss completely (see the Further Information below). W<span style=\"font-weight: normal\">e</span> highlight one: the power-fail stress test.</p>\n<p>The power-fail stress test is a test harness that uses software simulations of flash devices and some software and scripts to simulate the effects of removing power from a Yaffs-based system <span style=\"font-weight: normal\">while it is writing</span> to flash. This test is normally run for 100,0000 to 1 million power-fail simulation cycles, taking many days.</p>\n<p>This particular test suite was originally developed in 2008 during the development of some new features. The tests are very rigorous. In the beginning, this test suite would find a problem after less than 100 power fail iterations. As we identified and fixed the bugs, this number crept up and we now run millions of cycles without seeing a single problem.</p>\n<p><i><b>Yaffs survives millions of power failures in simulation test benches.</b></i></p>\n<p>In addition, many of our clients have also run hardware power failure tests, using a relay and a micro-controller to kill power to the device under test. They have been very satisfied with the results.</p>\n<p style=\"margin-bottom: 0cm; orphans: 0; widows: 0; page-break-before: auto\"><br />\n</p>\n<p><span style=\"font-size: 16pt; font-size: large; font-size: large;\"><b>Licensing</b></span></p>\n<p>Yaffs is available under GNU Public License V2, GPL2, from our git repository at <a href=\"http://www.yaffs.net/\">www.yaffs.net</a>. You may use that code for testing free of charge and for as long as you want.</p>\n<p style=\"font-weight: normal\"><i>You will be using it under the conditions of GPL2 with the obligation to release your associated source code when you start to sell or distribute a product.</i></p>\n<p style=\"font-weight: normal\"><i>We can then sell you a Licence to use Yaffs which removes that obligation and protects your intellectual property.</i></p>\n<p><i><b>With Yaffs you can try before you buy!</b></i></p>\n<h1 class=\"western\">Conclusions</h1>\n<p>Selecting a robust flash file system is key to :</p>\n<ul>\n<li>\n<p>building a successful product.</p>\n </li>\n<li>\n<p>reducing risk, warranty costs and liability.</p>\n </li>\n<li>\n<p>reducing development costs.</p>\n </li>\n</ul>\n<p><i><b>Yaffs has proven itself and can pay for itself many times over.</b></i></p>\n<h1 class=\"western\">Further information</h1>\n<p>This document is intentionally brief. There are many documents at <a href=\"http://www.yaffs.net/\">http://www.yaffs.net</a> for those that want more information, including:</p>\n<p><b>How Yaffs Works:</b> detailed description of internal design.</p>\n<p><b>Yaffs Robustness and Testing:</b> how we know Yaffs handles various flash failure scenarios.</p>\n<p><br />\n<br />\n</p>\n<p>For further information please contact <a href=\"denied:mailto:info@yaffs.net\">info@yaffs.net</a> or access <a href=\"http://www.yaffs.net/\">http://www.yaffs.net</a></p>\n</div>\n      \";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:29:\"config:filter.format.raw_html\";i:1;s:7:\"file:77\";i:2;s:8:\"node:466\";i:3;s:9:\"node_view\";}s:7:\"max-age\";i:-1;}}',-1,1505489905.999,1,'config:filter.format.raw_html file:77 node:466 node_view rendered','282'),('entity_view:node:466:search_result:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"466\";i:3;s:13:\"search_result\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:29:\"config:filter.format.raw_html\";i:1;s:7:\"file:77\";i:2;s:8:\"node:466\";i:3;s:9:\"node_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505489905.991,1,'config:filter.format.raw_html file:77 node:466 node_view rendered','282'),('entity_view:node:466:teaser:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1821:\"<article role=\"article\" about=\"/documents/considerations-choosing-flash-file-system\" class=\"paper is-promoted teaser clearfix\">\n\n  \n      <h2>\n      <a href=\"/documents/considerations-choosing-flash-file-system\" rel=\"bookmark\"><span>Considerations in Choosing a Flash File System</span>\n</a>\n    </h2>\n    \n\n      <footer>\n      \n      <div class=\"author\">\n        Submitted by <span><span lang=\"\" about=\"/user/laurie\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Laurie</span></span>\n on <span>28 May, 2014 - 1:53pm</span>\n        \n      </div>\n    </footer>\n  \n  <div class=\"content\">\n    <ul class=\"links inline list-inline\"><li class=\"node-readmore\"><a href=\"/documents/considerations-choosing-flash-file-system\" rel=\"tag\" title=\"Considerations in Choosing a Flash File System\" hreflang=\"und\">Read more<span class=\"visually-hidden\"> about Considerations in Choosing a Flash File System</span></a></li></ul>\n            <div class=\"field field--name-field-teaser-image field--type-image field--label-hidden field--item\">  <a href=\"/documents/considerations-choosing-flash-file-system\"><img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf.png?itok=ROOk6w-T\" width=\"150\" height=\"212\" alt=\"Preview of ConsiderationsInChoosingAFlashFileSystem.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n</a>\n</div>\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">Failures in an embedded File System in a product are much more serious to the user than failures in an office computer.&nbsp; Power failures and failures to cache data properly can be avoided by choosing a FFS specifically designed for reliability from the ground up.</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:6:{i:0;s:29:\"config:filter.format.raw_html\";i:1;s:28:\"config:image.style.pdf_image\";i:2;s:8:\"file:110\";i:3;s:8:\"node:466\";i:4;s:9:\"node_view\";i:5;s:6:\"user:4\";}s:7:\"max-age\";i:-1;}}',-1,1504640549.325,1,'config:filter.format.raw_html config:image.style.pdf_image file:110 node:466 node_view rendered user:4','297'),('entity_view:node:466:teaser:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"466\";i:3;s:6:\"teaser\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:6:{i:0;s:29:\"config:filter.format.raw_html\";i:1;s:28:\"config:image.style.pdf_image\";i:2;s:8:\"file:110\";i:3;s:8:\"node:466\";i:4;s:9:\"node_view\";i:5;s:6:\"user:4\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504640549.315,1,'config:filter.format.raw_html config:image.style.pdf_image file:110 node:466 node_view rendered user:4','297'),('entity_view:node:479:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b0x2MCyBYUsr2bCSoMn0rZ6aWJBo-2qUWJarkBoHqcIAs','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:16881:\"<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\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;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:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/479\";}i:1;b:1;}i:2;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:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:479\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:31:\"<span>Yaffs for VxWorks</span>\n\";}}',-1,1504642168.719,1,'config:filter.format.full_html config:system.site node:479 node_view rendered user:1','309'),('entity_view:node:479:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"479\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:479\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504642168.687,1,'config:filter.format.full_html config:system.site node:479 node_view rendered user:1','309'),('entity_view:node:479:rss:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:16641:\"<span>Yaffs for VxWorks</span>\n<span><span lang=\"\" about=\"/user/admin\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Admin</span></span>\n<span>11 January, 2016 - 3:28pm</span>\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      \";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:479\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1504783535.549,1,'config:filter.format.full_html node:479 node_view rendered user:1','303'),('entity_view:node:479:rss:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"479\";i:3;s:3:\"rss\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:479\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504783535.525,1,'config:filter.format.full_html node:479 node_view rendered user:1','303'),('entity_view:node:479:search_result:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:16484:\"<span>Yaffs for VxWorks</span>\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      \";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:3:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:479\";i:2;s:9:\"node_view\";}s:7:\"max-age\";i:-1;}}',-1,1505188402.718,1,'config:filter.format.full_html node:479 node_view rendered','296'),('entity_view:node:479:search_result:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"479\";i:3;s:13:\"search_result\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:3:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:479\";i:2;s:9:\"node_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505188402.716,1,'config:filter.format.full_html node:479 node_view rendered','296'),('entity_view:node:479:teaser:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1642:\"<article role=\"article\" about=\"/documents/yaffs-vxworks\" class=\"paper is-promoted teaser clearfix\">\n\n  \n      <h2>\n      <a href=\"/documents/yaffs-vxworks\" rel=\"bookmark\"><span>Yaffs for VxWorks</span>\n</a>\n    </h2>\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    <ul class=\"links inline list-inline\"><li class=\"node-readmore\"><a href=\"/documents/yaffs-vxworks\" rel=\"tag\" title=\"Yaffs for VxWorks\" hreflang=\"und\">Read more<span class=\"visually-hidden\"> about Yaffs for VxWorks</span></a></li></ul>\n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>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.</p>\n<p>It does not describe the inner workings of Yaffs, and study of other Yaffs documents is recommended. Documents shown below in&nbsp;<i>Italics</i>&nbsp;will be found at&nbsp;<i><a href=\"http://yaffs.net/documents\">http://yaffs.net/documents</a> . . .</i></p>\n<p>The source and the definitive version of this document can be found in our git repository, <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</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:479\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1504640549.291,1,'config:filter.format.full_html node:479 node_view rendered user:1','303'),('entity_view:node:479:teaser:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"479\";i:3;s:6:\"teaser\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:479\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504640549.290,1,'config:filter.format.full_html node:479 node_view rendered user:1','303'),('entity_view:node:487:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.1:[url.site]=https://yaffs.net:[user.permissions]=18fcd943cd6a4b1276d3f25f62771b6a9dNpbWmZ5PWhhFNzCV_wMFY0KTyIMOq1jS08GmhHOvkeo','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:960:\"<article data-quickedit-entity-id=\"node/487\" role=\"article\" class=\"contextual-region page full clearfix\" about=\"/home\" typeof=\"schema:WebPage\">\n\n  \n    <div data-contextual-id=\"node:node=487:changed=1500985777&amp;langcode=en\"></div>  <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" class=\"hidden\"></span>\n\n\n  \n  <div class=\"content\">\n    \n            <div property=\"schema:text\" data-quickedit-field-id=\"node/487/body/en/full\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:3:{s:14:\"html_head_link\";a:10:{i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:11:\"delete-form\";s:4:\"href\";s:16:\"/node/487/delete\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"edit-form\";s:4:\"href\";s:14:\"/node/487/edit\";}i:1;b:1;}i:4;a:2:{i:0;a:2:{s:3:\"rel\";s:15:\"version-history\";s:4:\"href\";s:19:\"/node/487/revisions\";}i:1;b:1;}i:5;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}i:1;b:1;}i:6;a:2:{i:0;a:2:{s:3:\"rel\";s:17:\"book-outline-form\";s:4:\"href\";s:17:\"/node/487/outline\";}i:1;b:1;}i:7;a:2:{i:0;a:2:{s:3:\"rel\";s:16:\"book-remove-form\";s:4:\"href\";s:24:\"/node/487/outline/remove\";}i:1;b:1;}i:8;a:2:{i:0;a:2:{s:3:\"rel\";s:10:\"devel-load\";s:4:\"href\";s:15:\"/devel/node/487\";}i:1;b:1;}i:9;a:2:{i:0;a:2:{s:3:\"rel\";s:12:\"devel-render\";s:4:\"href\";s:22:\"/devel/node/487/render\";}i:1;b:1;}i:10;a:2:{i:0;a:2:{s:3:\"rel\";s:16:\"devel-definition\";s:4:\"href\";s:26:\"/devel/node/487/definition\";}i:1;b:1;}i:11;a:2:{i:0;a:2:{s:3:\"rel\";s:11:\"token-devel\";s:4:\"href\";s:21:\"/node/487/devel/token\";}i:1;b:1;}}s:7:\"library\";a:1:{i:0;s:20:\"history/mark-as-read\";}s:14:\"drupalSettings\";a:1:{s:7:\"history\";a:1:{s:17:\"nodesToMarkAsRead\";a:1:{i:487;b:1;}}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:8:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:8:\"url.site\";i:5;s:16:\"user.permissions\";i:6;s:20:\"user.roles:anonymous\";i:7;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:123:\"<span property=\"schema:name\" data-quickedit-field-id=\"node/487/title/en/full\">A Robust Flash File System Since 2002</span>\n\";}}',-1,1504628860.357,1,'config:filter.format.full_html node:487 node_view rendered user:1','306'),('entity_view:node:487:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.1:[url.site]=https://yaffs.net:[user.permissions]=306382ab744615fb554ac82b8f9e8907adbeVi2Z0aGcH3SsnjmyrSjoHiYogZVhJ8aZ2CtXvGSqg','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:960:\"<article data-quickedit-entity-id=\"node/487\" role=\"article\" class=\"contextual-region page full clearfix\" about=\"/home\" typeof=\"schema:WebPage\">\n\n  \n    <div data-contextual-id=\"node:node=487:changed=1500985777&amp;langcode=en\"></div>  <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" class=\"hidden\"></span>\n\n\n  \n  <div class=\"content\">\n    \n            <div property=\"schema:text\" data-quickedit-field-id=\"node/487/body/en/full\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:3:{s:14:\"html_head_link\";a:10:{i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:11:\"delete-form\";s:4:\"href\";s:16:\"/node/487/delete\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"edit-form\";s:4:\"href\";s:14:\"/node/487/edit\";}i:1;b:1;}i:4;a:2:{i:0;a:2:{s:3:\"rel\";s:15:\"version-history\";s:4:\"href\";s:19:\"/node/487/revisions\";}i:1;b:1;}i:5;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}i:1;b:1;}i:6;a:2:{i:0;a:2:{s:3:\"rel\";s:17:\"book-outline-form\";s:4:\"href\";s:17:\"/node/487/outline\";}i:1;b:1;}i:7;a:2:{i:0;a:2:{s:3:\"rel\";s:16:\"book-remove-form\";s:4:\"href\";s:24:\"/node/487/outline/remove\";}i:1;b:1;}i:8;a:2:{i:0;a:2:{s:3:\"rel\";s:10:\"devel-load\";s:4:\"href\";s:15:\"/devel/node/487\";}i:1;b:1;}i:9;a:2:{i:0;a:2:{s:3:\"rel\";s:12:\"devel-render\";s:4:\"href\";s:22:\"/devel/node/487/render\";}i:1;b:1;}i:10;a:2:{i:0;a:2:{s:3:\"rel\";s:16:\"devel-definition\";s:4:\"href\";s:26:\"/devel/node/487/definition\";}i:1;b:1;}i:11;a:2:{i:0;a:2:{s:3:\"rel\";s:11:\"token-devel\";s:4:\"href\";s:21:\"/node/487/devel/token\";}i:1;b:1;}}s:7:\"library\";a:1:{i:0;s:20:\"history/mark-as-read\";}s:14:\"drupalSettings\";a:1:{s:7:\"history\";a:1:{s:17:\"nodesToMarkAsRead\";a:1:{i:487;b:1;}}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:8:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:8:\"url.site\";i:5;s:16:\"user.permissions\";i:6;s:20:\"user.roles:anonymous\";i:7;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:123:\"<span property=\"schema:name\" data-quickedit-field-id=\"node/487/title/en/full\">A Robust Flash File System Since 2002</span>\n\";}}',-1,1510223891.855,1,'config:filter.format.full_html node:487 node_view rendered user:1','306'),('entity_view:node:487:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.1:[url.site]=https://yaffs.net:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dfAakzXNGprAnQTCZrVkmVMBzsBuO7iQXmk9KuxxMF_tY','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:777:\"<article role=\"article\" about=\"/home\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" 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<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:1:{i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:8:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:8:\"url.site\";i:5;s:16:\"user.permissions\";i:6;s:20:\"user.roles:anonymous\";i:7;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:74:\"<span property=\"schema:name\">A Robust Flash File System Since 2002</span>\n\";}}',-1,1504628690.097,1,'config:filter.format.full_html node:487 node_view rendered user:1','306'),('entity_view:node:487:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=18fcd943cd6a4b1276d3f25f62771b6a9dee7e45324f4ba05fe485922e155d70:[user.roles:anonymous]=is-super-user','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"487\";i:3;s:4:\"full\";}s:8:\"contexts\";a:8:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:8:\"url.site\";i:5;s:16:\"user.permissions\";i:6;s:20:\"user.roles:anonymous\";i:7;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504628860.354,1,'config:filter.format.full_html node:487 node_view rendered user:1','306'),('entity_view:node:487:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=306382ab744615fb554ac82b8f9e8907adc4fe4a2b05c5249851e41934fa227b:[user.roles:anonymous]=1','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"487\";i:3;s:4:\"full\";}s:8:\"contexts\";a:8:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:8:\"url.site\";i:5;s:16:\"user.permissions\";i:6;s:20:\"user.roles:anonymous\";i:7;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1510223891.839,1,'config:filter.format.full_html node:487 node_view rendered user:1','306'),('entity_view:node:487:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"487\";i:3;s:4:\"full\";}s:8:\"contexts\";a:8:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:8:\"url.site\";i:5;s:16:\"user.permissions\";i:6;s:20:\"user.roles:anonymous\";i:7;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504628690.084,1,'config:filter.format.full_html node:487 node_view rendered user:1','306'),('entity_view:node:487:search_result:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:596:\"<span property=\"schema:name\">A Robust Flash File System Since 2002</span>\n\n            <div property=\"schema:text\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:3:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";}s:7:\"max-age\";i:-1;}}',-1,1505630853.814,1,'config:filter.format.full_html node:487 node_view rendered','299'),('entity_view:node:487:search_result:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"487\";i:3;s:13:\"search_result\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:3:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:487\";i:2;s:9:\"node_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505630853.811,1,'config:filter.format.full_html node:487 node_view rendered','299'),('entity_view:node:489:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b0RKtoaB79nsHhGSMs660UaX7G-Zao5DpGpLfemPeQNEk','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:5321:\"<article role=\"article\" about=\"/node/489\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"Test Yaffs under Linux using Virtualbox and Vagrant\" 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<p>You can use this Vagrant box to test Yaffs.</p>\n<p>To run it you will need VirtualBox, which you can download from&nbsp;<a href=\"https://www.virtualbox.org/\">https://www.virtualbox.org/</a>&nbsp;(50 to 90MB download). To run Virtualbox you will need a PC which is capable of virtualisation. Any PC made in the since about 2006 should be capable of this, apart from notepads, and even some notepads have virtualisation.&nbsp;</p>\n<p>Follow the instructions to install VirtualBox on your system. It\'s available for Linux, Solaris, Windows and Mac.&nbsp;The Vagrant box was created using VirtualBox 4.1, but version 4.0 should be ok too if you have a problem with the 4.1 series.&nbsp;</p>\n<p>Once VirtualBox is installed you will need to download and install Vagrant. You find Vagrant at&nbsp;<a href=\"http://vagrantup.com/\">http://vagrantup.com/</a>. Download and install the latest version for your operating system from&nbsp;<a href=\"http://downloads.vagrantup.com/\">http://downloads.vagrantup.com/</a>. Vagrant is a download of between 10 and 60MB, depending on your operating system, excluding any Vagrant boxes you choose to download.&nbsp;The install instructions can be found at&nbsp;<a href=\"http://vagrantup.com/v1/docs/getting-started/index.html\">http://vagrantup.com/v1/docs/getting-started/index.html</a></p>\n<p>Now, download the <a href=\"https://docs.google.com/open?id=0ByOfch_s-hgmVmlENG80bHpwMlk\">Yaffs Vagrant box</a>, saving it to your hard drive. This is a large download - 3GB, so if you are on a slow network, you may wish to schedule it for a convenient time.</p>\n<p>After you have Vagrant installed, to test the Yaffs box, open a command line/terminal and type:</p>\n<pre style=\"padding-top: 8.5px; padding-right: 8.5px; padding-bottom: 8.5px; padding-left: 8.5px; font-family: Menlo, Monaco, \'Courier New\', monospace; font-size: 14px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 1.6em; background-color: rgb(254, 251, 243); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgba(0, 0, 0, 0.199219); border-right-color: rgba(0, 0, 0, 0.199219); border-bottom-color: rgba(0, 0, 0, 0.199219); border-left-color: rgba(0, 0, 0, 0.199219); border-image: initial; white-space: pre-wrap; word-break: break-all; word-wrap: break-word; -webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px; box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px;\"><span style=\"line-height: 1.6em;\">$ mkdir ~/yaffsprecise\n$ cd ~/yaffsprecise\n$ </span>vagrant box add yaffsprecise /wherever/you/saved/package.box\n$ vagrant init yaffsprecise\n$ vagrant up\n$ vagrant ssh</pre>\n<p>This will leave you at the command line of the Yaffs box.&nbsp;</p>\n<p>You can find the kernel and yaffs in the ~/kernel directory (i.e. /home/vagrant/kernel).</p>\n<p>You can create a Yaffs Nand Simulated drive using the following:</p>\n<pre style=\"padding-top: 8.5px; padding-right: 8.5px; padding-bottom: 8.5px; padding-left: 8.5px; font-family: Menlo, Monaco, \'Courier New\', monospace; font-size: 14px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 1.6em; background-color: rgb(254, 251, 243); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgba(0, 0, 0, 0.199219); border-right-color: rgba(0, 0, 0, 0.199219); border-bottom-color: rgba(0, 0, 0, 0.199219); border-left-color: rgba(0, 0, 0, 0.199219); border-image: initial; white-space: pre-wrap; word-break: break-all; word-wrap: break-word; -webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px; box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px;\"><span style=\"line-height: 1.6em;\">$ sudo </span><span style=\"color: rgb(34, 34, 34); line-height: 20px; text-align: justify;\">sudo modprobe nandsim first_id_byte=0xec second_id_byte=0xd3 third_id_byte=0x51 </span><span style=\"color: rgb(34, 34, 34); line-height: 20px; text-align: justify;\">fourth_id_byte=0x15\n</span><span style=\"color: rgb(34, 34, 34); line-height: 20px; text-align: justify;\">$ sudo mount -t yaffs /dev/mtdblock0 /media/nand</span></pre>\n<div>\nIn the commands above, there\'s no need to modprobe mtd or mtdblock because the Vagrant image has these compiled into the kernel.&nbsp;\n</div>\n<div>\n&nbsp;\n</div>\n<div>\nOnce you have mounted your Yaffs partition, you can experiment with writing and deleting files, watching what happens.\n</div>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:9:\"/node/489\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/489\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:9:\"/node/489\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:489\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:88:\"<span property=\"schema:name\">Test Yaffs under Linux using Virtualbox and Vagrant</span>\n\";}}',-1,1505048324.759,1,'config:filter.format.full_html config:system.site node:489 node_view rendered user:1','307'),('entity_view:node:489:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"489\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:489\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505048324.757,1,'config:filter.format.full_html config:system.site node:489 node_view rendered user:1','307'),('entity_view:node:489:search_result:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:5136:\"<span property=\"schema:name\">Test Yaffs under Linux using Virtualbox and Vagrant</span>\n\n            <div property=\"schema:text\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p>You can use this Vagrant box to test Yaffs.</p>\n<p>To run it you will need VirtualBox, which you can download from&nbsp;<a href=\"https://www.virtualbox.org/\">https://www.virtualbox.org/</a>&nbsp;(50 to 90MB download). To run Virtualbox you will need a PC which is capable of virtualisation. Any PC made in the since about 2006 should be capable of this, apart from notepads, and even some notepads have virtualisation.&nbsp;</p>\n<p>Follow the instructions to install VirtualBox on your system. It\'s available for Linux, Solaris, Windows and Mac.&nbsp;The Vagrant box was created using VirtualBox 4.1, but version 4.0 should be ok too if you have a problem with the 4.1 series.&nbsp;</p>\n<p>Once VirtualBox is installed you will need to download and install Vagrant. You find Vagrant at&nbsp;<a href=\"http://vagrantup.com/\">http://vagrantup.com/</a>. Download and install the latest version for your operating system from&nbsp;<a href=\"http://downloads.vagrantup.com/\">http://downloads.vagrantup.com/</a>. Vagrant is a download of between 10 and 60MB, depending on your operating system, excluding any Vagrant boxes you choose to download.&nbsp;The install instructions can be found at&nbsp;<a href=\"http://vagrantup.com/v1/docs/getting-started/index.html\">http://vagrantup.com/v1/docs/getting-started/index.html</a></p>\n<p>Now, download the <a href=\"https://docs.google.com/open?id=0ByOfch_s-hgmVmlENG80bHpwMlk\">Yaffs Vagrant box</a>, saving it to your hard drive. This is a large download - 3GB, so if you are on a slow network, you may wish to schedule it for a convenient time.</p>\n<p>After you have Vagrant installed, to test the Yaffs box, open a command line/terminal and type:</p>\n<pre style=\"padding-top: 8.5px; padding-right: 8.5px; padding-bottom: 8.5px; padding-left: 8.5px; font-family: Menlo, Monaco, \'Courier New\', monospace; font-size: 14px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 1.6em; background-color: rgb(254, 251, 243); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgba(0, 0, 0, 0.199219); border-right-color: rgba(0, 0, 0, 0.199219); border-bottom-color: rgba(0, 0, 0, 0.199219); border-left-color: rgba(0, 0, 0, 0.199219); border-image: initial; white-space: pre-wrap; word-break: break-all; word-wrap: break-word; -webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px; box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px;\"><span style=\"line-height: 1.6em;\">$ mkdir ~/yaffsprecise\n$ cd ~/yaffsprecise\n$ </span>vagrant box add yaffsprecise /wherever/you/saved/package.box\n$ vagrant init yaffsprecise\n$ vagrant up\n$ vagrant ssh</pre>\n<p>This will leave you at the command line of the Yaffs box.&nbsp;</p>\n<p>You can find the kernel and yaffs in the ~/kernel directory (i.e. /home/vagrant/kernel).</p>\n<p>You can create a Yaffs Nand Simulated drive using the following:</p>\n<pre style=\"padding-top: 8.5px; padding-right: 8.5px; padding-bottom: 8.5px; padding-left: 8.5px; font-family: Menlo, Monaco, \'Courier New\', monospace; font-size: 14px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; margin-top: 0px; margin-bottom: 9px; line-height: 1.6em; background-color: rgb(254, 251, 243); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgba(0, 0, 0, 0.199219); border-right-color: rgba(0, 0, 0, 0.199219); border-bottom-color: rgba(0, 0, 0, 0.199219); border-left-color: rgba(0, 0, 0, 0.199219); border-image: initial; white-space: pre-wrap; word-break: break-all; word-wrap: break-word; -webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px; box-shadow: rgba(0, 0, 0, 0.0976563) 0px 1px 2px;\"><span style=\"line-height: 1.6em;\">$ sudo </span><span style=\"color: rgb(34, 34, 34); line-height: 20px; text-align: justify;\">sudo modprobe nandsim first_id_byte=0xec second_id_byte=0xd3 third_id_byte=0x51 </span><span style=\"color: rgb(34, 34, 34); line-height: 20px; text-align: justify;\">fourth_id_byte=0x15\n</span><span style=\"color: rgb(34, 34, 34); line-height: 20px; text-align: justify;\">$ sudo mount -t yaffs /dev/mtdblock0 /media/nand</span></pre>\n<div>\nIn the commands above, there\'s no need to modprobe mtd or mtdblock because the Vagrant image has these compiled into the kernel.&nbsp;\n</div>\n<div>\n&nbsp;\n</div>\n<div>\nOnce you have mounted your Yaffs partition, you can experiment with writing and deleting files, watching what happens.\n</div>\n<p>&nbsp;</p>\n</div>\n      \";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:3:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:489\";i:2;s:9:\"node_view\";}s:7:\"max-age\";i:-1;}}',-1,1507806978.938,1,'config:filter.format.full_html node:489 node_view rendered','294'),('entity_view:node:489:search_result:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"489\";i:3;s:13:\"search_result\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:3:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:8:\"node:489\";i:2;s:9:\"node_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1507806978.936,1,'config:filter.format.full_html node:489 node_view rendered','294'),('entity_view:node:497:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b0Bq6QHx2cKPL4Sox2Yi-g95HBSWRQupeaoWakA2IqhFU','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:595:\"<article role=\"article\" about=\"/node/497\" typeof=\"schema:Article\" class=\"article full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"Test article\" 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<p>Test article.</p>\n<p>&nbsp;</p>\n<table>\n<tbody>\n <tr>\n  <td>s</td>\n  <td>s</td>\n </tr>\n <tr>\n  <td>f</td>\n  <td>d</td>\n </tr>\n <tr>\n  <td>&nbsp;</td>\n  <td>&nbsp;</td>\n </tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:9:\"/node/497\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/497\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:9:\"/node/497\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:497\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:49:\"<span property=\"schema:name\">Test article</span>\n\";}}',-1,1505395297.869,1,'config:filter.format.full_html config:system.site node:497 node_view rendered user:1','307'),('entity_view:node:497:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"497\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:497\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505395297.865,1,'config:filter.format.full_html config:system.site node:497 node_view rendered user:1','307'),('entity_view:node:498:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b0vldQvvL5DWFKcafiLFQEm8BabksSU5PA3L1X_osI2lw','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1948:\"<article role=\"article\" about=\"/commercial-licences\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"Commercial Licences\" 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\"><p>Aleph One, as owners of Yaffs, sell commercial Licences for the use of Yaffs which do <em>NOT</em> carry the obligations of GPL. (Under the GPL, if you distribute your product with Yaffs, you are required to licence your product under the GPL and make available the full source code for a small charge.)</p>\n\n<p>Commercial Yaffs licences are non-exclusive, perpetual, world-wide, royalty-free and paid for with a single fee for one product. A commercial Licence entitles you to most further development and improvement of the Yaffs code.</p>\n\n<p>Contributing modifications of Yaffs code to the mainline code does not alter its Licence status.The base price for a Licence for a single Product is GB£10,000. Sterling.</p>\n\n<p>You can find further information about Licences in these documents:</p>\n\n<ul><li><a href=\"http://localhost:8012/node/preview/bf4b0a08-7ee4-44d1-ba5a-e3565ee8f04a/yaffs-gpl\">Yaffs under GPL</a></li>\n	<li><a href=\"http://localhost:8012/node/preview/bf4b0a08-7ee4-44d1-ba5a-e3565ee8f04a/yaffs-licence-faqs\">Yaffs licensing FAQ</a></li>\n	<li><a href=\"http://localhost:8012/licences-more-background-and-detail\">Further licensing background and detail</a></li>\n	<li><a href=\"http://localhost:8012/yaffs-licence-sample\">Sample commercial licence</a></li>\n</ul><p>If you have any questions, or would like to buy a commercial licence, please contact us either at +44 (0)1223 811679 or email  sales@aleph1.co.uk  or see our Contacts page:-  <a href=\"http://www.aleph1.co.uk/contact\">http://www.aleph1.co.uk/contact</a></p></div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:20:\"/commercial-licences\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/498\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:20:\"/commercial-licences\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:498\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:56:\"<span property=\"schema:name\">Commercial Licences</span>\n\";}}',-1,1504741212.010,1,'config:filter.format.basic_html config:system.site node:498 node_view rendered user:1','275'),('entity_view:node:498:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"498\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:498\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504741211.994,1,'config:filter.format.basic_html config:system.site node:498 node_view rendered user:1','275'),('entity_view:node:501:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b0R_w1wYhuXs9OVSZ7a3FD5L3cRYjcmOkRI5iqRQ0yzmU','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1178:\"<article role=\"article\" about=\"/books/case-history\" class=\"book 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>An example of the application of Yaffs in a demanding environment</p>\n\n<p><strong>NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n\n<p>Some File Systems are not robust enough to be suitable for such exacting work.</p></div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:19:\"/books/case-history\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/501\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:19:\"/books/case-history\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:501\";i:3;s:9:\"node_view\";i:4;s:6:\"user:4\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:26:\"<span>Case history</span>\n\";}}',-1,1505692670.625,1,'config:filter.format.basic_html config:system.site node:501 node_view rendered user:4','271'),('entity_view:node:501:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"501\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:501\";i:3;s:9:\"node_view\";i:4;s:6:\"user:4\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505692670.621,1,'config:filter.format.basic_html config:system.site node:501 node_view rendered user:4','271'),('entity_view:node:502:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b052dlPYm7DGTsK_hXGJ7hv4BB5rNqpROAbNMMHufqatk','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1118:\"<article role=\"article\" about=\"/yaffs-space\" class=\"case-study 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\"><p><strong>NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n\n<p>Some File Systems are not robust enough to be suitable for such exacting work.</p></div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:12:\"/yaffs-space\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/502\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:12:\"/yaffs-space\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:502\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:29:\"<span>Yaffs in space!</span>\n\";}}',-1,1504778220.681,1,'config:filter.format.basic_html config:system.site node:502 node_view rendered user:1','275'),('entity_view:node:502:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"502\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:18:\"config:system.site\";i:2;s:8:\"node:502\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504778220.669,1,'config:filter.format.basic_html config:system.site node:502 node_view rendered user:1','275'),('entity_view:node:502:rss:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1152:\"<span>Yaffs in space!</span>\n<span><span lang=\"\" about=\"/user/admin\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Admin</span></span>\n<span>1 September, 2017 - 12:59pm</span>\n\n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p><strong>NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n\n<p>Some File Systems are not robust enough to be suitable for such exacting work.</p></div>\n      \";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:8:\"node:502\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1504783535.449,1,'config:filter.format.basic_html node:502 node_view rendered user:1','269'),('entity_view:node:502:rss:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"502\";i:3;s:3:\"rss\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:8:\"node:502\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504783535.435,1,'config:filter.format.basic_html node:502 node_view rendered user:1','269'),('entity_view:node:502:teaser:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:968:\"<article role=\"article\" about=\"/yaffs-space\" class=\"case-study is-promoted teaser clearfix\">\n\n  \n      <h2>\n      <a href=\"/yaffs-space\" rel=\"bookmark\"><span>Yaffs in space!</span>\n</a>\n    </h2>\n    \n\n  \n  <div class=\"content\">\n    <ul class=\"links inline list-inline\"><li class=\"node-readmore\"><a href=\"/yaffs-space\" rel=\"tag\" title=\"Yaffs in space!\" hreflang=\"en\">Read more<span class=\"visually-hidden\"> about Yaffs in space!</span></a></li></ul>\n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p><strong>NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p></div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:8:\"node:502\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1504640549.266,1,'config:filter.format.basic_html node:502 node_view rendered user:1','269'),('entity_view:node:502:teaser:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"502\";i:3;s:6:\"teaser\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:8:\"node:502\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504640549.264,1,'config:filter.format.basic_html node:502 node_view rendered user:1','269'),('entity_view:node:503:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b0ew7zZ8a-nXQIJgaZfdfti73VyKFFQbMg5f2f9C8e0CY','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:2438:\"<article role=\"article\" about=\"/almost-15-years-never-seen-failure\" class=\"case-study is-promoted full clearfix\">\n\n  \n    \n\n  \n  <div class=\"content\">\n    \n            <div class=\"field field--name-field-organisation field--type-string field--label-hidden field--item\">Tape Replacement Ltd</div>\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p dir=\"ltr\">The DDS range of digital data storage solutions from Tape Replacement Ltd deliver a modern, solid state data storage unit designed specifically to replace out-dated magnetic tape, magneto optical, disc hard-drive units such as those used within legacy telephone switching systems. This saves companies such as telcos, and ultimately their customers, millions of dollars in upgrade costs as well as improving overall system reliability and keeping functioning equipment from being dumped in landfills.</p>\n\n<p dir=\"ltr\">The storage layer is made up of two independent stacks of NAND chips, combined using a RAID-1 structure, using YAFFS to expose this to the application.</p>\n\n<p dir=\"ltr\">According to Andre Renaud, Engineering Manager at Tape Replacement:</p>\n\n<blockquote>\n<p dir=\"ltr\">“We\'ve been running the units for almost 15 years now, and we have never seen a failure of the underlying YAFFS/NAND storage system. YAFFS provides us with a fast, reliable storage mechanism which is especially useful given the changes in NAND technologies over the years, and the intricate technical details of their behaviour.”</p>\n</blockquote></div>\n      \n      <div class=\"field field--name-field-url field--type-link field--label-hidden field--items\">\n              <div class=\"field--item\"><a href=\"http://www.tape-replacement.com/\">http://www.tape-replacement.com/</a></div>\n          </div>\n  \n            <div class=\"field field--name-field-image field--type-image field--label-hidden field--item\">    <img srcset=\"/sites/default/files/styles/max_325x325/public/2017-09/tape_replacement.jpg?itok=HsMgXnI2 325w, /sites/default/files/styles/max_650x650/public/2017-09/tape_replacement.jpg?itok=cUoW-9yU 555w\" sizes=\"(min-width: 1290px) 325px, (min-width: 851px) 25vw, (min-width: 560px) 50vw, 100vw\" src=\"/sites/default/files/styles/max_325x325/public/2017-09/tape_replacement.jpg?itok=HsMgXnI2\" alt=\"Tape Replacement Ltd Logo\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:2:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:35:\"/almost-15-years-never-seen-failure\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:9:\"/node/503\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:35:\"/almost-15-years-never-seen-failure\";}i:1;b:1;}}s:7:\"library\";a:1:{i:0;s:16:\"core/picturefill\";}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:9:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:32:\"config:image.style.max_1300x1300\";i:2;s:30:\"config:image.style.max_325x325\";i:3;s:30:\"config:image.style.max_650x650\";i:4;s:37:\"config:responsive_image.styles.narrow\";i:5;s:18:\"config:system.site\";i:6;s:8:\"node:503\";i:7;s:9:\"node_view\";i:8;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:62:\"<span>“Almost 15 years …never seen a failure...”</span>\n\";}}',-1,1504659397.271,1,'config:filter.format.basic_html config:image.style.max_1300x1300 config:image.style.max_325x325 config:image.style.max_650x650 config:responsive_image.styles.narrow config:system.site node:503 node_view rendered user:1','284'),('entity_view:node:503:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"503\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:9:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:32:\"config:image.style.max_1300x1300\";i:2;s:30:\"config:image.style.max_325x325\";i:3;s:30:\"config:image.style.max_650x650\";i:4;s:37:\"config:responsive_image.styles.narrow\";i:5;s:18:\"config:system.site\";i:6;s:8:\"node:503\";i:7;s:9:\"node_view\";i:8;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504659397.256,1,'config:filter.format.basic_html config:image.style.max_1300x1300 config:image.style.max_325x325 config:image.style.max_650x650 config:responsive_image.styles.narrow config:system.site node:503 node_view rendered user:1','284'),('entity_view:node:503:rss:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:2481:\"<span>“Almost 15 years …never seen a failure...”</span>\n<span><span lang=\"\" about=\"/user/admin\" typeof=\"schema:Person\" property=\"schema:name\" datatype=\"\">Admin</span></span>\n<span>1 September, 2017 - 1:03pm</span>\n\n            <div class=\"field field--name-field-organisation field--type-string field--label-hidden field--item\">Tape Replacement Ltd</div>\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p dir=\"ltr\">The DDS range of digital data storage solutions from Tape Replacement Ltd deliver a modern, solid state data storage unit designed specifically to replace out-dated magnetic tape, magneto optical, disc hard-drive units such as those used within legacy telephone switching systems. This saves companies such as telcos, and ultimately their customers, millions of dollars in upgrade costs as well as improving overall system reliability and keeping functioning equipment from being dumped in landfills.</p>\n\n<p dir=\"ltr\">The storage layer is made up of two independent stacks of NAND chips, combined using a RAID-1 structure, using YAFFS to expose this to the application.</p>\n\n<p dir=\"ltr\">According to Andre Renaud, Engineering Manager at Tape Replacement:</p>\n\n<blockquote>\n<p dir=\"ltr\">“We\'ve been running the units for almost 15 years now, and we have never seen a failure of the underlying YAFFS/NAND storage system. YAFFS provides us with a fast, reliable storage mechanism which is especially useful given the changes in NAND technologies over the years, and the intricate technical details of their behaviour.”</p>\n</blockquote></div>\n      \n      <div class=\"field field--name-field-url field--type-link field--label-hidden field--items\">\n              <div class=\"field--item\"><a href=\"http://www.tape-replacement.com/\">http://www.tape-replacement.com/</a></div>\n          </div>\n  \n            <div class=\"field field--name-field-image field--type-image field--label-hidden field--item\">    <img srcset=\"/sites/default/files/styles/max_325x325/public/2017-09/tape_replacement.jpg?itok=HsMgXnI2 325w, /sites/default/files/styles/max_650x650/public/2017-09/tape_replacement.jpg?itok=cUoW-9yU 555w\" sizes=\"(min-width: 1290px) 325px, (min-width: 851px) 25vw, (min-width: 560px) 50vw, 100vw\" src=\"/sites/default/files/styles/max_325x325/public/2017-09/tape_replacement.jpg?itok=HsMgXnI2\" alt=\"Tape Replacement Ltd Logo\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</div>\n      \";}s:9:\"#attached\";a:1:{s:7:\"library\";a:1:{i:0;s:16:\"core/picturefill\";}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:8:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:32:\"config:image.style.max_1300x1300\";i:2;s:30:\"config:image.style.max_325x325\";i:3;s:30:\"config:image.style.max_650x650\";i:4;s:37:\"config:responsive_image.styles.narrow\";i:5;s:8:\"node:503\";i:6;s:9:\"node_view\";i:7;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1504783535.409,1,'config:filter.format.basic_html config:image.style.max_1300x1300 config:image.style.max_325x325 config:image.style.max_650x650 config:responsive_image.styles.narrow node:503 node_view rendered user:1','278'),('entity_view:node:503:rss:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"503\";i:3;s:3:\"rss\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:8:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:32:\"config:image.style.max_1300x1300\";i:2;s:30:\"config:image.style.max_325x325\";i:3;s:30:\"config:image.style.max_650x650\";i:4;s:37:\"config:responsive_image.styles.narrow\";i:5;s:8:\"node:503\";i:6;s:9:\"node_view\";i:7;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504783535.395,1,'config:filter.format.basic_html config:image.style.max_1300x1300 config:image.style.max_325x325 config:image.style.max_650x650 config:responsive_image.styles.narrow node:503 node_view rendered user:1','278'),('entity_view:node:503:search_result:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:2323:\"<span>“Almost 15 years …never seen a failure...”</span>\n\n            <div class=\"field field--name-field-organisation field--type-string field--label-hidden field--item\">Tape Replacement Ltd</div>\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p dir=\"ltr\">The DDS range of digital data storage solutions from Tape Replacement Ltd deliver a modern, solid state data storage unit designed specifically to replace out-dated magnetic tape, magneto optical, disc hard-drive units such as those used within legacy telephone switching systems. This saves companies such as telcos, and ultimately their customers, millions of dollars in upgrade costs as well as improving overall system reliability and keeping functioning equipment from being dumped in landfills.</p>\n\n<p dir=\"ltr\">The storage layer is made up of two independent stacks of NAND chips, combined using a RAID-1 structure, using YAFFS to expose this to the application.</p>\n\n<p dir=\"ltr\">According to Andre Renaud, Engineering Manager at Tape Replacement:</p>\n\n<blockquote>\n<p dir=\"ltr\">“We\'ve been running the units for almost 15 years now, and we have never seen a failure of the underlying YAFFS/NAND storage system. YAFFS provides us with a fast, reliable storage mechanism which is especially useful given the changes in NAND technologies over the years, and the intricate technical details of their behaviour.”</p>\n</blockquote></div>\n      \n      <div class=\"field field--name-field-url field--type-link field--label-hidden field--items\">\n              <div class=\"field--item\"><a href=\"http://www.tape-replacement.com/\">http://www.tape-replacement.com/</a></div>\n          </div>\n  \n            <div class=\"field field--name-field-image field--type-image field--label-hidden field--item\">    <img srcset=\"/sites/default/files/styles/max_325x325/public/2017-09/tape_replacement.jpg?itok=HsMgXnI2 325w, /sites/default/files/styles/max_650x650/public/2017-09/tape_replacement.jpg?itok=cUoW-9yU 555w\" sizes=\"(min-width: 1290px) 325px, (min-width: 851px) 25vw, (min-width: 560px) 50vw, 100vw\" src=\"/sites/default/files/styles/max_325x325/public/2017-09/tape_replacement.jpg?itok=HsMgXnI2\" alt=\"Tape Replacement Ltd Logo\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</div>\n      \";}s:9:\"#attached\";a:1:{s:7:\"library\";a:1:{i:0;s:16:\"core/picturefill\";}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:7:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:32:\"config:image.style.max_1300x1300\";i:2;s:30:\"config:image.style.max_325x325\";i:3;s:30:\"config:image.style.max_650x650\";i:4;s:37:\"config:responsive_image.styles.narrow\";i:5;s:8:\"node:503\";i:6;s:9:\"node_view\";}s:7:\"max-age\";i:-1;}}',-1,1508374940.574,1,'config:filter.format.basic_html config:image.style.max_1300x1300 config:image.style.max_325x325 config:image.style.max_650x650 config:responsive_image.styles.narrow node:503 node_view rendered','271'),('entity_view:node:503:search_result:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"503\";i:3;s:13:\"search_result\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:7:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:32:\"config:image.style.max_1300x1300\";i:2;s:30:\"config:image.style.max_325x325\";i:3;s:30:\"config:image.style.max_650x650\";i:4;s:37:\"config:responsive_image.styles.narrow\";i:5;s:8:\"node:503\";i:6;s:9:\"node_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1508374940.572,1,'config:filter.format.basic_html config:image.style.max_1300x1300 config:image.style.max_325x325 config:image.style.max_650x650 config:responsive_image.styles.narrow node:503 node_view rendered','271'),('entity_view:node:503:teaser:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1280:\"<article role=\"article\" about=\"/almost-15-years-never-seen-failure\" class=\"case-study is-promoted teaser clearfix\">\n\n  \n      <h2>\n      <a href=\"/almost-15-years-never-seen-failure\" rel=\"bookmark\"><span>“Almost 15 years …never seen a failure...”</span>\n</a>\n    </h2>\n    \n\n  \n  <div class=\"content\">\n    <ul class=\"links inline list-inline\"><li class=\"node-readmore\"><a href=\"/almost-15-years-never-seen-failure\" rel=\"tag\" title=\"“Almost 15 years …never seen a failure...”\" hreflang=\"en\">Read more<span class=\"visually-hidden\"> about “Almost 15 years …never seen a failure...”</span></a></li></ul>\n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><p dir=\"ltr\">The DDS range of digital data storage solutions from Tape Replacement Ltd deliver a modern, solid state data storage unit designed specifically to replace out-dated magnetic tape, magneto optical, disc hard-drive units such as those used within legacy telephone switching systems. This saves companies such as telcos, and ultimately their customers, millions of dollars in upgrade costs as well as improving overall system reliability and keeping functioning equipment from being dumped in landfills.</p></div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:8:\"node:503\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1504640549.251,1,'config:filter.format.basic_html node:503 node_view rendered user:1','271'),('entity_view:node:503:teaser:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:3:\"503\";i:3;s:6:\"teaser\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:31:\"config:filter.format.basic_html\";i:1;s:8:\"node:503\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504640549.249,1,'config:filter.format.basic_html node:503 node_view rendered user:1','271'),('entity_view:node:73:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=306382ab744615fb554ac82b8f9e8907adc4fe4a2b05c5249851e41934fa227bzvk7zFa_G47tjHbzsdr_Rw8WBhlReAwW5J14kTHiggA','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:3876:\"<article data-quickedit-entity-id=\"node/73\" role=\"article\" class=\"contextual-region page full clearfix\" about=\"/contact\" typeof=\"schema:WebPage\">\n\n  \n    <div data-contextual-id=\"node:node=73:changed=1453818953&amp;langcode=en\"></div>  <span property=\"schema:name\" content=\"Contact\" class=\"hidden\"></span>\n\n\n  \n  <div class=\"content\">\n    \n            <div property=\"schema:text\" data-quickedit-field-id=\"node/73/body/und/full\" class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<p><img alt=\"The Old Courthouse\" class=\"image _original\" src=\"/sites/yaffs.net/files/images/OldCrt.jpg\" style=\"text-align: right; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; float: right; width: 400px; height: 300px;\" title=\"The Old Courthouse\" /></p>\n<dl>\n<dt><strong style=\"text-align: left;\">Telephone</strong></dt>\n<dd style=\"text-align: left;\">+44 (0)1223 811679</dd>\n<dt style=\"text-align: left;\">&nbsp;</dt>\n<dt style=\"text-align: left;\"><strong>Email</strong> - <a href=\"denied:mailto:info@aleph1.co.uk\">info@aleph1.co.uk</a></dt>\n<dt style=\"text-align: left;\"><strong>Post</strong></dt>\n<dd style=\"text-align: left;\">The Old Courthouse<br />\n123 High Street<br />\nBottisham<br />\nCambridge<br />\nCB25 9BA<br />\nUnited Kingdom.</dd>\n</dl>\n<p style=\"text-align: -webkit-auto;\">&nbsp;</p>\n<h2 style=\"text-align: left;\">Public Transport - Buses</h2>\n<p style=\"text-align: left;\">You can reach us by bus from the bus station on Drummer Street in the centre of Cambridge, in 20 minutes. Buses run two or three times an hour much of the day. Click for <a href=\"http://www.stagecoachbus.com/cambridge\" target=\"_self\" title=\"Bus Times\">timetables </a> and under Bus Timetable Lookup enter 10 or 11 in the Service No. box.<br />\nLook at the map below</p>\n<p style=\"text-align: left;\">&nbsp;The Number 10 bus enters the village from the East end and passes Westwards along the High Street. Get off at the bus shelter on the South side of the High Street about 500 metres after leaving the main (A1303) road to enter the village. The Courthouse is a further 100 metres West and on the other (North) side of the road.</p>\n<p style=\"text-align: left;\">The Number 10 buses leave Drummer Street at the hour and half hour and take 20 minutes.<br />\n<br />\nThe Number 11 bus leaves at 15 and 45 minutes past each hour and travels along the main A1303 road to Newmarket (and them Bury St Edmunds), passing the East end of Bottisham.&nbsp; Get off at the bus shelter on the main road, and walk back past First Copy, (the former White Swan pub) on the High Street; continue about 450 metres West along the High Street towards the centre of Bottisham. The Courthouse is on the North side of the High Street.</p>\n<p style=\"text-align: left;\"><strong>If coming to visit please make an appointment before setting out.</strong></p>\n<p style=\"text-align: left;\"><a href=\"?q=node/323\">Click here for a page with only these maps, for printing out</a>.</p>\n<p style=\"text-align: left;\">This shows the location of Aleph One within Bottisham. Park in the layby on the South side of the road. We are opposite in a large building with three arched windows. There are doors on either side of the building, and you may need to try both to get a response.</p>\n<div style=\"text-align: center;\">\n<img alt=\"Bottisham map\" src=\"/sites/yaffs.net/files/images/Bottisham.jpg\" style=\"border: 0;\" title=\"Bottisham map\" border=\"0\" />\n</div>\n<p>&nbsp;</p>\n<p>Map below shows where we are in relation to Cambridge and the surrounding roads.</p>\n<div style=\"text-align: center;\">\n<img alt=\"How to get to Aleph One\" src=\"/sites/yaffs.net/files/images/Cambridge.jpg\" style=\"border: 0;\" title=\"How to get to Aleph One\" border=\"0\" />\n</div>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:3:{s:14:\"html_head_link\";a:12:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:8:\"/contact\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:8:\"/node/73\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:11:\"delete-form\";s:4:\"href\";s:15:\"/node/73/delete\";}i:1;b:1;}i:3;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"edit-form\";s:4:\"href\";s:13:\"/node/73/edit\";}i:1;b:1;}i:4;a:2:{i:0;a:2:{s:3:\"rel\";s:15:\"version-history\";s:4:\"href\";s:18:\"/node/73/revisions\";}i:1;b:1;}i:5;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:8:\"/contact\";}i:1;b:1;}i:6;a:2:{i:0;a:2:{s:3:\"rel\";s:17:\"book-outline-form\";s:4:\"href\";s:16:\"/node/73/outline\";}i:1;b:1;}i:7;a:2:{i:0;a:2:{s:3:\"rel\";s:16:\"book-remove-form\";s:4:\"href\";s:23:\"/node/73/outline/remove\";}i:1;b:1;}i:8;a:2:{i:0;a:2:{s:3:\"rel\";s:10:\"devel-load\";s:4:\"href\";s:14:\"/devel/node/73\";}i:1;b:1;}i:9;a:2:{i:0;a:2:{s:3:\"rel\";s:12:\"devel-render\";s:4:\"href\";s:21:\"/devel/node/73/render\";}i:1;b:1;}i:10;a:2:{i:0;a:2:{s:3:\"rel\";s:16:\"devel-definition\";s:4:\"href\";s:25:\"/devel/node/73/definition\";}i:1;b:1;}i:11;a:2:{i:0;a:2:{s:3:\"rel\";s:11:\"token-devel\";s:4:\"href\";s:20:\"/node/73/devel/token\";}i:1;b:1;}}s:7:\"library\";a:1:{i:0;s:20:\"history/mark-as-read\";}s:14:\"drupalSettings\";a:1:{s:7:\"history\";a:1:{s:17:\"nodesToMarkAsRead\";a:1:{i:73;b:1;}}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:73\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:93:\"<span property=\"schema:name\" data-quickedit-field-id=\"node/73/title/und/full\">Contact</span>\n\";}}',-1,1509014437.071,1,'config:filter.format.full_html config:system.site node:73 node_view rendered user:1','307'),('entity_view:node:73:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01rUQ51ZQWuvK8gxrQX_6YxI8aS35kxR0r1MaPFjUeTYU','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:3695:\"<article role=\"article\" about=\"/contact\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"Contact\" 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<p><img alt=\"The Old Courthouse\" class=\"image _original\" src=\"/sites/yaffs.net/files/images/OldCrt.jpg\" style=\"text-align: right; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; float: right; width: 400px; height: 300px;\" title=\"The Old Courthouse\" /></p>\n<dl>\n<dt><strong style=\"text-align: left;\">Telephone</strong></dt>\n<dd style=\"text-align: left;\">+44 (0)1223 811679</dd>\n<dt style=\"text-align: left;\">&nbsp;</dt>\n<dt style=\"text-align: left;\"><strong>Email</strong> - <a href=\"denied:mailto:info@aleph1.co.uk\">info@aleph1.co.uk</a></dt>\n<dt style=\"text-align: left;\"><strong>Post</strong></dt>\n<dd style=\"text-align: left;\">The Old Courthouse<br />\n123 High Street<br />\nBottisham<br />\nCambridge<br />\nCB25 9BA<br />\nUnited Kingdom.</dd>\n</dl>\n<p style=\"text-align: -webkit-auto;\">&nbsp;</p>\n<h2 style=\"text-align: left;\">Public Transport - Buses</h2>\n<p style=\"text-align: left;\">You can reach us by bus from the bus station on Drummer Street in the centre of Cambridge, in 20 minutes. Buses run two or three times an hour much of the day. Click for <a href=\"http://www.stagecoachbus.com/cambridge\" target=\"_self\" title=\"Bus Times\">timetables </a> and under Bus Timetable Lookup enter 10 or 11 in the Service No. box.<br />\nLook at the map below</p>\n<p style=\"text-align: left;\">&nbsp;The Number 10 bus enters the village from the East end and passes Westwards along the High Street. Get off at the bus shelter on the South side of the High Street about 500 metres after leaving the main (A1303) road to enter the village. The Courthouse is a further 100 metres West and on the other (North) side of the road.</p>\n<p style=\"text-align: left;\">The Number 10 buses leave Drummer Street at the hour and half hour and take 20 minutes.<br />\n<br />\nThe Number 11 bus leaves at 15 and 45 minutes past each hour and travels along the main A1303 road to Newmarket (and them Bury St Edmunds), passing the East end of Bottisham.&nbsp; Get off at the bus shelter on the main road, and walk back past First Copy, (the former White Swan pub) on the High Street; continue about 450 metres West along the High Street towards the centre of Bottisham. The Courthouse is on the North side of the High Street.</p>\n<p style=\"text-align: left;\"><strong>If coming to visit please make an appointment before setting out.</strong></p>\n<p style=\"text-align: left;\"><a href=\"?q=node/323\">Click here for a page with only these maps, for printing out</a>.</p>\n<p style=\"text-align: left;\">This shows the location of Aleph One within Bottisham. Park in the layby on the South side of the road. We are opposite in a large building with three arched windows. There are doors on either side of the building, and you may need to try both to get a response.</p>\n<div style=\"text-align: center;\">\n<img alt=\"Bottisham map\" src=\"/sites/yaffs.net/files/images/Bottisham.jpg\" style=\"border: 0;\" title=\"Bottisham map\" border=\"0\" />\n</div>\n<p>&nbsp;</p>\n<p>Map below shows where we are in relation to Cambridge and the surrounding roads.</p>\n<div style=\"text-align: center;\">\n<img alt=\"How to get to Aleph One\" src=\"/sites/yaffs.net/files/images/Cambridge.jpg\" style=\"border: 0;\" title=\"How to get to Aleph One\" border=\"0\" />\n</div>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:8:\"/contact\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:8:\"/node/73\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:8:\"/contact\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:73\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:44:\"<span property=\"schema:name\">Contact</span>\n\";}}',-1,1504693834.910,1,'config:filter.format.full_html config:system.site node:73 node_view rendered user:1','307'),('entity_view:node:73:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=306382ab744615fb554ac82b8f9e8907adc4fe4a2b05c5249851e41934fa227b:[user.roles:anonymous]=1','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:2:\"73\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:73\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1509014437.069,1,'config:filter.format.full_html config:system.site node:73 node_view rendered user:1','307'),('entity_view:node:73:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:2:\"73\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:73\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504693834.907,1,'config:filter.format.full_html config:system.site node:73 node_view rendered user:1','307'),('entity_view:node:77:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01WOPwVurHzlHXfdsnb-Z1Y6jsekDY_brsxk4bxst3C5E','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:1571:\"<article role=\"article\" about=\"/yaffs-talk-slides-presentation-fosdem-2004\" class=\"book 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<p>This info is significantly out of date, and we have removed it. You might be interested in one of these:</p>\n<ul>\n<li><a href=\"/documents/how-yaffs-works\">How Yaffs Works</a>&nbsp;</li>\n<li><a style=\"border-style: initial; border-color: initial; border-image: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 12px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; font-family: Verdana, Helvetica, Arial, sans-serif; line-height: 18px; border-width: 0px; padding: 0px; margin: 0px;\" href=\"/documents/yaffs-nand-flash-failure-mitigation\">Yaffs&nbsp;<span class=\"caps\" style=\"border-style: initial; border-color: initial; border-image: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 0.9em; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-width: 0px; padding: 0px; margin: 0px;\">NAND</span>&nbsp;Failure Mitigation</a></li>\n<li><a href=\"yaffs-talk-pdf-slides-celf-2007\">Slides from CELF 2007</a></li>\n</ul>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:43:\"/yaffs-talk-slides-presentation-fosdem-2004\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:8:\"/node/77\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:43:\"/yaffs-talk-slides-presentation-fosdem-2004\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:77\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:71:\"<span>YAFFS talk - slides from a presentation to FOSDEM in 2004</span>\n\";}}',-1,1504779761.637,1,'config:filter.format.full_html config:system.site node:77 node_view rendered user:1','308'),('entity_view:node:77:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:2:\"77\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:77\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504779761.622,1,'config:filter.format.full_html config:system.site node:77 node_view rendered user:1','308'),('entity_view:node:79:full:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01fN1BuFtNTwLLC6yEl_GJDcUWQ0YXfkhFQLyDgqhC_Do','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:519:\"<article role=\"article\" about=\"/yaffs-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=\"/drupal/?q=node/110\"><img width=\"640\" height=\"480\" border=\"0\" alt=\"yaffs_talk_1.jpg\" src=\"sites/yaffs.net/files/images/content/yaffs_talk_1.preview.jpg\" /></a>\n<div class=\"caption\">\n &nbsp;\n</div>\n</div>\n</div>\n      \n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:1:{s:14:\"html_head_link\";a:3:{i:0;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:25:\"/yaffs-talk-slide-1-title\";}i:1;b:1;}i:1;a:2:{i:0;a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:8:\"/node/79\";}i:1;b:1;}i:2;a:2:{i:0;a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:25:\"/yaffs-talk-slide-1-title\";}i:1;b:1;}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:79\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:42:\"<span>YAFFS talk - Slide 1 - Title</span>\n\";}}',-1,1504774253.092,1,'config:filter.format.full_html config:system.site node:79 node_view rendered user:1','307'),('entity_view:node:79:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01:[user.roles:anonymous]=0','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:2:\"79\";i:3;s:4:\"full\";}s:8:\"contexts\";a:7:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";i:5;s:20:\"user.roles:anonymous\";i:6;s:24:\"user.roles:authenticated\";}s:4:\"tags\";a:5:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:18:\"config:system.site\";i:2;s:7:\"node:79\";i:3;s:9:\"node_view\";i:4;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504774253.089,1,'config:filter.format.full_html config:system.site node:79 node_view rendered user:1','307'),('entity_view:node:79:teaser:[languages:language_interface]=en:[theme]=yaffs:[timezone]=Europe/London:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:3:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:674:\"<article role=\"article\" about=\"/yaffs-talk-slide-1-title\" class=\"book is-promoted teaser clearfix\">\n\n  \n      <h2>\n      <a href=\"/yaffs-talk-slide-1-title\" rel=\"bookmark\"><span>YAFFS talk - Slide 1 - Title</span>\n</a>\n    </h2>\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\">YAFFS </div>\n      <ul class=\"links inline list-inline\"><li class=\"node-readmore\"><a href=\"/yaffs-talk-slide-1-title\" rel=\"tag\" title=\"YAFFS talk - Slide 1 - Title\" hreflang=\"und\">Read more<span class=\"visually-hidden\"> about YAFFS talk - Slide 1 - Title</span></a></li></ul>\n  </div>\n\n</article>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:7:\"node:79\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;}}',-1,1505268152.184,1,'config:filter.format.full_html node:79 node_view rendered user:1','301'),('entity_view:node:79:teaser:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"node\";i:2;s:2:\"79\";i:3;s:6:\"teaser\";}s:8:\"contexts\";a:5:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:8:\"timezone\";i:3;s:17:\"url.path.is_front\";i:4;s:16:\"user.permissions\";}s:4:\"tags\";a:4:{i:0;s:30:\"config:filter.format.full_html\";i:1;s:7:\"node:79\";i:2;s:9:\"node_view\";i:3;s:6:\"user:1\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505268152.182,1,'config:filter.format.full_html node:79 node_view rendered user:1','301'),('entity_view:taxonomy_term:37:full:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:50:\"<div about=\"/taxonomy/term/37\">\n  \n    \n  \n</div>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:16:\"taxonomy_term:37\";i:1;s:18:\"taxonomy_term_view\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:121:\"\n            <div class=\"field field--name-name field--type-string field--label-hidden field--item\">Sideshow</div>\n      \";}}',-1,1504642140.000,1,'rendered taxonomy_term:37 taxonomy_term_view','47'),('entity_view:taxonomy_term:37:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:13:\"taxonomy_term\";i:2;s:2:\"37\";i:3;s:4:\"full\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:16:\"taxonomy_term:37\";i:1;s:18:\"taxonomy_term_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504642139.998,1,'rendered taxonomy_term:37 taxonomy_term_view','47'),('entity_view:taxonomy_term:51:full:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:52:\"<div about=\"/activity/internals\">\n  \n    \n  \n</div>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:16:\"taxonomy_term:51\";i:1;s:18:\"taxonomy_term_view\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:131:\"\n            <div class=\"field field--name-name field--type-string field--label-hidden field--item\">The Northern Block</div>\n      \";}}',-1,1505658022.963,1,'rendered taxonomy_term:51 taxonomy_term_view','47'),('entity_view:taxonomy_term:51:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:13:\"taxonomy_term\";i:2;s:2:\"51\";i:3;s:4:\"full\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:16:\"taxonomy_term:51\";i:1;s:18:\"taxonomy_term_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1505658022.961,1,'rendered taxonomy_term:51 taxonomy_term_view','47'),('entity_view:taxonomy_term:53:full:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:5:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:50:\"<div about=\"/taxonomy/term/53\">\n  \n    \n  \n</div>\n\";}s:9:\"#attached\";a:0:{}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:16:\"taxonomy_term:53\";i:1;s:18:\"taxonomy_term_view\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}s:6:\"#title\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:123:\"\n            <div class=\"field field--name-name field--type-string field--label-hidden field--item\">Rotodesign</div>\n      \";}}',-1,1504658426.801,1,'rendered taxonomy_term:53 taxonomy_term_view','47'),('entity_view:taxonomy_term:53:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:13:\"taxonomy_term\";i:2;s:2:\"53\";i:3;s:4:\"full\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:16:\"taxonomy_term:53\";i:1;s:18:\"taxonomy_term_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1504658426.799,1,'rendered taxonomy_term:53 taxonomy_term_view','47'),('entity_view:user:4:full:[languages:language_interface]=en:[theme]=yaffs:[url.path.is_front]=is_front.0:[user.permissions]=306382ab744615fb554ac82b8f9e8907adc4fe4a2b05c5249851e41934fa227b','a:4:{s:7:\"#markup\";O:25:\"Drupal\\Core\\Render\\Markup\":1:{s:9:\"\0*\0string\";s:298:\"<article data-quickedit-entity-id=\"user/4\" typeof=\"schema:Person\" about=\"/user/laurie\">\n  <div class=\"form-item js-form-item form-type-item js-form-type-item form-item- js-form-item- form-no-label form-group\">\n  \n  \n  <h4 class=\"label\">Member for</h4> 11 years 11 months\n\n  \n  \n  </div>\n</article>\n\";}s:9:\"#attached\";a:1:{s:9:\"html_head\";a:1:{i:0;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"meta\";s:11:\"#attributes\";a:4:{s:5:\"about\";s:12:\"/user/laurie\";s:8:\"property\";a:1:{i:0;s:11:\"schema:name\";}s:7:\"content\";s:6:\"Laurie\";s:4:\"lang\";s:0:\"\";}}i:1;s:17:\"rdf_user_username\";}}}s:6:\"#cache\";a:3:{s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:6:\"user:4\";i:1;s:9:\"user_view\";}s:7:\"max-age\";i:-1;}s:17:\"#cache_properties\";a:1:{i:0;s:6:\"#title\";}}',-1,1509014424.894,1,'rendered user:4 user_view','54'),('entity_view:user:4:full:[languages:language_interface]=en:[theme]=yaffs:[user.permissions]=306382ab744615fb554ac82b8f9e8907adc4fe4a2b05c5249851e41934fa227b','a:2:{s:15:\"#cache_redirect\";b:1;s:6:\"#cache\";a:5:{s:4:\"keys\";a:4:{i:0;s:11:\"entity_view\";i:1;s:4:\"user\";i:2;s:1:\"4\";i:3;s:4:\"full\";}s:8:\"contexts\";a:4:{i:0;s:28:\"languages:language_interface\";i:1;s:5:\"theme\";i:2;s:17:\"url.path.is_front\";i:3;s:16:\"user.permissions\";}s:4:\"tags\";a:2:{i:0;s:6:\"user:4\";i:1;s:9:\"user_view\";}s:7:\"max-age\";i:-1;s:3:\"bin\";s:6:\"render\";}}',-1,1509014424.889,1,'rendered user:4 user_view','54'),('https://yaffs.net/:html','O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:14:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";s:22:\"x-drupal-dynamic-cache\";s:22:\"X-Drupal-Dynamic-Cache\";s:4:\"link\";s:4:\"Link\";s:15:\"x-ua-compatible\";s:15:\"X-UA-Compatible\";s:16:\"content-language\";s:16:\"Content-language\";s:22:\"x-content-type-options\";s:22:\"X-Content-Type-Options\";s:15:\"x-frame-options\";s:15:\"X-Frame-Options\";s:7:\"expires\";s:7:\"Expires\";s:13:\"last-modified\";s:13:\"Last-Modified\";s:4:\"etag\";s:4:\"ETag\";s:4:\"vary\";s:4:\"Vary\";s:11:\"x-generator\";s:11:\"X-Generator\";}s:10:\"\0*\0headers\";a:14:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:19:\"max-age=300, public\";}s:4:\"date\";a:1:{i:0;s:29:\"Thu, 26 Oct 2017 10:48:43 GMT\";}s:22:\"x-drupal-dynamic-cache\";a:1:{i:0;s:4:\"MISS\";}s:4:\"link\";a:4:{i:0;s:23:\"</home>; rel=\"revision\"\";i:1;s:108:\"</sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh>; rel=preload; as=style\";i:2;s:108:\"</sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh>; rel=preload; as=style\";i:3;s:99:\"</sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js>; rel=preload; as=script\";}s:15:\"x-ua-compatible\";a:1:{i:0;s:7:\"IE=edge\";}s:16:\"content-language\";a:1:{i:0;s:2:\"en\";}s:22:\"x-content-type-options\";a:1:{i:0;s:7:\"nosniff\";}s:15:\"x-frame-options\";a:1:{i:0;s:10:\"SAMEORIGIN\";}s:7:\"expires\";a:1:{i:0;s:29:\"Sun, 19 Nov 1978 05:00:00 GMT\";}s:13:\"last-modified\";a:1:{i:0;s:29:\"Thu, 26 Oct 2017 10:48:43 GMT\";}s:4:\"etag\";a:1:{i:0;s:12:\"\"1509014923\"\";}s:4:\"vary\";a:1:{i:0;s:6:\"Cookie\";}s:11:\"x-generator\";a:1:{i:0;s:33:\"Drupal 8 (https://www.drupal.org)\";}}s:15:\"\0*\0cacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}}s:10:\"\0*\0content\";s:51758:\"<!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    <meta charset=\"utf-8\" />\n<meta name=\"title\" content=\"A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use\" />\n<link rel=\"shortlink\" href=\"https://yaffs.net/\" />\n<link rel=\"canonical\" href=\"https://yaffs.net/\" />\n<meta name=\"news_keywords\" content=\"Flash File System\" />\n<meta name=\"description\" content=\"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.\" />\n<meta name=\"abstract\" content=\"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.\" />\n<meta name=\"keywords\" content=\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\" />\n<meta name=\"Generator\" content=\"Drupal 8 (https://www.drupal.org)\" />\n<meta name=\"MobileOptimized\" content=\"width\" />\n<meta name=\"HandheldFriendly\" content=\"true\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"shortcut icon\" href=\"/sites/default/files/yaffs_favicon.png\" type=\"image/png\" />\n<link rel=\"revision\" href=\"/home\" />\n\n    <title>A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use</title>\n    <link rel=\"stylesheet\" href=\"/sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"/sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh\" media=\"all\" />\n\n    \n<!--[if lte IE 8]>\n<script src=\"/sites/default/files/js/js_VtafjXmRvoUgAzqzYTA3Wrjkx9wcWhjP0G4ZnnqRamA.js\"></script>\n<![endif]-->\n\n  </head>\n  <body class=\"fontyourface path-frontpage 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;\" class=\"is-active\">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\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\">A Robust Flash File System Since 2002</span>\n</h1>\n\n  <article role=\"article\" about=\"/home\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" 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<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\n<section id=\"block-yaffsinspace\" class=\"panel yaffs-shout well block block-block-content block-block-content9f676777-54d9-40d2-86dd-174fff14ab1a clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h3><em>New!</em> Yaffs in space!</h3>\n<p><strong><img alt=\"Tess satellite\" data-entity-type=\"file\" data-entity-uuid=\"f06319f1-b6ac-41e2-a70d-a4c4da605b87\" height=\"246\" src=\"/sites/default/files/inline-images/tess_satellite_0.gif\" width=\"347\" class=\"align-right\" />NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n<p>Some File Systems are not robust enough to be suitable for such exacting work.<br />\n </p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n        \n                              <div class=\"front_highlight row\">\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-1\">\n    <section id=\"block-choosingyaffs\" class=\"block block-block-content block-block-contentae8f54b9-5315-4995-a49e-c0780f3a88cc clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/documents/considerations-choosing-flash-file-system\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/choosing_yaffs_0.jpg?itok=YuV5Z__e\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Choosing Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-2\">\n    <section id=\"block-frontimagehighlight2\" class=\"block block-block-content block-block-contentfa53fc80-f3c4-4d6e-b947-0a3bcd479480 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/yaffs-action\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/atm_1.jpg?itok=HfIny6EH\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"ATM\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-3\">\n    <section id=\"block-downloadyaffs\" class=\"block block-block-content block-block-contenteed71eb7-98b2-4109-aabe-7718283459ad clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/get-yaffs\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/download_now_0.jpg?itok=XdRx8zkI\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Download Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n            </div>\n                        </section>\n\n                </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-1\">\n        <div class=\"container\">\n        \n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-2\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-2\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-user-logos-block-1 clearfix\" id=\"block-views-block-yaffs-user-logos-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-user-logos view-id-yaffs_user_logos view-display-id-block_1 js-view-dom-id-edd57e723e39a595ff024f55445d87b87e77bd4c4914ae81074adb1d9ec5a119\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-user-logos-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/designA_logo.png?itok=5VWxByrk\" width=\"200\" height=\"141\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/eaton_logo.png?itok=kExm8d-W\" width=\"200\" height=\"84\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/LANCOM_Logo_4c.png?itok=ZIDg8yYt\" width=\"200\" height=\"50\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/bernina_international_logo.png?itok=G8DeIWtW\" width=\"200\" height=\"30\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/gallagher_logo.png?itok=lQyDJeN1\" width=\"200\" height=\"65\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/android_logo.png?itok=MShHoIK7\" width=\"170\" height=\"71\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/leica_logo.png?itok=Ne2u8w3-\" width=\"200\" height=\"130\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/yaffs-action\">Who uses Yaffs? Read more...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-3\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-3\">\n    <section class=\"views-element-container block block-views block-views-blockhighlighted-yaffs-features-block-1 clearfix\" id=\"block-views-block-highlighted-yaffs-features-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-highlighted-yaffs-features view-id-highlighted_yaffs_features view-display-id-block_1 js-view-dom-id-034fb1f12713a86dcb5aee2cc71239b7f9af0ac7fc0e81e2c5f3d09378b26f1c\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-highlighted-yaffs-features-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-thumbs-up\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#384\"><h3>Royalty Free... </h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Whether you use Yaffs under the GNU General Public Licence or under a commercial licence, Yaffs is free of any royalty. No need to worry about rising costs for your hit product!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-shield\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#385\"><h3>A robust flash file system...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">After more than 100,000 <strong>random</strong> power-failures during reading or writing, a test file showed NO data corruption at all!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-heart\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#388\"><h3>Yaffs is Open Source...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">You can have a look at the code at any time. <a href=\"/downloads\">Download it now</a>! And it\'s suitable for GPL and commercially licensed projects.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-mobile-phone\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#389\"><h3>Tried and tested in millions of devices...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Yaffs is widely used in Linux and proprietary commercial RTOSs. It\'s been included in hundreds of devices, and shipped as part of Google\'s Android, with millions of units sold.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-space-shuttle\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#407\"><h3>Booting is fast...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">It is important for a Flash filesystem to boot fast, so boot speed was a fundamental consideration in the design of Yaffs.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-users\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#408\"><h3>An active community...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">There\'s an active community of people who use Yaffs and who have developed with Yaffs, just a click or two away.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/features\">Lots more Yaffs features...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-4\">\n        <div class=\"container\" >\n          <div class=\"region region-front-pane-4\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-documents-highlights-block-1 clearfix\" id=\"block-views-block-yaffs-documents-highlights-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-documents-highlights view-id-yaffs_documents_highlights view-display-id-block_1 js-view-dom-id-aa8462b2c5c94041df5b3c3dc81b0b0859d4a62f70e7648a170780714ba8b0c4\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-documents-highlights-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-sample\" hreflang=\"und\">Yaffs Licence Sample</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">While the Yaffs code is available free of charge under GNU General Public Licence, version 2, that entails the obligation to disclose Source Code for your application using Yaffs. An Aleph One Licence does not impose that obligation and so is attractive for proprietary projects. This sample Licence provides an example of the points we expect a Licence to cover.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-overview\" hreflang=\"und\">Yaffs Overview</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">YAFFS is a filesystem designed specifically for the characteristics of NAND flash. This page gives an overview of the project - what is available, how it works, how to use it, developer resources, and licensing options.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-faqs\" hreflang=\"und\">Yaffs Licence FAQs</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Some questions about the commercial licence for Yaffs and how we arrive at one.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/faq\" hreflang=\"und\">FAQ</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Common questions about Yaffs technical issues.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/licences-more-background-and-detail\" hreflang=\"und\">Licences - more background and detail</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>More on the details and background of Licences for Yaffs</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf.png?itok=ROOk6w-T\" width=\"150\" height=\"212\" alt=\"Preview of ConsiderationsInChoosingAFlashFileSystem.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/considerations-choosing-flash-file-system\" hreflang=\"und\">Considerations in Choosing a Flash File System</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Failures in an embedded File System in a product are much more serious to the user than failures in an office computer.&nbsp; Power failures and failures to cache data properly can be avoided by choosing a FFS specifically designed for reliability from the ground up.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/ConsiderationsInChoosingAFlashFileSystem_0.pdf\" type=\"application/pdf; length=131376\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">ConsiderationsInChoosingAFlashFileSystem.pdf</a></span><span class=\"file-size\">128.3 KB</span></span></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/HowYaffsWorks.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/HowYaffsWorks.pdf.png?itok=_nJu31C0\" width=\"150\" height=\"194\" alt=\"Preview of HowYaffsWorks.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/how-yaffs-works\" hreflang=\"und\">How Yaffs works</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">This document gives an explanation of most of the core mechanisms that make Yaffs work. As of the time of writing this, the Yaffs2 code base includes approximately 19,000 lines of code making a very detailed discussion impractical. This document is the starting point for understanding Yaffs. Further detailed questions and discussions are welcomed on the Yaffs discussion list.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/HowYaffsWorks.pdf\" type=\"application/pdf; length=402514\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">HowYaffsWorks.pdf</a></span><span class=\"file-size\">393.08 KB</span></span></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/YaffsTuning.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/YaffsTuning.pdf.png?itok=idZTTQBs\" alt=\"Preview of YaffsTuning.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/yaffs-tuning\" hreflang=\"und\">Yaffs Tuning</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>This document describes the parameters which can be modified by the developer in the different phases of applying, debugging, and routine use of Yaffs.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/YaffsTuning.pdf\" type=\"application/pdf; length=93667\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsTuning.pdf</a></span><span class=\"file-size\">91.47 KB</span></span></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/documents\">All the Yaffs documentation...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n    <div class=\"container-fluid front-pane-5\">\n                <div class=\"container\" >\n              <div class=\"region region-front-pane-5\">\n    <section id=\"block-frontpageprimeryaffs\" class=\"block block-block-content block-block-contente7a8d2de-4fbb-4680-9e18-fe4d8337f1d6 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h1>Flash file systems primer</h1>\n<h2>Background &amp; basics</h2>\n<h3><span>What is a </span><span>F</span><span>lash </span><span>F</span><span>ile </span><span>S</span><span>ystem</span>?</h3>\n<p><span>A <span>Flash File System</span> stores data on flash memory, rather than a hard drive. Flash is used because it’s faster, much more tolerant of physical stress and takes less power. A <span>flash filesystem</span> is used to manage the data and get the best out of flash memory.</span></p>\n<p><span>As two examples, a flash memory chip needs to be erased in blocks before it is rewritten and a flash file system will manage that; flash memory has a limited number of writes per block so many flash file systems incorporate a <span>wear levelling</span> mechanism to ensure the writes are spread out.</span></p>\n<p><span>A flash file system is most useful as a part of an embedded system,. As a developer, you <em>can</em>&nbsp;read from and write directly to your Flash memory on an embedded system, but unless your use is extremely limited, you\'ll probably find that you come up against problems that Flash file systems have already solved.</span></p>\n<h3>What are NAND flash &amp; NOR flash?</h3>\n<p><span>These are the two fundamental flash architectures and have very different characteristics in performance, reliability, erase cycles, life span, and price. They also differ fundamentally from hard disk drives, and so need specialised handling.</span></p>\n<table>\n<tbody>\n <tr>\n  <td>\n  <p>&nbsp;</p>\n   </td>\n  <td>\n  <p>NAND flash</p>\n   </td>\n  <td>\n  <p>NOR flash</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage density</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Read performance</p>\n   </td>\n  <td>\n  <p>Fast</p>\n   </td>\n  <td>\n  <p>Fast (may be slowed by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Write performance</p>\n   </td>\n  <td>\n  <p>Faster</p>\n   </td>\n  <td>\n  <p>Slower (may be slowed further by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Erase performance</p>\n   </td>\n  <td>\n  <p>Faster (low ms typically)</p>\n   </td>\n  <td>\n  <p>Slower (possibly seconds)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage reliability</p>\n   </td>\n  <td>\n  <p>Lower (without management)</p>\n   </td>\n  <td>\n  <p>Better</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Life span</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Price</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n </tr>\n</tbody>\n</table>\n<p><span>Yaffs is both an <span>embedded NAN</span><span>D flash file system</span> and an <span>embedded N</span><span>OR Flash file system</span>. It can handle SLC, TLC and MLC NAND. It also works on MLC and SLC NOR. And it can work with parallel or serial access including Serial Peripheral Bus (SPI).</span></p>\n<h3>What special functions does a <span>file system </span><span>for flash</span> include?</h3>\n<p><span>As well as the normal file system functions, a <span>flash file system embedded</span> in hardware should help the device to start and stop quickly and deal well with losing power with no warning, without corrupting the data; and, manage the foibles of flash memory, protecting the stored data with extreme reliability. (Read our paper <a href=\"/documents/considerations-choosing-flash-file-system\">Considerations in Choosing a Flash File System</a>.)</span></p>\n<p><span><span>To these ends, an embedded flash file system must employ extra steps to achieve these such as using log structuring, rather than traditional file structuring plus a flash translation layer; manage power loss and recovery; include flash memory wear levelling; deal with the unreliability of flash from read and write disturbs, by using error correction (ECC), bad block remapping, over provision and flash block refreshing; ensure it’s ready to write fast by using garbage collection and flash block erase to prepare; and manage writing while avoiding write amplification. </span></span></p>\n<h4>What is a log-structured file system?</h4>\n<p><span>Log structuring means that data is written to the file system as a sequence of changes to the file system. This has the advantage that there is less overhead, and so it\'s faster than a non-log-structured system. More important though is that it is more robust against power failure. It also means that a file may be fragmented. For hard drives, fragmentation can mean much slower access due to the time required to mechanically move the read heads around the disk, but flash memory has no moving parts so there is no overhead for flash.</span></p>\n<p><span>Yaffs is log structured a <span>flash file system </span><span>architecture</span> which is faster and more robust than the alternatives.</span></p>\n<h4>What is a <span>Flash Translation Layer</span> (FTL) ?</h4>\n<p><span>It is sometimes desirable to use regular block file systems (such as FAT) with flash memory. In such cases, a Flash Translation Layer presents flash memory or a flash file system as if it\'s an ordinary hard drive.</span></p>\n<p><span>An FTL is an incomplete storage solution it still requires a file system. This makes two layers where data can be damaged and lost: in the FTL and in the <span>flash memory </span><span>file system</span>.</span></p>\n<p><span>True <span>file systems for flash memory</span>, such as Yaffs, do not use FTLs. They deal directly with the idiosyncrasies of flash, providing a faster and more reliable solution.</span></p>\n<h4>What is power loss recovery?</h4>\n<p><span>When power to any storage device is suddenly lost, the device can end up in an unknown state and may have damaged areas. Most file systems have to work hard to ensure that they are in a consistent state after power loss. <span>E</span><span>mbedded file systems</span> <span>for flash</span> may make allowances for unscheduled power loss with a recovery process.</span></p>\n<p><span>Yaffs is built with fault tolerance as a guiding principle and so is designed so power loss is considered a normal event.</span></p>\n<h4>What is <span>wear levelling</span>?</h4>\n<p><span>Flash chips wear out. Each time a part of the flash memory is erased and written, it is slightly damaged. <span>Embedded f</span><span>lash file systems</span> note the danger, and sometimes try to spread the damage rather than having it concentrated in one region, so prolonging the life of the memory and the life of the device.</span></p>\n<p><span>Yaffs is designed so that extra <span>wear leveling</span> is unnecessary. Instead, it’s automatically <span>wear levelling</span> because of the log structure.</span></p>\n<h4>What is flash read disturb? What is flash write disturb?</h4>\n<p><span><a href=\"/documents/yaffs-nand-flash-failure-mitigation\">NAND flash may experience degradation or loss of data</a> owing to reads of pages in the same block or data changes in neighbouring blocks of the NAND device. This is particularly true for MLC NAND.</span></p>\n<p><span>Yaffs uses block refreshing to deal with such problems.</span></p>\n<h4>What is flash error correction/flash ECC?</h4>\n<p><span>There are ways in which flash memory can be corrupted – for instance F-N tunnelling problems and leaky oxide layers. See our <a href=\"/documents/yaffs-nand-flash-failure-mitigation\">detailed discussion of flash memory problems</a>.</span></p>\n<p><span>But every bit counts, and especially if it\'s part of critical data or essential to the correct working of a system. Flash error correction keeps track of a section of memory to tell if there\'s corruption, and provides ways to correct these small errors.</span></p>\n<p><span>Yaffs can use hardware or software based ECC.</span></p>\n<h4>What is bad-block remapping?</h4>\n<p><span>File systems are built upon storing data on physical media. But all media suffers deterioration. Some hardware or <span>flash media </span><span>file systems</span> keep lists of damaged regions and behind the scenes, substitute known good ones in their place.</span></p>\n<p><span>Because of the way that Yaffs works, there\'s no need for bad block remapping because it isn’t a block structured file system.</span></p>\n<h4>What is <span>o</span><span>ver-provisioning</span> ?</h4>\n<p><span>Knowing that the media will degrade and suffer errors, and needing space to alter data because of the nature of flash memory, sometimes a <span>flash memory based </span><span>file system</span> puts aside a portion of the media for this use. This is <span>overprovisioning</span>. Often this space used when remapping bad blocks.</span></p>\n<p><span>Because Yaffs is log structured, it has the advantage that it does not need <span>over provision</span><span>ing</span>, making more memory available to store data.</span></p>\n<h4>What is flash block refreshing?</h4>\n<p><span>To counteract the problems of unreliable flash memory – for instance errors due to read and write disturbs – a flash filesystem can refresh the memory, by making a new copy of a block.</span></p>\n<p><span>Yaffs includes flash block refreshing.</span></p>\n<h4>What is flash garbage collection?</h4>\n<p><span>When a file is deleted, or a part of a file is overwritten, file systems often simply mark the flash space as deleted, rather than removing it. Later they reclaim the space for reuse. This is garbage collection.</span></p>\n<p><span>Yaffs has garbage collection to maximise the amount of data the file system can store.</span></p>\n<h4>What is flash block erase?</h4>\n<p><span>Data must be written into blank areas of the flash chip, but erasing takes time. Rather than erase and write at the same time, in order to speed writes, NAND and <span>NOR flash file systems</span> can prepare blocks for later use. This is not usually necessary for other storage media.</span></p>\n<p><span>As part of garbage collection, Yaffs uses a block erase strategy.</span></p>\n<h4>What is flash write amplification ?</h4>\n<p><span>In many block-based flash file systems, when data changes the new data must be written to the disk, and then the old data must be marked as invalid. A small change to the data can have consequences that propagate involving writing to the memory twice or more as the old data is cleaned up by garbage collection and files are organised to take the minimum amount of space. This is write amplification - a single small write causing a cascade of writes (and erases) of whole blocks.</span></p>\n<p><span>Yaffs avoids much of this problem by being log structured, meaning that flash memory is slower to reach it\'s maximum number of cycles, while writing is faster.</span></p>\n<h2>How does Yaffs work?</h2>\n<p><span>You can find full details in our paper <a href=\"/documents/how-yaffs-works\">How Yaffs Works</a>&nbsp;but briefly, here\'s how it works.</span></p>\n<p><span>It\'s a log-structured filing system. This also ensures that Yaffs is wear-levelling is built into the design because no one part of the flash memory is used any more than another.</span></p>\n<p><span>A Yaffs object is anything that Yaffs stores - for instance a file or a directory.</span></p>\n<p><span>The memory in NAND flash is arranged in pages. A page is the unit of allocation and programming. In Yaffs, the unit of allocation is called the chunk. Typically a chunk will be the same as a NAND page, but there is flexibility to use chunks which map to multiple pages (eg. A system may have two NAND chips in parallel requiring 2x2048 = 4096 byte chunks) . This distinction gives a lot of flexibility in how the system can be configured.</span></p>\n<p><span>A fixed but configurable number of chunks form a block which is the unit of erasure.</span></p>\n<p><span>NAND flash is shipped with bad blocks and further blocks may go bad during the operation of the device so Yaffs detects and marks bad blocks.</span></p>\n<p><span>NAND flash also typically requires the use of some sort of error detection and correction code (ECC). Yaffs can either use existing ECC logic or provide its own.</span></p>\n<p><span>Yaffs maintains data in RAM about the file system, but this is not needed for Yaffs to work - so the device can safely lose power at any point without data corruption.</span></p>\n<p><span>Here\'s how the Yaffs filesystem works to ensure data safety and a very fast startup... At regular points and on controlled shutdown, checkpoint blocks are written to the flash memory, containing all the data to quickly rebuild the file system. Under usual circumstances this checkpoint is used when a device is started, to very quickly rebuild the RAM data about the file system. If the checkpoint is determined to be corrupted, or if the user requested then the file system is rebuilt by scanning.</span></p>\n<p><span>To do this, Yaffs makes a prescan, to find the sequence numbers for blocks. Then it scans through blocks backwards to build up the list of chunks that make up objects. It speeds up this process by using Block Summaries, which are collections of all the tags in a data in a block. (But it\'s still always possible to go back to the chunks themselves, to find the tags, if a summary is missing or damaged.)</span></p>\n<p><span>And tags are how Yaffs tells that a chunk belongs to a particular object.</span></p>\n<p><span>Tags are also how Yaffs knows which chunks make up the current version of an object... Because the file system is log structured, if an object has been updated, only the latest chunks are used, giving the correct version of the object. A full description of the process is available in the technical documentation, and of course you can browse the code to see exactly how it all works; there\'s a lot more to tags, the metadata that they can hold, how they are stored, and how tags are used to link together objects into a file system with a POSIX interface.</span></p>\n<p><span>And of course that\'s not the end of the story. There\'s caching to deal with repeated small changes to data. There\'s garbage collection to let space be re-used, and Yaffs deals with collecting garbage differently depending on whether there\'s lots of free space or only a little. And part of making Yaffs a high performance flash file system is to make sure that re-useable blocks are erased well before they are needed, so that writing involves only a single operation. There\'s lazy loading to reduce scanning time. And all of this is built in a portable way, so that Yaffs can be configured to match almost any hardware, and can be ported to any operating system, or work on bare metal without an operating system. There\'s a test harness which is used to subject Yaffs to power failure, and ensure it works even with external data corruption. That\'s what makes it robust enough to send into space and to handle hundreds of terabytes of mission critical data.</span></p>\n<h4>Why is Yaffs special as an embedded flash file system?</h4>\n<p><span>Yaffs has been in use since 2002, and so it is hardened. It has been used in everything from phones to sewing machines to satellites. It is popular with Aerospace companies, and firms managing large infrastructure and in Point-of-Sale (POS) equipment (where customer feedback is very rapid!) It has been used in extreme conditions where it must not lose data, and where there is no chance for maintenance. It\'s been used for very large file systems up to 190TB. It\'s been used for safety critical applications, and millions of consumer devices.</span></p>\n<p><span>We carry out testing in a <a href=\"/documents/yaffs-robustness-and-testing\">rig which can simulate random power failures</a> and proved its reliability after tens to hundreds of millions of power failures.&nbsp;It\'s designed with an understanding of the constraints of flash memory and for speed.</span></p>\n<p><span>Yaffs works on multiple operating systems – Linux, VxWorks, Windows CE, eCos. - and also directly on bare metal, with no operating system. And it\'s easy to integrate into your RTOS or application using the Yaffs Direct Interface. It works with multiple types of flash memory - NAND &amp; NOR, SLC, MLC &amp; TLC.&nbsp;It\'s endian neutral. It\'s been used with 32-bit and 64-bit CPUs including MIPS, 68000, ARM, ColdFire, PowerPC and x86 variants. Yaffs has even been used with various DSP architectures! And it\'ll work with 16-bit with some tuning. So it can be configured to work with your design and the flash geometry that you need.</span></p>\n<p><span>And it\'s a <span>free embedded flash file system - </span><span>it’s open</span> <span>source</span>! <a href=\"/get-yaffs\">Grab the GPL version now</a>! Check out our the active community. And that\'s not the whole story - there are lots more reasons that make Yaffs special.&nbsp;</span></p>\n<p>&nbsp;</p>\n</div>\n      \n  </section>\n\n\n  </div>\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    <script type=\"application/json\" data-drupal-selector=\"drupal-settings-json\">{\"path\":{\"baseUrl\":\"\\/\",\"scriptPath\":null,\"pathPrefix\":\"\",\"currentPath\":\"node\\/487\",\"currentPathIsAdmin\":false,\"isFront\":true,\"currentLanguage\":\"en\"},\"pluralDelimiter\":\"\\u0003\",\"bootstrap\":{\"forms_has_error_value_toggle\":1,\"modal_animation\":1,\"modal_backdrop\":\"true\",\"modal_keyboard\":1,\"modal_show\":1,\"modal_size\":\"\",\"popover_enabled\":1,\"popover_animation\":1,\"popover_container\":\"body\",\"popover_content\":\"\",\"popover_delay\":\"0\",\"popover_html\":0,\"popover_placement\":\"right\",\"popover_selector\":\"\",\"popover_title\":\"\",\"popover_trigger\":\"click\",\"popover_trigger_autoclose\":1,\"tooltip_enabled\":1,\"tooltip_animation\":1,\"tooltip_container\":\"body\",\"tooltip_delay\":\"0\",\"tooltip_html\":0,\"tooltip_placement\":\"auto left\",\"tooltip_selector\":\"\",\"tooltip_trigger\":\"hover\"},\"ajaxTrustedUrl\":{\"\\/search\\/node\":true},\"user\":{\"uid\":0,\"permissionsHash\":\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\"}}</script>\n<script src=\"/sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js\"></script>\n\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:18:{i:0;s:26:\"languages:language_content\";i:1;s:28:\"languages:language_interface\";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:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:8:\"url.path\";i:8;s:17:\"url.path.is_front\";i:9;s:15:\"url.path.parent\";i:10;s:30:\"url.query_args:_wrapper_format\";i:11;s:8:\"url.site\";i:12;s:4:\"user\";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:12:\"\0*\0cacheTags\";a:103:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:16:\"block_content:25\";i:3;s:16:\"block_content:27\";i:4;s:16:\"block_content:28\";i:5;s:16:\"block_content:29\";i:6;s:16:\"block_content:30\";i:7;s:15:\"block_content:7\";i:8;s:18:\"block_content_view\";i:9;s:10:\"block_view\";i:10;s:32:\"config:block.block.choosingyaffs\";i:11;s:29:\"config:block.block.cookieinfo\";i:12;s:32:\"config:block.block.downloadyaffs\";i:13;s:30:\"config:block.block.footerlegal\";i:14;s:39:\"config:block.block.frontimagehighlight2\";i:15;s:32:\"config:block.block.frontpagehero\";i:16;s:39:\"config:block.block.frontpageprimeryaffs\";i:17;s:33:\"config:block.block.mainnavigation\";i:18;s:35:\"config:block.block.mainnavigation_2\";i:19;s:29:\"config:block.block.searchform\";i:20;s:31:\"config:block.block.sitebranding\";i:21;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:22;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:23;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:24;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:25;s:37:\"config:block.block.yaffs_account_menu\";i:26;s:33:\"config:block.block.yaffs_block_10\";i:27;s:32:\"config:block.block.yaffs_block_5\";i:28;s:32:\"config:block.block.yaffs_block_6\";i:29;s:32:\"config:block.block.yaffs_block_8\";i:30;s:32:\"config:block.block.yaffs_block_9\";i:31;s:36:\"config:block.block.yaffs_breadcrumbs\";i:32;s:32:\"config:block.block.yaffs_content\";i:33;s:29:\"config:block.block.yaffs_help\";i:34;s:36:\"config:block.block.yaffs_local_tasks\";i:35;s:33:\"config:block.block.yaffs_messages\";i:36;s:35:\"config:block.block.yaffs_page_title\";i:37;s:32:\"config:block.block.yaffs_user_21\";i:38;s:31:\"config:block.block.yaffsinspace\";i:39;s:17:\"config:block_list\";i:40;s:24:\"config:color.theme.yaffs\";i:41;s:30:\"config:field.storage.node.body\";i:42;s:41:\"config:field.storage.node.field_icon_text\";i:43;s:44:\"config:field.storage.node.field_teaser_image\";i:44;s:47:\"config:field.storage.node.field_yaffs_user_logo\";i:45;s:32:\"config:field.storage.node.upload\";i:46;s:31:\"config:filter.format.basic_html\";i:47;s:30:\"config:filter.format.full_html\";i:48;s:29:\"config:filter.format.raw_html\";i:49;s:28:\"config:image.style.pdf_image\";i:50;s:24:\"config:image.style.small\";i:51;s:22:\"config:search.settings\";i:52;s:26:\"config:system.menu.account\";i:53;s:23:\"config:system.menu.main\";i:54;s:18:\"config:system.site\";i:55;s:26:\"config:user.role.anonymous\";i:56;s:44:\"config:views.view.highlighted_yaffs_features\";i:57;s:44:\"config:views.view.yaffs_documents_highlights\";i:58;s:34:\"config:views.view.yaffs_user_logos\";i:59;s:8:\"file:108\";i:60;s:8:\"file:109\";i:61;s:8:\"file:110\";i:62;s:7:\"file:40\";i:63;s:7:\"file:43\";i:64;s:7:\"file:44\";i:65;s:7:\"file:45\";i:66;s:7:\"file:46\";i:67;s:7:\"file:47\";i:68;s:7:\"file:48\";i:69;s:7:\"file:76\";i:70;s:7:\"file:77\";i:71;s:7:\"file:85\";i:72;s:13:\"http_response\";i:73;s:7:\"media:5\";i:74;s:7:\"media:8\";i:75;s:7:\"media:9\";i:76;s:7:\"node:32\";i:77;s:8:\"node:344\";i:78;s:8:\"node:353\";i:79;s:8:\"node:384\";i:80;s:8:\"node:385\";i:81;s:8:\"node:388\";i:82;s:8:\"node:389\";i:83;s:8:\"node:397\";i:84;s:8:\"node:398\";i:85;s:8:\"node:399\";i:86;s:8:\"node:400\";i:87;s:8:\"node:401\";i:88;s:8:\"node:407\";i:89;s:8:\"node:408\";i:90;s:8:\"node:409\";i:91;s:8:\"node:448\";i:92;s:8:\"node:451\";i:93;s:8:\"node:457\";i:94;s:8:\"node:460\";i:95;s:8:\"node:462\";i:96;s:8:\"node:466\";i:97;s:8:\"node:487\";i:98;s:9:\"node_list\";i:99;s:9:\"node_view\";i:100;s:8:\"rendered\";i:101;s:6:\"user:0\";i:102;s:6:\"user:1\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:5:{s:7:\"library\";a:10:{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:18:\"views/views.module\";i:10;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:22:{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:84:\"A Robust Flash File System Since 2002 | 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:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:9:\"shortlink\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:13:\"canonical_url\";}i:3;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:4;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: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:11:\"description\";}i:5;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:6;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:7;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:8;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:9;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:10;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:11;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: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: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: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: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: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: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: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: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: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: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: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: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:18;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:19;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\";}i:20;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";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;s:67:\"html_head_link:shortcut icon:/sites/default/files/yaffs_favicon.png\";}i:21;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}}i:1;s:29:\"html_head_link:revision:/home\";}}s:12:\"placeholders\";a:0:{}s:14:\"drupalSettings\";a:5:{s:4:\"path\";a:7:{s:7:\"baseUrl\";s:1:\"/\";s:10:\"scriptPath\";N;s:10:\"pathPrefix\";s:0:\"\";s:11:\"currentPath\";s:8:\"node/487\";s:18:\"currentPathIsAdmin\";b:0;s:7:\"isFront\";b:1;s:15:\"currentLanguage\";s:2:\"en\";}s:15:\"pluralDelimiter\";s:1:\"\";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:4:\"user\";a:2:{s:3:\"uid\";i:0;s:15:\"permissionsHash\";s:64:\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\";}}s:11:\"http_header\";a:1:{i:0;a:3:{i:0;s:4:\"Link\";i:1;s:23:\"</home>; rel=\"revision\"\";i:2;b:0;}}}}',-1,1509014923.369,1,'block_content:18 block_content:23 block_content:25 block_content:27 block_content:28 block_content:29 block_content:30 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:field.storage.node.body config:field.storage.node.field_icon_text config:field.storage.node.field_teaser_image config:field.storage.node.field_yaffs_user_logo config:field.storage.node.upload config:filter.format.basic_html config:filter.format.full_html config:filter.format.raw_html config:image.style.pdf_image config:image.style.small config:search.settings config:system.menu.account config:system.menu.main config:system.site config:user.role.anonymous config:views.view.highlighted_yaffs_features config:views.view.yaffs_documents_highlights config:views.view.yaffs_user_logos file:108 file:109 file:110 file:40 file:43 file:44 file:45 file:46 file:47 file:48 file:76 file:77 file:85 http_response media:5 media:8 media:9 node:32 node:344 node:353 node:384 node:385 node:388 node:389 node:397 node:398 node:399 node:400 node:401 node:407 node:408 node:409 node:448 node:451 node:457 node:460 node:462 node:466 node:487 node_list node_view rendered user:0 user:1','3553'),('https://yaffs.net/?_=1508111293745:html','O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:14:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";s:22:\"x-drupal-dynamic-cache\";s:22:\"X-Drupal-Dynamic-Cache\";s:4:\"link\";s:4:\"Link\";s:15:\"x-ua-compatible\";s:15:\"X-UA-Compatible\";s:16:\"content-language\";s:16:\"Content-language\";s:22:\"x-content-type-options\";s:22:\"X-Content-Type-Options\";s:15:\"x-frame-options\";s:15:\"X-Frame-Options\";s:7:\"expires\";s:7:\"Expires\";s:13:\"last-modified\";s:13:\"Last-Modified\";s:4:\"etag\";s:4:\"ETag\";s:4:\"vary\";s:4:\"Vary\";s:11:\"x-generator\";s:11:\"X-Generator\";}s:10:\"\0*\0headers\";a:14:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:19:\"max-age=300, public\";}s:4:\"date\";a:1:{i:0;s:29:\"Sun, 15 Oct 2017 23:44:29 GMT\";}s:22:\"x-drupal-dynamic-cache\";a:1:{i:0;s:4:\"MISS\";}s:4:\"link\";a:4:{i:0;s:23:\"</home>; rel=\"revision\"\";i:1;s:108:\"</sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh>; rel=preload; as=style\";i:2;s:108:\"</sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh>; rel=preload; as=style\";i:3;s:99:\"</sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js>; rel=preload; as=script\";}s:15:\"x-ua-compatible\";a:1:{i:0;s:7:\"IE=edge\";}s:16:\"content-language\";a:1:{i:0;s:2:\"en\";}s:22:\"x-content-type-options\";a:1:{i:0;s:7:\"nosniff\";}s:15:\"x-frame-options\";a:1:{i:0;s:10:\"SAMEORIGIN\";}s:7:\"expires\";a:1:{i:0;s:29:\"Sun, 19 Nov 1978 05:00:00 GMT\";}s:13:\"last-modified\";a:1:{i:0;s:29:\"Sun, 15 Oct 2017 23:44:28 GMT\";}s:4:\"etag\";a:1:{i:0;s:12:\"\"1508111068\"\";}s:4:\"vary\";a:1:{i:0;s:6:\"Cookie\";}s:11:\"x-generator\";a:1:{i:0;s:33:\"Drupal 8 (https://www.drupal.org)\";}}s:15:\"\0*\0cacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}}s:10:\"\0*\0content\";s:51777:\"<!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    <meta charset=\"utf-8\" />\n<meta name=\"title\" content=\"A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use\" />\n<link rel=\"shortlink\" href=\"https://yaffs.net/\" />\n<link rel=\"canonical\" href=\"https://yaffs.net/\" />\n<meta name=\"news_keywords\" content=\"Flash File System\" />\n<meta name=\"description\" content=\"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.\" />\n<meta name=\"abstract\" content=\"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.\" />\n<meta name=\"keywords\" content=\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\" />\n<meta name=\"Generator\" content=\"Drupal 8 (https://www.drupal.org)\" />\n<meta name=\"MobileOptimized\" content=\"width\" />\n<meta name=\"HandheldFriendly\" content=\"true\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"shortcut icon\" href=\"/sites/default/files/yaffs_favicon.png\" type=\"image/png\" />\n<link rel=\"revision\" href=\"/home\" />\n\n    <title>A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use</title>\n    <link rel=\"stylesheet\" href=\"/sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"/sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh\" media=\"all\" />\n\n    \n<!--[if lte IE 8]>\n<script src=\"/sites/default/files/js/js_VtafjXmRvoUgAzqzYTA3Wrjkx9wcWhjP0G4ZnnqRamA.js\"></script>\n<![endif]-->\n\n  </head>\n  <body class=\"fontyourface path-frontpage 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\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\">A Robust Flash File System Since 2002</span>\n</h1>\n\n  <article role=\"article\" about=\"/home\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" 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<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\n<section id=\"block-yaffsinspace\" class=\"panel yaffs-shout well block block-block-content block-block-content9f676777-54d9-40d2-86dd-174fff14ab1a clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h3><em>New!</em> Yaffs in space!</h3>\n<p><strong><img alt=\"Tess satellite\" data-entity-type=\"file\" data-entity-uuid=\"f06319f1-b6ac-41e2-a70d-a4c4da605b87\" height=\"246\" src=\"/sites/default/files/inline-images/tess_satellite_0.gif\" width=\"347\" class=\"align-right\" />NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n<p>Some File Systems are not robust enough to be suitable for such exacting work.<br />\n </p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n        \n                              <div class=\"front_highlight row\">\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-1\">\n    <section id=\"block-choosingyaffs\" class=\"block block-block-content block-block-contentae8f54b9-5315-4995-a49e-c0780f3a88cc clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/documents/considerations-choosing-flash-file-system\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/choosing_yaffs_0.jpg?itok=YuV5Z__e\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Choosing Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-2\">\n    <section id=\"block-frontimagehighlight2\" class=\"block block-block-content block-block-contentfa53fc80-f3c4-4d6e-b947-0a3bcd479480 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/yaffs-action\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/atm_1.jpg?itok=HfIny6EH\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"ATM\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-3\">\n    <section id=\"block-downloadyaffs\" class=\"block block-block-content block-block-contenteed71eb7-98b2-4109-aabe-7718283459ad clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/get-yaffs\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/download_now_0.jpg?itok=XdRx8zkI\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Download Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n            </div>\n                        </section>\n\n                </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-1\">\n        <div class=\"container\">\n        \n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-2\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-2\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-user-logos-block-1 clearfix\" id=\"block-views-block-yaffs-user-logos-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-user-logos view-id-yaffs_user_logos view-display-id-block_1 js-view-dom-id-edd57e723e39a595ff024f55445d87b87e77bd4c4914ae81074adb1d9ec5a119\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-user-logos-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/designA_logo.png?itok=5VWxByrk\" width=\"200\" height=\"141\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/eaton_logo.png?itok=kExm8d-W\" width=\"200\" height=\"84\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/LANCOM_Logo_4c.png?itok=ZIDg8yYt\" width=\"200\" height=\"50\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/bernina_international_logo.png?itok=G8DeIWtW\" width=\"200\" height=\"30\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/gallagher_logo.png?itok=lQyDJeN1\" width=\"200\" height=\"65\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/android_logo.png?itok=MShHoIK7\" width=\"170\" height=\"71\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/leica_logo.png?itok=Ne2u8w3-\" width=\"200\" height=\"130\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/yaffs-action\">Who uses Yaffs? Read more...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-3\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-3\">\n    <section class=\"views-element-container block block-views block-views-blockhighlighted-yaffs-features-block-1 clearfix\" id=\"block-views-block-highlighted-yaffs-features-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-highlighted-yaffs-features view-id-highlighted_yaffs_features view-display-id-block_1 js-view-dom-id-034fb1f12713a86dcb5aee2cc71239b7f9af0ac7fc0e81e2c5f3d09378b26f1c\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-highlighted-yaffs-features-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-thumbs-up\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#384\"><h3>Royalty Free... </h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Whether you use Yaffs under the GNU General Public Licence or under a commercial licence, Yaffs is free of any royalty. No need to worry about rising costs for your hit product!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-shield\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#385\"><h3>A robust flash file system...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">After more than 100,000 <strong>random</strong> power-failures during reading or writing, a test file showed NO data corruption at all!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-heart\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#388\"><h3>Yaffs is Open Source...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">You can have a look at the code at any time. <a href=\"/downloads\">Download it now</a>! And it\'s suitable for GPL and commercially licensed projects.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-mobile-phone\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#389\"><h3>Tried and tested in millions of devices...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Yaffs is widely used in Linux and proprietary commercial RTOSs. It\'s been included in hundreds of devices, and shipped as part of Google\'s Android, with millions of units sold.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-space-shuttle\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#407\"><h3>Booting is fast...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">It is important for a Flash filesystem to boot fast, so boot speed was a fundamental consideration in the design of Yaffs.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-users\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#408\"><h3>An active community...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">There\'s an active community of people who use Yaffs and who have developed with Yaffs, just a click or two away.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/features\">Lots more Yaffs features...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-4\">\n        <div class=\"container\" >\n          <div class=\"region region-front-pane-4\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-documents-highlights-block-1 clearfix\" id=\"block-views-block-yaffs-documents-highlights-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-documents-highlights view-id-yaffs_documents_highlights view-display-id-block_1 js-view-dom-id-aa8462b2c5c94041df5b3c3dc81b0b0859d4a62f70e7648a170780714ba8b0c4\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-documents-highlights-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-sample\" hreflang=\"und\">Yaffs Licence Sample</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">While the Yaffs code is available free of charge under GNU General Public Licence, version 2, that entails the obligation to disclose Source Code for your application using Yaffs. An Aleph One Licence does not impose that obligation and so is attractive for proprietary projects. This sample Licence provides an example of the points we expect a Licence to cover.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-overview\" hreflang=\"und\">Yaffs Overview</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">YAFFS is a filesystem designed specifically for the characteristics of NAND flash. This page gives an overview of the project - what is available, how it works, how to use it, developer resources, and licensing options.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-faqs\" hreflang=\"und\">Yaffs Licence FAQs</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Some questions about the commercial licence for Yaffs and how we arrive at one.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/faq\" hreflang=\"und\">FAQ</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Common questions about Yaffs technical issues.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/licences-more-background-and-detail\" hreflang=\"und\">Licences - more background and detail</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>More on the details and background of Licences for Yaffs</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf.png?itok=ROOk6w-T\" width=\"150\" height=\"212\" alt=\"Preview of ConsiderationsInChoosingAFlashFileSystem.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/considerations-choosing-flash-file-system\" hreflang=\"und\">Considerations in Choosing a Flash File System</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Failures in an embedded File System in a product are much more serious to the user than failures in an office computer.&nbsp; Power failures and failures to cache data properly can be avoided by choosing a FFS specifically designed for reliability from the ground up.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/ConsiderationsInChoosingAFlashFileSystem_0.pdf\" type=\"application/pdf; length=131376\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">ConsiderationsInChoosingAFlashFileSystem.pdf</a></span><span class=\"file-size\">128.3 KB</span></span></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/HowYaffsWorks.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/HowYaffsWorks.pdf.png?itok=_nJu31C0\" width=\"150\" height=\"194\" alt=\"Preview of HowYaffsWorks.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/how-yaffs-works\" hreflang=\"und\">How Yaffs works</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">This document gives an explanation of most of the core mechanisms that make Yaffs work. As of the time of writing this, the Yaffs2 code base includes approximately 19,000 lines of code making a very detailed discussion impractical. This document is the starting point for understanding Yaffs. Further detailed questions and discussions are welcomed on the Yaffs discussion list.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/HowYaffsWorks.pdf\" type=\"application/pdf; length=402514\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">HowYaffsWorks.pdf</a></span><span class=\"file-size\">393.08 KB</span></span></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/YaffsTuning.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/YaffsTuning.pdf.png?itok=idZTTQBs\" alt=\"Preview of YaffsTuning.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/yaffs-tuning\" hreflang=\"und\">Yaffs Tuning</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>This document describes the parameters which can be modified by the developer in the different phases of applying, debugging, and routine use of Yaffs.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/YaffsTuning.pdf\" type=\"application/pdf; length=93667\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsTuning.pdf</a></span><span class=\"file-size\">91.47 KB</span></span></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/documents\">All the Yaffs documentation...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n    <div class=\"container-fluid front-pane-5\">\n                <div class=\"container\" >\n              <div class=\"region region-front-pane-5\">\n    <section id=\"block-frontpageprimeryaffs\" class=\"block block-block-content block-block-contente7a8d2de-4fbb-4680-9e18-fe4d8337f1d6 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h1>Flash file systems primer</h1>\n<h2>Background &amp; basics</h2>\n<h3><span>What is a </span><span>F</span><span>lash </span><span>F</span><span>ile </span><span>S</span><span>ystem</span>?</h3>\n<p><span>A <span>Flash File System</span> stores data on flash memory, rather than a hard drive. Flash is used because it’s faster, much more tolerant of physical stress and takes less power. A <span>flash filesystem</span> is used to manage the data and get the best out of flash memory.</span></p>\n<p><span>As two examples, a flash memory chip needs to be erased in blocks before it is rewritten and a flash file system will manage that; flash memory has a limited number of writes per block so many flash file systems incorporate a <span>wear levelling</span> mechanism to ensure the writes are spread out.</span></p>\n<p><span>A flash file system is most useful as a part of an embedded system,. As a developer, you <em>can</em>&nbsp;read from and write directly to your Flash memory on an embedded system, but unless your use is extremely limited, you\'ll probably find that you come up against problems that Flash file systems have already solved.</span></p>\n<h3>What are NAND flash &amp; NOR flash?</h3>\n<p><span>These are the two fundamental flash architectures and have very different characteristics in performance, reliability, erase cycles, life span, and price. They also differ fundamentally from hard disk drives, and so need specialised handling.</span></p>\n<table>\n<tbody>\n <tr>\n  <td>\n  <p>&nbsp;</p>\n   </td>\n  <td>\n  <p>NAND flash</p>\n   </td>\n  <td>\n  <p>NOR flash</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage density</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Read performance</p>\n   </td>\n  <td>\n  <p>Fast</p>\n   </td>\n  <td>\n  <p>Fast (may be slowed by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Write performance</p>\n   </td>\n  <td>\n  <p>Faster</p>\n   </td>\n  <td>\n  <p>Slower (may be slowed further by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Erase performance</p>\n   </td>\n  <td>\n  <p>Faster (low ms typically)</p>\n   </td>\n  <td>\n  <p>Slower (possibly seconds)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage reliability</p>\n   </td>\n  <td>\n  <p>Lower (without management)</p>\n   </td>\n  <td>\n  <p>Better</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Life span</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Price</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n </tr>\n</tbody>\n</table>\n<p><span>Yaffs is both an <span>embedded NAN</span><span>D flash file system</span> and an <span>embedded N</span><span>OR Flash file system</span>. It can handle SLC, TLC and MLC NAND. It also works on MLC and SLC NOR. And it can work with parallel or serial access including Serial Peripheral Bus (SPI).</span></p>\n<h3>What special functions does a <span>file system </span><span>for flash</span> include?</h3>\n<p><span>As well as the normal file system functions, a <span>flash file system embedded</span> in hardware should help the device to start and stop quickly and deal well with losing power with no warning, without corrupting the data; and, manage the foibles of flash memory, protecting the stored data with extreme reliability. (Read our paper <a href=\"/documents/considerations-choosing-flash-file-system\">Considerations in Choosing a Flash File System</a>.)</span></p>\n<p><span><span>To these ends, an embedded flash file system must employ extra steps to achieve these such as using log structuring, rather than traditional file structuring plus a flash translation layer; manage power loss and recovery; include flash memory wear levelling; deal with the unreliability of flash from read and write disturbs, by using error correction (ECC), bad block remapping, over provision and flash block refreshing; ensure it’s ready to write fast by using garbage collection and flash block erase to prepare; and manage writing while avoiding write amplification. </span></span></p>\n<h4>What is a log-structured file system?</h4>\n<p><span>Log structuring means that data is written to the file system as a sequence of changes to the file system. This has the advantage that there is less overhead, and so it\'s faster than a non-log-structured system. More important though is that it is more robust against power failure. It also means that a file may be fragmented. For hard drives, fragmentation can mean much slower access due to the time required to mechanically move the read heads around the disk, but flash memory has no moving parts so there is no overhead for flash.</span></p>\n<p><span>Yaffs is log structured a <span>flash file system </span><span>architecture</span> which is faster and more robust than the alternatives.</span></p>\n<h4>What is a <span>Flash Translation Layer</span> (FTL) ?</h4>\n<p><span>It is sometimes desirable to use regular block file systems (such as FAT) with flash memory. In such cases, a Flash Translation Layer presents flash memory or a flash file system as if it\'s an ordinary hard drive.</span></p>\n<p><span>An FTL is an incomplete storage solution it still requires a file system. This makes two layers where data can be damaged and lost: in the FTL and in the <span>flash memory </span><span>file system</span>.</span></p>\n<p><span>True <span>file systems for flash memory</span>, such as Yaffs, do not use FTLs. They deal directly with the idiosyncrasies of flash, providing a faster and more reliable solution.</span></p>\n<h4>What is power loss recovery?</h4>\n<p><span>When power to any storage device is suddenly lost, the device can end up in an unknown state and may have damaged areas. Most file systems have to work hard to ensure that they are in a consistent state after power loss. <span>E</span><span>mbedded file systems</span> <span>for flash</span> may make allowances for unscheduled power loss with a recovery process.</span></p>\n<p><span>Yaffs is built with fault tolerance as a guiding principle and so is designed so power loss is considered a normal event.</span></p>\n<h4>What is <span>wear levelling</span>?</h4>\n<p><span>Flash chips wear out. Each time a part of the flash memory is erased and written, it is slightly damaged. <span>Embedded f</span><span>lash file systems</span> note the danger, and sometimes try to spread the damage rather than having it concentrated in one region, so prolonging the life of the memory and the life of the device.</span></p>\n<p><span>Yaffs is designed so that extra <span>wear leveling</span> is unnecessary. Instead, it’s automatically <span>wear levelling</span> because of the log structure.</span></p>\n<h4>What is flash read disturb? What is flash write disturb?</h4>\n<p><span><a href=\"/documents/yaffs-nand-flash-failure-mitigation\">NAND flash may experience degradation or loss of data</a> owing to reads of pages in the same block or data changes in neighbouring blocks of the NAND device. This is particularly true for MLC NAND.</span></p>\n<p><span>Yaffs uses block refreshing to deal with such problems.</span></p>\n<h4>What is flash error correction/flash ECC?</h4>\n<p><span>There are ways in which flash memory can be corrupted – for instance F-N tunnelling problems and leaky oxide layers. See our <a href=\"/documents/yaffs-nand-flash-failure-mitigation\">detailed discussion of flash memory problems</a>.</span></p>\n<p><span>But every bit counts, and especially if it\'s part of critical data or essential to the correct working of a system. Flash error correction keeps track of a section of memory to tell if there\'s corruption, and provides ways to correct these small errors.</span></p>\n<p><span>Yaffs can use hardware or software based ECC.</span></p>\n<h4>What is bad-block remapping?</h4>\n<p><span>File systems are built upon storing data on physical media. But all media suffers deterioration. Some hardware or <span>flash media </span><span>file systems</span> keep lists of damaged regions and behind the scenes, substitute known good ones in their place.</span></p>\n<p><span>Because of the way that Yaffs works, there\'s no need for bad block remapping because it isn’t a block structured file system.</span></p>\n<h4>What is <span>o</span><span>ver-provisioning</span> ?</h4>\n<p><span>Knowing that the media will degrade and suffer errors, and needing space to alter data because of the nature of flash memory, sometimes a <span>flash memory based </span><span>file system</span> puts aside a portion of the media for this use. This is <span>overprovisioning</span>. Often this space used when remapping bad blocks.</span></p>\n<p><span>Because Yaffs is log structured, it has the advantage that it does not need <span>over provision</span><span>ing</span>, making more memory available to store data.</span></p>\n<h4>What is flash block refreshing?</h4>\n<p><span>To counteract the problems of unreliable flash memory – for instance errors due to read and write disturbs – a flash filesystem can refresh the memory, by making a new copy of a block.</span></p>\n<p><span>Yaffs includes flash block refreshing.</span></p>\n<h4>What is flash garbage collection?</h4>\n<p><span>When a file is deleted, or a part of a file is overwritten, file systems often simply mark the flash space as deleted, rather than removing it. Later they reclaim the space for reuse. This is garbage collection.</span></p>\n<p><span>Yaffs has garbage collection to maximise the amount of data the file system can store.</span></p>\n<h4>What is flash block erase?</h4>\n<p><span>Data must be written into blank areas of the flash chip, but erasing takes time. Rather than erase and write at the same time, in order to speed writes, NAND and <span>NOR flash file systems</span> can prepare blocks for later use. This is not usually necessary for other storage media.</span></p>\n<p><span>As part of garbage collection, Yaffs uses a block erase strategy.</span></p>\n<h4>What is flash write amplification ?</h4>\n<p><span>In many block-based flash file systems, when data changes the new data must be written to the disk, and then the old data must be marked as invalid. A small change to the data can have consequences that propagate involving writing to the memory twice or more as the old data is cleaned up by garbage collection and files are organised to take the minimum amount of space. This is write amplification - a single small write causing a cascade of writes (and erases) of whole blocks.</span></p>\n<p><span>Yaffs avoids much of this problem by being log structured, meaning that flash memory is slower to reach it\'s maximum number of cycles, while writing is faster.</span></p>\n<h2>How does Yaffs work?</h2>\n<p><span>You can find full details in our paper <a href=\"/documents/how-yaffs-works\">How Yaffs Works</a>&nbsp;but briefly, here\'s how it works.</span></p>\n<p><span>It\'s a log-structured filing system. This also ensures that Yaffs is wear-levelling is built into the design because no one part of the flash memory is used any more than another.</span></p>\n<p><span>A Yaffs object is anything that Yaffs stores - for instance a file or a directory.</span></p>\n<p><span>The memory in NAND flash is arranged in pages. A page is the unit of allocation and programming. In Yaffs, the unit of allocation is called the chunk. Typically a chunk will be the same as a NAND page, but there is flexibility to use chunks which map to multiple pages (eg. A system may have two NAND chips in parallel requiring 2x2048 = 4096 byte chunks) . This distinction gives a lot of flexibility in how the system can be configured.</span></p>\n<p><span>A fixed but configurable number of chunks form a block which is the unit of erasure.</span></p>\n<p><span>NAND flash is shipped with bad blocks and further blocks may go bad during the operation of the device so Yaffs detects and marks bad blocks.</span></p>\n<p><span>NAND flash also typically requires the use of some sort of error detection and correction code (ECC). Yaffs can either use existing ECC logic or provide its own.</span></p>\n<p><span>Yaffs maintains data in RAM about the file system, but this is not needed for Yaffs to work - so the device can safely lose power at any point without data corruption.</span></p>\n<p><span>Here\'s how the Yaffs filesystem works to ensure data safety and a very fast startup... At regular points and on controlled shutdown, checkpoint blocks are written to the flash memory, containing all the data to quickly rebuild the file system. Under usual circumstances this checkpoint is used when a device is started, to very quickly rebuild the RAM data about the file system. If the checkpoint is determined to be corrupted, or if the user requested then the file system is rebuilt by scanning.</span></p>\n<p><span>To do this, Yaffs makes a prescan, to find the sequence numbers for blocks. Then it scans through blocks backwards to build up the list of chunks that make up objects. It speeds up this process by using Block Summaries, which are collections of all the tags in a data in a block. (But it\'s still always possible to go back to the chunks themselves, to find the tags, if a summary is missing or damaged.)</span></p>\n<p><span>And tags are how Yaffs tells that a chunk belongs to a particular object.</span></p>\n<p><span>Tags are also how Yaffs knows which chunks make up the current version of an object... Because the file system is log structured, if an object has been updated, only the latest chunks are used, giving the correct version of the object. A full description of the process is available in the technical documentation, and of course you can browse the code to see exactly how it all works; there\'s a lot more to tags, the metadata that they can hold, how they are stored, and how tags are used to link together objects into a file system with a POSIX interface.</span></p>\n<p><span>And of course that\'s not the end of the story. There\'s caching to deal with repeated small changes to data. There\'s garbage collection to let space be re-used, and Yaffs deals with collecting garbage differently depending on whether there\'s lots of free space or only a little. And part of making Yaffs a high performance flash file system is to make sure that re-useable blocks are erased well before they are needed, so that writing involves only a single operation. There\'s lazy loading to reduce scanning time. And all of this is built in a portable way, so that Yaffs can be configured to match almost any hardware, and can be ported to any operating system, or work on bare metal without an operating system. There\'s a test harness which is used to subject Yaffs to power failure, and ensure it works even with external data corruption. That\'s what makes it robust enough to send into space and to handle hundreds of terabytes of mission critical data.</span></p>\n<h4>Why is Yaffs special as an embedded flash file system?</h4>\n<p><span>Yaffs has been in use since 2002, and so it is hardened. It has been used in everything from phones to sewing machines to satellites. It is popular with Aerospace companies, and firms managing large infrastructure and in Point-of-Sale (POS) equipment (where customer feedback is very rapid!) It has been used in extreme conditions where it must not lose data, and where there is no chance for maintenance. It\'s been used for very large file systems up to 190TB. It\'s been used for safety critical applications, and millions of consumer devices.</span></p>\n<p><span>We carry out testing in a <a href=\"/documents/yaffs-robustness-and-testing\">rig which can simulate random power failures</a> and proved its reliability after tens to hundreds of millions of power failures.&nbsp;It\'s designed with an understanding of the constraints of flash memory and for speed.</span></p>\n<p><span>Yaffs works on multiple operating systems – Linux, VxWorks, Windows CE, eCos. - and also directly on bare metal, with no operating system. And it\'s easy to integrate into your RTOS or application using the Yaffs Direct Interface. It works with multiple types of flash memory - NAND &amp; NOR, SLC, MLC &amp; TLC.&nbsp;It\'s endian neutral. It\'s been used with 32-bit and 64-bit CPUs including MIPS, 68000, ARM, ColdFire, PowerPC and x86 variants. Yaffs has even been used with various DSP architectures! And it\'ll work with 16-bit with some tuning. So it can be configured to work with your design and the flash geometry that you need.</span></p>\n<p><span>And it\'s a <span>free embedded flash file system - </span><span>it’s open</span> <span>source</span>! <a href=\"/get-yaffs\">Grab the GPL version now</a>! Check out our the active community. And that\'s not the whole story - there are lots more reasons that make Yaffs special.&nbsp;</span></p>\n<p>&nbsp;</p>\n</div>\n      \n  </section>\n\n\n  </div>\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    <script type=\"application/json\" data-drupal-selector=\"drupal-settings-json\">{\"path\":{\"baseUrl\":\"\\/\",\"scriptPath\":null,\"pathPrefix\":\"\",\"currentPath\":\"node\\/487\",\"currentPathIsAdmin\":false,\"isFront\":true,\"currentLanguage\":\"en\",\"currentQuery\":{\"_\":\"1508111293745\"}},\"pluralDelimiter\":\"\\u0003\",\"bootstrap\":{\"forms_has_error_value_toggle\":1,\"modal_animation\":1,\"modal_backdrop\":\"true\",\"modal_keyboard\":1,\"modal_show\":1,\"modal_size\":\"\",\"popover_enabled\":1,\"popover_animation\":1,\"popover_container\":\"body\",\"popover_content\":\"\",\"popover_delay\":\"0\",\"popover_html\":0,\"popover_placement\":\"right\",\"popover_selector\":\"\",\"popover_title\":\"\",\"popover_trigger\":\"click\",\"popover_trigger_autoclose\":1,\"tooltip_enabled\":1,\"tooltip_animation\":1,\"tooltip_container\":\"body\",\"tooltip_delay\":\"0\",\"tooltip_html\":0,\"tooltip_placement\":\"auto left\",\"tooltip_selector\":\"\",\"tooltip_trigger\":\"hover\"},\"ajaxTrustedUrl\":{\"\\/search\\/node\":true},\"user\":{\"uid\":0,\"permissionsHash\":\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\"}}</script>\n<script src=\"/sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js\"></script>\n\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:18:{i:0;s:26:\"languages:language_content\";i:1;s:28:\"languages:language_interface\";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:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:8:\"url.path\";i:8;s:17:\"url.path.is_front\";i:9;s:15:\"url.path.parent\";i:10;s:30:\"url.query_args:_wrapper_format\";i:11;s:8:\"url.site\";i:12;s:4:\"user\";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:12:\"\0*\0cacheTags\";a:103:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:16:\"block_content:25\";i:3;s:16:\"block_content:27\";i:4;s:16:\"block_content:28\";i:5;s:16:\"block_content:29\";i:6;s:16:\"block_content:30\";i:7;s:15:\"block_content:7\";i:8;s:18:\"block_content_view\";i:9;s:10:\"block_view\";i:10;s:32:\"config:block.block.choosingyaffs\";i:11;s:29:\"config:block.block.cookieinfo\";i:12;s:32:\"config:block.block.downloadyaffs\";i:13;s:30:\"config:block.block.footerlegal\";i:14;s:39:\"config:block.block.frontimagehighlight2\";i:15;s:32:\"config:block.block.frontpagehero\";i:16;s:39:\"config:block.block.frontpageprimeryaffs\";i:17;s:33:\"config:block.block.mainnavigation\";i:18;s:35:\"config:block.block.mainnavigation_2\";i:19;s:29:\"config:block.block.searchform\";i:20;s:31:\"config:block.block.sitebranding\";i:21;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:22;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:23;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:24;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:25;s:37:\"config:block.block.yaffs_account_menu\";i:26;s:33:\"config:block.block.yaffs_block_10\";i:27;s:32:\"config:block.block.yaffs_block_5\";i:28;s:32:\"config:block.block.yaffs_block_6\";i:29;s:32:\"config:block.block.yaffs_block_8\";i:30;s:32:\"config:block.block.yaffs_block_9\";i:31;s:36:\"config:block.block.yaffs_breadcrumbs\";i:32;s:32:\"config:block.block.yaffs_content\";i:33;s:29:\"config:block.block.yaffs_help\";i:34;s:36:\"config:block.block.yaffs_local_tasks\";i:35;s:33:\"config:block.block.yaffs_messages\";i:36;s:35:\"config:block.block.yaffs_page_title\";i:37;s:32:\"config:block.block.yaffs_user_21\";i:38;s:31:\"config:block.block.yaffsinspace\";i:39;s:17:\"config:block_list\";i:40;s:24:\"config:color.theme.yaffs\";i:41;s:30:\"config:field.storage.node.body\";i:42;s:41:\"config:field.storage.node.field_icon_text\";i:43;s:44:\"config:field.storage.node.field_teaser_image\";i:44;s:47:\"config:field.storage.node.field_yaffs_user_logo\";i:45;s:32:\"config:field.storage.node.upload\";i:46;s:31:\"config:filter.format.basic_html\";i:47;s:30:\"config:filter.format.full_html\";i:48;s:29:\"config:filter.format.raw_html\";i:49;s:28:\"config:image.style.pdf_image\";i:50;s:24:\"config:image.style.small\";i:51;s:22:\"config:search.settings\";i:52;s:26:\"config:system.menu.account\";i:53;s:23:\"config:system.menu.main\";i:54;s:18:\"config:system.site\";i:55;s:26:\"config:user.role.anonymous\";i:56;s:44:\"config:views.view.highlighted_yaffs_features\";i:57;s:44:\"config:views.view.yaffs_documents_highlights\";i:58;s:34:\"config:views.view.yaffs_user_logos\";i:59;s:8:\"file:108\";i:60;s:8:\"file:109\";i:61;s:8:\"file:110\";i:62;s:7:\"file:40\";i:63;s:7:\"file:43\";i:64;s:7:\"file:44\";i:65;s:7:\"file:45\";i:66;s:7:\"file:46\";i:67;s:7:\"file:47\";i:68;s:7:\"file:48\";i:69;s:7:\"file:76\";i:70;s:7:\"file:77\";i:71;s:7:\"file:85\";i:72;s:13:\"http_response\";i:73;s:7:\"media:5\";i:74;s:7:\"media:8\";i:75;s:7:\"media:9\";i:76;s:7:\"node:32\";i:77;s:8:\"node:344\";i:78;s:8:\"node:353\";i:79;s:8:\"node:384\";i:80;s:8:\"node:385\";i:81;s:8:\"node:388\";i:82;s:8:\"node:389\";i:83;s:8:\"node:397\";i:84;s:8:\"node:398\";i:85;s:8:\"node:399\";i:86;s:8:\"node:400\";i:87;s:8:\"node:401\";i:88;s:8:\"node:407\";i:89;s:8:\"node:408\";i:90;s:8:\"node:409\";i:91;s:8:\"node:448\";i:92;s:8:\"node:451\";i:93;s:8:\"node:457\";i:94;s:8:\"node:460\";i:95;s:8:\"node:462\";i:96;s:8:\"node:466\";i:97;s:8:\"node:487\";i:98;s:9:\"node_list\";i:99;s:9:\"node_view\";i:100;s:8:\"rendered\";i:101;s:6:\"user:0\";i:102;s:6:\"user:1\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:5:{s:7:\"library\";a:10:{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:18:\"views/views.module\";i:10;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:22:{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:84:\"A Robust Flash File System Since 2002 | 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:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:9:\"shortlink\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:13:\"canonical_url\";}i:3;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:4;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: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:11:\"description\";}i:5;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:6;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:7;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:8;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:9;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:10;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:11;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: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: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: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: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: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: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: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: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: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: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: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: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:18;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:19;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\";}i:20;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";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;s:67:\"html_head_link:shortcut icon:/sites/default/files/yaffs_favicon.png\";}i:21;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}}i:1;s:29:\"html_head_link:revision:/home\";}}s:12:\"placeholders\";a:0:{}s:14:\"drupalSettings\";a:5:{s:4:\"path\";a:8:{s:7:\"baseUrl\";s:1:\"/\";s:10:\"scriptPath\";N;s:10:\"pathPrefix\";s:0:\"\";s:11:\"currentPath\";s:8:\"node/487\";s:18:\"currentPathIsAdmin\";b:0;s:7:\"isFront\";b:1;s:15:\"currentLanguage\";s:2:\"en\";s:12:\"currentQuery\";O:8:\"stdClass\":1:{s:1:\"_\";s:13:\"1508111293745\";}}s:15:\"pluralDelimiter\";s:1:\"\";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:4:\"user\";a:2:{s:3:\"uid\";i:0;s:15:\"permissionsHash\";s:64:\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\";}}s:11:\"http_header\";a:1:{i:0;a:3:{i:0;s:4:\"Link\";i:1;s:23:\"</home>; rel=\"revision\"\";i:2;b:0;}}}}',-1,1508111069.133,1,'block_content:18 block_content:23 block_content:25 block_content:27 block_content:28 block_content:29 block_content:30 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:field.storage.node.body config:field.storage.node.field_icon_text config:field.storage.node.field_teaser_image config:field.storage.node.field_yaffs_user_logo config:field.storage.node.upload config:filter.format.basic_html config:filter.format.full_html config:filter.format.raw_html config:image.style.pdf_image config:image.style.small config:search.settings config:system.menu.account config:system.menu.main config:system.site config:user.role.anonymous config:views.view.highlighted_yaffs_features config:views.view.yaffs_documents_highlights config:views.view.yaffs_user_logos file:108 file:109 file:110 file:40 file:43 file:44 file:45 file:46 file:47 file:48 file:76 file:77 file:85 http_response media:5 media:8 media:9 node:32 node:344 node:353 node:384 node:385 node:388 node:389 node:397 node:398 node:399 node:400 node:401 node:407 node:408 node:409 node:448 node:451 node:457 node:460 node:462 node:466 node:487 node_list node_view rendered user:0 user:1','3552'),('https://yaffs.net/?_=1508111367701:html','O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:14:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";s:22:\"x-drupal-dynamic-cache\";s:22:\"X-Drupal-Dynamic-Cache\";s:4:\"link\";s:4:\"Link\";s:15:\"x-ua-compatible\";s:15:\"X-UA-Compatible\";s:16:\"content-language\";s:16:\"Content-language\";s:22:\"x-content-type-options\";s:22:\"X-Content-Type-Options\";s:15:\"x-frame-options\";s:15:\"X-Frame-Options\";s:7:\"expires\";s:7:\"Expires\";s:13:\"last-modified\";s:13:\"Last-Modified\";s:4:\"etag\";s:4:\"ETag\";s:4:\"vary\";s:4:\"Vary\";s:11:\"x-generator\";s:11:\"X-Generator\";}s:10:\"\0*\0headers\";a:14:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:19:\"max-age=300, public\";}s:4:\"date\";a:1:{i:0;s:29:\"Sun, 15 Oct 2017 23:45:42 GMT\";}s:22:\"x-drupal-dynamic-cache\";a:1:{i:0;s:4:\"MISS\";}s:4:\"link\";a:4:{i:0;s:23:\"</home>; rel=\"revision\"\";i:1;s:108:\"</sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh>; rel=preload; as=style\";i:2;s:108:\"</sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh>; rel=preload; as=style\";i:3;s:99:\"</sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js>; rel=preload; as=script\";}s:15:\"x-ua-compatible\";a:1:{i:0;s:7:\"IE=edge\";}s:16:\"content-language\";a:1:{i:0;s:2:\"en\";}s:22:\"x-content-type-options\";a:1:{i:0;s:7:\"nosniff\";}s:15:\"x-frame-options\";a:1:{i:0;s:10:\"SAMEORIGIN\";}s:7:\"expires\";a:1:{i:0;s:29:\"Sun, 19 Nov 1978 05:00:00 GMT\";}s:13:\"last-modified\";a:1:{i:0;s:29:\"Sun, 15 Oct 2017 23:45:42 GMT\";}s:4:\"etag\";a:1:{i:0;s:12:\"\"1508111142\"\";}s:4:\"vary\";a:1:{i:0;s:6:\"Cookie\";}s:11:\"x-generator\";a:1:{i:0;s:33:\"Drupal 8 (https://www.drupal.org)\";}}s:15:\"\0*\0cacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}}s:10:\"\0*\0content\";s:51777:\"<!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    <meta charset=\"utf-8\" />\n<meta name=\"title\" content=\"A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use\" />\n<link rel=\"shortlink\" href=\"https://yaffs.net/\" />\n<link rel=\"canonical\" href=\"https://yaffs.net/\" />\n<meta name=\"news_keywords\" content=\"Flash File System\" />\n<meta name=\"description\" content=\"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.\" />\n<meta name=\"abstract\" content=\"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.\" />\n<meta name=\"keywords\" content=\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\" />\n<meta name=\"Generator\" content=\"Drupal 8 (https://www.drupal.org)\" />\n<meta name=\"MobileOptimized\" content=\"width\" />\n<meta name=\"HandheldFriendly\" content=\"true\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"shortcut icon\" href=\"/sites/default/files/yaffs_favicon.png\" type=\"image/png\" />\n<link rel=\"revision\" href=\"/home\" />\n\n    <title>A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use</title>\n    <link rel=\"stylesheet\" href=\"/sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"/sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh\" media=\"all\" />\n\n    \n<!--[if lte IE 8]>\n<script src=\"/sites/default/files/js/js_VtafjXmRvoUgAzqzYTA3Wrjkx9wcWhjP0G4ZnnqRamA.js\"></script>\n<![endif]-->\n\n  </head>\n  <body class=\"fontyourface path-frontpage 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\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\">A Robust Flash File System Since 2002</span>\n</h1>\n\n  <article role=\"article\" about=\"/home\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" 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<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\n<section id=\"block-yaffsinspace\" class=\"panel yaffs-shout well block block-block-content block-block-content9f676777-54d9-40d2-86dd-174fff14ab1a clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h3><em>New!</em> Yaffs in space!</h3>\n<p><strong><img alt=\"Tess satellite\" data-entity-type=\"file\" data-entity-uuid=\"f06319f1-b6ac-41e2-a70d-a4c4da605b87\" height=\"246\" src=\"/sites/default/files/inline-images/tess_satellite_0.gif\" width=\"347\" class=\"align-right\" />NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n<p>Some File Systems are not robust enough to be suitable for such exacting work.<br />\n </p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n        \n                              <div class=\"front_highlight row\">\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-1\">\n    <section id=\"block-choosingyaffs\" class=\"block block-block-content block-block-contentae8f54b9-5315-4995-a49e-c0780f3a88cc clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/documents/considerations-choosing-flash-file-system\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/choosing_yaffs_0.jpg?itok=YuV5Z__e\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Choosing Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-2\">\n    <section id=\"block-frontimagehighlight2\" class=\"block block-block-content block-block-contentfa53fc80-f3c4-4d6e-b947-0a3bcd479480 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/yaffs-action\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/atm_1.jpg?itok=HfIny6EH\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"ATM\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-3\">\n    <section id=\"block-downloadyaffs\" class=\"block block-block-content block-block-contenteed71eb7-98b2-4109-aabe-7718283459ad clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/get-yaffs\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/download_now_0.jpg?itok=XdRx8zkI\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Download Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n            </div>\n                        </section>\n\n                </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-1\">\n        <div class=\"container\">\n        \n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-2\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-2\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-user-logos-block-1 clearfix\" id=\"block-views-block-yaffs-user-logos-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-user-logos view-id-yaffs_user_logos view-display-id-block_1 js-view-dom-id-edd57e723e39a595ff024f55445d87b87e77bd4c4914ae81074adb1d9ec5a119\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-user-logos-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/designA_logo.png?itok=5VWxByrk\" width=\"200\" height=\"141\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/eaton_logo.png?itok=kExm8d-W\" width=\"200\" height=\"84\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/LANCOM_Logo_4c.png?itok=ZIDg8yYt\" width=\"200\" height=\"50\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/bernina_international_logo.png?itok=G8DeIWtW\" width=\"200\" height=\"30\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/gallagher_logo.png?itok=lQyDJeN1\" width=\"200\" height=\"65\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/android_logo.png?itok=MShHoIK7\" width=\"170\" height=\"71\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/leica_logo.png?itok=Ne2u8w3-\" width=\"200\" height=\"130\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/yaffs-action\">Who uses Yaffs? Read more...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-3\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-3\">\n    <section class=\"views-element-container block block-views block-views-blockhighlighted-yaffs-features-block-1 clearfix\" id=\"block-views-block-highlighted-yaffs-features-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-highlighted-yaffs-features view-id-highlighted_yaffs_features view-display-id-block_1 js-view-dom-id-034fb1f12713a86dcb5aee2cc71239b7f9af0ac7fc0e81e2c5f3d09378b26f1c\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-highlighted-yaffs-features-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-thumbs-up\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#384\"><h3>Royalty Free... </h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Whether you use Yaffs under the GNU General Public Licence or under a commercial licence, Yaffs is free of any royalty. No need to worry about rising costs for your hit product!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-shield\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#385\"><h3>A robust flash file system...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">After more than 100,000 <strong>random</strong> power-failures during reading or writing, a test file showed NO data corruption at all!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-heart\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#388\"><h3>Yaffs is Open Source...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">You can have a look at the code at any time. <a href=\"/downloads\">Download it now</a>! And it\'s suitable for GPL and commercially licensed projects.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-mobile-phone\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#389\"><h3>Tried and tested in millions of devices...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Yaffs is widely used in Linux and proprietary commercial RTOSs. It\'s been included in hundreds of devices, and shipped as part of Google\'s Android, with millions of units sold.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-space-shuttle\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#407\"><h3>Booting is fast...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">It is important for a Flash filesystem to boot fast, so boot speed was a fundamental consideration in the design of Yaffs.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-users\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#408\"><h3>An active community...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">There\'s an active community of people who use Yaffs and who have developed with Yaffs, just a click or two away.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/features\">Lots more Yaffs features...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-4\">\n        <div class=\"container\" >\n          <div class=\"region region-front-pane-4\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-documents-highlights-block-1 clearfix\" id=\"block-views-block-yaffs-documents-highlights-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-documents-highlights view-id-yaffs_documents_highlights view-display-id-block_1 js-view-dom-id-aa8462b2c5c94041df5b3c3dc81b0b0859d4a62f70e7648a170780714ba8b0c4\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-documents-highlights-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-sample\" hreflang=\"und\">Yaffs Licence Sample</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">While the Yaffs code is available free of charge under GNU General Public Licence, version 2, that entails the obligation to disclose Source Code for your application using Yaffs. An Aleph One Licence does not impose that obligation and so is attractive for proprietary projects. This sample Licence provides an example of the points we expect a Licence to cover.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-overview\" hreflang=\"und\">Yaffs Overview</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">YAFFS is a filesystem designed specifically for the characteristics of NAND flash. This page gives an overview of the project - what is available, how it works, how to use it, developer resources, and licensing options.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-faqs\" hreflang=\"und\">Yaffs Licence FAQs</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Some questions about the commercial licence for Yaffs and how we arrive at one.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/faq\" hreflang=\"und\">FAQ</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Common questions about Yaffs technical issues.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/licences-more-background-and-detail\" hreflang=\"und\">Licences - more background and detail</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>More on the details and background of Licences for Yaffs</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf.png?itok=ROOk6w-T\" width=\"150\" height=\"212\" alt=\"Preview of ConsiderationsInChoosingAFlashFileSystem.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/considerations-choosing-flash-file-system\" hreflang=\"und\">Considerations in Choosing a Flash File System</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Failures in an embedded File System in a product are much more serious to the user than failures in an office computer.&nbsp; Power failures and failures to cache data properly can be avoided by choosing a FFS specifically designed for reliability from the ground up.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/ConsiderationsInChoosingAFlashFileSystem_0.pdf\" type=\"application/pdf; length=131376\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">ConsiderationsInChoosingAFlashFileSystem.pdf</a></span><span class=\"file-size\">128.3 KB</span></span></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/HowYaffsWorks.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/HowYaffsWorks.pdf.png?itok=_nJu31C0\" width=\"150\" height=\"194\" alt=\"Preview of HowYaffsWorks.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/how-yaffs-works\" hreflang=\"und\">How Yaffs works</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">This document gives an explanation of most of the core mechanisms that make Yaffs work. As of the time of writing this, the Yaffs2 code base includes approximately 19,000 lines of code making a very detailed discussion impractical. This document is the starting point for understanding Yaffs. Further detailed questions and discussions are welcomed on the Yaffs discussion list.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/HowYaffsWorks.pdf\" type=\"application/pdf; length=402514\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">HowYaffsWorks.pdf</a></span><span class=\"file-size\">393.08 KB</span></span></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/YaffsTuning.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/YaffsTuning.pdf.png?itok=idZTTQBs\" alt=\"Preview of YaffsTuning.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/yaffs-tuning\" hreflang=\"und\">Yaffs Tuning</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>This document describes the parameters which can be modified by the developer in the different phases of applying, debugging, and routine use of Yaffs.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/YaffsTuning.pdf\" type=\"application/pdf; length=93667\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsTuning.pdf</a></span><span class=\"file-size\">91.47 KB</span></span></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/documents\">All the Yaffs documentation...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n    <div class=\"container-fluid front-pane-5\">\n                <div class=\"container\" >\n              <div class=\"region region-front-pane-5\">\n    <section id=\"block-frontpageprimeryaffs\" class=\"block block-block-content block-block-contente7a8d2de-4fbb-4680-9e18-fe4d8337f1d6 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h1>Flash file systems primer</h1>\n<h2>Background &amp; basics</h2>\n<h3><span>What is a </span><span>F</span><span>lash </span><span>F</span><span>ile </span><span>S</span><span>ystem</span>?</h3>\n<p><span>A <span>Flash File System</span> stores data on flash memory, rather than a hard drive. Flash is used because it’s faster, much more tolerant of physical stress and takes less power. A <span>flash filesystem</span> is used to manage the data and get the best out of flash memory.</span></p>\n<p><span>As two examples, a flash memory chip needs to be erased in blocks before it is rewritten and a flash file system will manage that; flash memory has a limited number of writes per block so many flash file systems incorporate a <span>wear levelling</span> mechanism to ensure the writes are spread out.</span></p>\n<p><span>A flash file system is most useful as a part of an embedded system,. As a developer, you <em>can</em>&nbsp;read from and write directly to your Flash memory on an embedded system, but unless your use is extremely limited, you\'ll probably find that you come up against problems that Flash file systems have already solved.</span></p>\n<h3>What are NAND flash &amp; NOR flash?</h3>\n<p><span>These are the two fundamental flash architectures and have very different characteristics in performance, reliability, erase cycles, life span, and price. They also differ fundamentally from hard disk drives, and so need specialised handling.</span></p>\n<table>\n<tbody>\n <tr>\n  <td>\n  <p>&nbsp;</p>\n   </td>\n  <td>\n  <p>NAND flash</p>\n   </td>\n  <td>\n  <p>NOR flash</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage density</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Read performance</p>\n   </td>\n  <td>\n  <p>Fast</p>\n   </td>\n  <td>\n  <p>Fast (may be slowed by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Write performance</p>\n   </td>\n  <td>\n  <p>Faster</p>\n   </td>\n  <td>\n  <p>Slower (may be slowed further by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Erase performance</p>\n   </td>\n  <td>\n  <p>Faster (low ms typically)</p>\n   </td>\n  <td>\n  <p>Slower (possibly seconds)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage reliability</p>\n   </td>\n  <td>\n  <p>Lower (without management)</p>\n   </td>\n  <td>\n  <p>Better</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Life span</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Price</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n </tr>\n</tbody>\n</table>\n<p><span>Yaffs is both an <span>embedded NAN</span><span>D flash file system</span> and an <span>embedded N</span><span>OR Flash file system</span>. It can handle SLC, TLC and MLC NAND. It also works on MLC and SLC NOR. And it can work with parallel or serial access including Serial Peripheral Bus (SPI).</span></p>\n<h3>What special functions does a <span>file system </span><span>for flash</span> include?</h3>\n<p><span>As well as the normal file system functions, a <span>flash file system embedded</span> in hardware should help the device to start and stop quickly and deal well with losing power with no warning, without corrupting the data; and, manage the foibles of flash memory, protecting the stored data with extreme reliability. (Read our paper <a href=\"/documents/considerations-choosing-flash-file-system\">Considerations in Choosing a Flash File System</a>.)</span></p>\n<p><span><span>To these ends, an embedded flash file system must employ extra steps to achieve these such as using log structuring, rather than traditional file structuring plus a flash translation layer; manage power loss and recovery; include flash memory wear levelling; deal with the unreliability of flash from read and write disturbs, by using error correction (ECC), bad block remapping, over provision and flash block refreshing; ensure it’s ready to write fast by using garbage collection and flash block erase to prepare; and manage writing while avoiding write amplification. </span></span></p>\n<h4>What is a log-structured file system?</h4>\n<p><span>Log structuring means that data is written to the file system as a sequence of changes to the file system. This has the advantage that there is less overhead, and so it\'s faster than a non-log-structured system. More important though is that it is more robust against power failure. It also means that a file may be fragmented. For hard drives, fragmentation can mean much slower access due to the time required to mechanically move the read heads around the disk, but flash memory has no moving parts so there is no overhead for flash.</span></p>\n<p><span>Yaffs is log structured a <span>flash file system </span><span>architecture</span> which is faster and more robust than the alternatives.</span></p>\n<h4>What is a <span>Flash Translation Layer</span> (FTL) ?</h4>\n<p><span>It is sometimes desirable to use regular block file systems (such as FAT) with flash memory. In such cases, a Flash Translation Layer presents flash memory or a flash file system as if it\'s an ordinary hard drive.</span></p>\n<p><span>An FTL is an incomplete storage solution it still requires a file system. This makes two layers where data can be damaged and lost: in the FTL and in the <span>flash memory </span><span>file system</span>.</span></p>\n<p><span>True <span>file systems for flash memory</span>, such as Yaffs, do not use FTLs. They deal directly with the idiosyncrasies of flash, providing a faster and more reliable solution.</span></p>\n<h4>What is power loss recovery?</h4>\n<p><span>When power to any storage device is suddenly lost, the device can end up in an unknown state and may have damaged areas. Most file systems have to work hard to ensure that they are in a consistent state after power loss. <span>E</span><span>mbedded file systems</span> <span>for flash</span> may make allowances for unscheduled power loss with a recovery process.</span></p>\n<p><span>Yaffs is built with fault tolerance as a guiding principle and so is designed so power loss is considered a normal event.</span></p>\n<h4>What is <span>wear levelling</span>?</h4>\n<p><span>Flash chips wear out. Each time a part of the flash memory is erased and written, it is slightly damaged. <span>Embedded f</span><span>lash file systems</span> note the danger, and sometimes try to spread the damage rather than having it concentrated in one region, so prolonging the life of the memory and the life of the device.</span></p>\n<p><span>Yaffs is designed so that extra <span>wear leveling</span> is unnecessary. Instead, it’s automatically <span>wear levelling</span> because of the log structure.</span></p>\n<h4>What is flash read disturb? What is flash write disturb?</h4>\n<p><span><a href=\"/documents/yaffs-nand-flash-failure-mitigation\">NAND flash may experience degradation or loss of data</a> owing to reads of pages in the same block or data changes in neighbouring blocks of the NAND device. This is particularly true for MLC NAND.</span></p>\n<p><span>Yaffs uses block refreshing to deal with such problems.</span></p>\n<h4>What is flash error correction/flash ECC?</h4>\n<p><span>There are ways in which flash memory can be corrupted – for instance F-N tunnelling problems and leaky oxide layers. See our <a href=\"/documents/yaffs-nand-flash-failure-mitigation\">detailed discussion of flash memory problems</a>.</span></p>\n<p><span>But every bit counts, and especially if it\'s part of critical data or essential to the correct working of a system. Flash error correction keeps track of a section of memory to tell if there\'s corruption, and provides ways to correct these small errors.</span></p>\n<p><span>Yaffs can use hardware or software based ECC.</span></p>\n<h4>What is bad-block remapping?</h4>\n<p><span>File systems are built upon storing data on physical media. But all media suffers deterioration. Some hardware or <span>flash media </span><span>file systems</span> keep lists of damaged regions and behind the scenes, substitute known good ones in their place.</span></p>\n<p><span>Because of the way that Yaffs works, there\'s no need for bad block remapping because it isn’t a block structured file system.</span></p>\n<h4>What is <span>o</span><span>ver-provisioning</span> ?</h4>\n<p><span>Knowing that the media will degrade and suffer errors, and needing space to alter data because of the nature of flash memory, sometimes a <span>flash memory based </span><span>file system</span> puts aside a portion of the media for this use. This is <span>overprovisioning</span>. Often this space used when remapping bad blocks.</span></p>\n<p><span>Because Yaffs is log structured, it has the advantage that it does not need <span>over provision</span><span>ing</span>, making more memory available to store data.</span></p>\n<h4>What is flash block refreshing?</h4>\n<p><span>To counteract the problems of unreliable flash memory – for instance errors due to read and write disturbs – a flash filesystem can refresh the memory, by making a new copy of a block.</span></p>\n<p><span>Yaffs includes flash block refreshing.</span></p>\n<h4>What is flash garbage collection?</h4>\n<p><span>When a file is deleted, or a part of a file is overwritten, file systems often simply mark the flash space as deleted, rather than removing it. Later they reclaim the space for reuse. This is garbage collection.</span></p>\n<p><span>Yaffs has garbage collection to maximise the amount of data the file system can store.</span></p>\n<h4>What is flash block erase?</h4>\n<p><span>Data must be written into blank areas of the flash chip, but erasing takes time. Rather than erase and write at the same time, in order to speed writes, NAND and <span>NOR flash file systems</span> can prepare blocks for later use. This is not usually necessary for other storage media.</span></p>\n<p><span>As part of garbage collection, Yaffs uses a block erase strategy.</span></p>\n<h4>What is flash write amplification ?</h4>\n<p><span>In many block-based flash file systems, when data changes the new data must be written to the disk, and then the old data must be marked as invalid. A small change to the data can have consequences that propagate involving writing to the memory twice or more as the old data is cleaned up by garbage collection and files are organised to take the minimum amount of space. This is write amplification - a single small write causing a cascade of writes (and erases) of whole blocks.</span></p>\n<p><span>Yaffs avoids much of this problem by being log structured, meaning that flash memory is slower to reach it\'s maximum number of cycles, while writing is faster.</span></p>\n<h2>How does Yaffs work?</h2>\n<p><span>You can find full details in our paper <a href=\"/documents/how-yaffs-works\">How Yaffs Works</a>&nbsp;but briefly, here\'s how it works.</span></p>\n<p><span>It\'s a log-structured filing system. This also ensures that Yaffs is wear-levelling is built into the design because no one part of the flash memory is used any more than another.</span></p>\n<p><span>A Yaffs object is anything that Yaffs stores - for instance a file or a directory.</span></p>\n<p><span>The memory in NAND flash is arranged in pages. A page is the unit of allocation and programming. In Yaffs, the unit of allocation is called the chunk. Typically a chunk will be the same as a NAND page, but there is flexibility to use chunks which map to multiple pages (eg. A system may have two NAND chips in parallel requiring 2x2048 = 4096 byte chunks) . This distinction gives a lot of flexibility in how the system can be configured.</span></p>\n<p><span>A fixed but configurable number of chunks form a block which is the unit of erasure.</span></p>\n<p><span>NAND flash is shipped with bad blocks and further blocks may go bad during the operation of the device so Yaffs detects and marks bad blocks.</span></p>\n<p><span>NAND flash also typically requires the use of some sort of error detection and correction code (ECC). Yaffs can either use existing ECC logic or provide its own.</span></p>\n<p><span>Yaffs maintains data in RAM about the file system, but this is not needed for Yaffs to work - so the device can safely lose power at any point without data corruption.</span></p>\n<p><span>Here\'s how the Yaffs filesystem works to ensure data safety and a very fast startup... At regular points and on controlled shutdown, checkpoint blocks are written to the flash memory, containing all the data to quickly rebuild the file system. Under usual circumstances this checkpoint is used when a device is started, to very quickly rebuild the RAM data about the file system. If the checkpoint is determined to be corrupted, or if the user requested then the file system is rebuilt by scanning.</span></p>\n<p><span>To do this, Yaffs makes a prescan, to find the sequence numbers for blocks. Then it scans through blocks backwards to build up the list of chunks that make up objects. It speeds up this process by using Block Summaries, which are collections of all the tags in a data in a block. (But it\'s still always possible to go back to the chunks themselves, to find the tags, if a summary is missing or damaged.)</span></p>\n<p><span>And tags are how Yaffs tells that a chunk belongs to a particular object.</span></p>\n<p><span>Tags are also how Yaffs knows which chunks make up the current version of an object... Because the file system is log structured, if an object has been updated, only the latest chunks are used, giving the correct version of the object. A full description of the process is available in the technical documentation, and of course you can browse the code to see exactly how it all works; there\'s a lot more to tags, the metadata that they can hold, how they are stored, and how tags are used to link together objects into a file system with a POSIX interface.</span></p>\n<p><span>And of course that\'s not the end of the story. There\'s caching to deal with repeated small changes to data. There\'s garbage collection to let space be re-used, and Yaffs deals with collecting garbage differently depending on whether there\'s lots of free space or only a little. And part of making Yaffs a high performance flash file system is to make sure that re-useable blocks are erased well before they are needed, so that writing involves only a single operation. There\'s lazy loading to reduce scanning time. And all of this is built in a portable way, so that Yaffs can be configured to match almost any hardware, and can be ported to any operating system, or work on bare metal without an operating system. There\'s a test harness which is used to subject Yaffs to power failure, and ensure it works even with external data corruption. That\'s what makes it robust enough to send into space and to handle hundreds of terabytes of mission critical data.</span></p>\n<h4>Why is Yaffs special as an embedded flash file system?</h4>\n<p><span>Yaffs has been in use since 2002, and so it is hardened. It has been used in everything from phones to sewing machines to satellites. It is popular with Aerospace companies, and firms managing large infrastructure and in Point-of-Sale (POS) equipment (where customer feedback is very rapid!) It has been used in extreme conditions where it must not lose data, and where there is no chance for maintenance. It\'s been used for very large file systems up to 190TB. It\'s been used for safety critical applications, and millions of consumer devices.</span></p>\n<p><span>We carry out testing in a <a href=\"/documents/yaffs-robustness-and-testing\">rig which can simulate random power failures</a> and proved its reliability after tens to hundreds of millions of power failures.&nbsp;It\'s designed with an understanding of the constraints of flash memory and for speed.</span></p>\n<p><span>Yaffs works on multiple operating systems – Linux, VxWorks, Windows CE, eCos. - and also directly on bare metal, with no operating system. And it\'s easy to integrate into your RTOS or application using the Yaffs Direct Interface. It works with multiple types of flash memory - NAND &amp; NOR, SLC, MLC &amp; TLC.&nbsp;It\'s endian neutral. It\'s been used with 32-bit and 64-bit CPUs including MIPS, 68000, ARM, ColdFire, PowerPC and x86 variants. Yaffs has even been used with various DSP architectures! And it\'ll work with 16-bit with some tuning. So it can be configured to work with your design and the flash geometry that you need.</span></p>\n<p><span>And it\'s a <span>free embedded flash file system - </span><span>it’s open</span> <span>source</span>! <a href=\"/get-yaffs\">Grab the GPL version now</a>! Check out our the active community. And that\'s not the whole story - there are lots more reasons that make Yaffs special.&nbsp;</span></p>\n<p>&nbsp;</p>\n</div>\n      \n  </section>\n\n\n  </div>\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    <script type=\"application/json\" data-drupal-selector=\"drupal-settings-json\">{\"path\":{\"baseUrl\":\"\\/\",\"scriptPath\":null,\"pathPrefix\":\"\",\"currentPath\":\"node\\/487\",\"currentPathIsAdmin\":false,\"isFront\":true,\"currentLanguage\":\"en\",\"currentQuery\":{\"_\":\"1508111367701\"}},\"pluralDelimiter\":\"\\u0003\",\"bootstrap\":{\"forms_has_error_value_toggle\":1,\"modal_animation\":1,\"modal_backdrop\":\"true\",\"modal_keyboard\":1,\"modal_show\":1,\"modal_size\":\"\",\"popover_enabled\":1,\"popover_animation\":1,\"popover_container\":\"body\",\"popover_content\":\"\",\"popover_delay\":\"0\",\"popover_html\":0,\"popover_placement\":\"right\",\"popover_selector\":\"\",\"popover_title\":\"\",\"popover_trigger\":\"click\",\"popover_trigger_autoclose\":1,\"tooltip_enabled\":1,\"tooltip_animation\":1,\"tooltip_container\":\"body\",\"tooltip_delay\":\"0\",\"tooltip_html\":0,\"tooltip_placement\":\"auto left\",\"tooltip_selector\":\"\",\"tooltip_trigger\":\"hover\"},\"ajaxTrustedUrl\":{\"\\/search\\/node\":true},\"user\":{\"uid\":0,\"permissionsHash\":\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\"}}</script>\n<script src=\"/sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js\"></script>\n\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:18:{i:0;s:26:\"languages:language_content\";i:1;s:28:\"languages:language_interface\";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:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:8:\"url.path\";i:8;s:17:\"url.path.is_front\";i:9;s:15:\"url.path.parent\";i:10;s:30:\"url.query_args:_wrapper_format\";i:11;s:8:\"url.site\";i:12;s:4:\"user\";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:12:\"\0*\0cacheTags\";a:103:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:16:\"block_content:25\";i:3;s:16:\"block_content:27\";i:4;s:16:\"block_content:28\";i:5;s:16:\"block_content:29\";i:6;s:16:\"block_content:30\";i:7;s:15:\"block_content:7\";i:8;s:18:\"block_content_view\";i:9;s:10:\"block_view\";i:10;s:32:\"config:block.block.choosingyaffs\";i:11;s:29:\"config:block.block.cookieinfo\";i:12;s:32:\"config:block.block.downloadyaffs\";i:13;s:30:\"config:block.block.footerlegal\";i:14;s:39:\"config:block.block.frontimagehighlight2\";i:15;s:32:\"config:block.block.frontpagehero\";i:16;s:39:\"config:block.block.frontpageprimeryaffs\";i:17;s:33:\"config:block.block.mainnavigation\";i:18;s:35:\"config:block.block.mainnavigation_2\";i:19;s:29:\"config:block.block.searchform\";i:20;s:31:\"config:block.block.sitebranding\";i:21;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:22;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:23;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:24;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:25;s:37:\"config:block.block.yaffs_account_menu\";i:26;s:33:\"config:block.block.yaffs_block_10\";i:27;s:32:\"config:block.block.yaffs_block_5\";i:28;s:32:\"config:block.block.yaffs_block_6\";i:29;s:32:\"config:block.block.yaffs_block_8\";i:30;s:32:\"config:block.block.yaffs_block_9\";i:31;s:36:\"config:block.block.yaffs_breadcrumbs\";i:32;s:32:\"config:block.block.yaffs_content\";i:33;s:29:\"config:block.block.yaffs_help\";i:34;s:36:\"config:block.block.yaffs_local_tasks\";i:35;s:33:\"config:block.block.yaffs_messages\";i:36;s:35:\"config:block.block.yaffs_page_title\";i:37;s:32:\"config:block.block.yaffs_user_21\";i:38;s:31:\"config:block.block.yaffsinspace\";i:39;s:17:\"config:block_list\";i:40;s:24:\"config:color.theme.yaffs\";i:41;s:30:\"config:field.storage.node.body\";i:42;s:41:\"config:field.storage.node.field_icon_text\";i:43;s:44:\"config:field.storage.node.field_teaser_image\";i:44;s:47:\"config:field.storage.node.field_yaffs_user_logo\";i:45;s:32:\"config:field.storage.node.upload\";i:46;s:31:\"config:filter.format.basic_html\";i:47;s:30:\"config:filter.format.full_html\";i:48;s:29:\"config:filter.format.raw_html\";i:49;s:28:\"config:image.style.pdf_image\";i:50;s:24:\"config:image.style.small\";i:51;s:22:\"config:search.settings\";i:52;s:26:\"config:system.menu.account\";i:53;s:23:\"config:system.menu.main\";i:54;s:18:\"config:system.site\";i:55;s:26:\"config:user.role.anonymous\";i:56;s:44:\"config:views.view.highlighted_yaffs_features\";i:57;s:44:\"config:views.view.yaffs_documents_highlights\";i:58;s:34:\"config:views.view.yaffs_user_logos\";i:59;s:8:\"file:108\";i:60;s:8:\"file:109\";i:61;s:8:\"file:110\";i:62;s:7:\"file:40\";i:63;s:7:\"file:43\";i:64;s:7:\"file:44\";i:65;s:7:\"file:45\";i:66;s:7:\"file:46\";i:67;s:7:\"file:47\";i:68;s:7:\"file:48\";i:69;s:7:\"file:76\";i:70;s:7:\"file:77\";i:71;s:7:\"file:85\";i:72;s:13:\"http_response\";i:73;s:7:\"media:5\";i:74;s:7:\"media:8\";i:75;s:7:\"media:9\";i:76;s:7:\"node:32\";i:77;s:8:\"node:344\";i:78;s:8:\"node:353\";i:79;s:8:\"node:384\";i:80;s:8:\"node:385\";i:81;s:8:\"node:388\";i:82;s:8:\"node:389\";i:83;s:8:\"node:397\";i:84;s:8:\"node:398\";i:85;s:8:\"node:399\";i:86;s:8:\"node:400\";i:87;s:8:\"node:401\";i:88;s:8:\"node:407\";i:89;s:8:\"node:408\";i:90;s:8:\"node:409\";i:91;s:8:\"node:448\";i:92;s:8:\"node:451\";i:93;s:8:\"node:457\";i:94;s:8:\"node:460\";i:95;s:8:\"node:462\";i:96;s:8:\"node:466\";i:97;s:8:\"node:487\";i:98;s:9:\"node_list\";i:99;s:9:\"node_view\";i:100;s:8:\"rendered\";i:101;s:6:\"user:0\";i:102;s:6:\"user:1\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:5:{s:7:\"library\";a:10:{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:18:\"views/views.module\";i:10;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:22:{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:84:\"A Robust Flash File System Since 2002 | 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:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:9:\"shortlink\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:13:\"canonical_url\";}i:3;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:4;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: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:11:\"description\";}i:5;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:6;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:7;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:8;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:9;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:10;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:11;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: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: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: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: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: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: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: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: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: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: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: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: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:18;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:19;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\";}i:20;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";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;s:67:\"html_head_link:shortcut icon:/sites/default/files/yaffs_favicon.png\";}i:21;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}}i:1;s:29:\"html_head_link:revision:/home\";}}s:12:\"placeholders\";a:0:{}s:14:\"drupalSettings\";a:5:{s:4:\"path\";a:8:{s:7:\"baseUrl\";s:1:\"/\";s:10:\"scriptPath\";N;s:10:\"pathPrefix\";s:0:\"\";s:11:\"currentPath\";s:8:\"node/487\";s:18:\"currentPathIsAdmin\";b:0;s:7:\"isFront\";b:1;s:15:\"currentLanguage\";s:2:\"en\";s:12:\"currentQuery\";O:8:\"stdClass\":1:{s:1:\"_\";s:13:\"1508111367701\";}}s:15:\"pluralDelimiter\";s:1:\"\";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:4:\"user\";a:2:{s:3:\"uid\";i:0;s:15:\"permissionsHash\";s:64:\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\";}}s:11:\"http_header\";a:1:{i:0;a:3:{i:0;s:4:\"Link\";i:1;s:23:\"</home>; rel=\"revision\"\";i:2;b:0;}}}}',-1,1508111142.663,1,'block_content:18 block_content:23 block_content:25 block_content:27 block_content:28 block_content:29 block_content:30 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:field.storage.node.body config:field.storage.node.field_icon_text config:field.storage.node.field_teaser_image config:field.storage.node.field_yaffs_user_logo config:field.storage.node.upload config:filter.format.basic_html config:filter.format.full_html config:filter.format.raw_html config:image.style.pdf_image config:image.style.small config:search.settings config:system.menu.account config:system.menu.main config:system.site config:user.role.anonymous config:views.view.highlighted_yaffs_features config:views.view.yaffs_documents_highlights config:views.view.yaffs_user_logos file:108 file:109 file:110 file:40 file:43 file:44 file:45 file:46 file:47 file:48 file:76 file:77 file:85 http_response media:5 media:8 media:9 node:32 node:344 node:353 node:384 node:385 node:388 node:389 node:397 node:398 node:399 node:400 node:401 node:407 node:408 node:409 node:448 node:451 node:457 node:460 node:462 node:466 node:487 node_list node_view rendered user:0 user:1','3552'),('https://yaffs.net/?cm_mc_uid=15234566647314815057932&cm_mc_sid_50200000=1506653753:html','O:31:\"Drupal\\Core\\Render\\HtmlResponse\":8:{s:7:\"headers\";O:50:\"Symfony\\Component\\HttpFoundation\\ResponseHeaderBag\":5:{s:23:\"\0*\0computedCacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}s:10:\"\0*\0cookies\";a:0:{}s:14:\"\0*\0headerNames\";a:14:{s:12:\"content-type\";s:12:\"Content-Type\";s:13:\"cache-control\";s:13:\"Cache-Control\";s:4:\"date\";s:4:\"Date\";s:22:\"x-drupal-dynamic-cache\";s:22:\"X-Drupal-Dynamic-Cache\";s:4:\"link\";s:4:\"Link\";s:15:\"x-ua-compatible\";s:15:\"X-UA-Compatible\";s:16:\"content-language\";s:16:\"Content-language\";s:22:\"x-content-type-options\";s:22:\"X-Content-Type-Options\";s:15:\"x-frame-options\";s:15:\"X-Frame-Options\";s:7:\"expires\";s:7:\"Expires\";s:13:\"last-modified\";s:13:\"Last-Modified\";s:4:\"etag\";s:4:\"ETag\";s:4:\"vary\";s:4:\"Vary\";s:11:\"x-generator\";s:11:\"X-Generator\";}s:10:\"\0*\0headers\";a:14:{s:12:\"content-type\";a:1:{i:0;s:24:\"text/html; charset=UTF-8\";}s:13:\"cache-control\";a:1:{i:0;s:19:\"max-age=300, public\";}s:4:\"date\";a:1:{i:0;s:29:\"Fri, 29 Sep 2017 03:12:17 GMT\";}s:22:\"x-drupal-dynamic-cache\";a:1:{i:0;s:4:\"MISS\";}s:4:\"link\";a:4:{i:0;s:23:\"</home>; rel=\"revision\"\";i:1;s:108:\"</sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh>; rel=preload; as=style\";i:2;s:108:\"</sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh>; rel=preload; as=style\";i:3;s:99:\"</sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js>; rel=preload; as=script\";}s:15:\"x-ua-compatible\";a:1:{i:0;s:7:\"IE=edge\";}s:16:\"content-language\";a:1:{i:0;s:2:\"en\";}s:22:\"x-content-type-options\";a:1:{i:0;s:7:\"nosniff\";}s:15:\"x-frame-options\";a:1:{i:0;s:10:\"SAMEORIGIN\";}s:7:\"expires\";a:1:{i:0;s:29:\"Sun, 19 Nov 1978 05:00:00 GMT\";}s:13:\"last-modified\";a:1:{i:0;s:29:\"Fri, 29 Sep 2017 03:12:16 GMT\";}s:4:\"etag\";a:1:{i:0;s:12:\"\"1506654736\"\";}s:4:\"vary\";a:1:{i:0;s:6:\"Cookie\";}s:11:\"x-generator\";a:1:{i:0;s:33:\"Drupal 8 (https://www.drupal.org)\";}}s:15:\"\0*\0cacheControl\";a:2:{s:7:\"max-age\";s:3:\"300\";s:6:\"public\";b:1;}}s:10:\"\0*\0content\";s:51829:\"<!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    <meta charset=\"utf-8\" />\n<meta name=\"title\" content=\"A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use\" />\n<link rel=\"shortlink\" href=\"https://yaffs.net/\" />\n<link rel=\"canonical\" href=\"https://yaffs.net/\" />\n<meta name=\"news_keywords\" content=\"Flash File System\" />\n<meta name=\"description\" content=\"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.\" />\n<meta name=\"abstract\" content=\"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.\" />\n<meta name=\"keywords\" content=\"flash File System, flash, file System, flash storage, NAND flash, NOR flash, Yaffs\" />\n<meta name=\"Generator\" content=\"Drupal 8 (https://www.drupal.org)\" />\n<meta name=\"MobileOptimized\" content=\"width\" />\n<meta name=\"HandheldFriendly\" content=\"true\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBold-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSerifRegular-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"https://yaffs.net/sites/default/files/fontyourface/fontsquirrel/LiberationSansBoldItalic-fontfacekit/fontyourface-stylesheet.css\" media=\"all\" />\n<link rel=\"shortcut icon\" href=\"/sites/default/files/yaffs_favicon.png\" type=\"image/png\" />\n<link rel=\"revision\" href=\"/home\" />\n\n    <title>A Robust Flash File System Since 2002 | Yaffs - A Flash File System for embedded use</title>\n    <link rel=\"stylesheet\" href=\"/sites/default/files/css/css_Ft-hGawuooABKJanSezg8PXovgOMbB_QLx9CIyXeHsA.css?ovtedh\" media=\"all\" />\n<link rel=\"stylesheet\" href=\"/sites/default/files/css/css_6qeLA6GBkZNPHWp9GdQIYovV3tYuKU-ts-HicZ-WeQQ.css?ovtedh\" media=\"all\" />\n\n    \n<!--[if lte IE 8]>\n<script src=\"/sites/default/files/js/js_VtafjXmRvoUgAzqzYTA3Wrjkx9wcWhjP0G4ZnnqRamA.js\"></script>\n<![endif]-->\n\n  </head>\n  <body class=\"fontyourface path-frontpage 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\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\">A Robust Flash File System Since 2002</span>\n</h1>\n\n  <article role=\"article\" about=\"/home\" typeof=\"schema:WebPage\" class=\"page full clearfix\">\n\n  \n      <span property=\"schema:name\" content=\"A Robust Flash File System Since 2002\" 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<p>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.</p>\n<p>&nbsp;</p>\n</div>\n      \n  </div>\n\n</article>\n\n<section id=\"block-yaffsinspace\" class=\"panel yaffs-shout well block block-block-content block-block-content9f676777-54d9-40d2-86dd-174fff14ab1a clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h3><em>New!</em> Yaffs in space!</h3>\n<p><strong><img alt=\"Tess satellite\" data-entity-type=\"file\" data-entity-uuid=\"f06319f1-b6ac-41e2-a70d-a4c4da605b87\" height=\"246\" src=\"/sites/default/files/inline-images/tess_satellite_0.gif\" width=\"347\" class=\"align-right\" />NASA TESS Mission </strong>This <strong>Transiting Exoplanet Survey Satellite (TESS)</strong> will discover thousands of exoplanets in orbit around the brightest stars in the sky.</p>\n<p>It is a project regularly using our Yaffs File System to store incoming data and preserve it, in the rigours of the space environment, before sending it back to Earth.</p>\n<p>In a two-year survey of the solar neighborhood, TESS will monitor more than 200,000 stars for temporary drops in brightness caused by planetary transits. This first-ever spaceborne all-sky transit survey will identify planets ranging from Earth-sized to gas giants, around a wide range of stellar types and orbital distances. No ground-based survey can achieve this feat.</p>\n<p>Some File Systems are not robust enough to be suitable for such exacting work.<br />\n </p>\n</div>\n      \n  </section>\n\n\n  </div>\n\n        \n                              <div class=\"front_highlight row\">\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-1\">\n    <section id=\"block-choosingyaffs\" class=\"block block-block-content block-block-contentae8f54b9-5315-4995-a49e-c0780f3a88cc clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/documents/considerations-choosing-flash-file-system\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/choosing_yaffs_0.jpg?itok=YuV5Z__e\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Choosing Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-2\">\n    <section id=\"block-frontimagehighlight2\" class=\"block block-block-content block-block-contentfa53fc80-f3c4-4d6e-b947-0a3bcd479480 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/yaffs-action\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/atm_1.jpg?itok=HfIny6EH\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"ATM\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n              <div class=\"col-sm-4\">\n                    <div class=\"region region-front-highlight-3\">\n    <section id=\"block-downloadyaffs\" class=\"block block-block-content block-block-contenteed71eb7-98b2-4109-aabe-7718283459ad clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\"><a href=\"/get-yaffs\">\n<article class=\"embedded-entity\">\n<img src=\"/sites/default/files/styles/max_325x325/public/2017-06/download_now_0.jpg?itok=XdRx8zkI\" width=\"325\" height=\"325\" alt=\"Thumbnail\" title=\"Download Yaffs\" class=\"img-responsive\" />\n</article>\n</a> </div>\n      \n  </section>\n\n\n  </div>\n\n              </div>\n            </div>\n                        </section>\n\n                </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-1\">\n        <div class=\"container\">\n        \n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-2\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-2\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-user-logos-block-1 clearfix\" id=\"block-views-block-yaffs-user-logos-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-user-logos view-id-yaffs_user_logos view-display-id-block_1 js-view-dom-id-edd57e723e39a595ff024f55445d87b87e77bd4c4914ae81074adb1d9ec5a119\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-user-logos-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/designA_logo.png?itok=5VWxByrk\" width=\"200\" height=\"141\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/eaton_logo.png?itok=kExm8d-W\" width=\"200\" height=\"84\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/LANCOM_Logo_4c.png?itok=ZIDg8yYt\" width=\"200\" height=\"50\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/bernina_international_logo.png?itok=G8DeIWtW\" width=\"200\" height=\"30\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/gallagher_logo.png?itok=lQyDJeN1\" width=\"200\" height=\"65\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/android_logo.png?itok=MShHoIK7\" width=\"170\" height=\"71\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-6 col-md-3 col-lg-3 \">\n            <div class=\"views-field views-field-field-yaffs-user-logo\"><div class=\"field-content\"><a href=\"/yaffs-action\">  <img src=\"/sites/default/files/styles/small/public/logos/leica_logo.png?itok=Ne2u8w3-\" width=\"200\" height=\"130\" alt=\"\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/yaffs-action\">Who uses Yaffs? Read more...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-3\">\n        <div class=\"container\">\n          <div class=\"region region-front-pane-3\">\n    <section class=\"views-element-container block block-views block-views-blockhighlighted-yaffs-features-block-1 clearfix\" id=\"block-views-block-highlighted-yaffs-features-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-highlighted-yaffs-features view-id-highlighted_yaffs_features view-display-id-block_1 js-view-dom-id-034fb1f12713a86dcb5aee2cc71239b7f9af0ac7fc0e81e2c5f3d09378b26f1c\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-highlighted-yaffs-features-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-thumbs-up\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#384\"><h3>Royalty Free... </h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Whether you use Yaffs under the GNU General Public Licence or under a commercial licence, Yaffs is free of any royalty. No need to worry about rising costs for your hit product!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-shield\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#385\"><h3>A robust flash file system...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">After more than 100,000 <strong>random</strong> power-failures during reading or writing, a test file showed NO data corruption at all!</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-heart\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#388\"><h3>Yaffs is Open Source...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">You can have a look at the code at any time. <a href=\"/downloads\">Download it now</a>! And it\'s suitable for GPL and commercially licensed projects.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-mobile-phone\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#389\"><h3>Tried and tested in millions of devices...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Yaffs is widely used in Linux and proprietary commercial RTOSs. It\'s been included in hundreds of devices, and shipped as part of Google\'s Android, with millions of units sold.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-space-shuttle\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#407\"><h3>Booting is fast...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">It is important for a Flash filesystem to boot fast, so boot speed was a fundamental consideration in the design of Yaffs.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-4 col-lg-4 \">\n            <div class=\"views-field views-field-field-icon-text\"><div class=\"field-content\"><i class=\"fa fa-users\"></i></div></div><div class=\"views-field views-field-title\"><span class=\"field-content\"><a href=\"/features#408\"><h3>An active community...</h3></a></span></div><div class=\"views-field views-field-body\"><div class=\"field-content\">There\'s an active community of people who use Yaffs and who have developed with Yaffs, just a click or two away.</div></div><div class=\"views-field views-field-edit-node\"><span class=\"field-content\"></span></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/features\">Lots more Yaffs features...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n  <div class=\"container-fluid front-pane-4\">\n        <div class=\"container\" >\n          <div class=\"region region-front-pane-4\">\n    <section class=\"views-element-container block block-views block-views-blockyaffs-documents-highlights-block-1 clearfix\" id=\"block-views-block-yaffs-documents-highlights-block-1\">\n  \n    \n\n      <div class=\"form-group\"><div class=\"view view-yaffs-documents-highlights view-id-yaffs_documents_highlights view-display-id-block_1 js-view-dom-id-aa8462b2c5c94041df5b3c3dc81b0b0859d4a62f70e7648a170780714ba8b0c4\">\n  \n    \n      \n      <div class=\"view-content\">\n      <div id=\"views-bootstrap-yaffs-documents-highlights-block-1\"  class=\"grid views-view-grid horizontal\">\n            <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-sample\" hreflang=\"und\">Yaffs Licence Sample</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">While the Yaffs code is available free of charge under GNU General Public Licence, version 2, that entails the obligation to disclose Source Code for your application using Yaffs. An Aleph One Licence does not impose that obligation and so is attractive for proprietary projects. This sample Licence provides an example of the points we expect a Licence to cover.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-overview\" hreflang=\"und\">Yaffs Overview</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">YAFFS is a filesystem designed specifically for the characteristics of NAND flash. This page gives an overview of the project - what is available, how it works, how to use it, developer resources, and licensing options.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/yaffs-licence-faqs\" hreflang=\"und\">Yaffs Licence FAQs</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Some questions about the commercial licence for Yaffs and how we arrive at one.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/faq\" hreflang=\"und\">FAQ</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>Common questions about Yaffs technical issues.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/licences-more-background-and-detail\" hreflang=\"und\">Licences - more background and detail</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>More on the details and background of Licences for Yaffs</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/ConsiderationsInChoosingAFlashFileSystem_0.pdf.png?itok=ROOk6w-T\" width=\"150\" height=\"212\" alt=\"Preview of ConsiderationsInChoosingAFlashFileSystem.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/considerations-choosing-flash-file-system\" hreflang=\"und\">Considerations in Choosing a Flash File System</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">Failures in an embedded File System in a product are much more serious to the user than failures in an office computer.&nbsp; Power failures and failures to cache data properly can be avoided by choosing a FFS specifically designed for reliability from the ground up.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/ConsiderationsInChoosingAFlashFileSystem_0.pdf\" type=\"application/pdf; length=131376\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">ConsiderationsInChoosingAFlashFileSystem.pdf</a></span><span class=\"file-size\">128.3 KB</span></span></div></div>\n          </div>\n              </div>\n          <div class=\"row\">\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/HowYaffsWorks.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/HowYaffsWorks.pdf.png?itok=_nJu31C0\" width=\"150\" height=\"194\" alt=\"Preview of HowYaffsWorks.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/how-yaffs-works\" hreflang=\"und\">How Yaffs works</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\">This document gives an explanation of most of the core mechanisms that make Yaffs work. As of the time of writing this, the Yaffs2 code base includes approximately 19,000 lines of code making a very detailed discussion impractical. This document is the starting point for understanding Yaffs. Further detailed questions and discussions are welcomed on the Yaffs discussion list.</div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/HowYaffsWorks.pdf\" type=\"application/pdf; length=402514\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">HowYaffsWorks.pdf</a></span><span class=\"file-size\">393.08 KB</span></span></div></div>\n          </div>\n                  <div class=\"col col-xs-12 col-sm-12 col-md-6 col-lg-6 \">\n            <div class=\"views-field views-field-field-teaser-image\"><div class=\"field-content\"><a href=\"/sites/default/files/downloads/YaffsTuning.pdf\">  <img src=\"/sites/default/files/styles/pdf_image/public/styles/pdf_image/public/downloads/YaffsTuning.pdf.png?itok=idZTTQBs\" alt=\"Preview of YaffsTuning.pdf\" typeof=\"foaf:Image\" class=\"img-responsive\" />\n\n\n</a></div></div><div class=\"views-field views-field-title\"><h3 class=\"field-content\"><a href=\"/documents/yaffs-tuning\" hreflang=\"und\">Yaffs Tuning</a></h3></div><div class=\"views-field views-field-body\"><div class=\"field-content\"><p>This document describes the parameters which can be modified by the developer in the different phases of applying, debugging, and routine use of Yaffs.</p></div></div><div class=\"views-field views-field-upload-1\"><div class=\"field-content\"><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/YaffsTuning.pdf\" type=\"application/pdf; length=93667\" title=\"Open file in new window\" target=\"_blank\" data-toggle=\"tooltip\" data-placement=\"bottom\">YaffsTuning.pdf</a></span><span class=\"file-size\">91.47 KB</span></span></div></div>\n          </div>\n              </div>\n      </div>\n\n    </div>\n  \n            <div class=\"view-footer\">\n      <a class=\"btn btn-default\" href=\"/documents\">All the Yaffs documentation...</a>\n    </div>\n    </div>\n</div>\n\n  </section>\n\n\n  </div>\n\n    </div>\n  </div>\n\n    <div class=\"container-fluid front-pane-5\">\n                <div class=\"container\" >\n              <div class=\"region region-front-pane-5\">\n    <section id=\"block-frontpageprimeryaffs\" class=\"block block-block-content block-block-contente7a8d2de-4fbb-4680-9e18-fe4d8337f1d6 clearfix\">\n  \n    \n\n      \n            <div class=\"field field--name-body field--type-text-with-summary field--label-hidden field--item\">\n<h1>Flash file systems primer</h1>\n<h2>Background &amp; basics</h2>\n<h3><span>What is a </span><span>F</span><span>lash </span><span>F</span><span>ile </span><span>S</span><span>ystem</span>?</h3>\n<p><span>A <span>Flash File System</span> stores data on flash memory, rather than a hard drive. Flash is used because it’s faster, much more tolerant of physical stress and takes less power. A <span>flash filesystem</span> is used to manage the data and get the best out of flash memory.</span></p>\n<p><span>As two examples, a flash memory chip needs to be erased in blocks before it is rewritten and a flash file system will manage that; flash memory has a limited number of writes per block so many flash file systems incorporate a <span>wear levelling</span> mechanism to ensure the writes are spread out.</span></p>\n<p><span>A flash file system is most useful as a part of an embedded system,. As a developer, you <em>can</em>&nbsp;read from and write directly to your Flash memory on an embedded system, but unless your use is extremely limited, you\'ll probably find that you come up against problems that Flash file systems have already solved.</span></p>\n<h3>What are NAND flash &amp; NOR flash?</h3>\n<p><span>These are the two fundamental flash architectures and have very different characteristics in performance, reliability, erase cycles, life span, and price. They also differ fundamentally from hard disk drives, and so need specialised handling.</span></p>\n<table>\n<tbody>\n <tr>\n  <td>\n  <p>&nbsp;</p>\n   </td>\n  <td>\n  <p>NAND flash</p>\n   </td>\n  <td>\n  <p>NOR flash</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage density</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Read performance</p>\n   </td>\n  <td>\n  <p>Fast</p>\n   </td>\n  <td>\n  <p>Fast (may be slowed by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Write performance</p>\n   </td>\n  <td>\n  <p>Faster</p>\n   </td>\n  <td>\n  <p>Slower (may be slowed further by serial access)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Erase performance</p>\n   </td>\n  <td>\n  <p>Faster (low ms typically)</p>\n   </td>\n  <td>\n  <p>Slower (possibly seconds)</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Storage reliability</p>\n   </td>\n  <td>\n  <p>Lower (without management)</p>\n   </td>\n  <td>\n  <p>Better</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Life span</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n </tr>\n <tr>\n  <td>\n  <p>Price</p>\n   </td>\n  <td>\n  <p>Lower</p>\n   </td>\n  <td>\n  <p>Higher</p>\n   </td>\n </tr>\n</tbody>\n</table>\n<p><span>Yaffs is both an <span>embedded NAN</span><span>D flash file system</span> and an <span>embedded N</span><span>OR Flash file system</span>. It can handle SLC, TLC and MLC NAND. It also works on MLC and SLC NOR. And it can work with parallel or serial access including Serial Peripheral Bus (SPI).</span></p>\n<h3>What special functions does a <span>file system </span><span>for flash</span> include?</h3>\n<p><span>As well as the normal file system functions, a <span>flash file system embedded</span> in hardware should help the device to start and stop quickly and deal well with losing power with no warning, without corrupting the data; and, manage the foibles of flash memory, protecting the stored data with extreme reliability. (Read our paper <a href=\"/documents/considerations-choosing-flash-file-system\">Considerations in Choosing a Flash File System</a>.)</span></p>\n<p><span><span>To these ends, an embedded flash file system must employ extra steps to achieve these such as using log structuring, rather than traditional file structuring plus a flash translation layer; manage power loss and recovery; include flash memory wear levelling; deal with the unreliability of flash from read and write disturbs, by using error correction (ECC), bad block remapping, over provision and flash block refreshing; ensure it’s ready to write fast by using garbage collection and flash block erase to prepare; and manage writing while avoiding write amplification. </span></span></p>\n<h4>What is a log-structured file system?</h4>\n<p><span>Log structuring means that data is written to the file system as a sequence of changes to the file system. This has the advantage that there is less overhead, and so it\'s faster than a non-log-structured system. More important though is that it is more robust against power failure. It also means that a file may be fragmented. For hard drives, fragmentation can mean much slower access due to the time required to mechanically move the read heads around the disk, but flash memory has no moving parts so there is no overhead for flash.</span></p>\n<p><span>Yaffs is log structured a <span>flash file system </span><span>architecture</span> which is faster and more robust than the alternatives.</span></p>\n<h4>What is a <span>Flash Translation Layer</span> (FTL) ?</h4>\n<p><span>It is sometimes desirable to use regular block file systems (such as FAT) with flash memory. In such cases, a Flash Translation Layer presents flash memory or a flash file system as if it\'s an ordinary hard drive.</span></p>\n<p><span>An FTL is an incomplete storage solution it still requires a file system. This makes two layers where data can be damaged and lost: in the FTL and in the <span>flash memory </span><span>file system</span>.</span></p>\n<p><span>True <span>file systems for flash memory</span>, such as Yaffs, do not use FTLs. They deal directly with the idiosyncrasies of flash, providing a faster and more reliable solution.</span></p>\n<h4>What is power loss recovery?</h4>\n<p><span>When power to any storage device is suddenly lost, the device can end up in an unknown state and may have damaged areas. Most file systems have to work hard to ensure that they are in a consistent state after power loss. <span>E</span><span>mbedded file systems</span> <span>for flash</span> may make allowances for unscheduled power loss with a recovery process.</span></p>\n<p><span>Yaffs is built with fault tolerance as a guiding principle and so is designed so power loss is considered a normal event.</span></p>\n<h4>What is <span>wear levelling</span>?</h4>\n<p><span>Flash chips wear out. Each time a part of the flash memory is erased and written, it is slightly damaged. <span>Embedded f</span><span>lash file systems</span> note the danger, and sometimes try to spread the damage rather than having it concentrated in one region, so prolonging the life of the memory and the life of the device.</span></p>\n<p><span>Yaffs is designed so that extra <span>wear leveling</span> is unnecessary. Instead, it’s automatically <span>wear levelling</span> because of the log structure.</span></p>\n<h4>What is flash read disturb? What is flash write disturb?</h4>\n<p><span><a href=\"/documents/yaffs-nand-flash-failure-mitigation\">NAND flash may experience degradation or loss of data</a> owing to reads of pages in the same block or data changes in neighbouring blocks of the NAND device. This is particularly true for MLC NAND.</span></p>\n<p><span>Yaffs uses block refreshing to deal with such problems.</span></p>\n<h4>What is flash error correction/flash ECC?</h4>\n<p><span>There are ways in which flash memory can be corrupted – for instance F-N tunnelling problems and leaky oxide layers. See our <a href=\"/documents/yaffs-nand-flash-failure-mitigation\">detailed discussion of flash memory problems</a>.</span></p>\n<p><span>But every bit counts, and especially if it\'s part of critical data or essential to the correct working of a system. Flash error correction keeps track of a section of memory to tell if there\'s corruption, and provides ways to correct these small errors.</span></p>\n<p><span>Yaffs can use hardware or software based ECC.</span></p>\n<h4>What is bad-block remapping?</h4>\n<p><span>File systems are built upon storing data on physical media. But all media suffers deterioration. Some hardware or <span>flash media </span><span>file systems</span> keep lists of damaged regions and behind the scenes, substitute known good ones in their place.</span></p>\n<p><span>Because of the way that Yaffs works, there\'s no need for bad block remapping because it isn’t a block structured file system.</span></p>\n<h4>What is <span>o</span><span>ver-provisioning</span> ?</h4>\n<p><span>Knowing that the media will degrade and suffer errors, and needing space to alter data because of the nature of flash memory, sometimes a <span>flash memory based </span><span>file system</span> puts aside a portion of the media for this use. This is <span>overprovisioning</span>. Often this space used when remapping bad blocks.</span></p>\n<p><span>Because Yaffs is log structured, it has the advantage that it does not need <span>over provision</span><span>ing</span>, making more memory available to store data.</span></p>\n<h4>What is flash block refreshing?</h4>\n<p><span>To counteract the problems of unreliable flash memory – for instance errors due to read and write disturbs – a flash filesystem can refresh the memory, by making a new copy of a block.</span></p>\n<p><span>Yaffs includes flash block refreshing.</span></p>\n<h4>What is flash garbage collection?</h4>\n<p><span>When a file is deleted, or a part of a file is overwritten, file systems often simply mark the flash space as deleted, rather than removing it. Later they reclaim the space for reuse. This is garbage collection.</span></p>\n<p><span>Yaffs has garbage collection to maximise the amount of data the file system can store.</span></p>\n<h4>What is flash block erase?</h4>\n<p><span>Data must be written into blank areas of the flash chip, but erasing takes time. Rather than erase and write at the same time, in order to speed writes, NAND and <span>NOR flash file systems</span> can prepare blocks for later use. This is not usually necessary for other storage media.</span></p>\n<p><span>As part of garbage collection, Yaffs uses a block erase strategy.</span></p>\n<h4>What is flash write amplification ?</h4>\n<p><span>In many block-based flash file systems, when data changes the new data must be written to the disk, and then the old data must be marked as invalid. A small change to the data can have consequences that propagate involving writing to the memory twice or more as the old data is cleaned up by garbage collection and files are organised to take the minimum amount of space. This is write amplification - a single small write causing a cascade of writes (and erases) of whole blocks.</span></p>\n<p><span>Yaffs avoids much of this problem by being log structured, meaning that flash memory is slower to reach it\'s maximum number of cycles, while writing is faster.</span></p>\n<h2>How does Yaffs work?</h2>\n<p><span>You can find full details in our paper <a href=\"/documents/how-yaffs-works\">How Yaffs Works</a>&nbsp;but briefly, here\'s how it works.</span></p>\n<p><span>It\'s a log-structured filing system. This also ensures that Yaffs is wear-levelling is built into the design because no one part of the flash memory is used any more than another.</span></p>\n<p><span>A Yaffs object is anything that Yaffs stores - for instance a file or a directory.</span></p>\n<p><span>The memory in NAND flash is arranged in pages. A page is the unit of allocation and programming. In Yaffs, the unit of allocation is called the chunk. Typically a chunk will be the same as a NAND page, but there is flexibility to use chunks which map to multiple pages (eg. A system may have two NAND chips in parallel requiring 2x2048 = 4096 byte chunks) . This distinction gives a lot of flexibility in how the system can be configured.</span></p>\n<p><span>A fixed but configurable number of chunks form a block which is the unit of erasure.</span></p>\n<p><span>NAND flash is shipped with bad blocks and further blocks may go bad during the operation of the device so Yaffs detects and marks bad blocks.</span></p>\n<p><span>NAND flash also typically requires the use of some sort of error detection and correction code (ECC). Yaffs can either use existing ECC logic or provide its own.</span></p>\n<p><span>Yaffs maintains data in RAM about the file system, but this is not needed for Yaffs to work - so the device can safely lose power at any point without data corruption.</span></p>\n<p><span>Here\'s how the Yaffs filesystem works to ensure data safety and a very fast startup... At regular points and on controlled shutdown, checkpoint blocks are written to the flash memory, containing all the data to quickly rebuild the file system. Under usual circumstances this checkpoint is used when a device is started, to very quickly rebuild the RAM data about the file system. If the checkpoint is determined to be corrupted, or if the user requested then the file system is rebuilt by scanning.</span></p>\n<p><span>To do this, Yaffs makes a prescan, to find the sequence numbers for blocks. Then it scans through blocks backwards to build up the list of chunks that make up objects. It speeds up this process by using Block Summaries, which are collections of all the tags in a data in a block. (But it\'s still always possible to go back to the chunks themselves, to find the tags, if a summary is missing or damaged.)</span></p>\n<p><span>And tags are how Yaffs tells that a chunk belongs to a particular object.</span></p>\n<p><span>Tags are also how Yaffs knows which chunks make up the current version of an object... Because the file system is log structured, if an object has been updated, only the latest chunks are used, giving the correct version of the object. A full description of the process is available in the technical documentation, and of course you can browse the code to see exactly how it all works; there\'s a lot more to tags, the metadata that they can hold, how they are stored, and how tags are used to link together objects into a file system with a POSIX interface.</span></p>\n<p><span>And of course that\'s not the end of the story. There\'s caching to deal with repeated small changes to data. There\'s garbage collection to let space be re-used, and Yaffs deals with collecting garbage differently depending on whether there\'s lots of free space or only a little. And part of making Yaffs a high performance flash file system is to make sure that re-useable blocks are erased well before they are needed, so that writing involves only a single operation. There\'s lazy loading to reduce scanning time. And all of this is built in a portable way, so that Yaffs can be configured to match almost any hardware, and can be ported to any operating system, or work on bare metal without an operating system. There\'s a test harness which is used to subject Yaffs to power failure, and ensure it works even with external data corruption. That\'s what makes it robust enough to send into space and to handle hundreds of terabytes of mission critical data.</span></p>\n<h4>Why is Yaffs special as an embedded flash file system?</h4>\n<p><span>Yaffs has been in use since 2002, and so it is hardened. It has been used in everything from phones to sewing machines to satellites. It is popular with Aerospace companies, and firms managing large infrastructure and in Point-of-Sale (POS) equipment (where customer feedback is very rapid!) It has been used in extreme conditions where it must not lose data, and where there is no chance for maintenance. It\'s been used for very large file systems up to 190TB. It\'s been used for safety critical applications, and millions of consumer devices.</span></p>\n<p><span>We carry out testing in a <a href=\"/documents/yaffs-robustness-and-testing\">rig which can simulate random power failures</a> and proved its reliability after tens to hundreds of millions of power failures.&nbsp;It\'s designed with an understanding of the constraints of flash memory and for speed.</span></p>\n<p><span>Yaffs works on multiple operating systems – Linux, VxWorks, Windows CE, eCos. - and also directly on bare metal, with no operating system. And it\'s easy to integrate into your RTOS or application using the Yaffs Direct Interface. It works with multiple types of flash memory - NAND &amp; NOR, SLC, MLC &amp; TLC.&nbsp;It\'s endian neutral. It\'s been used with 32-bit and 64-bit CPUs including MIPS, 68000, ARM, ColdFire, PowerPC and x86 variants. Yaffs has even been used with various DSP architectures! And it\'ll work with 16-bit with some tuning. So it can be configured to work with your design and the flash geometry that you need.</span></p>\n<p><span>And it\'s a <span>free embedded flash file system - </span><span>it’s open</span> <span>source</span>! <a href=\"/get-yaffs\">Grab the GPL version now</a>! Check out our the active community. And that\'s not the whole story - there are lots more reasons that make Yaffs special.&nbsp;</span></p>\n<p>&nbsp;</p>\n</div>\n      \n  </section>\n\n\n  </div>\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    <script type=\"application/json\" data-drupal-selector=\"drupal-settings-json\">{\"path\":{\"baseUrl\":\"\\/\",\"scriptPath\":null,\"pathPrefix\":\"\",\"currentPath\":\"node\\/487\",\"currentPathIsAdmin\":false,\"isFront\":true,\"currentLanguage\":\"en\",\"currentQuery\":{\"cm_mc_sid_50200000\":\"1506653753\",\"cm_mc_uid\":\"15234566647314815057932\"}},\"pluralDelimiter\":\"\\u0003\",\"bootstrap\":{\"forms_has_error_value_toggle\":1,\"modal_animation\":1,\"modal_backdrop\":\"true\",\"modal_keyboard\":1,\"modal_show\":1,\"modal_size\":\"\",\"popover_enabled\":1,\"popover_animation\":1,\"popover_container\":\"body\",\"popover_content\":\"\",\"popover_delay\":\"0\",\"popover_html\":0,\"popover_placement\":\"right\",\"popover_selector\":\"\",\"popover_title\":\"\",\"popover_trigger\":\"click\",\"popover_trigger_autoclose\":1,\"tooltip_enabled\":1,\"tooltip_animation\":1,\"tooltip_container\":\"body\",\"tooltip_delay\":\"0\",\"tooltip_html\":0,\"tooltip_placement\":\"auto left\",\"tooltip_selector\":\"\",\"tooltip_trigger\":\"hover\"},\"ajaxTrustedUrl\":{\"\\/search\\/node\":true},\"user\":{\"uid\":0,\"permissionsHash\":\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\"}}</script>\n<script src=\"/sites/default/files/js/js_2l0lF4i9o3aztHULbfajMT_RTqGCEN_lVC8JI48SILw.js\"></script>\n\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:18:{i:0;s:26:\"languages:language_content\";i:1;s:28:\"languages:language_interface\";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:5:\"theme\";i:6;s:8:\"timezone\";i:7;s:8:\"url.path\";i:8;s:17:\"url.path.is_front\";i:9;s:15:\"url.path.parent\";i:10;s:30:\"url.query_args:_wrapper_format\";i:11;s:8:\"url.site\";i:12;s:4:\"user\";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:12:\"\0*\0cacheTags\";a:103:{i:0;s:16:\"block_content:18\";i:1;s:16:\"block_content:23\";i:2;s:16:\"block_content:25\";i:3;s:16:\"block_content:27\";i:4;s:16:\"block_content:28\";i:5;s:16:\"block_content:29\";i:6;s:16:\"block_content:30\";i:7;s:15:\"block_content:7\";i:8;s:18:\"block_content_view\";i:9;s:10:\"block_view\";i:10;s:32:\"config:block.block.choosingyaffs\";i:11;s:29:\"config:block.block.cookieinfo\";i:12;s:32:\"config:block.block.downloadyaffs\";i:13;s:30:\"config:block.block.footerlegal\";i:14;s:39:\"config:block.block.frontimagehighlight2\";i:15;s:32:\"config:block.block.frontpagehero\";i:16;s:39:\"config:block.block.frontpageprimeryaffs\";i:17;s:33:\"config:block.block.mainnavigation\";i:18;s:35:\"config:block.block.mainnavigation_2\";i:19;s:29:\"config:block.block.searchform\";i:20;s:31:\"config:block.block.sitebranding\";i:21;s:66:\"config:block.block.views_block__highlighted_yaffs_features_block_1\";i:22;s:66:\"config:block.block.views_block__yaffs_admin_recent_content_block_1\";i:23;s:66:\"config:block.block.views_block__yaffs_documents_highlights_block_1\";i:24;s:56:\"config:block.block.views_block__yaffs_user_logos_block_1\";i:25;s:37:\"config:block.block.yaffs_account_menu\";i:26;s:33:\"config:block.block.yaffs_block_10\";i:27;s:32:\"config:block.block.yaffs_block_5\";i:28;s:32:\"config:block.block.yaffs_block_6\";i:29;s:32:\"config:block.block.yaffs_block_8\";i:30;s:32:\"config:block.block.yaffs_block_9\";i:31;s:36:\"config:block.block.yaffs_breadcrumbs\";i:32;s:32:\"config:block.block.yaffs_content\";i:33;s:29:\"config:block.block.yaffs_help\";i:34;s:36:\"config:block.block.yaffs_local_tasks\";i:35;s:33:\"config:block.block.yaffs_messages\";i:36;s:35:\"config:block.block.yaffs_page_title\";i:37;s:32:\"config:block.block.yaffs_user_21\";i:38;s:31:\"config:block.block.yaffsinspace\";i:39;s:17:\"config:block_list\";i:40;s:24:\"config:color.theme.yaffs\";i:41;s:30:\"config:field.storage.node.body\";i:42;s:41:\"config:field.storage.node.field_icon_text\";i:43;s:44:\"config:field.storage.node.field_teaser_image\";i:44;s:47:\"config:field.storage.node.field_yaffs_user_logo\";i:45;s:32:\"config:field.storage.node.upload\";i:46;s:31:\"config:filter.format.basic_html\";i:47;s:30:\"config:filter.format.full_html\";i:48;s:29:\"config:filter.format.raw_html\";i:49;s:28:\"config:image.style.pdf_image\";i:50;s:24:\"config:image.style.small\";i:51;s:22:\"config:search.settings\";i:52;s:26:\"config:system.menu.account\";i:53;s:23:\"config:system.menu.main\";i:54;s:18:\"config:system.site\";i:55;s:26:\"config:user.role.anonymous\";i:56;s:44:\"config:views.view.highlighted_yaffs_features\";i:57;s:44:\"config:views.view.yaffs_documents_highlights\";i:58;s:34:\"config:views.view.yaffs_user_logos\";i:59;s:8:\"file:108\";i:60;s:8:\"file:109\";i:61;s:8:\"file:110\";i:62;s:7:\"file:40\";i:63;s:7:\"file:43\";i:64;s:7:\"file:44\";i:65;s:7:\"file:45\";i:66;s:7:\"file:46\";i:67;s:7:\"file:47\";i:68;s:7:\"file:48\";i:69;s:7:\"file:76\";i:70;s:7:\"file:77\";i:71;s:7:\"file:85\";i:72;s:13:\"http_response\";i:73;s:7:\"media:5\";i:74;s:7:\"media:8\";i:75;s:7:\"media:9\";i:76;s:7:\"node:32\";i:77;s:8:\"node:344\";i:78;s:8:\"node:353\";i:79;s:8:\"node:384\";i:80;s:8:\"node:385\";i:81;s:8:\"node:388\";i:82;s:8:\"node:389\";i:83;s:8:\"node:397\";i:84;s:8:\"node:398\";i:85;s:8:\"node:399\";i:86;s:8:\"node:400\";i:87;s:8:\"node:401\";i:88;s:8:\"node:407\";i:89;s:8:\"node:408\";i:90;s:8:\"node:409\";i:91;s:8:\"node:448\";i:92;s:8:\"node:451\";i:93;s:8:\"node:457\";i:94;s:8:\"node:460\";i:95;s:8:\"node:462\";i:96;s:8:\"node:466\";i:97;s:8:\"node:487\";i:98;s:9:\"node_list\";i:99;s:9:\"node_view\";i:100;s:8:\"rendered\";i:101;s:6:\"user:0\";i:102;s:6:\"user:1\";}s:14:\"\0*\0cacheMaxAge\";i:-1;}s:14:\"\0*\0attachments\";a:5:{s:7:\"library\";a:10:{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:18:\"views/views.module\";i:10;s:50:\"environment_indicator/drupal.environment_indicator\";}s:9:\"html_head\";a:22:{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:84:\"A Robust Flash File System Since 2002 | 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:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"shortlink\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:9:\"shortlink\";}i:2;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:9:\"canonical\";s:4:\"href\";s:18:\"https://yaffs.net/\";}}i:1;s:13:\"canonical_url\";}i:3;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:4;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: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:11:\"description\";}i:5;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:6;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:7;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:8;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:9;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:10;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:11;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: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: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: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: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: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: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: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: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: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: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: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: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:18;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:19;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\";}i:20;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";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;s:67:\"html_head_link:shortcut icon:/sites/default/files/yaffs_favicon.png\";}i:21;a:2:{i:0;a:2:{s:4:\"#tag\";s:4:\"link\";s:11:\"#attributes\";a:2:{s:3:\"rel\";s:8:\"revision\";s:4:\"href\";s:5:\"/home\";}}i:1;s:29:\"html_head_link:revision:/home\";}}s:12:\"placeholders\";a:0:{}s:14:\"drupalSettings\";a:5:{s:4:\"path\";a:8:{s:7:\"baseUrl\";s:1:\"/\";s:10:\"scriptPath\";N;s:10:\"pathPrefix\";s:0:\"\";s:11:\"currentPath\";s:8:\"node/487\";s:18:\"currentPathIsAdmin\";b:0;s:7:\"isFront\";b:1;s:15:\"currentLanguage\";s:2:\"en\";s:12:\"currentQuery\";O:8:\"stdClass\":2:{s:18:\"cm_mc_sid_50200000\";s:10:\"1506653753\";s:9:\"cm_mc_uid\";s:23:\"15234566647314815057932\";}}s:15:\"pluralDelimiter\";s:1:\"\";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:4:\"user\";a:2:{s:3:\"uid\";i:0;s:15:\"permissionsHash\";s:64:\"aa7fc4c8fb40c7a8665ccd12fea07926dff0f59b9ee3346bc513c6399bee5b01\";}}s:11:\"http_header\";a:1:{i:0;a:3:{i:0;s:4:\"Link\";i:1;s:23:\"</home>; rel=\"revision\"\";i:2;b:0;}}}}',-1,1506654737.107,1,'block_content:18 block_content:23 block_content:25 block_content:27 block_content:28 block_content:29 block_content:30 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:field.storage.node.body config:field.storage.node.field_icon_text config:field.storage.node.field_teaser_image config:field.storage.node.field_yaffs_user_logo config:field.storage.node.upload config:filter.format.basic_html config:filter.format.full_html config:filter.format.raw_html config:image.style.pdf_image config:image.style.small config:search.settings config:system.menu.account config:system.menu.main config:system.site config:user.role.anonymous config:views.view.highlighted_yaffs_features config:views.view.yaffs_documents_highlights config:views.view.yaffs_user_logos file:108 file:109 file:110 file:40 file:43 file:44 file:45 file:46 file:47 file:48 file:76 file:77 file:85 http_response media:5 media:8 media:9 node:32 node:344 node:353 node:384 node:385 node:388 node:389 node:397 node:398 node:399 node:400 node:401 node:407 node:408 node:409 node:448 node:451 node:457 node:460 node:462 node:466 node:487 node_list node_view rendered user:0 user:1','3552');
