index: initial commit
Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
33bed47dac
commit
2ab155531d
288
index.html
288
index.html
@ -1,49 +1,257 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
|
||||
<title>reveal.js</title>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<link rel="stylesheet" href="css/reset.css">
|
||||
<link rel="stylesheet" href="css/reveal.css">
|
||||
<link rel="stylesheet" href="css/theme/black.css">
|
||||
<title>Paying It Forward: Documenting your Hardware</title>
|
||||
|
||||
<!-- Theme used for syntax highlighting of code -->
|
||||
<link rel="stylesheet" href="lib/css/monokai.css">
|
||||
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
|
||||
<meta name="author" content="Sean "xobs" Cross">
|
||||
|
||||
<!-- Printing and PDF exports -->
|
||||
<script>
|
||||
var link = document.createElement( 'link' );
|
||||
link.rel = 'stylesheet';
|
||||
link.type = 'text/css';
|
||||
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
|
||||
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="reveal">
|
||||
<div class="slides">
|
||||
<section>Slide 1</section>
|
||||
<section>Slide 2</section>
|
||||
</div>
|
||||
</div>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
|
||||
<script src="js/reveal.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
|
||||
<link rel="stylesheet" href="css/reveal.css">
|
||||
<link rel="stylesheet" href="css/theme/lca2020.css" id="theme">
|
||||
|
||||
<!-- Theme used for syntax highlighting of code -->
|
||||
<link rel="stylesheet" href="lib/css/zenburn.css">
|
||||
|
||||
<!-- Printing and PDF exports -->
|
||||
<script>
|
||||
var link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.type = 'text/css';
|
||||
link.href = window.location.search.match(/print-pdf/gi) ? 'css/print/pdf.css' : 'css/print/paper.css';
|
||||
document.getElementsByTagName('head')[0].appendChild(link);
|
||||
</script>
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src="lib/js/html5shiv.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<style>
|
||||
/*********************************************
|
||||
* ZOOM REVERSE TRANSITION (i.e. zoom out)
|
||||
*********************************************/
|
||||
.reveal .slides section[data-transition=zoomrev],
|
||||
.reveal.zoomrev .slides section:not([data-transition]) {
|
||||
transition-timing-function: ease;
|
||||
}
|
||||
|
||||
.reveal .slides > section[data-transition=zoomrev].past,
|
||||
.reveal .slides > section[data-transition~=zoomrev-out].past,
|
||||
.reveal.zoomrev .slides > section:not([data-transition]).past {
|
||||
visibility: hidden;
|
||||
-webkit-transform: scale(0.2);
|
||||
transform: scale(0.2);
|
||||
}
|
||||
|
||||
.reveal .slides > section[data-transition=zoomrev].future,
|
||||
.reveal .slides > section[data-transition~=zoomrev-in].future,
|
||||
.reveal.zoomrev .slides > section:not([data-transition]).future {
|
||||
visibility: hidden;
|
||||
-webkit-transform: scale(16);
|
||||
transform: scale(16);
|
||||
}
|
||||
|
||||
.reveal .slides > section > section[data-transition=zoomrev].past,
|
||||
.reveal .slides > section > section[data-transition~=zoomrev-out].past,
|
||||
.reveal.zoomrev .slides > section > section:not([data-transition]).past {
|
||||
-webkit-transform: translate(0, 150%);
|
||||
transform: translate(0, 150%);
|
||||
}
|
||||
|
||||
.reveal .slides > section > section[data-transition=zoomrev].future,
|
||||
.reveal .slides > section > section[data-transition~=zoomrev-in].future,
|
||||
.reveal.zoomrev .slides > section > section:not([data-transition]).future {
|
||||
-webkit-transform: translate(0, -150%);
|
||||
transform: translate(0, -150%);
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Start of main presentation -->
|
||||
<div class="reveal">
|
||||
<div class="footer">
|
||||
<a class="url" href="https://p.xobs.io/lca20-bt/">p.xobs.io/lca20-pif</a>
|
||||
<span class="theme">Who’s Watching</span><span class="hashtag"> | #LCA2020</span><span class="twitter"> |
|
||||
@linuxconfau</span>
|
||||
</div>
|
||||
<div class="slides">
|
||||
<section data-background-image="css/theme/lca2019-title-bg-transparent.svg">
|
||||
<h2 style="background-color: transparent;">Paying it Forward: Documenting Your Hardware Project</h2>
|
||||
<h5 style="background-color: transparent;">Approaches to documenting a hardware description language using lxsocdoc</h5>
|
||||
<p align="right">
|
||||
<small>Sean Cross - <a href="https://xobs.io/">https://xobs.io/</a> - @xobs</small>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<section>
|
||||
<h2>Xous: Why another kernel?</h2>
|
||||
<aside class="notes">
|
||||
A big question that gets asked is -- why another kernel? Why don't we just
|
||||
put Linux on it and be done with it? Or something else like Minix, TockOS,
|
||||
or FreeRTOS?
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Betrusted Goals</h2>
|
||||
<aside class="notes">
|
||||
With Betrusted, we wanted to reduce the code footprint. This will allow
|
||||
us to run with less RAM -- ideally 4 MB or less. We also wanted to have
|
||||
a full MMU, which is somewhat unusual in the embedded microcontroller
|
||||
space, where a more limited Memory Protection Unit is preferred.
|
||||
|
||||
We would like to have full process isolation, so even if one process is
|
||||
compromised, attackers will have a harder time boring through the system
|
||||
to gain a more complete takeover.
|
||||
|
||||
Therefore, we would like Betrusted to run a Microkernel-style operating
|
||||
system, with "servers" that provide features such as the display,
|
||||
keyboard, and even basic task switching. These should all run in
|
||||
userspace with the bare minimum permissions required to get the job done.
|
||||
|
||||
Finally, we would like to have the operating system written in a safe
|
||||
systems language.
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Rust: Safety, Speed, Concurrency</h2>
|
||||
<aside class="notes">
|
||||
The Rust programming language promises the holy trifecta: Safety, Speed,
|
||||
Concurrency. Pick any three. If you're going to start over on a systems-
|
||||
level project, choose Rust. There will be a lot of wailing and gnashing
|
||||
of teeth to begin with, but the end result will be better.
|
||||
|
||||
When we started Betrusted, we decided that it should primarily use Rust
|
||||
as the systems language. That way we can be sure that our code is sound.
|
||||
Additionally, Rust has the ability to produce efficient binaries, and the
|
||||
efficiency is only going to get better as time progresses.
|
||||
|
||||
This eliminates non-Rust choices such as Linux or Minix.
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>A Survey of Rust-based Operating Systems</h2>
|
||||
<aside class="notes">
|
||||
Having decided to use Rust, we did a survey of Rust-based operating
|
||||
systems. There are several available, in various states of completeness.
|
||||
The two biggest candidates are Redox and Tock.
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Rust-based Operating Systems: Tock</h2>
|
||||
<aside class="notes">
|
||||
Tock is the most obvious choice, since it already has a RISC-V port
|
||||
and is supported by a well-documented ABI. Tock supports multiple
|
||||
tasks written in either Rust or C, which is a very nice feature.
|
||||
|
||||
However, Tock does not support an MMU. It would be possible to adapt
|
||||
the MPU interface to work with an MMU, but a lot of design work has
|
||||
gone into Tock to make it work well with only the standard MPU that
|
||||
is present on most ARM chips. Using Tock would be asking it to do
|
||||
something that it's not designed for. Instead, it's better to pick
|
||||
the right tool for the job.
|
||||
|
||||
Additionally, the Tock message passing infrastructure assumes only
|
||||
one server per process, which can limit flexibility.
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Rust-based Operating Systems: Redox</h2>
|
||||
<aside class="notes">
|
||||
Redox is the other large Rust-based operating system, and is the most
|
||||
compelling. Redox is currently limited to x86-64 (with a plan to
|
||||
port it to AArch64), so we would need to port it ourselves to RISC-V.
|
||||
|
||||
The biggest problem with Redox is its size: It's a full Desktop
|
||||
operating system, and supporting it on Betrusted would require us to
|
||||
spend a lot of time cutting it down to just the bare microkernel,
|
||||
at which point we can start to recreate everything ourselves. The
|
||||
kernel itself is such a small part of Betrusted. Besides, we would
|
||||
like the freedom to experiment, to randomize the syscall numbers and
|
||||
have keepout areas of the screen and add IMEs to the input, which
|
||||
would quickly introduce incompatibility with Redox.
|
||||
|
||||
In short, Tock is too small, and Redox is too big.
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div> <!-- class="reveal" -->
|
||||
<!-- End of main presentation -->
|
||||
|
||||
<!-- Start of configuration section -->
|
||||
<script src="lib/js/head.min.js"></script>
|
||||
<script src="js/reveal.js"></script>
|
||||
|
||||
<script>
|
||||
var presenter = !!Reveal.getQueryHash().s;
|
||||
|
||||
// More info https://github.com/hakimel/reveal.js#configuration
|
||||
Reveal.initialize({
|
||||
controls: presenter ? false : true,
|
||||
progress: true,
|
||||
history: true,
|
||||
center: true,
|
||||
controlsTutorial: presenter ? false : true,
|
||||
|
||||
slideNumber: presenter ? null : 'c/t',
|
||||
|
||||
// The "normal" size of the presentation, aspect ratio will be preserved
|
||||
// when the presentation is scaled to fit different resolutions. Can be
|
||||
// specified using percentage units.
|
||||
width: "100%",
|
||||
height: 700,
|
||||
|
||||
// Factor of the display size that should remain empty around the content
|
||||
margin: 0.1,
|
||||
|
||||
multiplex: {
|
||||
url: 'https://p.xobs.io/',
|
||||
id: '631bb3db6fbaea78',
|
||||
secret: Reveal.getQueryHash().s || null
|
||||
},
|
||||
|
||||
// Bounds for smallest/largest possible scale to apply to content
|
||||
minScale: 0.02,
|
||||
maxScale: 5.5,
|
||||
|
||||
transition: 'slide', // none/fade/slide/convex/concave/zoom
|
||||
|
||||
// More info https://github.com/hakimel/reveal.js#dependencies
|
||||
dependencies: [
|
||||
{ src: 'lib/js/classList.js', condition: function () { return !document.body.classList; } },
|
||||
{ src: 'plugin/markdown/marked.js', condition: function () { return !!document.querySelector('[data-markdown]'); } },
|
||||
{ src: 'plugin/markdown/markdown.js', condition: function () { return !!document.querySelector('[data-markdown]'); } },
|
||||
{ src: 'plugin/highlight/highlight.js', async: true, callback: function () { hljs.initHighlightingOnLoad(); } },
|
||||
{ src: 'plugin/search/search.js', async: true },
|
||||
{ src: 'plugin/zoom-js/zoom.js', async: true },
|
||||
{ src: 'plugin/notes/notes.js', async: true },
|
||||
|
||||
{ src: 'lib/js/socket.io.js', async: true },
|
||||
{
|
||||
src: presenter ?
|
||||
'plugin/multiplex/master.js' :
|
||||
'plugin/multiplex/client.js', async: true
|
||||
},
|
||||
]
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
// More info about config & dependencies:
|
||||
// - https://github.com/hakimel/reveal.js#configuration
|
||||
// - https://github.com/hakimel/reveal.js#dependencies
|
||||
Reveal.initialize({
|
||||
dependencies: [
|
||||
{ src: 'plugin/markdown/marked.js' },
|
||||
{ src: 'plugin/markdown/markdown.js' },
|
||||
{ src: 'plugin/notes/notes.js', async: true },
|
||||
{ src: 'plugin/highlight/highlight.js', async: true }
|
||||
]
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user