Tianrui Wei | 8a44fe6 | 2021-07-01 12:54:19 +0800 | [diff] [blame^] | 1 | .. SPDX-License-Identifier: GPL-2.0+ |
| 2 | |
| 3 | Openpiton RISC-V SoC |
| 4 | ==================== |
| 5 | |
| 6 | OpenPiton RISC-V SoC |
| 7 | -------------------- |
| 8 | OpenPiton is an open source, manycore processor and research platform. It is a |
| 9 | tiled manycore framework scalable from one to 1/2 billion cores. It supports a |
| 10 | number of ISAs including RISC-V with its P-Mesh cache coherence protocol and |
| 11 | networks on chip. It is highly configurable in both core and uncore components. |
| 12 | OpenPiton has been verified in both ASIC and multiple Xilinx FPGA prototypes |
| 13 | running full-stack Debian linux. |
| 14 | |
| 15 | RISC-V Standard Bootflow |
| 16 | ------------------------- |
| 17 | Currently, OpenPiton implements RISC-V standard bootflow in the following steps |
| 18 | mover.S -> u-boot-spl -> opensbi -> u-boot -> Linux |
| 19 | This board supports S-mode u-boot as well as M-mode SPL |
| 20 | |
| 21 | Building OpenPition |
| 22 | --------------------- |
| 23 | If you'd like to build OpenPiton, please go to OpenPiton github repo |
| 24 | (at https://github.com/PrincetonUniversity/openpiton) to build from the latest |
| 25 | changes |
| 26 | |
| 27 | Building Images |
| 28 | --------------------------- |
| 29 | |
| 30 | SPL |
| 31 | --- |
| 32 | |
| 33 | 1. Add the RISC-V toolchain to your PATH. |
| 34 | 2. Setup ARCH & cross compilation environment variable: |
| 35 | |
| 36 | .. code-block:: none |
| 37 | |
| 38 | export CROSS_COMPILE=<riscv64 toolchain prefix> |
| 39 | export ARCH=riscv |
| 40 | |
| 41 | 3. make openpiton_riscv64_spl_defconfig |
| 42 | 4. make |
| 43 | |
| 44 | U-Boot |
| 45 | ------ |
| 46 | |
| 47 | 1. Add the RISC-V toolchain to your PATH. |
| 48 | 2. Setup ARCH & cross compilation environment variable: |
| 49 | |
| 50 | .. code-block:: none |
| 51 | |
| 52 | export CROSS_COMPILE=<riscv64 toolchain prefix> |
| 53 | export ARCH=riscv |
| 54 | |
| 55 | 3. make openpiton_riscv64_defconfig |
| 56 | 4. make |
| 57 | |
| 58 | |
| 59 | opensbi |
| 60 | ------- |
| 61 | |
| 62 | 1. Add the RISC-V toolchain to your PATH. |
| 63 | 2. Setup ARCH & cross compilation environment variable: |
| 64 | |
| 65 | .. code-block:: none |
| 66 | |
| 67 | export CROSS_COMPILE=<riscv64 toolchain prefix> |
| 68 | export ARCH=riscv |
| 69 | |
| 70 | 3. Go to OpenSBI directory |
| 71 | 4. make PLATFORM=fpga/openpiton FW_PAYLOAD_PATH=<path to u-boot-nodtb.bin> |
| 72 | |
| 73 | |
| 74 | Using fw_payload.bin with linux |
| 75 | ------------------------------- |
| 76 | Put the generated fw_payload.bin into the /boot directory on the root filesystem, |
| 77 | plug in the SD card, then flash the bitstream. Linux will boot automatically. |
| 78 | |
| 79 | Booting |
| 80 | ------- |
| 81 | Once you plugin the sdcard and power up, you should see the U-Boot prompt. |
| 82 | |
| 83 | Sample Dual-core Debian boot log from OpenPiton |
| 84 | ----------------------------------------------- |
| 85 | |
| 86 | .. code-block:: none |
| 87 | |
| 88 | Trying to boot from MMC1 |
| 89 | |
| 90 | OpenSBI v0.9-5-gd06cb61 |
| 91 | ____ _____ ____ _____ |
| 92 | / __ \ / ____| _ \_ _| |
| 93 | | | | |_ __ ___ _ __ | (___ | |_) || | |
| 94 | | | | | '_ \ / _ \ '_ \ \___ \| _ < | | |
| 95 | | |__| | |_) | __/ | | |____) | |_) || |_ |
| 96 | \____/| .__/ \___|_| |_|_____/|____/_____| |
| 97 | | | |
| 98 | |_| |
| 99 | |
| 100 | Platform Name : OPENPITON RISC-V |
| 101 | Platform Features : timer,mfdeleg |
| 102 | Platform HART Count : 3 |
| 103 | Firmware Base : 0x80000000 |
| 104 | Firmware Size : 104 KB |
| 105 | Runtime SBI Version : 0.2 |
| 106 | |
| 107 | Domain0 Name : root |
| 108 | Domain0 Boot HART : 0 |
| 109 | Domain0 HARTs : 0*,1*,2* |
| 110 | Domain0 Region00 : 0x0000000080000000-0x000000008001ffff () |
| 111 | Domain0 Region01 : 0x0000000000000000-0xffffffffffffffff (R,W,X) |
| 112 | Domain0 Next Address : 0x0000000080200000 |
| 113 | Domain0 Next Arg1 : 0x0000000082200000 |
| 114 | Domain0 Next Mode : S-mode |
| 115 | Domain0 SysReset : yes |
| 116 | |
| 117 | Boot HART ID : 0 |
| 118 | Boot HART Domain : root |
| 119 | Boot HART ISA : rv64imafdcsu |
| 120 | Boot HART Features : scounteren,mcounteren |
| 121 | Boot HART PMP Count : 0 |
| 122 | Boot HART PMP Granularity : 0 |
| 123 | Boot HART PMP Address Bits: 0 |
| 124 | Boot HART MHPM Count : 0 |
| 125 | Boot HART MHPM Count : 0 |
| 126 | Boot HART MIDELEG : 0x0000000000000222 |
| 127 | Boot HART MEDELEG : 0x000000000000b109 |
| 128 | |
| 129 | |
| 130 | U-Boot 2021.01+ (Jun 12 2021 - 10:31:34 +0800) |
| 131 | |
| 132 | DRAM: 1 GiB |
| 133 | MMC: sdhci@f000000000: 0 (eMMC) |
| 134 | In: uart@fff0c2c000 |
| 135 | Out: uart@fff0c2c000 |
| 136 | Err: uart@fff0c2c000 |
| 137 | Hit any key to stop autoboot: 0 |
| 138 | 6492992 bytes read in 5310 ms (1.2 MiB/s) |
| 139 | ## Flattened Device Tree blob at 86000000 |
| 140 | Booting using the fdt blob at 0x86000000 |
| 141 | Loading Device Tree to 00000000bfffa000, end 00000000bffff007 ... OK |
| 142 | |
| 143 | Starting kernel ... |
| 144 | |
| 145 | [ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000 |
| 146 | [ 0.000000] Linux version 5.6.0-rc4-gb9d34f7e294d-dirty |
| 147 | [ 0.000000] earlycon: sbi0 at I/O port 0x0 (options '') |
| 148 | [ 0.000000] printk: bootconsole [sbi0] enabled |
| 149 | [ 0.000000] Zone ranges: |
| 150 | [ 0.000000] DMA32 [mem 0x0000000080200000-0x00000000bfffffff] |
| 151 | [ 0.000000] Normal empty |
| 152 | [ 0.000000] Movable zone start for each node |
| 153 | [ 0.000000] Early memory node ranges |
| 154 | [ 0.000000] node 0: [mem 0x0000000080200000-0x00000000bfffffff] |
| 155 | [ 0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff] |
| 156 | [ 0.000000] On node 0 totalpages: 261632 |
| 157 | [ 0.000000] DMA32 zone: 4088 pages used for memmap |
| 158 | [ 0.000000] DMA32 zone: 0 pages reserved |
| 159 | [ 0.000000] DMA32 zone: 261632 pages, LIFO batch:63 |
| 160 | [ 0.000000] software IO TLB: mapped [mem 0xbaffa000-0xbeffa000] (64MB) |
| 161 | [ 0.000000] SBI specification v0.2 detected |
| 162 | [ 0.000000] SBI implementation ID=0x1 Version=0x9 |
| 163 | [ 0.000000] SBI v0.2 TIME extension detected |
| 164 | [ 0.000000] SBI v0.2 IPI extension detected |
| 165 | [ 0.000000] SBI v0.2 RFENCE extension detected |
| 166 | [ 0.000000] SBI v0.2 HSM extension detected |
| 167 | [ 0.000000] elf_hwcap is 0x112d |
| 168 | [ 0.000000] percpu: Embedded 16 pages/cpu s25368 r8192 d31976 u65536 |
| 169 | [ 0.000000] pcpu-alloc: s25368 r8192 d31976 u65536 alloc=16*4096 |
| 170 | [ 0.000000] pcpu-alloc: [0] 0 |
| 171 | [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 257544 |
| 172 | [ 0.000000] Kernel command line: earlycon=sbi root=/dev/piton_sd1 |
| 173 | [ 0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear) |
| 174 | [ 0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear) |
| 175 | [ 0.000000] Sorting __ex_table... |
| 176 | [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off |
| 177 | [ 0.000000] Memory: 956252K/1046528K available (4357K kernel code, 286K rwdata, 1200K rodata, 168K init, 311K bss, 90276K re) |
| 178 | [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 |
| 179 | [ 0.000000] rcu: Hierarchical RCU implementation. |
| 180 | [ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1. |
| 181 | [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. |
| 182 | [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1 |
| 183 | [ 0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0 |
| 184 | [ 0.000000] plic: mapped 2 interrupts with 1 handlers for 2 contexts. |
| 185 | [ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0] |
| 186 | [ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1ec037a6a, max_idle_ns: 7052723236599 ns |
| 187 | [ 0.000138] sched_clock: 64 bits at 520kHz, resolution 1919ns, wraps every 4398046510738ns |
| 188 | [ 0.009429] printk: console [hvc0] enabled |
| 189 | [ 0.009429] printk: console [hvc0] enabled |
| 190 | [ 0.017850] printk: bootconsole [sbi0] disabled |
| 191 | [ 0.017850] printk: bootconsole [sbi0] disabled |
| 192 | [ 0.028029] Calibrating delay loop (skipped), value calculated using timer frequency.. 1.04 BogoMIPS (lpj=5208) |
| 193 | [ 0.038753] pid_max: default: 32768 minimum: 301 |
| 194 | [ 0.050248] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear) |
| 195 | [ 0.058661] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear) |
| 196 | [ 0.069359] *** VALIDATE tmpfs *** |
| 197 | [ 0.089093] *** VALIDATE proc *** |
| 198 | [ 0.101135] *** VALIDATE cgroup *** |
| 199 | [ 0.105019] *** VALIDATE cgroup2 *** |
| 200 | [ 0.144310] rcu: Hierarchical SRCU implementation. |
| 201 | [ 0.162836] smp: Bringing up secondary CPUs ... |
| 202 | [ 0.167736] smp: Brought up 1 node, 1 CPU |
| 203 | [ 0.185982] devtmpfs: initialized |
| 204 | [ 0.216237] random: get_random_u32 called from bucket_table_alloc.isra.25+0x4e/0x15c with crng_init=0 |
| 205 | [ 0.236026] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns |
| 206 | [ 0.246916] futex hash table entries: 256 (order: 2, 16384 bytes, linear) |
| 207 | [ 0.266994] NET: Registered protocol family 16 |
| 208 | [ 0.763362] clocksource: Switched to clocksource riscv_clocksource |
| 209 | [ 0.770122] *** VALIDATE bpf *** |
| 210 | [ 0.782837] *** VALIDATE ramfs *** |
| 211 | [ 0.829997] NET: Registered protocol family 2 |
| 212 | [ 0.853577] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear) |
| 213 | [ 0.864085] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear) |
| 214 | [ 0.875373] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear) |
| 215 | [ 0.887958] TCP: Hash tables configured (established 8192 bind 8192) |
| 216 | [ 0.902149] UDP hash table entries: 512 (order: 2, 16384 bytes, linear) |
| 217 | [ 0.909904] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear) |
| 218 | [ 0.924809] NET: Registered protocol family 1 |
| 219 | [ 0.948605] RPC: Registered named UNIX socket transport module. |
| 220 | [ 0.956003] RPC: Registered udp transport module. |
| 221 | [ 0.961565] RPC: Registered tcp transport module. |
| 222 | [ 0.966432] RPC: Registered tcp NFSv4.1 backchannel transport module. |
| 223 | [ 0.987180] Initialise system trusted keyrings |
| 224 | [ 0.998953] workingset: timestamp_bits=46 max_order=18 bucket_order=0 |
| 225 | [ 1.323977] *** VALIDATE nfs *** |
| 226 | [ 1.328520] *** VALIDATE nfs4 *** |
| 227 | [ 1.334422] NFS: Registering the id_resolver key type |
| 228 | [ 1.340148] Key type id_resolver registered |
| 229 | [ 1.345280] Key type id_legacy registered |
| 230 | [ 1.349820] nfs4filelayout_init: NFSv4 File Layout Driver Registering... |
| 231 | [ 1.357610] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). |
| 232 | [ 1.866909] Key type asymmetric registered |
| 233 | [ 1.872460] Asymmetric key parser 'x509' registered |
| 234 | [ 1.878750] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) |
| 235 | [ 1.887480] io scheduler mq-deadline registered |
| 236 | [ 1.892864] io scheduler kyber registered |
| 237 | [ 3.905595] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled |
| 238 | [ 3.954332] fff0c2c000.uart: ttyS0 at MMIO 0xfff0c2c000 (irq = 1, base_baud = 4166687) is a 16550 |
| 239 | [ 4.254794] loop: module loaded |
| 240 | [ 4.258269] piton_sd:v1.0 Apr 26, 2019 |
| 241 | [ 4.258269] |
| 242 | [ 4.265170] gpt partition table header: |
| 243 | [ 4.265283] signature: 5452415020494645 |
| 244 | [ 4.269258] revision: 10000 |
| 245 | [ 4.273746] size: 5c |
| 246 | [ 4.276659] crc_header: 26b42404 |
| 247 | [ 4.278911] reserved: 0 |
| 248 | [ 4.282730] current lba: 1 |
| 249 | [ 4.285311] backup lda: 3b723ff |
| 250 | [ 4.288093] partition entries lba: 2 |
| 251 | [ 4.291835] number partition entries: 80 |
| 252 | [ 4.295529] size partition entries: 80 |
| 253 | [ 9.473253] piton_sd: piton_sd1 |
| 254 | [ 10.099676] libphy: Fixed MDIO Bus: probed |
| 255 | [ 10.148782] NET: Registered protocol family 10 |
| 256 | [ 10.183418] Segment Routing with IPv6 |
| 257 | [ 10.189384] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver |
| 258 | [ 10.214449] NET: Registered protocol family 17 |
| 259 | [ 10.227413] Key type dns_resolver registered |
| 260 | [ 10.240561] Loading compiled-in X.509 certificates |
| 261 | [ 10.465264] EXT4-fs (piton_sd1): mounted filesystem with ordered data mode. Opts: (null) |
| 262 | [ 10.475922] VFS: Mounted root (ext4 filesystem) readonly on device 254:1. |
| 263 | [ 10.551865] devtmpfs: mounted |
| 264 | [ 10.562744] Freeing unused kernel memory: 168K |
| 265 | [ 10.567450] This architecture does not have kernel memory protection. |
| 266 | [ 10.574688] Run /sbin/init as init process |
| 267 | [ 10.578916] with arguments: |
| 268 | [ 10.582489] /sbin/init |
| 269 | [ 10.585312] with environment: |
| 270 | [ 10.588518] HOME=/ |
| 271 | [ 10.591459] TERM=linux |
| 272 | [ 18.154373] systemd[1]: System time before build time, advancing clock. |
| 273 | [ 18.565415] systemd[1]: systemd 238 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIB) |
| 274 | [ 18.596359] systemd[1]: Detected architecture riscv64. |
| 275 | |
| 276 | Welcome to Debian GNU/Linux buster/sid! |
| 277 | |
| 278 | [ 18.797150] systemd[1]: Set hostname to <openpiton>. |
| 279 | [ 31.609244] random: systemd: uninitialized urandom read (16 bytes read) |
| 280 | [ 31.630366] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe. |
| 281 | [ OK ] Listening on /dev/initctl Compatibility Named Pipe. |
| 282 | [ 31.674820] random: systemd: uninitialized urandom read (16 bytes read) |
| 283 | [ 31.806800] systemd[1]: Created slice system-serial\x2dgetty.slice. |
| 284 | [ OK ] Created slice system-serial\x2dgetty.slice. |
| 285 | [ 31.839855] random: systemd: uninitialized urandom read (16 bytes read) |
| 286 | [ 31.850670] systemd[1]: Reached target Slices. |
| 287 | [ OK ] Reached target Slices. |
| 288 | [ 32.128005] systemd[1]: Reached target Swap. |
| 289 | [ OK ] Reached target Swap. |
| 290 | [ 32.180337] systemd[1]: Listening on Journal Socket. |
| 291 | [ OK ] Listening on Journal Socket. |
| 292 | [ 32.416448] systemd[1]: Mounting Kernel Debug File System... |
| 293 | Mounting Kernel Debug File System... |
| 294 | [ 32.937934] systemd[1]: Starting Remount Root and Kernel File Systems... |
| 295 | Starting Remount Root and Kernel File Systems... |
| 296 | [ 33.117472] urandom_read: 4 callbacks suppressed |
| 297 | [ 33.117645] random: systemd: uninitialized urandom read (16 bytes read) |
| 298 | [ 33.214868] systemd[1]: Started Forward Password Requests to Wall Directory Watch. |
| 299 | [ OK ] Started Forward Password Requests to Wall Directory Watch. |
| 300 | [ 33.366745] random: systemd: uninitialized urandom read (16 bytes read) |
| 301 | [ 33.453262] systemd[1]: Listening on Journal Socket (/dev/log). |
| 302 | [ OK ] Listening on Journal Socket (/dev/log). |
| 303 | [ 33.627020] random: systemd: uninitialized urandom read (16 bytes read) |
| 304 | [ 34.029973] systemd[1]: Starting Load Kernel Modules... |
| 305 | Starting Load Kernel Modules... |
| 306 | [ OK ] Created slice system-getty.slice. |
| 307 | [ OK ] Started Dispatch Password Requests to Console Directory Watch. |
| 308 | [ OK ] Reached target Local Encrypted Volumes. |
| 309 | [ OK ] Reached target Paths. |
| 310 | [ OK ] Reached target Remote File Systems. |
| 311 | [ OK ] Listening on udev Kernel Socket. |
| 312 | [ OK ] Listening on udev Control Socket. |
| 313 | [ OK ] Reached target Sockets. |
| 314 | Starting udev Coldplug all Devices... |
| 315 | Starting Journal Service... |
| 316 | [ 37.108761] systemd[1]: Starting Create Static Device Nodes in /dev... |
| 317 | Starting Create Static Device Nodes in /dev... |
| 318 | [ 37.941929] systemd[1]: Mounted Kernel Debug File System. |
| 319 | [ OK ] Mounted Kernel Debug File System. |
| 320 | [ 38.463855] systemd[1]: Started Remount Root and Kernel File Systems. |
| 321 | [ OK ] Started Remount Root and Kernel File Systems. |
| 322 | [ 39.614728] systemd[1]: Started Load Kernel Modules. |
| 323 | [ OK ] Started Load Kernel Modules. |
| 324 | [ 40.794332] systemd[1]: Starting Apply Kernel Variables... |
| 325 | Starting Apply Kernel Variables... |
| 326 | [ 41.928338] systemd[1]: Starting Load/Save Random Seed... |
| 327 | Starting Load/Save Random Seed... |
| 328 | [ 43.494757] systemd[1]: Started Create Static Device Nodes in /dev. |
| 329 | [ OK ] Started Create Static Device Nodes in /dev. |
| 330 | [ 44.795372] systemd[1]: Starting udev Kernel Device Manager... |
| 331 | Starting udev Kernel Device Manager... |
| 332 | [ 45.043065] systemd[1]: Reached target Local File Systems (Pre). |
| 333 | [ OK ] Reached target Local File Systems (Pre). |
| 334 | [ 45.224716] systemd[1]: Reached target Local File Systems. |
| 335 | [ OK ] Reached target Local File Systems. |
| 336 | [ 46.036491] systemd[1]: Started Apply Kernel Variables. |
| 337 | [ OK ] Started Apply Kernel Variables. |
| 338 | [ 46.947879] systemd[1]: Started Load/Save Random Seed. |
| 339 | [ OK ] Started Load/Save Random Seed. |
| 340 | [ 47.910242] systemd[1]: Starting Raise network interfaces... |
| 341 | Starting Raise network interfaces... |
| 342 | [ 48.119915] systemd[1]: Started Journal Service. |
| 343 | [ OK ] Started Journal Service. |
| 344 | Starting Flush Journal to Persistent Storage... |
| 345 | [ OK ] Started udev Kernel Device Manager. |
| 346 | [ 55.369915] systemd-journald[88]: Received request to flush runtime journal from PID 1 |
| 347 | [ OK ] Started Flush Journal to Persistent Storage. |
| 348 | Starting Create Volatile Files and Directories... |
| 349 | [ OK ] Started Raise network interfaces. |
| 350 | [ OK ] Reached target Network. |
| 351 | [FAILED] Failed to start Create Volatile Files and Directories. |
| 352 | See 'systemctl status systemd-tmpfiles-setup.service' for details. |
| 353 | Starting Update UTMP about System Boot/Shutdown... |
| 354 | [FAILED] Failed to start Network Time Synchronization. |
| 355 | See 'systemctl status systemd-timesyncd.service' for details. |
| 356 | [ OK ] Reached target System Time Synchronized. |
| 357 | [ OK ] Stopped Network Time Synchronization. |
| 358 | [ OK ] Started udev Coldplug all Devices. |
| 359 | [ OK ] Found device /dev/hvc0. |
| 360 | [ OK ] Reached target System Initialization. |
| 361 | [ OK ] Reached target Basic System. |
| 362 | [ OK ] Started Regular background program processing daemon. |
| 363 | [ OK ] Started Daily Cleanup of Temporary Directories. |
| 364 | Starting Permit User Sessions... |
| 365 | [ OK ] Started Daily apt download activities. |
| 366 | [ OK ] Started Daily apt upgrade and clean activities. |
| 367 | [ OK ] Reached target Timers. |
| 368 | [ OK ] Started Permit User Sessions. |
| 369 | [ OK ] Started Serial Getty on hvc0. |
| 370 | [ OK ] Reached target Login Prompts. |
| 371 | [ OK ] Reached target Multi-User System. |
| 372 | [ OK ] Reached target Graphical Interface. |
| 373 | |
| 374 | Debian GNU/Linux buster/sid openpiton hvc0 |
| 375 | |
| 376 | openpiton login: |