<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://leo.leung.xyz/wiki/index.php?action=history&amp;feed=atom&amp;title=Rooting_the_Meraki_MS220-8P</id>
	<title>Rooting the Meraki MS220-8P - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://leo.leung.xyz/wiki/index.php?action=history&amp;feed=atom&amp;title=Rooting_the_Meraki_MS220-8P"/>
	<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;action=history"/>
	<updated>2026-10-28T15:53:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=5066&amp;oldid=prev</id>
		<title>Leo: Text replacement - &quot;Category:Tinkering{{Navbox Tinkering}}&quot; to &quot;{{Navbox Tinkering}}Category:Tinkering&quot;</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=5066&amp;oldid=prev"/>
		<updated>2020-06-15T00:42:57Z</updated>

		<summary type="html">&lt;p&gt;Text replacement - &amp;quot;&lt;a href=&quot;/wiki/Category:Tinkering&quot; title=&quot;Category:Tinkering&quot;&gt;Category:Tinkering&lt;/a&gt;{{Navbox Tinkering}}&amp;quot; to &amp;quot;{{Navbox Tinkering}}&lt;a href=&quot;/wiki/Category:Tinkering&quot; title=&quot;Category:Tinkering&quot;&gt;Category:Tinkering&lt;/a&gt;&amp;quot;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:42, 15 June 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l487&quot;&gt;Line 487:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 487:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://wiki.dave.eu/index.php/Memory_Tecnology_Device_(MTD) - more information, including ubi/ubifs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://wiki.dave.eu/index.php/Memory_Tecnology_Device_(MTD) - more information, including ubi/ubifs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tinkering]]&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Navbox Tinkering}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Navbox Tinkering}}&lt;/ins&gt;[[Category:Tinkering]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-3026:rev-5066:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=3026&amp;oldid=prev</id>
		<title>Leo: Recategorize</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=3026&amp;oldid=prev"/>
		<updated>2019-09-01T02:05:46Z</updated>

		<summary type="html">&lt;p&gt;Recategorize&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:05, 1 September 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l486&quot;&gt;Line 486:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 486:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* http://processors.wiki.ti.com/index.php/Mtdutils - using mtdutils, dumping, flashing, etc.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* http://processors.wiki.ti.com/index.php/Mtdutils - using mtdutils, dumping, flashing, etc.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://wiki.dave.eu/index.php/Memory_Tecnology_Device_(MTD) - more information, including ubi/ubifs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://wiki.dave.eu/index.php/Memory_Tecnology_Device_(MTD) - more information, including ubi/ubifs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Tinkering]]{{Navbox Tinkering}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-2985:rev-3026:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2985&amp;oldid=prev</id>
		<title>Leo: Text replacement - &quot;{\|
&quot; to &quot;{| class=&quot;wikitable&quot;
&quot;</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2985&amp;oldid=prev"/>
		<updated>2019-09-01T01:33:40Z</updated>

		<summary type="html">&lt;p&gt;Text replacement - &amp;quot;{\| &amp;quot; to &amp;quot;{| class=&amp;quot;wikitable&amp;quot; &amp;quot;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:33, 1 September 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l39&quot;&gt;Line 39:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 39:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The boot images must be of size 3932160 bytes (ie. MTD partition size of 0x3C0000) and containing the following header.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The boot images must be of size 3932160 bytes (ie. MTD partition size of 0x3C0000) and containing the following header.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Boot Image Header&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Boot Image Header&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l50&quot;&gt;Line 50:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 50:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{code|Boot Data}}. This is of length {{code|Payload Length}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{code|Boot Data}}. This is of length {{code|Payload Length}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Boot Header&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Boot Header&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l321&quot;&gt;Line 321:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 321:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The image has another header. It looks like this time, the 32bit words are in big endian.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The image has another header. It looks like this time, the 32bit words are in big endian.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Boot Image Header&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Boot Image Header&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l333&quot;&gt;Line 333:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 333:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;class=&quot;wikitable&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&amp;quot;4&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Boot Header&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example Boot Header&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-2820:rev-2985:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2820&amp;oldid=prev</id>
		<title>Leo at 05:53, 22 January 2019</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2820&amp;oldid=prev"/>
		<updated>2019-01-22T05:53:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 05:53, 22 January 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l467&quot;&gt;Line 467:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 467:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/ # dmesg -n 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/ # dmesg -n 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== See Also ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* https://forum.archive.openwrt.org/viewtopic.php?id=63838 - Old forum post &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* https://forum.openwrt.org/t/support-for-meraki-ms220-8p/26007 - New forum post&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Source ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Open source code can be found at:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* https://dl.meraki.net/switch-8-10-20170825.tar.bz2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* http://dl.meraki.net/linux/index.html&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== OpenWRT ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* https://openwrt.org/docs/guide-developer/crosscompile&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Flash Memory ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* http://www.righthandtech.com/embedded-linux-managing-memory.php&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*: {{quote|The mapping driver can either specify a hard-coded partition layout, read the partition layout from the kernel command line passed in from the boot loader (i.e. U-Boot), or read the partition layout from flash storage (i.e. Redboot boot loader).}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* http://processors.wiki.ti.com/index.php/Mtdutils - using mtdutils, dumping, flashing, etc.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* https://wiki.dave.eu/index.php/Memory_Tecnology_Device_(MTD) - more information, including ubi/ubifs&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-2807:rev-2820:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2807&amp;oldid=prev</id>
		<title>Leo: /* Stage 1 */</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2807&amp;oldid=prev"/>
		<updated>2019-01-22T01:36:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Stage 1&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:36, 22 January 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l95&quot;&gt;Line 95:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 95:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Since I don&amp;#039;t have a 32bit MIPS crosscompiler and being the lazy guy I am, I tried the simplest approach which was to patch the {{code|bootsh}} binary so that it calls a shell instead of {{code|kexec}} which is on the ramdisk. I am assuming that the {{code|bootsh}} file mounts the filesystems on the empty directories in the ramdisk.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Since I don&amp;#039;t have a 32bit MIPS crosscompiler and being the lazy guy I am, I tried the simplest approach which was to patch the {{code|bootsh}} binary so that it calls a shell instead of {{code|kexec}} which is on the ramdisk. I am assuming that the {{code|bootsh}} file mounts the filesystems on the empty directories in the ramdisk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;I hex-edited {{code|kexec -f %s --reuse-cmdline}} to {{code|/bin/sh}} with a bunch of nulls after and tried booting. This did not work as the boot process continued on to the second kernel, implying that the kexec call still got made.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;To extract the embedded initramfs from the boot MTD partition, locate the start and end {{code|xz}} file header and footers. In my case, the initramfs data resides at {{code|0x339604}} with length {{code|349124}}. Using {{code|dd}}, it can be extracted with:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{highlight|lang=terminal|code=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dd if=bin/boot1 of=bin/boot1-patched-pre  bs=1 count=$((0x339604))&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dd if=bin/boot1 of=bin/boot-data.xz       bs=1 skip=$((0x339604))  count=349124&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dd if=bin/boot1 of=bin/boot1-patched-post bs=1 skip=$((0x38e9c8))&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The {{code|boot1-patched-pre}} contains the boot image header and the Linux Kernel. {{code|boot1-patched-post}} contains mystery data. The exact structure of the file must remain intact which means the payload data has to be the same as the original. The extracted ramfs data is a {{code|cpio}} compressed with {{code|xz}} and can be extracted with {{code|zcat boot-data.xz {{!}} cpio -i}} on an empty directory.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;After extracting the initramfs contents, &lt;/ins&gt;I hex-edited {{code|kexec -f %s --reuse-cmdline}} to {{code|/bin/sh}} with a bunch of nulls after and tried booting. This did not work as the boot process continued on to the second kernel, implying that the kexec call still got made.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;I hex-edited all reference to {{code|kexec}} to {{code|/sh}} with {{code|/sh}} symlinked to {{code|/bin/sh}} but that too did not work. It just tries over and over with this error:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;I hex-edited all reference to {{code|kexec}} to {{code|/sh}} with {{code|/sh}} symlinked to {{code|/bin/sh}} but that too did not work. It just tries over and over with this error:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff:1.41:old-2805:rev-2807:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2805&amp;oldid=prev</id>
		<title>Leo: Created page with &quot;This article will go over what I did to gain root access on the Meraki MS220-8P switch. TLDR: I modified both stage1 and stage2 flash so that I could eventually set a root pas...&quot;</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Rooting_the_Meraki_MS220-8P&amp;diff=2805&amp;oldid=prev"/>
		<updated>2019-01-22T01:16:14Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;This article will go over what I did to gain root access on the Meraki MS220-8P switch. TLDR: I modified both stage1 and stage2 flash so that I could eventually set a root pas...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This article will go over what I did to gain root access on the Meraki MS220-8P switch. TLDR: I modified both stage1 and stage2 flash so that I could eventually set a root password in {{code|/etc/passwd}} as well as change the default shell to {{code|/bin/sh}}.&lt;br /&gt;
&lt;br /&gt;
For information on the switch itself, see [[Meraki MS220-8P]].&lt;br /&gt;
&lt;br /&gt;
== Rooting the Switch ==&lt;br /&gt;
Without the ability to start a shell on the first-stage bootloader, I would need to modify the initramfs to change {{code|bootsh}}&amp;#039;s behavior. Getting a shell at the first-stage bootloader would allow me to dump and inspect the rest of the NAND flash.&lt;br /&gt;
&lt;br /&gt;
=== Examining the Boot Image ===&lt;br /&gt;
The initial bootloader, the VCore-III ROM Loader that is stored in the first 256Kb of the NOR flash, loads the first-stage bootloader into memory and verifies its integrity using a CRC32 check against the checksum stored as a 32bit word 16bytes into the boot image. If the CRC check fails, it will attempt to load the next partition (by jumping to the next hard-coded memory block containing the SPIM header, see below) and try again.&lt;br /&gt;
&lt;br /&gt;
You can view the VCore-III ROM Loader source at {{code|meraki-firmware/linux-2.6.32/arch/mips/vcoreiii/loader/head.S}}.&lt;br /&gt;
&lt;br /&gt;
When the CRC check fails, the loader will jump execution to the second loader. Your boot logs will show the double initialization as well:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
LinuxLoader built Nov 12 2014 18:01:50&lt;br /&gt;
init_pll ok&lt;br /&gt;
init_spi ok&lt;br /&gt;
init_memctl ok&lt;br /&gt;
wait_memctl ok&lt;br /&gt;
Training DRAM ok&lt;br /&gt;
init_irq ok&lt;br /&gt;
init_dram_uncached ok&lt;br /&gt;
init_icache ok&lt;br /&gt;
init_dcache ok&lt;br /&gt;
enable_caches ok&lt;br /&gt;
init_board ok&lt;br /&gt;
Low level initialization complete, exiting boot mode&lt;br /&gt;
LinuxLoader built Nov 12 2014 18:01:50&lt;br /&gt;
init_pll ok&lt;br /&gt;
init_spi ok&lt;br /&gt;
init_irq ok&lt;br /&gt;
init_dram_uncached ok&lt;br /&gt;
init_icache ok&lt;br /&gt;
init_dcache ok&lt;br /&gt;
enable_caches ok&lt;br /&gt;
init_board ok&lt;br /&gt;
Low level initialization complete, exiting boot mode&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The boot images must be of size 3932160 bytes (ie. MTD partition size of 0x3C0000) and containing the following header.&lt;br /&gt;
{|&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
Boot Image Header&lt;br /&gt;
|-&lt;br /&gt;
| {{code|LOADER_MAGIC}} 32bit || {{code|Kernel Address}} 32bit || {{code|Payload Length}} 32bit || {{code|Entrypoint Address}} 32bit&lt;br /&gt;
|-&lt;br /&gt;
| {{code|CRC32 CHKSUM}} 32bit || {{code|Reserved 1}} 32bit || {{code|Reserved 2}} 32bit || {{code|Reserved 3}} 32bit&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
{{code|Boot Data}}. This is of length {{code|Payload Length}}&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
Example Boot Header&lt;br /&gt;
|-&lt;br /&gt;
| {{code|53 50 49 4D}} || {{code|00 00 10 80}} || {{code|E0 F1 38 00}} || {{code|B0 16 39 80}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|XX XX XX XX}} || {{code|00 00 00 00}} || {{code|00 00 00 00}} || {{code|00 00 00 00}} &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
{{code|00 00 ... boot data ... 00 00}}.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: Values are in little endian so a 32bit value of {{code|0xAABBCCDD}} is stored as {{code|0xDDCCBBAA}}.&lt;br /&gt;
&lt;br /&gt;
The {{code|LOADER_MAGIC}} is {{code|0x4d495053}} in little endian looks like {{code|53 50 49 4d}} or ASCII for {{code|SPIM}}.&lt;br /&gt;
&lt;br /&gt;
The {{code|CRC32 CHKSUM}} value is calculated against the entire boot image of the given {{code|Payload Length}} with the CRC32 value zeroed out.&lt;br /&gt;
&lt;br /&gt;
=== Modifying The Boot Image ===&lt;br /&gt;
The data after the boot image headers mentioned in the previous section contains the kernel and whatever else that&amp;#039;s embedded into the kernel including a ramdisk. The ramdisk from the stock kernel is located after byte 0x339604.&lt;br /&gt;
&lt;br /&gt;
To help facilitate modifying this ramdisk to do my bidding, I will split the data portion into 3 parts: The &amp;#039;pre&amp;#039; ramdisk portion, the ramdisk portion, and the &amp;#039;post&amp;#039; ramdisk portion. Pre-portion can be generated with {{code|1=dd if=boot1 of=boot1-patched-pre bs=1 count=$((0x339604))}} and the post-portion with {{code|1=dd if=boot1 of=boot1-patched-post bs=1 skip=$((0x38e9c8))}}.&lt;br /&gt;
&lt;br /&gt;
To make changes to the boot file:&lt;br /&gt;
# Extract the boot data using {{code|cat ../boot-data.xz {{!}} xz -d {{!}} cpio -i}}&lt;br /&gt;
# Make your changes to the ramdisk&lt;br /&gt;
# Recreate the cpio {{code|find . {{!}} cpio -o -c &amp;gt; ../modified.cpio}}&lt;br /&gt;
# Recompress {{code|1=cat modified.cpio {{!}} xz -c9 --check=crc32 &amp;gt; modified.xz}}&lt;br /&gt;
# If image is smaller, pad with 0&amp;#039;s for the difference {{code|cat modified.xz zeros.bin &amp;gt; modified.xz}}&lt;br /&gt;
# If image is larger, append post data, then adjust data lengths after payload and at the start of the boot file&lt;br /&gt;
# Reassemble boot file {{code|cat boot1-patched-pre modified.xz boot1-patched-post &amp;gt; boot1-patched}}&lt;br /&gt;
# Zero out CRC code&lt;br /&gt;
# Calculate the CRC code {{code|php ../crc32.php boot1-patched}}&lt;br /&gt;
# Write new CRC code&lt;br /&gt;
# Reassemble the entire image {{code|cat loader1 boot1-patched loader2 boot2 rsvd bootubi conf stackconf syslog &amp;gt; dump-patched.dat}}&lt;br /&gt;
# Copy the dump-patched.dat file to raspberry pi&lt;br /&gt;
# Flash it {{code|1=flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=600 -c &amp;quot;MX25L12835F/MX25L12845E/MX25L12865E&amp;quot; -w dump-patched.dat}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Journey to Rooting the Switch ===&lt;br /&gt;
This section will run on as a semi-journal on what I did in order to gain access to the switch.&lt;br /&gt;
&lt;br /&gt;
==== Stage 1 ====&lt;br /&gt;
Since I don&amp;#039;t have a 32bit MIPS crosscompiler and being the lazy guy I am, I tried the simplest approach which was to patch the {{code|bootsh}} binary so that it calls a shell instead of {{code|kexec}} which is on the ramdisk. I am assuming that the {{code|bootsh}} file mounts the filesystems on the empty directories in the ramdisk.&lt;br /&gt;
&lt;br /&gt;
I hex-edited {{code|kexec -f %s --reuse-cmdline}} to {{code|/bin/sh}} with a bunch of nulls after and tried booting. This did not work as the boot process continued on to the second kernel, implying that the kexec call still got made.&lt;br /&gt;
&lt;br /&gt;
I hex-edited all reference to {{code|kexec}} to {{code|/sh}} with {{code|/sh}} symlinked to {{code|/bin/sh}} but that too did not work. It just tries over and over with this error:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
[    3.633000] execl failed: 2&lt;br /&gt;
[    3.638000] kexec died&lt;br /&gt;
[    3.640000] Calling kexec for /dev/mtdblock/part1 failed!&lt;br /&gt;
[    3.647000] execl failed: 2&lt;br /&gt;
[    3.651000] kexec died&lt;br /&gt;
[    3.654000] Calling kexec for /dev/mtdblock/part2 failed!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Since I removed the {{code|kexec}} binary and replaced all {{code|kexec}} strings to {{code|/sh}} that is symlinked to {{code|/bin/sh}}, having the boot process fail in this manner implies that either the {{code|/kexec}} or the {{code|/sh}} binary is being called. Both of which are symlinked to {{code|/bin/sh}} which suggests that {{code|/bin}} isn&amp;#039;t mounted.&lt;br /&gt;
&lt;br /&gt;
I got a [https://www.mips.com/develop/tools/codescape-mips-sdk/ MIPS cross compiler] and compiled busybox without a bunch of applets so that the final binary can fit inside the size of the existing xz archive. I wasn&amp;#039;t totally sure if busybox would like being called directly by the kernel (because it might not know which applet to run?) so I created a {{code|/init}} script that invoked {{code|/sh}} that is symlinked to busybox and then called {{code|/sh}}.&lt;br /&gt;
&lt;br /&gt;
The first few times failed. The first time, the CPU architecture wasn&amp;#039;t correct (the MIPS compiler targetted rel6, not rel2). The next few times also failed because I compiled it with the wrong endianness. All these failed attempts resulted in {{highlight|lang=terminal|code=&lt;br /&gt;
Starting init: /bin/sh exists but couldn&amp;#039;t execute it (error -8) &lt;br /&gt;
Kernel Panic - not syncing: No working init found. Try passing init= option to Kernel. }}.&lt;br /&gt;
&lt;br /&gt;
I eventually got busybox compiled for MIPS32 rel2 in little endian with these gcc flags:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
root@fc:/tmp/busybox-1.30.0# make CROSS_COMPILE=mips-mti-linux-gnu- CFLAGS=&amp;#039;-Wa,-mips32r2,-march=24kec,-mtune=24kec -mel -EL&amp;#039; LDFLAGS=&amp;#039;-Wa,-mips32r2,-march=24kec,-mtune=24kec -mel -EL&amp;#039; ARCH=mips KBUILD_VERBOSE=1 -j 8&lt;br /&gt;
&lt;br /&gt;
## The resulting binary should be like this&lt;br /&gt;
root@fc:/tmp/busybox-1.30.0# file busybox&lt;br /&gt;
busybox: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, stripped&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Using this busybox executable, I rebuilt the ramdisk, repackaged the files, and reflashed it onto the switch and hoped for the best.&lt;br /&gt;
&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
[    3.057000] devtmpfs: mounted&lt;br /&gt;
&lt;br /&gt;
[    3.069000] Freeing unused kernel memory: 484K&lt;br /&gt;
sh: can&amp;#039;t execute &amp;#039;echo&amp;#039;: No such file or directory&lt;br /&gt;
&lt;br /&gt;
BusyBox v1.30.0 (2019-01-16 20:37:46 MST) hush - the humble shell&lt;br /&gt;
&lt;br /&gt;
/ # uname -a&lt;br /&gt;
Linux (none) 3.18.102-meraki-elemental #1 Fri Apr 13 11:18:08 PDT 2018 mips GNU/Linux&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
My {{code|echo &amp;quot;Hello world&amp;quot;}} inside {{code|failed}} failed since there was no {{code|echo}} in the PATH, but I got a shell!&lt;br /&gt;
&lt;br /&gt;
After exploring around with my very limited busybox (which in my haste to minimize size, I apparently did not bundle {{code|cd}} into...), it turns out that {{code|/dev/mtdblock11}} contains a 640K squashfs filesystem containing a better featured busybox. To make my life easier, I mounted and copied the entire contents to the ramdisk. No other devices seem to have a filesystem I can mount. I integrated this into {{code|init}}, so that the switch comes up with a more usable system.&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
/ # busybox mkdir  /proc /sys&lt;br /&gt;
/ # busybox mount -t proc none /proc&lt;br /&gt;
/ # busybox mount -t sysfs none /sys&lt;br /&gt;
/ # busybox mkdir /rootfs&lt;br /&gt;
/ # busybox rm /lib /sbin /usr /bin&lt;br /&gt;
/ # busybox mount -o ro /dev/mtdblock11 /rootfs &lt;br /&gt;
/ # busybox cp -r /rootfs/* /&lt;br /&gt;
/ # /bin/sh&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Unfortunately, there is no networking enabled with this first kernel. This will make copying data in and out a pain since it has to go through the serial connection.&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
## No networking is a bummer.&lt;br /&gt;
/ # ifconfig -a&lt;br /&gt;
lo        Link encap:Local Loopback&lt;br /&gt;
          LOOPBACK  MTU:65536  Metric:1&lt;br /&gt;
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0&lt;br /&gt;
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
CPU information:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
/ # cat /proc/cpuinfo&lt;br /&gt;
system type             : Vitesse VCore-III VSC7425&lt;br /&gt;
machine                 : Unknown&lt;br /&gt;
processor               : 0&lt;br /&gt;
cpu model               : MIPS 24KEc V5.4&lt;br /&gt;
BogoMIPS                : 276.99&lt;br /&gt;
wait instruction        : yes&lt;br /&gt;
microsecond timers      : yes&lt;br /&gt;
tlb_entries             : 16&lt;br /&gt;
extra interrupt vector  : yes&lt;br /&gt;
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]&lt;br /&gt;
isa                     : mips1 mips2 mips32r1 mips32r2&lt;br /&gt;
ASEs implemented        : mips16 dsp&lt;br /&gt;
shadow register sets    : 1&lt;br /&gt;
kscratch registers      : 0&lt;br /&gt;
package                 : 0&lt;br /&gt;
core                    : 0&lt;br /&gt;
VCED exceptions         : not available&lt;br /&gt;
VCEI exceptions         : not available&lt;br /&gt;
&lt;br /&gt;
/ # cat /proc/meminfo&lt;br /&gt;
MemTotal:         125548 kB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Since the first 9 MTD are from the NOR flash device, everything after is from the larger NAND flash device. Since I have no ability to physically dump the contents of the NAND drive, being able to copy the data from the running kernel at this stage is extremely helpful.&lt;br /&gt;
&lt;br /&gt;
The next task now is to get the contents of the flash memory and figure out how to gain root access on the second stage. Specifically, it would be nice to know if there is already a SSH account I can use, what the {{code|&amp;lt;MERAKI&amp;gt;}} console that gets brought up is (and what commands it actually takes), and if it is possible to add my own account in.&lt;br /&gt;
&lt;br /&gt;
I tried to {{code|dd}} data out from the serial connection, but it seems like data randomly gets corrupted over the serial console. There are utilities that can be used to transfer files over serial such as lzrzr or kermit, but none of them exist. I figured it&amp;#039;d be easier to write my own shell script that chunks the data out using base64 and then sum these chunks for data integrity checks. It turns out, baud rates higher than 115200 yields a very unstable serial connection and it ends up garbling up the data that&amp;#039;s sent across. After spending a few hours hacking a few scripts together, I am now able to send (albeit slowly, &amp;lt;8kb/s) files in and out of the switch.&lt;br /&gt;
&lt;br /&gt;
I transferred mtd{9-21}ro out of the switch for analysis. Each MTD looks like this:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
data9:  ~250k  Nulls, of length 0x0003dd8b&lt;br /&gt;
data10: 128k   Switch Data (Model, Serial Number)&lt;br /&gt;
data11: 540k   Squashfs filesystem, little endian, version 4.0, 548778 bytes, 166 inodes, blocksize: 131072 bytes, created: Fri Apr 13 18:19:18 2018&lt;br /&gt;
data12: 20MB   data&lt;br /&gt;
data13: 20MB   data, old copy/backup of the above?&lt;br /&gt;
data14: 8MB    UBIfs image, sequence number 1, length 4096, CRC 0x8a351c73&lt;br /&gt;
data15: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
data16: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
data17: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
data18: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
data19: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
data20: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
data21: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The ELF binaries stored in {{code|mtdblock15}} - {{code|mtdblock21}} are all different versions of what seems to be the switch CLI management program. I later learn that these are different versions of SMBStax binaries for eCos. I&amp;#039;m unsure whether these actually get executed anywhere considering that they&amp;#039;re supposed to run under eCos and not Linux.&lt;br /&gt;
&lt;br /&gt;
{{code|mtdblock12}} and {{code|mtdblock13}} contains the second stage kernel as well as an embedded ramdisk image similar to the first stage boot1/boot2 partitions. The kernel that is there is slightly older at version {{code|3.18.57-meraki-elemental}}. The ramdisk image extracted out contains all the Meraki OS binaries and scripts which we&amp;#039;ll get into soon.&lt;br /&gt;
&lt;br /&gt;
{{code|mtdblock14}} is a UBIfs image that gets mapped to {{code|/dev/ubi1_4}} and gets mounted as {{code|/storage}} when the switch boots into the second stage. This partition contains some logs, core dumps, last known good configs, etc.&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
# mount -t ubifs /dev/ubi1_4 /mnt&lt;br /&gt;
# find /mnt&lt;br /&gt;
.&lt;br /&gt;
./syslogs&lt;br /&gt;
./syslogs/41.start&lt;br /&gt;
./syslogs/42.last_write&lt;br /&gt;
./syslogs/40.last_write&lt;br /&gt;
./syslogs/43.start&lt;br /&gt;
./syslogs/39.last_write&lt;br /&gt;
./syslogs/39.start&lt;br /&gt;
./syslogs/39.watchdog_status&lt;br /&gt;
./syslogs/40.start&lt;br /&gt;
./syslogs/43.last_write&lt;br /&gt;
./syslogs/42.start&lt;br /&gt;
./syslogs/41.last_write&lt;br /&gt;
./mfg_done&lt;br /&gt;
./dropbear&lt;br /&gt;
./dropbear/dropbear_rsa_host_key&lt;br /&gt;
./dropbear/dropbear_dss_host_key&lt;br /&gt;
./random_seed&lt;br /&gt;
./odm_test.log&lt;br /&gt;
./last_good_uplink_config&lt;br /&gt;
./lastdhcpip_wired0&lt;br /&gt;
./config.local&lt;br /&gt;
./unique_config_secret&lt;br /&gt;
./cores&lt;br /&gt;
./cores/37.switch-10-201808241214-G0a4ba17b-rel-owner.core-serial_loginche-00-00-52.tgz&lt;br /&gt;
./cores/37.switch-10-201808241214-G0a4ba17b-rel-owner.core-serial_loginche-00-00-53.tgz&lt;br /&gt;
./cores/37.switch-10-201808241214-G0a4ba17b-rel-owner.core-serial_loginche-00-00-55.tgz&lt;br /&gt;
./cores/37.switch-10-201808241214-G0a4ba17b-rel-owner.core-serial_loginche-00-00-56.tgz&lt;br /&gt;
./cores/37.switch-10-201808241214-G0a4ba17b-rel-owner.core-serial_loginche-00-01-36.tgz&lt;br /&gt;
./cores/37.switch-10-201808241214-G0a4ba17b-rel-owner.core-serial_loginche-00-01-49.tgz&lt;br /&gt;
./lists&lt;br /&gt;
./last_uplink_lport&lt;br /&gt;
./BOOT_COUNT&lt;br /&gt;
./BOOT_COUNT.reserve&lt;br /&gt;
./config&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To boot the next stage, you can copy the {{code|kexec}} binary from the original boot1/boot2 partition over and then run:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
# ./kexec -f /dev/mtdblock12 &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
However, this will just bring you back to the locked down console.&lt;br /&gt;
&lt;br /&gt;
==== Stage 2 ====&lt;br /&gt;
&lt;br /&gt;
With the second stage ramfs image obtained, I can now dig through how the Meraki OS actually works. The file listing of the ramdisk can be found at https://paste.steamr.com/view/7974ba25. After extracting the image and digging around the filesystem, a few interesting points to note:&lt;br /&gt;
* {{code|/etc/passwd}} contains some accounts: {{highlight|lang=terminal|code=&lt;br /&gt;
leo@fc:/home/leo/extracted/stage2/extracted% cat etc/passwd&lt;br /&gt;
root:!:0:0:root:/tmp:/bin/ash&lt;br /&gt;
nobody:*:65534:65534:nobody:/var:/bin/false&lt;br /&gt;
mf:$1$$CgXoxAaejQmJWRkDiclb6/:0:0:meraki:/tmp:/usr/bin/serial_logincheck&lt;br /&gt;
support:x:1:1:Meraki Support:/support:/bin/ash&lt;br /&gt;
}}&lt;br /&gt;
* The &amp;#039;mf&amp;#039; account runs {{code|/usr/bin/serial_logincheck}}, which is the same getty that gets launched on {{code|ttyS0}} in {{code|/etc/inittab}}: {{highlight|lang=terminal|code=&lt;br /&gt;
leo@fc:/home/leo/extracted/stage2/extracted% cat etc/inittab&lt;br /&gt;
::sysinit:/etc/init.d/rcS&lt;br /&gt;
::shutdown:/etc/init.d/shutdown&lt;br /&gt;
ttyS0::respawn:/usr/bin/serial_logincheck --login&lt;br /&gt;
}}&lt;br /&gt;
* There is an empty {{code|/etc/dropbear/authorized_keys}} file&lt;br /&gt;
* lighttpd runs with &amp;#039;authorized_ips&amp;#039; set to 6.0.0.{2,10,11,12} and 127.0.0.1.&lt;br /&gt;
* Speed test script in {{code|/www}} downloads from 6.0.0.1.&lt;br /&gt;
* The Vitesse kernel module is at {{code|/lib/modules/jaguar/vtss_core.ko}}. Perhaps I can copy this and load it on the first stage kernel?&lt;br /&gt;
* {{code|usr/bin/config_updater}} writes to the NAND flash using {{code|nanddump}}, {{code|nandwrite}}, {{code|flash_erase}}, etc. This is probably the thing that phones home and interfaces with the {{code|switch_brain}}.&lt;br /&gt;
* {{code|/usr/bin/switch_brain}} seems to manage the switch hardware and services? Deals a lot with {{code|/click}} partition.&lt;br /&gt;
* The only mention of OpenWRT is the {{code|/etc/ipkg.conf}} file.&lt;br /&gt;
* {{code|/usr/bin/board_data_config}} gets or sets board config values. (mfg_done if set sets it to manufacturing mode).&lt;br /&gt;
* {{code|/usr/bin/odm}} is a script that does lots of diagnostic things including writing a new firmware.&lt;br /&gt;
* {{code|/usr/bin/serial_logincheck}} appears to lock the console down except if the switch is in manufacturing mode. Despite its threatening warning, it does not appear to actually log anything to the cloud.&lt;br /&gt;
&lt;br /&gt;
Getting networking working in the stage1 kernel would be nice as it would allow me to easily copy files in and out of the switch. My shell scripts to copy data in/out reliably can only copy files at around 6-7kb/s. Since the kernel module for networking is probably part of the {{code|vtss_core.ko}}, I&amp;#039;ll copy and then load the module.&lt;br /&gt;
&lt;br /&gt;
Modules are loaded by the {{code|/etc/init.d/S10boot}} startup script. The type of CPU or board determines which module gets loaded. The MS220-8P board has the VSC7425 CPU which will load the {{code|luton26/vtss_core.ko}} module. The module is loaded with {{code|insmod}} provided by busybox inside a wrapper function called {{code|modload}}.&lt;br /&gt;
&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
## Load vtss_core and unload the module without board_desc&lt;br /&gt;
insmod/lib/modules/$vtss_board/vtss_core.ko board_desc=$switch_board &amp;amp;&amp;amp; modrm /lib/modules/$vtss_board/vtss_core.ko&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Of course, the kernel versions mismatch and there is no force option. Ugh.&lt;br /&gt;
{{highlight|lang=text|code=&lt;br /&gt;
[28928.328000] vtss_core: version magic &amp;#039;3.18.57-meraki-elemental mod_unload MIPS32_R2 32BIT &amp;#039; should be &amp;#039;3.18.102-meraki-elemental mod_unload MIPS32_R2 32BIT &amp;#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The next approach is just to modify the second stage initramfs so that the root account has a password set and the serial console isn&amp;#039;t locked down.&lt;br /&gt;
&lt;br /&gt;
Modifying the second stage boot image.&lt;br /&gt;
&lt;br /&gt;
The image has another header. It looks like this time, the 32bit words are in big endian.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
Boot Image Header&lt;br /&gt;
|-&lt;br /&gt;
| {{code|LOADER_MAGIC}}  || {{code|Payload Address}}  || {{code|Payload Length}} || {{code|SHA1}} &lt;br /&gt;
|-&lt;br /&gt;
| {{code|SHA1}} || {{code|SHA1}}  || {{code|SHA1}}  || {{code|SHA1}} &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
{{code|Empty Header Data}} until {{code|Payload Address}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
Example Boot Header&lt;br /&gt;
|-&lt;br /&gt;
| {{code|8E 73 ED 8A}} || {{code|00 00 40 00}} || {{code|01 11 29 9C}} || {{code|6A 33 34 92}}&lt;br /&gt;
|-&lt;br /&gt;
| {{code|DA 33 DC 66 }} || {{code|36 1E C9 3C}} || {{code| FE DD D2 8C}} || {{code| EE 1E 33 ED}} &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
{{code|FF FF .. FF FF}} until {{code|Payload Address}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SHA1 checksum is done against the payload only. If the hash is incorrect, {{code|kexec}} will tell you:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
/ # kexec -ld /dev/mtdblock12&lt;br /&gt;
Try gzip decompression.&lt;br /&gt;
kernel: 0x76aff010 kernel_size: 0x140e800&lt;br /&gt;
meraki_part_mips: SHA1 doesn&amp;#039;t match&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Erase and then flash the image on the NAND flash:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
# flash_erase /dev/mtdchar/part1 0 0&lt;br /&gt;
# nandwrite -pam /dev/mtdchar/part1  firmware.bin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The kernel can be loaded and executed once the SHA1 hash was fixed. My change to make the console run {{code|/bin/sh}} instead of the locked down console worked like a treat too.&lt;br /&gt;
&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
[   12.586000] UBIFS: reserved for root: 347364 bytes (339 KiB)&lt;br /&gt;
[   12.592000] UBIFS: media format: w4/r0 (latest is w4/r0), UUID 2EA2ACA1-07FA-472B-BC2D-F0F2DB4314D3, small LPT model&lt;br /&gt;
In manufacturing: FALSE&lt;br /&gt;
In rma [   12.615000] /initmode: FALSE&lt;br /&gt;
: reading file /storage/config: No such file or directory&lt;br /&gt;
init started: BusyBox v1.25.1 (2018-08-24 12:51:28 PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BusyBox v1.25.1 (2018-08-24 12:51:28 PDT) built-in shell (ash)&lt;br /&gt;
&lt;br /&gt;
/ # [   13.515000] sysctl: error: &amp;#039;kernel.softlockup_panic&amp;#039; is an unknown key&lt;br /&gt;
[   13.523000] sysctl: error: &amp;#039;kernel.watchdog_thresh&amp;#039; is an unknown key&lt;br /&gt;
[   13.768000] sh: write error: Device or resource busy&lt;br /&gt;
[   13.882000] vtss_core: module license &amp;#039;(c) Vitesse Semiconductor Inc.&amp;#039; taints kernel.&lt;br /&gt;
[   13.890000] Disabling lock debugging due to kernel taint&lt;br /&gt;
[   14.490000] switch: &amp;#039;Meraki MS220-8&amp;#039; board detected&lt;br /&gt;
[   14.837000] grep: /storage/config: No such file or directory&lt;br /&gt;
[   15.446000] sysctl -w vm.panic_on_oom=2&lt;br /&gt;
[   15.473000] vm.panic_on_oom = 2&lt;br /&gt;
[   16.087000] click: starting router thread pid 745 (87bfca00)&lt;br /&gt;
[   16.943000] Single synchronous check for reset&lt;br /&gt;
[   17.252000]&lt;br /&gt;
[   17.289000] boot 47 build switch-10-201808241214-G0a4ba17b-rel-owner board elemental mac 0C:8D:DB:7E:D7:76&lt;br /&gt;
[   17.324000] Module: vtss_core  .text=0xc1411000 .data=0xc14a90b0 .bss=0xc14a9320&lt;br /&gt;
[   17.324000] Module: proclikefs  .text=0xc007c000 .data= .bss=0xc007d040&lt;br /&gt;
[   17.324000] Module: merakiclick  .text=0xc182c000 .data=0xc197c800 .bss=0xc197ca80&lt;br /&gt;
[   17.324000] Module: elts_meraki  .text=0xc1f59000 .data=0xc224faa0 .bss=0xc22513d0&lt;br /&gt;
[   17.324000] Module: vc_click  .text=0xc23ba000 .data=0xc23ebfa0 .bss=0xc23ec130&lt;br /&gt;
[   17.488000] ls -1 /sys/fs/pstore/dmesg-ramoops-* 2&amp;gt;/dev/null&lt;br /&gt;
[   17.520000] /usr/bin/check_bootreason: reading file : No such file or directory&lt;br /&gt;
[   20.336000] !!!!! {/usr/bin/switch_brain} opening /click/switch_port_table/dump_stack_info_and_reset_stack_change failed: No such file or directory&lt;br /&gt;
[   22.423000] chatter: from_sw0 :: FromVitesse: initializing fdma&lt;br /&gt;
[   23.566000] chatter: dhcp_tracker :: DHCPTracker: skipping undersized restore buffer (buf size: 0)&lt;br /&gt;
[   24.918000] !!!!! {/usr/bin/switch_brain} failed writing /click/switch_port_table/set_port_storm_control  errno 2 len 211 data: &amp;quot;PORT 1, ENABLED true\nPORT 2, ENABLED ...&amp;quot;&lt;br /&gt;
[   25.884000] chatter: big_acl :: BigACL: skipping undersized restore buffer (buf size: 0)&lt;br /&gt;
&lt;br /&gt;
/ #&lt;br /&gt;
/ #&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Other Failures ===&lt;br /&gt;
Here are a collection of failures when I tried various things.&lt;br /&gt;
&lt;br /&gt;
==== Bad XZ Encoding ====&lt;br /&gt;
When building the ramdisk, you need to compress with {{code|-C crc32}} or else you will get this:&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
[    0.106000] mkp_lg: Input was encoded with settings that are not supported by this XZ decoder&lt;br /&gt;
[    0.106000] Kernel panic - not syncing: Input was encoded with settings that are not supported by this XZ decoder&lt;br /&gt;
[    0.106000] Rebooting in 5 seconds..LinuxLoader built Nov 12 2014 18:01:50&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The first search result returned [https://forums.fogproject.org/topic/2819/custom-boot-image this post] which suggested compressing the archive using {{code|xz -C crc32 -z -c init &amp;gt; init.xz}}.&lt;br /&gt;
&lt;br /&gt;
==== Misaligning Ramdisk in Boot Image ====&lt;br /&gt;
If you misalign the embedded ramdisk, the kernel won&amp;#039;t be able to mount it but the kernel will print out all the block devices it sees. Fix this by making sure the ramdisk is exactly the same size as the original.&lt;br /&gt;
&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
[    2.544000] devtmpfs: error mounting -2&lt;br /&gt;
[    2.548000] Warning: unable to open an initial console.&lt;br /&gt;
[    2.555000] VFS: Cannot open root device &amp;quot;(null)&amp;quot; or unknown-block(0,0): error -2&lt;br /&gt;
[    2.563000] Please append a correct &amp;quot;root=&amp;quot; boot option; here are the available partitions:&lt;br /&gt;
[    2.571000] 1f00          131072 mtdblock0  (driver?)&lt;br /&gt;
[    2.576000] 1f01             256 mtdblock1  (driver?)&lt;br /&gt;
[    2.582000] 1f02            3840 mtdblock2  (driver?)&lt;br /&gt;
[    2.587000] 1f03             256 mtdblock3  (driver?)&lt;br /&gt;
[    2.592000] 1f04            3840 mtdblock4  (driver?)&lt;br /&gt;
[    2.597000] 1f05             512 mtdblock5  (driver?)&lt;br /&gt;
[    2.602000] 1f06            6144 mtdblock6  (driver?)&lt;br /&gt;
[    2.607000] 1f07             256 mtdblock7  (driver?)&lt;br /&gt;
[    2.613000] 1f08            1024 mtdblock8  (driver?)&lt;br /&gt;
[    2.618000] 1f09             256 mtdblock9  (driver?)&lt;br /&gt;
[    2.623000] 1f0a             126 mtdblock10  (driver?)&lt;br /&gt;
[    2.628000] 1f0b             536 mtdblock11  (driver?)&lt;br /&gt;
[    2.633000] 1f0c           20538 mtdblock12  (driver?)&lt;br /&gt;
[    2.639000] 1f0d           20538 mtdblock13  (driver?)&lt;br /&gt;
[    2.644000] 1f0e            8316 mtdblock14  (driver?)&lt;br /&gt;
[    2.649000] 1f0f            2095 mtdblock15  (driver?)&lt;br /&gt;
[    2.654000] 1f10            2632 mtdblock16  (driver?)&lt;br /&gt;
[    2.660000] 1f11            2242 mtdblock17  (driver?)&lt;br /&gt;
[    2.665000] 1f12            2223 mtdblock18  (driver?)&lt;br /&gt;
[    2.670000] 1f13            2671 mtdblock19  (driver?)&lt;br /&gt;
[    2.675000] 1f14            2681 mtdblock20  (driver?)&lt;br /&gt;
[    2.681000] 1f15            2674 mtdblock21  (driver?)&lt;br /&gt;
[    2.686000] mkp_lg: VFS: Unable to mount root fs on unknown-block(0,0)&lt;br /&gt;
[    2.686000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)&lt;br /&gt;
[    2.686000] Rebooting in 5 seconds..&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Failed Attempt at Expanding the Ramdisk ====&lt;br /&gt;
The smallest shell I can find is the busybox 1.20 version at 1.5MB. This will cause the archive to be larger than the original which will screw with how the archive gets loaded if I just dump the data in. The data immediately after the archive is also a concern since I have no clue what it is or what it does.  My obervation is that immediately after the end of the archive data, there is a 32bit word containing the length of the archive data, followed by some data, padded by 00&amp;#039;s to the next 16byte. So, I swapped the archive data out with the larger version with busybox, rewrote the 32bit word to the new length, updated the data length at the start of the boot image as well as the CRC32 code and tried booting it. No go, with the following error:&lt;br /&gt;
&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
[    0.106000] mkp_lg: compression method &amp;lt;&amp;lt;▒i=▒▒R;▒,▒C▒8▒C▒\▒C▒x▒C▒▒▒C▒ not configu&lt;br /&gt;
[    0.106000] Kernel panic - not syncing: compression method &amp;lt;&amp;lt;▒i=▒▒R;▒,▒C▒8▒C▒\▒C▒x▒C▒▒▒C▒ not configu&lt;br /&gt;
[    0.106000] Rebooting in 5 seconds..LinuxLoader built Nov 12 2014 18:01:50&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Serial Speed ====&lt;br /&gt;
&lt;br /&gt;
You can raise the serial speed, but anything higher than the default 115200 baud seems to be unstable for me and it ends up corrupting data.&lt;br /&gt;
{{highlight|lang=terminal|code=&lt;br /&gt;
/ # stty -F /dev/ttyS0 921600&lt;br /&gt;
/ # dmesg -n 1&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Leo</name></author>
	</entry>
</feed>