rust-kernel
Rustbelt: a hobby x86_64 kernel written in Rust
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | //! Build script, two jobs:
//!
//! 1. Compile the user programs in user/ into ELF executables in OUT_DIR.
//! They're compiled with plain `rustc` for the built-in
//! `x86_64-unknown-none` target (prebuilt `core`, so no build-std
//! needed), as static executables (`relocation-model=static`) linked at a
//! high user address -- which needs the `large` code model (the default
//! ones assume code in the low/high 2 GiB).
//!
//! 2. Build the second QEMU disk, `target/disk.img` (64 MiB):
//! * a GPT partition table (made with `sfdisk`) with one partition
//! starting at sector 2048 (1 MiB, the usual alignment),
//! * in it a FAT32 file system (`mkfs.vfat`), filled with `mtools`
//! (`mmd`/`mcopy` write into an image file directly -- no root, no
//! loop-mounting needed): everything in disk/ plus the user programs
//! in /bin.
//! The kernel finds the disk on the PCI bus, reads the GPT, mounts the
//! FAT32 partition at /mnt/disk0 and loads programs from /mnt/disk0/bin.
//! QEMU opens it with `snapshot=on`, so the kernel's writes never change
//! this file (every boot and every test starts from the same disk).
//!
//! Needs dosfstools (mkfs.vfat), mtools (mmd, mcopy) and fdisk (sfdisk):
//! sudo apt install dosfstools mtools fdisk
use ;
const PROGRAMS: & = &;
const DISK_SECTORS: u64 = 64 * 1024 * 1024 / 512;
const PART_START: u64 = 2048;
/// Leave 1 MiB at the end too (the backup GPT lives in the last 33 sectors).
const PART_SECTORS: u64 = DISK_SECTORS - 2 * PART_START;
/// Find a tool in PATH or the sbin directories (often not in a user's PATH).
|