<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>coding &#187; mtd</title>
	<atom:link href="http://www.coding.com.br/tag/mtd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coding.com.br</link>
	<description>have you coded today?</description>
	<lastBuildDate>Thu, 18 Aug 2011 17:29:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>mtd partitions: tips</title>
		<link>http://www.coding.com.br/embarcado/mtd-partitions-tips/</link>
		<comments>http://www.coding.com.br/embarcado/mtd-partitions-tips/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 12:15:29 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[embarcado]]></category>
		<category><![CDATA[mtd]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=1555</guid>
		<description><![CDATA[there are two tips when initializing MTD partition struct:

use MTDPART_OFS_APPEND  to define .offset
1024 multiple to .size (4MB = 4194304 bytes or 4 * 1024 * 1024)

static struct mtd_partition nand_flash_partitions[] = {
{
.name = &#8220;bootloader&#8221;,
.offset = 0,
.size = 3 * 1024 * 1024},
{
.name = &#8220;nand.kernel&#8221;,
.offset = MTDPART_OFS_APPEND,
.size = 5 * 1024 * 1024},
{
.name = &#8220;nand.rootfs&#8221;,
.offset = [...]]]></description>
			<content:encoded><![CDATA[<p>there are two<em> tips </em>when initializing MTD partition struct:</p>
<ul>
<li>use <a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=include/linux/mtd/partitions.h;h=2b54316591d2b4231070a08dec7b6ad33a061ad3;hb=ff8b16d7e15a8ba2a6086645614a483e048e3fbf" target="_blank">MTDPART_OFS_APPEND </a> to define <em>.offset</em></li>
<li>1024 multiple to <em>.size</em> (4MB = 4194304 bytes or 4 * 1024 * 1024)</li>
</ul>
<p><strong>static</strong> <strong>struct</strong> <span style="color: #2040a0;">mtd_partition</span> <span style="color: #2040a0;">nand_flash_partitions</span><span style="color: #4444ff;">[</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span> <span style="color: #4444ff;"><strong>{</strong></span><br />
<span style="color: #4444ff;"><strong>{</strong></span><br />
.<span style="color: #2040a0;">name</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">&#8220;bootloader&#8221;</span>,<br />
.<span style="color: #2040a0;">offset</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0</span>,<br />
.<span style="color: #2040a0;">size</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">3</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span><span style="color: #4444ff;"><strong>}</strong></span>,<br />
<span style="color: #4444ff;"><strong>{</strong></span><br />
.<span style="color: #2040a0;">name</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">&#8220;nand.kernel&#8221;</span>,<br />
.<span style="color: #2040a0;">offset</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">MTDPART_OFS_APPEND</span>,<br />
.<span style="color: #2040a0;">size</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">5</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span><span style="color: #4444ff;"><strong>}</strong></span>,<br />
<span style="color: #4444ff;"><strong>{</strong></span><br />
.<span style="color: #2040a0;">name</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">&#8220;nand.rootfs&#8221;</span>,<br />
.<span style="color: #2040a0;">offset</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">MTDPART_OFS_APPEND</span>,<br />
.<span style="color: #2040a0;">size</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">256</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span><span style="color: #4444ff;"><strong>}</strong></span>,<br />
<span style="color: #4444ff;"><strong>{</strong></span><br />
.<span style="color: #2040a0;">name</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">&#8220;nand.userfs1&#8243;</span>,<br />
.<span style="color: #2040a0;">offset</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">MTDPART_OFS_APPEND</span>,<br />
.<span style="color: #2040a0;">size</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">256</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">1024</span><span style="color: #4444ff;"><strong>}</strong></span>,<br />
<span style="color: #4444ff;"><strong>{</strong></span><br />
.<span style="color: #2040a0;">name</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">&#8220;nand.userfs2&#8243;</span>,<br />
.<span style="color: #2040a0;">offset</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">MTDPART_OFS_APPEND</span>,<br />
.<span style="color: #2040a0;">size</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">MTDPART_SIZ_FULL</span><span style="color: #4444ff;"><strong>}</strong></span>,<br />
<span style="color: #4444ff;"><strong>}</strong></span><span style="color: #4444ff;">;</span></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 122px; width: 1px; height: 1px; overflow: hidden;">&lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;struct&lt;/strong&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;mtd_partition&lt;/span&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;nand_flash_partitions&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;[&lt;/span&gt;&lt;span style="color: #4444ff;"&gt;]&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;<br />
&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;&amp;amp;nbname&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #008000;&#8221;&gt;&#8221;bootloader&#8221;&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;offset&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;0&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;size&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;3&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,<br />
&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;name&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #008000;&#8221;&gt;&#8221;nand.kernel&#8221;&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;offset&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;MTDPART_OFS_APPEND&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;size&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;5&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,<br />
&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;name&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #008000;&#8221;&gt;&#8221;nand.rootfs&#8221;&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;offset&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;MTDPART_OFS_APPEND&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;size&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;256&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,<br />
&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;name&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #008000;&#8221;&gt;&#8221;nand.userfs1&#8243;&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;offset&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;MTDPART_OFS_APPEND&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;size&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;256&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;*&lt;/span&gt; &lt;span style=&#8221;color: #ff0000;&#8221;&gt;1024&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,<br />
&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;name&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #008000;&#8221;&gt;&#8221;nand.userfs2&#8243;&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;offset&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;MTDPART_OFS_APPEND&lt;/span&gt;,<br />
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&#8221;color: #2040a0;&#8221;&gt;size&lt;/span&gt; &lt;span style=&#8221;color: #4444ff;&#8221;&gt;=&lt;/span&gt; &lt;span style=&#8221;color: #2040a0;&#8221;&gt;MTDPART_SIZ_FULL&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;,<br />
&lt;span style=&#8221;color: #4444ff;&#8221;&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;span style=&#8221;color: #4444ff;&#8221;&gt;;&lt;/span&gt;</div>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/embarcado/mtd-partitions-tips/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using nandsim to mount large images</title>
		<link>http://www.coding.com.br/embarcado/using-nandsim-to-mount-large-images/</link>
		<comments>http://www.coding.com.br/embarcado/using-nandsim-to-mount-large-images/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 01:57:26 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[embarcado]]></category>
		<category><![CDATA[jffs2]]></category>
		<category><![CDATA[mtd]]></category>
		<category><![CDATA[nand]]></category>

		<guid isPermaLink="false">http://www.coding.com.br/?p=168</guid>
		<description><![CDATA[Since I&#8217;m still using 32-bit machines I had to switch the way I mount large (&#62; 128MiB) JFFS2 images. Now I&#8217;m using NAND simulator, an extremely useful debugging and development tool which simulates NAND flashes in RAM. The main problem with mtdram is  related with space reserved to vmalloc function on 32-bits processors (an hardware [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Since I&#8217;m still using 32-bit machines I had to switch the way I mount large (&gt; 128MiB) JFFS2 images. Now I&#8217;m using NAND simulator, an extremely useful debugging and development tool which simulates NAND flashes in RAM. The main problem with mtdram is  related with space reserved to vmalloc function on 32-bits processors (an hardware dependent issue). Checking /proc/meminfo you can see the difference:</p>
<pre>32-bit: VmallocTotal:   122880 kB
64-bit: VmallocTotal:   34359738367 kB</pre>
<p style="text-align: justify;">Nandsim uses another design to access memory, it creates a slab allocation for an array to allow large chunks of memory, the following functions contains more information:</p>
<pre style="text-align: justify;">static int __init <strong>init_mtdram</strong>(void) in drivers/mtd/devices/<strong>mtdram.c</strong>
static int <strong>alloc_device</strong>(struct nandsim *ns) in drivers/mtd/nand/<strong>nandsim.c</strong></pre>
<p>Lets remember the &#8220;original&#8221; way (using mdtram) to mount an JFFS2 image:</p>
<pre>modprobe mtd
modprobe mtdblock
<strong>modprobe mtdram total_size=10240 erase_size=16</strong>
dd if=image.jffs2 of=/dev/mtdblock0
mount -t jffs2 /dev/mtdblock0 /mount-point</pre>
<p>And the new one with nandsim:</p>
<pre>modprobe mtd
modprobe mtdblock
<strong>modprobe nandsim first_id_byte=0x20 second_id_byte=0x71
</strong>dd if=image.jffs2 of=/dev/mtdblock0
mount -t jffs2 /dev/mtdblock0 /mount-point</pre>
<p>And check both:</p>
<pre>cat /proc/mtd
dev:    size   erasesize  name
mtd0: 08000000 00004000 "NAND simulator partition 0"
mtd1: 00400000 00004000 "mtdram test device"</pre>
<p style="text-align: justify;">With mtdram you can define any value to <em>erase_size</em> but with nandsim you need pre-defined memory parameters found in manufacturer datasheet, to select the simulated flash type one should specify ID bytes of your flasher (I&#8217;ve tested with pages of 512 and 2048 bytes).  For more information click <a href="http://www.linux-mtd.infradead.org/faq/nand.html#L_nand_nandsim" target="_blank">here</a>.</p>
<p style="text-align: justify;">You can use nandsim to mount another flash file systems, such as: YAFFS2, CramFS and UBIFS.</p>
<p style="text-align: justify;">As described on first paragraph, nandsim is much more than just a &#8220;mount tool&#8221;. It can reproduce real condition of memory and lead developers make experiments without real hardware. I&#8217;m still learning the possibilities, if you would like to contribute leave an comment.</p>
<p><strong>Endianess issue</strong></p>
<p>If you need convert an image from <em>big endian</em> to <em>little endian</em> (specially on x86 systems) use <strong>jffs2dump</strong>.</p>
<pre style="text-align: justify;">jffs2dump -b big_endian.img -e new_little_endian.img</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.coding.com.br/embarcado/using-nandsim-to-mount-large-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
