minimal/mdbook/book/architecture.html
2020-09-08 13:41:42 +03:00

244 lines
15 KiB
HTML

<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js rust">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Architecture - Minimal Linux Live</title>
<!-- Custom HTML head -->
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="description" content="Minimal Linux Live - guidebook">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
</head>
<body>
<!-- Provide site root to javascript -->
<script type="text/javascript">
var path_to_root = "";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "rust";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script type="text/javascript">
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script type="text/javascript">
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('rust')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script type="text/javascript">
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded "><a href="architecture.html" class="active"><strong aria-hidden="true">1.</strong> Architecture</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="boot_process.html"><strong aria-hidden="true">1.1.</strong> Boot Process</a></li><li class="chapter-item expanded "><a href="filesystem_layout.html"><strong aria-hidden="true">1.2.</strong> MLL ISO Image Structure</a></li></ol></li><li class="chapter-item expanded "><a href="overview.html"><strong aria-hidden="true">2.</strong> Shell Scripts &amp; Folders</a></li><li class="chapter-item expanded "><a href="build_scripts.html"><strong aria-hidden="true">3.</strong> Build Process</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="config_file.html"><strong aria-hidden="true">3.1.</strong> Configuration File</a></li><li class="chapter-item expanded "><a href="common.html"><strong aria-hidden="true">3.2.</strong> Common Properties &amp; Functions</a></li><li class="chapter-item expanded "><a href="00_clean.html"><strong aria-hidden="true">3.3.</strong> Step 00 - Clean Workspace</a></li><li class="chapter-item expanded "><a href="01_get_kernel.html"><strong aria-hidden="true">3.4.</strong> Step 01 - Get Kernel</a></li><li class="chapter-item expanded "><a href="02_build_kernel.html"><strong aria-hidden="true">3.5.</strong> Step 02 - Build Kernel</a></li><li class="chapter-item expanded "><a href="03_get_glibc.html"><strong aria-hidden="true">3.6.</strong> Step 03 - Get GLIBC</a></li><li class="chapter-item expanded "><a href="04_build_glibc.html"><strong aria-hidden="true">3.7.</strong> Step 04 - Build GLIBC</a></li><li class="chapter-item expanded "><a href="05_prepare_sysroot.html"><strong aria-hidden="true">3.8.</strong> Step 05 - Prepare Sysroot</a></li><li class="chapter-item expanded "><a href="06_get_busybox.html"><strong aria-hidden="true">3.9.</strong> Step 06 - Get Busybox</a></li><li class="chapter-item expanded "><a href="07_build_busybox.html"><strong aria-hidden="true">3.10.</strong> Step 07 - Build Busybox</a></li><li class="chapter-item expanded "><a href="08_prepare_bundles.html"><strong aria-hidden="true">3.11.</strong> Step 08 - Prepare Bundles</a></li><li class="chapter-item expanded "><a href="09_generate_rootfs.html"><strong aria-hidden="true">3.12.</strong> Step 09 - Generate Rootfs</a></li><li class="chapter-item expanded "><a href="10_pack_rootfs.html"><strong aria-hidden="true">3.13.</strong> Step 10 - Pack Rootfs</a></li><li class="chapter-item expanded "><a href="11_generate_overlay.html"><strong aria-hidden="true">3.14.</strong> Step 11 - Generate Overlay Structure</a></li><li class="chapter-item expanded "><a href="12_get_syslinux.html"><strong aria-hidden="true">3.15.</strong> Step 12 - Get Syslinux</a></li><li class="chapter-item expanded "><a href="12_get_systemd-boot.html"><strong aria-hidden="true">3.16.</strong> Step 12 - Get systemd-boot</a></li><li class="chapter-item expanded "><a href="13_prepare_iso.html"><strong aria-hidden="true">3.17.</strong> Step 13 - Prepare ISO Structure</a></li><li class="chapter-item expanded "><a href="14_generate_iso.html"><strong aria-hidden="true">3.18.</strong> Step 14 - Generate ISO Image</a></li><li class="chapter-item expanded "><a href="15_generate_image.html"><strong aria-hidden="true">3.19.</strong> Step 15 - Generate Filesystem Image</a></li><li class="chapter-item expanded "><a href="16_cleanup.html"><strong aria-hidden="true">3.20.</strong> Step 16 - Final Cleanup</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust (default)</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Minimal Linux Live</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" name="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script type="text/javascript">
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1><a class="header" href="#the-architecture-of-minimal-linux-live" id="the-architecture-of-minimal-linux-live">The Architecture of Minimal Linux Live</a></h1>
<p>Welcome to the wonderful world of <a href="https://github.com/ivandavidov/minimal">Minimal Linux Live</a>! :)</p>
<p>Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities. Additional software can be included in the ISO image at build time by using a well-documented <a href="TODO.html">configuration file</a>.</p>
<p>The generated ISO image file contains Linux kernel, GNU C library compiled with default options, Busybox compiled with default options, quite simple initramfs structure and some &quot;overlay bundles&quot; (the default build process provides few overlay bundles). You don't get Windows support out of the box, nor you get any fancy desktop environment. All you get is a simple shell console with default Busybox applets, network support via DHCP and... well, that's all. This is why it's called &quot;minimal&quot;.</p>
<p>Note that by default Minimal Linux Live provides support for legacy BIOS systems. You can change the build configuration settings in the <a href="TODO.html">.config</a> file and rebuild MLL with support for modern UEFI systems.</p>
<p>All build scripts are well organized and quite small in size. You can easily learn from the scripts, reverse engineer the build process and later modify them to include more stuff (I encourage you to do so). After you learn the basics, you will have all the necessary tools and skills to create your own fully functional Linux based operating system which you have built entirely from scratch.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next" href="boot_process.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next" href="boot_process.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script type="text/javascript">
var socket = new WebSocket("ws://localhost:3000/__livereload");
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script type="text/javascript">
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
<script src="mark.min.js" type="text/javascript" charset="utf-8"></script>
<script src="searcher.js" type="text/javascript" charset="utf-8"></script>
<script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script>
<script src="highlight.js" type="text/javascript" charset="utf-8"></script>
<script src="book.js" type="text/javascript" charset="utf-8"></script>
<!-- Custom JS scripts -->
</body>
</html>