add lots more media
Signed-off-by: Sean Cross <sean@xobs.io>
169
index.html
@ -81,6 +81,75 @@
|
|||||||
<body>
|
<body>
|
||||||
<div class="reveal">
|
<div class="reveal">
|
||||||
<div class="slides">
|
<div class="slides">
|
||||||
|
<section>
|
||||||
|
<section>
|
||||||
|
<h2>Renode</h2>
|
||||||
|
<p>I find it a useful tool. Maybe you will, too!
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>About Me: I Do Weird Hardware</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Simmel: Contact Tracing with Audio</li>
|
||||||
|
<li>Chibitronics: Programming Stickers with Audio</li>
|
||||||
|
<li>Novena: Open Source Laptop</li>
|
||||||
|
<li>Senoko: Open Source Power Board for Novena</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>About Renode</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Whole-System Emulator</li>
|
||||||
|
<li>Supports concurrent emulation</li>
|
||||||
|
<li>Extensible with C# and Python</li>
|
||||||
|
<li>MIT Licensed</li>
|
||||||
|
<li>Windows, Mac, Linux</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>About This Talk</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Overview of Emulators</li>
|
||||||
|
<li>Oevrview of Weird Hardware</li>
|
||||||
|
<li>Cool things you can do</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Who will find this interesting?</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Creators: Those making new boards or hardware</li>
|
||||||
|
<li>Integrators: Running CI on firmware files</li>
|
||||||
|
<li>Reverse Engineers: Understanding new hardware and firmware</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Creators: Making New Things!</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Reusing an existing platform</li>
|
||||||
|
<li>Reusing an existing microcontroller</li>
|
||||||
|
<li>New microcontroller fron existing family</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Integrators: Making Sure Nothing Broke!</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Hardware testing incompatible with cloud</li>
|
||||||
|
<ul>
|
||||||
|
<li>...it sure is effective, though</li>
|
||||||
|
</ul>
|
||||||
|
<li>Hardware crunch makes it difficult to get hardware</li>
|
||||||
|
<li>Downloading software is much cheaper than shipping</li>
|
||||||
|
<li>Can run tests on every code push</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Reverse Engineers: What Is This Blob Doing?</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Staring at code flow is enlightening, but time-consuming</li>
|
||||||
|
<li>What is it doing and how does it get there?</li>
|
||||||
|
<li>How can we make it do $x?</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<section>
|
<section>
|
||||||
<h2>What is an Emulator?</h2>
|
<h2>What is an Emulator?</h2>
|
||||||
@ -123,6 +192,13 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<section>
|
||||||
|
<h2>What is a Computer?</h2>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<section>
|
<section>
|
||||||
<h2>Example of Weird Hardware</h2>
|
<h2>Example of Weird Hardware</h2>
|
||||||
@ -206,6 +282,78 @@
|
|||||||
<li>Very few projects use built-in blocks</li>
|
<li>Very few projects use built-in blocks</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>It's All About Small Victories</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Serial ports are super rewarding</li>
|
||||||
|
<li>They're also usually simple!</li>
|
||||||
|
<li>They are easy to script</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Steps to Set Up a Serial Port</h2>
|
||||||
|
<ol>
|
||||||
|
<li class="fragment semi-fade-out" data-fragment-index="1">Enable peripheral</li>
|
||||||
|
<li class="fragment semi-fade-out" data-fragment-index="1">Set up clock</li>
|
||||||
|
<li class="fragment semi-fade-out" data-fragment-index="1">Mux GPIOs</li>
|
||||||
|
<li class="fragment semi-fade-out" data-fragment-index="1">Calculate baud rate</li>
|
||||||
|
<li>Write to UART TX register</li>
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Steps to Set Up a Serial Port</h2>
|
||||||
|
<img src="media/renode-xous-kernel-uart.png">
|
||||||
|
</section>
|
||||||
|
<section data-transition="fade-out">
|
||||||
|
<h2>Advantages of Emulation</h2>
|
||||||
|
<img src="media/betrusted-soc-uart-mux.png">
|
||||||
|
</section>
|
||||||
|
<section data-transition="fade-in">
|
||||||
|
<h2>Advantages of Emulation</h2>
|
||||||
|
<img src="media/renode-xous-double-uart-tiled.png">
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Steps to Set Up a Serial Port</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Interrupt Support</li>
|
||||||
|
<li>DMA</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Example Serial Port</h2>
|
||||||
|
<pre><code class="cs" data-trim>
|
||||||
|
{(long)Registers.RxTx, new DoubleWordRegister(this)
|
||||||
|
.WithValueField(0, 8,
|
||||||
|
writeCallback: (_, value) => {
|
||||||
|
this.TransmitCharacter((byte)value);
|
||||||
|
},
|
||||||
|
valueProviderCallback: _ => {
|
||||||
|
if(!TryGetCharacter(out var character))
|
||||||
|
{
|
||||||
|
this.Log(LogLevel.Warning, "Empty Rx FIFO.");
|
||||||
|
}
|
||||||
|
return character;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
</code></pre>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Robot Framework: Running Tests in CI</h2>
|
||||||
|
<pre><code class="hljs" data-trim>
|
||||||
|
*** Test Cases ***
|
||||||
|
Should Read Acceleration
|
||||||
|
Create Machine
|
||||||
|
Create Terminal Tester ${UART}
|
||||||
|
|
||||||
|
Execute Command sysbus.twi1.lis2ds12 AccelerationX 10
|
||||||
|
Execute Command sysbus.twi1.lis2ds12 AccelerationY 5
|
||||||
|
Execute Command sysbus.twi1.lis2ds12 AccelerationZ -5
|
||||||
|
|
||||||
|
Start Emulation
|
||||||
|
|
||||||
|
Wait For Line On Uart x 9.997213 , y 4.997410 , z -4.999803
|
||||||
|
</code></pre>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<section>
|
<section>
|
||||||
@ -217,6 +365,20 @@
|
|||||||
<section>
|
<section>
|
||||||
<h2>Debugging with GDB</h2>
|
<h2>Debugging with GDB</h2>
|
||||||
</section>
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Software Assumes Hardware Works</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Rarely checks for sane ranges (why would you?)</li>
|
||||||
|
<li>TOC-TOU</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Incremental Changes</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Small changes are very rewrding</li>
|
||||||
|
<li>Device will work with only partial implementation</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -226,6 +388,7 @@
|
|||||||
<script src="plugin/zoom/zoom.js"></script>
|
<script src="plugin/zoom/zoom.js"></script>
|
||||||
<script src="plugin/markdown/markdown.js"></script>
|
<script src="plugin/markdown/markdown.js"></script>
|
||||||
<script src="plugin/highlight/highlight.js"></script>
|
<script src="plugin/highlight/highlight.js"></script>
|
||||||
|
<script type="text/javascript" src="js/robot.js"></script>
|
||||||
<script>
|
<script>
|
||||||
/** This used to be a part of Reveal.js, but was removed at some point */
|
/** This used to be a part of Reveal.js, but was removed at some point */
|
||||||
function getQueryHash() {
|
function getQueryHash() {
|
||||||
@ -295,6 +458,10 @@
|
|||||||
|
|
||||||
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
||||||
|
|
||||||
|
highlight: {
|
||||||
|
beforeHighlight: hljs => hljs.registerLanguage('robot', window.hljsDefineRobot)
|
||||||
|
},
|
||||||
|
|
||||||
// Don't forget to add the dependencies
|
// Don't forget to add the dependencies
|
||||||
dependencies: [
|
dependencies: [
|
||||||
{ src: 'https://reveal-multiplex.glitch.me/socket.io/socket.io.js', async: true },
|
{ src: 'https://reveal-multiplex.glitch.me/socket.io/socket.io.js', async: true },
|
||||||
@ -309,4 +476,4 @@
|
|||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
BIN
media/betrusted-soc-uart-mux.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
media/bluenrg-block-diagram-cpu.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
media/bluenrg-block-diagram-memories.png
Normal file
After Width: | Height: | Size: 176 KiB |
BIN
media/bluenrg-block-diagram-no-extra-bits.png
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
media/bluenrg-block-diagram-peripherals.png
Normal file
After Width: | Height: | Size: 232 KiB |
BIN
media/bluenrg-block-diagram.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
media/bluenrg-peripherals.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
media/pl011-bluenrg.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
media/renode-xous-double-uart-horiz.png
Normal file
After Width: | Height: | Size: 176 KiB |
BIN
media/renode-xous-double-uart-tiled.png
Normal file
After Width: | Height: | Size: 413 KiB |
BIN
media/renode-xous-double-uart-vert.png
Normal file
After Width: | Height: | Size: 180 KiB |
BIN
media/renode-xous-kernel-uart.png
Normal file
After Width: | Height: | Size: 297 KiB |
BIN
media/s32k-block-diagram-no-extra-bits.png
Normal file
After Width: | Height: | Size: 246 KiB |
BIN
media/s32k-block-diagram.png
Normal file
After Width: | Height: | Size: 178 KiB |