From 4257b7618364f1d8ce4c9811ab88c410e057453d Mon Sep 17 00:00:00 2001 From: equation314 Date: Wed, 12 Dec 2018 01:24:36 +0800 Subject: [PATCH 01/30] aarch64/fb: add bcm2837 mailbox --- crate/bcm2837/src/lib.rs | 1 + crate/bcm2837/src/mailbox.rs | 80 ++++++++++++++++++++++++++++++++++ crate/bcm2837/src/mini_uart.rs | 31 ++++++------- 3 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 crate/bcm2837/src/mailbox.rs diff --git a/crate/bcm2837/src/lib.rs b/crate/bcm2837/src/lib.rs index 9635fdc..d8af5ab 100644 --- a/crate/bcm2837/src/lib.rs +++ b/crate/bcm2837/src/lib.rs @@ -5,6 +5,7 @@ extern crate volatile; pub mod gpio; pub mod timer; +pub mod mailbox; pub mod mini_uart; pub mod interrupt; diff --git a/crate/bcm2837/src/mailbox.rs b/crate/bcm2837/src/mailbox.rs new file mode 100644 index 0000000..89ca1d6 --- /dev/null +++ b/crate/bcm2837/src/mailbox.rs @@ -0,0 +1,80 @@ +use crate::IO_BASE; +use volatile::{ReadOnly, Volatile, WriteOnly}; + +/// The base address for the `MU` registers. +const MAILBOX_BASE: usize = IO_BASE + 0xB000 + 0x880; + +/// Available mailbox channels +/// +/// (ref: https://github.com/raspberrypi/firmware/wiki/Mailboxes) +#[repr(u8)] +#[derive(Copy, Clone, Debug)] +pub enum MailboxChannel { + Framebuffer = 1, + Property = 8, +} + +/// Read from mailbox status register (MAILx_STA). +#[repr(u32)] +enum MailboxStatus { + MailboxEmpty = 1 << 30, + MailboxFull = 1 << 31, +} + +/// Mailbox registers. We basically only support mailbox 0 & 1. We +/// deliver to the VC in mailbox 1, it delivers to us in mailbox 0. See +/// BCM2835-ARM-Peripherals.pdf section 1.3 for an explanation about +/// the placement of memory barriers. +/// +/// (ref: https://github.com/raspberrypi/firmware/wiki/Mailboxes) +#[repr(C)] +#[allow(non_snake_case)] +struct Registers { + MAIL0_RD: ReadOnly, // 0x00 + __reserved0: [u32; 3], + MAIL0_POL: ReadOnly, // 0x10 + MAIL0_SND: ReadOnly, // 0x14 + MAIL0_STA: ReadOnly, // 0x18 + MAIL0_CNF: Volatile, // 0x1c + + MAIL1_WRT: WriteOnly, // 0x20 + __reserved1: [u32; 3], + _MAIL1_POL: ReadOnly, // 0x30 + _MAIL1_SND: ReadOnly, // 0x34 + MAIL1_STA: ReadOnly, // 0x38 + _MAIL1_CNF: Volatile, // 0x3c +} + +/// The Raspberry Pi's mailbox. +/// +/// (ref: https://github.com/raspberrypi/firmware/wiki/Accessing-mailboxes) +pub struct Mailbox { + registers: &'static mut Registers, +} + +impl Mailbox { + /// Returns a new instance of `Mailbox`. + #[inline] + pub fn new() -> Mailbox { + Mailbox { + registers: unsafe { &mut *(MAILBOX_BASE as *mut Registers) }, + } + } + + // Read from the requested channel of mailbox 0. + pub fn read(&self, channel: MailboxChannel) -> u32 { + loop { + while self.registers.MAIL0_STA.read() & (MailboxStatus::MailboxEmpty as u32) != 0 {} + let data = self.registers.MAIL0_RD.read(); + if data & 0xF == channel as u32 { + return data & !0xF; + } + } + } + + // Write to the requested channel of mailbox 1. + pub fn write(&mut self, channel: MailboxChannel, data: u32) { + while self.registers.MAIL1_STA.read() & (MailboxStatus::MailboxFull as u32) != 0 {} + self.registers.MAIL1_WRT.write((data & !0xF) | (channel as u32)); + } +} diff --git a/crate/bcm2837/src/mini_uart.rs b/crate/bcm2837/src/mini_uart.rs index c1d0101..a3a5503 100644 --- a/crate/bcm2837/src/mini_uart.rs +++ b/crate/bcm2837/src/mini_uart.rs @@ -2,12 +2,12 @@ use crate::IO_BASE; use crate::gpio::{Function, Gpio}; use volatile::{ReadOnly, Volatile}; -/// The base address for the `MU` registers. -const MU_REG_BASE: usize = IO_BASE + 0x215040; - /// The `AUXENB` register from page 9 of the BCM2837 documentation. const AUX_ENABLES: *mut Volatile = (IO_BASE + 0x215004) as *mut Volatile; +/// The base address for the `MU` registers. +const MU_REG_BASE: usize = IO_BASE + 0x215040; + /// Enum representing bit fields of the `AUX_MU_IIR_REG` register. #[repr(u8)] pub enum MiniUartInterruptId { @@ -55,19 +55,10 @@ pub struct MiniUart { } impl MiniUart { - /// Initializes the mini UART by enabling it as an auxiliary peripheral, - /// setting the data size to 8 bits, setting the BAUD rate to ~115200 (baud - /// divider of 270), setting GPIO pins 14 and 15 to alternative function 5 - /// (TXD1/RDXD1), and finally enabling the UART transmitter and receiver. - /// - /// By default, reads will never time out. To set a read timeout, use - /// `set_read_timeout()`. + /// Returns a new instance of `MiniUart`. + #[inline] pub fn new() -> MiniUart { - let registers = unsafe { - // Enable the mini UART as an auxiliary device. - (*AUX_ENABLES).write(1); - &mut *(MU_REG_BASE as *mut Registers) - }; + let registers = unsafe { &mut *(MU_REG_BASE as *mut Registers) }; MiniUart { registers: registers, @@ -75,7 +66,17 @@ impl MiniUart { } } + /// Initializes the mini UART by enabling it as an auxiliary peripheral, + /// setting the data size to 8 bits, setting the BAUD rate to ~115200 (baud + /// divider of 270), setting GPIO pins 14 and 15 to alternative function 5 + /// (TXD1/RDXD1), and finally enabling the UART transmitter and receiver. + /// + /// By default, reads will never time out. To set a read timeout, use + /// `set_read_timeout()`. pub fn init(&mut self) { + // Enable the mini UART as an auxiliary device. + unsafe { (*AUX_ENABLES).write(1) } + Gpio::new(14).into_alt(Function::Alt5).set_gpio_pd(0); Gpio::new(15).into_alt(Function::Alt5).set_gpio_pd(0); From d7511d81200e180a21210a81200a5ad9bb651375 Mon Sep 17 00:00:00 2001 From: equation314 Date: Fri, 14 Dec 2018 21:19:44 +0800 Subject: [PATCH 02/30] aarch64/fb: add mailbox property interfaces --- crate/bcm2837/src/mailbox.rs | 4 +- kernel/Cargo.lock | 2 +- kernel/src/arch/aarch64/board/raspi3/irq.rs | 1 - .../src/arch/aarch64/board/raspi3/mailbox.rs | 266 ++++++++++++++++++ kernel/src/arch/aarch64/board/raspi3/mod.rs | 1 + kernel/src/arch/aarch64/mod.rs | 4 +- 6 files changed, 273 insertions(+), 5 deletions(-) create mode 100644 kernel/src/arch/aarch64/board/raspi3/mailbox.rs diff --git a/crate/bcm2837/src/mailbox.rs b/crate/bcm2837/src/mailbox.rs index 89ca1d6..0e7d32f 100644 --- a/crate/bcm2837/src/mailbox.rs +++ b/crate/bcm2837/src/mailbox.rs @@ -61,7 +61,7 @@ impl Mailbox { } } - // Read from the requested channel of mailbox 0. + /// Read from the requested channel of mailbox 0. pub fn read(&self, channel: MailboxChannel) -> u32 { loop { while self.registers.MAIL0_STA.read() & (MailboxStatus::MailboxEmpty as u32) != 0 {} @@ -72,7 +72,7 @@ impl Mailbox { } } - // Write to the requested channel of mailbox 1. + /// Write to the requested channel of mailbox 1. pub fn write(&mut self, channel: MailboxChannel, data: u32) { while self.registers.MAIL1_STA.read() & (MailboxStatus::MailboxFull as u32) != 0 {} self.registers.MAIL1_WRT.write((data & !0xF) | (channel as u32)); diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index 064af4a..ecc04cb 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -1,7 +1,7 @@ [[package]] name = "aarch64" version = "2.2.2" -source = "git+https://github.com/equation314/aarch64#e3b60adb233ad34d05443e0b5ec34cac29253296" +source = "git+https://github.com/equation314/aarch64#06b2f5507dd5393e40c1506cd4414ef36864afc6" dependencies = [ "bit_field 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/kernel/src/arch/aarch64/board/raspi3/irq.rs b/kernel/src/arch/aarch64/board/raspi3/irq.rs index d8730dc..9575e29 100644 --- a/kernel/src/arch/aarch64/board/raspi3/irq.rs +++ b/kernel/src/arch/aarch64/board/raspi3/irq.rs @@ -1,6 +1,5 @@ use crate::arch::interrupt::TrapFrame; use bcm2837::interrupt::Controller; -use log::*; pub use bcm2837::interrupt::Interrupt; diff --git a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs new file mode 100644 index 0000000..83e1557 --- /dev/null +++ b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs @@ -0,0 +1,266 @@ +//! Mailbox property interface +//! +//! (ref: https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface) + +use bcm2837::mailbox::{Mailbox, MailboxChannel}; +use lazy_static::lazy_static; +use core::mem; +use spin::Mutex; +use aarch64::barrier; + +lazy_static! { + static ref MAILBOX: Mutex = Mutex::new(Mailbox::new()); +} + +#[derive(Debug)] +pub struct PropertyMailboxError(u32); +pub type PropertyMailboxResult = Result; + +/// Buffer request/response code. +/// Copied from `linux/include/soc/bcm2835/raspberrypi-firmware.h` +#[repr(u32)] +#[allow(dead_code)] +#[derive(Copy, Clone, Debug)] +#[allow(non_camel_case_types)] +enum PropertyMailboxStatus { + RPI_FIRMWARE_STATUS_REQUEST = 0, + RPI_FIRMWARE_STATUS_SUCCESS = 0x80000000, + RPI_FIRMWARE_STATUS_ERROR = 0x80000001, +} +use self::PropertyMailboxStatus::*; + +/// Tag identifier. +/// Copied from `linux/include/soc/bcm2835/raspberrypi-firmware.h` +#[repr(u32)] +#[allow(dead_code)] +#[derive(Copy, Clone, Debug)] +#[allow(non_camel_case_types)] +enum PropertyMailboxTagId { + RPI_FIRMWARE_PROPERTY_END = 0, + RPI_FIRMWARE_GET_FIRMWARE_REVISION = 0x00000001, + + RPI_FIRMWARE_SET_CURSOR_INFO = 0x00008010, + RPI_FIRMWARE_SET_CURSOR_STATE = 0x00008011, + + RPI_FIRMWARE_GET_BOARD_MODEL = 0x00010001, + RPI_FIRMWARE_GET_BOARD_REVISION = 0x00010002, + RPI_FIRMWARE_GET_BOARD_MAC_ADDRESS = 0x00010003, + RPI_FIRMWARE_GET_BOARD_SERIAL = 0x00010004, + RPI_FIRMWARE_GET_ARM_MEMORY = 0x00010005, + RPI_FIRMWARE_GET_VC_MEMORY = 0x00010006, + RPI_FIRMWARE_GET_CLOCKS = 0x00010007, + RPI_FIRMWARE_GET_POWER_STATE = 0x00020001, + RPI_FIRMWARE_GET_TIMING = 0x00020002, + RPI_FIRMWARE_SET_POWER_STATE = 0x00028001, + RPI_FIRMWARE_GET_CLOCK_STATE = 0x00030001, + RPI_FIRMWARE_GET_CLOCK_RATE = 0x00030002, + RPI_FIRMWARE_GET_VOLTAGE = 0x00030003, + RPI_FIRMWARE_GET_MAX_CLOCK_RATE = 0x00030004, + RPI_FIRMWARE_GET_MAX_VOLTAGE = 0x00030005, + RPI_FIRMWARE_GET_TEMPERATURE = 0x00030006, + RPI_FIRMWARE_GET_MIN_CLOCK_RATE = 0x00030007, + RPI_FIRMWARE_GET_MIN_VOLTAGE = 0x00030008, + RPI_FIRMWARE_GET_TURBO = 0x00030009, + RPI_FIRMWARE_GET_MAX_TEMPERATURE = 0x0003000a, + RPI_FIRMWARE_GET_STC = 0x0003000b, + RPI_FIRMWARE_ALLOCATE_MEMORY = 0x0003000c, + RPI_FIRMWARE_LOCK_MEMORY = 0x0003000d, + RPI_FIRMWARE_UNLOCK_MEMORY = 0x0003000e, + RPI_FIRMWARE_RELEASE_MEMORY = 0x0003000f, + RPI_FIRMWARE_EXECUTE_CODE = 0x00030010, + RPI_FIRMWARE_EXECUTE_QPU = 0x00030011, + RPI_FIRMWARE_SET_ENABLE_QPU = 0x00030012, + RPI_FIRMWARE_GET_DISPMANX_RESOURCE_MEM_HANDLE = 0x00030014, + RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020, + RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021, + RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030, + RPI_FIRMWARE_GET_THROTTLED = 0x00030046, + RPI_FIRMWARE_GET_CLOCK_MEASURED = 0x00030047, + RPI_FIRMWARE_NOTIFY_REBOOT = 0x00030048, + RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001, + RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002, + RPI_FIRMWARE_SET_VOLTAGE = 0x00038003, + RPI_FIRMWARE_SET_TURBO = 0x00038009, + RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021, + RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030, + RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041, + RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041, + RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042, + RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043, + RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043, + RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045, + RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045, + RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049, + RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050, + + /* Dispmanx TAGS */ + RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001, + RPI_FIRMWARE_FRAMEBUFFER_BLANK = 0x00040002, + RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT = 0x00040003, + RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_WIDTH_HEIGHT = 0x00040004, + RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH = 0x00040005, + RPI_FIRMWARE_FRAMEBUFFER_GET_PIXEL_ORDER = 0x00040006, + RPI_FIRMWARE_FRAMEBUFFER_GET_ALPHA_MODE = 0x00040007, + RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH = 0x00040008, + RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009, + RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a, + RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b, + RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f, + RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010, + RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001, + RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003, + RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004, + RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005, + RPI_FIRMWARE_FRAMEBUFFER_TEST_PIXEL_ORDER = 0x00044006, + RPI_FIRMWARE_FRAMEBUFFER_TEST_ALPHA_MODE = 0x00044007, + RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009, + RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a, + RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b, + RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e, + RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003, + RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004, + RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005, + RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006, + RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007, + RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009, + RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a, + RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b, + RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f, + RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020, + RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e, + RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f, + + RPI_FIRMWARE_VCHIQ_INIT = 0x00048010, + + RPI_FIRMWARE_GET_COMMAND_LINE = 0x00050001, + RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001, +} +use self::PropertyMailboxTagId::*; + +/// A property mailbox tag. +#[repr(C, packed)] +#[derive(Debug)] +#[allow(safe_packed_borrows)] +struct PropertyMailboxTag { + id: PropertyMailboxTagId, + buf_size: u32, + req_resp_size: u32, + buf: T, +} + +/// A request that contained a sequence of concatenated tags. The response +/// overwrites the request. +#[repr(C, packed)] +#[derive(Debug)] +#[allow(safe_packed_borrows)] +struct PropertyMailboxRequest { + buf_size: u32, + req_resp_code: PropertyMailboxStatus, + buf: T, + end_tag: PropertyMailboxTagId, +} + +/// Request buffer address must be 16-byte aligned. +#[repr(C, align(16))] +#[derive(Debug)] +struct Align16(PropertyMailboxRequest); + +/// Pack a sequence of concatenated tags into a request, and send the address +/// to the mailbox. +/// Returns PropertyMailboxResult. +macro_rules! send_request { + ($tags: ident) => {{ + let req = Align16(PropertyMailboxRequest { + buf_size: mem::size_of_val(&$tags) as u32, + req_resp_code: RPI_FIRMWARE_STATUS_REQUEST, + buf: $tags, + end_tag: RPI_FIRMWARE_PROPERTY_END, + }); + + unsafe { barrier::wmb() } + { + let mut mbox = MAILBOX.lock(); + mbox.write(MailboxChannel::Property, &req as *const _ as u32); + mbox.read(MailboxChannel::Property); + } + unsafe { barrier::rmb() } + + match req.0.req_resp_code { + RPI_FIRMWARE_STATUS_SUCCESS => Ok(req.0.buf), + other => Err(PropertyMailboxError(other as u32)), + } + }}; +} + +/// Send a tag to mailbox. Will call `send_request!`. +/// Returns PropertyMailboxResult. +macro_rules! send_one_tag { + ($id: expr, [$($arg: expr),*]) => {{ + let buf = [$($arg),*]; + let tag = PropertyMailboxTag { + id: $id, + buf_size: mem::size_of_val(&buf) as u32, + req_resp_size: 0, + buf, + }; + Ok(send_request!(tag)?.buf) + }}; +} + +/// Allocates contiguous memory on the GPU. `size` and `align` are in bytes. +/// Returns memory `handle`. +pub fn mem_alloc(size: u32, align: u32, flags: u32) -> PropertyMailboxResult { + let ret = send_one_tag!(RPI_FIRMWARE_LOCK_MEMORY, [size, align, flags])?; + Ok(ret[0]) +} + +/// Free the memory buffer of `handle`. status=0 is success. +pub fn mem_free(handle: u32) -> PropertyMailboxResult<()> { + let status = send_one_tag!(RPI_FIRMWARE_RELEASE_MEMORY, [handle])?; + match status[0] { + 0 => Ok(()), + other => Err(PropertyMailboxError(other)), + } +} + +/// Lock buffer in place, and return a `bus_address`. Must be done before memory +/// can be accessed. +pub fn mem_lock(handle: u32) -> PropertyMailboxResult { + let ret = send_one_tag!(RPI_FIRMWARE_LOCK_MEMORY, [handle])?; + Ok(ret[0]) +} + +/// Unlock buffer. It retains contents, but may move. Needs to be locked before +/// next use. status=0 is success. +pub fn mem_unlock(handle: u32) -> PropertyMailboxResult<()> { + let status = send_one_tag!(RPI_FIRMWARE_UNLOCK_MEMORY, [handle])?; + match status[0] { + 0 => Ok(()), + other => Err(PropertyMailboxError(other)), + } +} + +/// Get physical (display) width/height. Returns `(width, height)` in pixels. +/// Note that the "physical (display)" size is the size of the allocated buffer +/// in memory, not the resolution of the video signal sent to the display device. +pub fn framebuffer_get_physical_size() -> PropertyMailboxResult<(u32, u32)> { + let ret = send_one_tag!(RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT, [0, 0])?; + Ok((ret[0], ret[1])) +} + +/// Get depth. Returns bits per pixel. +pub fn framebuffer_get_depth() -> PropertyMailboxResult { + let ret = send_one_tag!(RPI_FIRMWARE_FRAMEBUFFER_GET_DEPTH, [0])?; + Ok(ret[0]) +} + +/// Set virtual offset. Returns `(X, Y)` in pixel. +/// The response may not be the same as the request so it must be checked. +/// May be the previous offset or 0 for unsupported. +pub fn framebuffer_set_virtual_offset(xoffset: u32, yoffset: u32) -> PropertyMailboxResult<(u32, u32)> { + let ret = send_one_tag!( + RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET, + [xoffset, yoffset] + )?; + Ok((ret[0], ret[1])) +} diff --git a/kernel/src/arch/aarch64/board/raspi3/mod.rs b/kernel/src/arch/aarch64/board/raspi3/mod.rs index bfaa4f6..f62aad2 100644 --- a/kernel/src/arch/aarch64/board/raspi3/mod.rs +++ b/kernel/src/arch/aarch64/board/raspi3/mod.rs @@ -5,6 +5,7 @@ use once::*; pub mod irq; pub mod timer; pub mod serial; +pub mod mailbox; pub const IO_REMAP_BASE: usize = bcm2837::IO_BASE; pub const IO_REMAP_END: usize = 0x40001000; diff --git a/kernel/src/arch/aarch64/mod.rs b/kernel/src/arch/aarch64/mod.rs index 1d9269f..3edf8cb 100644 --- a/kernel/src/arch/aarch64/mod.rs +++ b/kernel/src/arch/aarch64/mod.rs @@ -18,10 +18,12 @@ global_asm!(include_str!("boot/boot.S")); #[no_mangle] // don't mangle the name of this function pub extern "C" fn rust_main() -> ! { memory::init_mmu_early(); // Enable mmu and paging + + crate::logging::init(); + board::init_early(); println!("{}", LOGO); - crate::logging::init(); interrupt::init(); memory::init(); driver::init(); From 6ba9e34f770edb7988adf615b47a84e570e69975 Mon Sep 17 00:00:00 2001 From: equation314 Date: Sun, 16 Dec 2018 20:55:04 +0800 Subject: [PATCH 03/30] aarch64/fb: add framebuffer initialization --- kernel/src/arch/aarch64/board/raspi3/fb.rs | 190 ++++++++++++++++++ .../src/arch/aarch64/board/raspi3/mailbox.rs | 93 ++++++++- kernel/src/arch/aarch64/board/raspi3/mod.rs | 8 +- .../src/arch/aarch64/board/raspi3/serial.rs | 10 +- kernel/src/arch/aarch64/mod.rs | 6 +- kernel/src/lib.rs | 2 + 6 files changed, 297 insertions(+), 12 deletions(-) create mode 100644 kernel/src/arch/aarch64/board/raspi3/fb.rs diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs new file mode 100644 index 0000000..00ff2da --- /dev/null +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -0,0 +1,190 @@ +//! Framebuffer + +use super::mailbox; +use alloc::string::String; +use core::fmt; +use lazy_static::lazy_static; +use log::*; +use once::*; +use spin::Mutex; + +/// Framebuffer information +#[repr(C)] +#[derive(Debug, Clone, Copy)] +pub struct FramebufferInfo { + /// visible width + pub xres: u32, + /// visible height + pub yres: u32, + /// virtual width + pub xres_virtual: u32, + /// virtual height + pub yres_virtual: u32, + /// virtual offset x + pub xoffset: u32, + /// virtual offset y + pub yoffset: u32, + + /// bits per pixel + pub depth: u32, + /// bytes per line + pub pitch: u32, + + /// bus address, starts from 0xC0000000/0x40000000 + /// (see https://github.com/raspberrypi/firmware/wiki/Accessing-mailboxes) + pub bus_addr: u32, + /// screen buffer size + pub screen_size: u32, +} + +#[repr(u32)] +#[derive(Debug, Clone, Copy)] +#[allow(non_camel_case_types)] +pub enum ColorFormat { + BGR565 = 16, + RGBA8888 = 32, +} +use self::ColorFormat::*; + +#[repr(C)] +union ColorBuffer { + base_addr: u32, + buf16: &'static mut [u16], + buf32: &'static mut [u32], +} + +impl ColorBuffer { + fn new(color_format: ColorFormat, bus_addr: u32, size: u32) -> ColorBuffer { + unsafe { + match color_format { + BGR565 => ColorBuffer { + buf16: core::slice::from_raw_parts_mut( + bus_addr as *mut u16, + (size / 2) as usize, + ), + }, + RGBA8888 => ColorBuffer { + buf32: core::slice::from_raw_parts_mut( + bus_addr as *mut u32, + (size / 4) as usize, + ), + }, + } + } + } + + #[inline] + fn read16(&self, index: u32) -> u16 { + unsafe { self.buf16[index as usize] } + } + + #[inline] + fn read32(&self, index: u32) -> u32 { + unsafe { self.buf32[index as usize] } + } + + #[inline] + fn write16(&mut self, index: u32, pixel: u16) { + unsafe { self.buf16[index as usize] = pixel } + } + + #[inline] + fn write32(&mut self, index: u32, pixel: u32) { + unsafe { self.buf32[index as usize] = pixel } + } +} + +/// Frambuffer structure +pub struct Framebuffer { + pub fb_info: FramebufferInfo, + pub color_format: ColorFormat, + buf: ColorBuffer, +} + +impl fmt::Debug for Framebuffer { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut f = f.debug_struct("Framebuffer"); + f.field("fb_info", &self.fb_info); + f.field("color_format", &self.color_format); + f.field("base_addr", unsafe { &self.buf.base_addr }); + f.finish() + } +} + +impl Framebuffer { + fn new(width: u32, height: u32, depth: u32) -> Result { + assert_has_not_been_called!("Framebuffer::new must be called only once"); + + let (width, height) = if width == 0 || height == 0 { + mailbox::framebuffer_get_physical_size()? + } else { + (width, height) + }; + let depth = if depth == 0 { + mailbox::framebuffer_get_depth()? + } else { + depth + }; + + let info = mailbox::framebuffer_alloc(width, height, depth)?; + let color_format = match info.depth { + 16 => BGR565, + 32 => RGBA8888, + _ => Err(format!("unsupported color depth {}", info.depth))?, + }; + + if info.bus_addr == 0 || info.screen_size == 0 { + Err(format!("mailbox call returned an invalid address/size"))?; + } + if info.pitch == 0 || info.pitch != info.xres * info.depth / 8 { + Err(format!( + "mailbox call returned an invalid pitch value {}", + info.pitch + ))?; + } + + let paddr = info.bus_addr & !0xC0000000; + Ok(Framebuffer { + buf: ColorBuffer::new(color_format, paddr, info.screen_size), + color_format, + fb_info: info, + }) + } + + #[inline] + pub fn base_addr(&self) -> u32 { + unsafe { self.buf.base_addr } + } + + #[inline] + pub fn read(&self, x: u32, y: u32) -> u32 { + match self.color_format { + BGR565 => self.buf.read16(y * self.fb_info.xres + x) as u32, + RGBA8888 => self.buf.read32(y * self.fb_info.xres + x), + } + } + + #[inline] + pub fn write(&mut self, x: u32, y: u32, pixel: u32) { + match self.color_format { + BGR565 => self.buf.write16(y * self.fb_info.xres + x, pixel as u16), + RGBA8888 => self.buf.write32(y * self.fb_info.xres + x, pixel), + } + } +} + +lazy_static! { + pub static ref FRAME_BUFFER: Mutex> = Mutex::new(None); +} + +/// Initialize framebuffer +pub fn init() { + match Framebuffer::new(0, 0, 0) { + Ok(fb) => { + let info = fb.fb_info; + info!("framebuffer: init end\n{:#x?}", fb); + *FRAME_BUFFER.lock() = Some(fb); + } + Err(err) => error!("framebuffer init failed: {}", err), + } +} diff --git a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs index 83e1557..6efb670 100644 --- a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs +++ b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs @@ -2,8 +2,10 @@ //! //! (ref: https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface) +use super::fb::FramebufferInfo; use bcm2837::mailbox::{Mailbox, MailboxChannel}; use lazy_static::lazy_static; +use alloc::string::String; use core::mem; use spin::Mutex; use aarch64::barrier; @@ -16,6 +18,12 @@ lazy_static! { pub struct PropertyMailboxError(u32); pub type PropertyMailboxResult = Result; +impl From for String { + fn from(error: PropertyMailboxError) -> Self { + format!("{:x?}", error) + } +} + /// Buffer request/response code. /// Copied from `linux/include/soc/bcm2835/raspberrypi-firmware.h` #[repr(u32)] @@ -167,11 +175,11 @@ struct Align16(PropertyMailboxRequest); /// Pack a sequence of concatenated tags into a request, and send the address /// to the mailbox. -/// Returns PropertyMailboxResult. +/// Returns `PropertyMailboxResult`. macro_rules! send_request { ($tags: ident) => {{ let req = Align16(PropertyMailboxRequest { - buf_size: mem::size_of_val(&$tags) as u32, + buf_size: mem::size_of_val(&$tags) as u32 + 12, req_resp_code: RPI_FIRMWARE_STATUS_REQUEST, buf: $tags, end_tag: RPI_FIRMWARE_PROPERTY_END, @@ -179,8 +187,9 @@ macro_rules! send_request { unsafe { barrier::wmb() } { + let addr = &req as *const _ as u32; let mut mbox = MAILBOX.lock(); - mbox.write(MailboxChannel::Property, &req as *const _ as u32); + mbox.write(MailboxChannel::Property, addr); mbox.read(MailboxChannel::Property); } unsafe { barrier::rmb() } @@ -193,7 +202,7 @@ macro_rules! send_request { } /// Send a tag to mailbox. Will call `send_request!`. -/// Returns PropertyMailboxResult. +/// Returns `PropertyMailboxResult`. macro_rules! send_one_tag { ($id: expr, [$($arg: expr),*]) => {{ let buf = [$($arg),*]; @@ -264,3 +273,79 @@ pub fn framebuffer_set_virtual_offset(xoffset: u32, yoffset: u32) -> PropertyMai )?; Ok((ret[0], ret[1])) } + +/// Allocate framebuffer on GPU and try to set width/height/depth. +/// Returns `FramebufferInfo`. +pub fn framebuffer_alloc(width: u32, height: u32, depth: u32) -> PropertyMailboxResult { + #[repr(C, packed)] + #[derive(Debug)] + struct FramebufferAllocTag { + set_physical_size: PropertyMailboxTag<[u32; 2]>, + set_virtual_size: PropertyMailboxTag<[u32; 2]>, + set_depth: PropertyMailboxTag<[u32; 1]>, + set_virtual_offset: PropertyMailboxTag<[u32; 2]>, + allocate: PropertyMailboxTag<[u32; 2]>, + get_pitch: PropertyMailboxTag<[u32; 1]>, + } + + let tags = FramebufferAllocTag { + // Set physical (buffer) width/height. Returns `(width, height)` in pixel. + set_physical_size: PropertyMailboxTag { + id: RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT, + buf_size: 8, + req_resp_size: 0, + buf: [width, height], + }, + // Set virtual (buffer) width/height. Returns `(width, height)` in pixel. + set_virtual_size: PropertyMailboxTag { + id: RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT, + buf_size: 8, + req_resp_size: 0, + buf: [width, height], + }, + // Set depth; Returns bits per pixel. + set_depth: PropertyMailboxTag { + id: RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH, + buf_size: 4, + req_resp_size: 0, + buf: [depth], + }, + // Set virtual offset. Returns `(X, Y)` in pixel. + set_virtual_offset: PropertyMailboxTag { + id: RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET, + buf_size: 8, + req_resp_size: 0, + buf: [0, 0], + }, + // Allocate buffer. Returns `(base_address, size)` in bytes. + allocate: PropertyMailboxTag { + id: RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE, + buf_size: 8, + req_resp_size: 0, + buf: [0x1000, 0], + }, + // Get pitch. Return bytes per line. + get_pitch: PropertyMailboxTag { + id: RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH, + buf_size: 4, + req_resp_size: 0, + buf: [0], + }, + }; + + let ret = send_request!(tags)?; + Ok(FramebufferInfo { + xres: ret.set_physical_size.buf[0], + yres: ret.set_physical_size.buf[1], + xres_virtual: ret.set_virtual_size.buf[0], + yres_virtual: ret.set_virtual_size.buf[1], + xoffset: ret.set_virtual_offset.buf[0], + yoffset: ret.set_virtual_offset.buf[1], + + depth: ret.set_depth.buf[0], + pitch: ret.get_pitch.buf[0], + + bus_addr: ret.allocate.buf[0], + screen_size: ret.allocate.buf[1], + }) +} diff --git a/kernel/src/arch/aarch64/board/raspi3/mod.rs b/kernel/src/arch/aarch64/board/raspi3/mod.rs index f62aad2..2bbee12 100644 --- a/kernel/src/arch/aarch64/board/raspi3/mod.rs +++ b/kernel/src/arch/aarch64/board/raspi3/mod.rs @@ -2,6 +2,7 @@ use once::*; +pub mod fb; pub mod irq; pub mod timer; pub mod serial; @@ -10,16 +11,17 @@ pub mod mailbox; pub const IO_REMAP_BASE: usize = bcm2837::IO_BASE; pub const IO_REMAP_END: usize = 0x40001000; -/// Some initializations must be done before other initializations. -pub fn init_early() { +/// Initialize serial port before other initializations. +pub fn init_serial_early() { assert_has_not_been_called!("board::init must be called only once"); - serial::SERIAL_PORT.lock().init(); + serial::init(); println!("Hello Raspberry Pi!"); } /// Initialize raspi3 drivers pub fn init_driver() { + fb::init(); timer::init(); } diff --git a/kernel/src/arch/aarch64/board/raspi3/serial.rs b/kernel/src/arch/aarch64/board/raspi3/serial.rs index 74ed5dd..d74432a 100644 --- a/kernel/src/arch/aarch64/board/raspi3/serial.rs +++ b/kernel/src/arch/aarch64/board/raspi3/serial.rs @@ -2,6 +2,7 @@ use bcm2837::mini_uart::{MiniUart, MiniUartInterruptId}; use lazy_static::lazy_static; use core::fmt; use spin::Mutex; +use once::*; /// Struct to get a global SerialPort interface pub struct SerialPort { @@ -22,6 +23,8 @@ impl SerialPort { /// Init a newly created SerialPort, can only be called once. pub fn init(&mut self) { + assert_has_not_been_called!("SerialPort::init must be called only once"); + self.mu.init(); super::irq::register_irq(super::irq::Interrupt::Aux, handle_serial_irq); } @@ -78,6 +81,11 @@ fn handle_serial_irq() { } } -lazy_static!{ +lazy_static! { pub static ref SERIAL_PORT: Mutex = Mutex::new(SerialPort::new()); } + + +pub fn init() { + SERIAL_PORT.lock().init(); +} diff --git a/kernel/src/arch/aarch64/mod.rs b/kernel/src/arch/aarch64/mod.rs index 3edf8cb..ecfc34d 100644 --- a/kernel/src/arch/aarch64/mod.rs +++ b/kernel/src/arch/aarch64/mod.rs @@ -18,15 +18,13 @@ global_asm!(include_str!("boot/boot.S")); #[no_mangle] // don't mangle the name of this function pub extern "C" fn rust_main() -> ! { memory::init_mmu_early(); // Enable mmu and paging + board::init_serial_early(); crate::logging::init(); - - board::init_early(); - println!("{}", LOGO); - interrupt::init(); memory::init(); driver::init(); + println!("{}", LOGO); crate::process::init(); diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index 6513ac9..f6d938e 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -1,6 +1,7 @@ #![feature(lang_items)] #![feature(alloc)] #![feature(naked_functions)] +#![feature(untagged_unions)] #![feature(asm)] #![feature(optin_builtin_traits)] #![feature(panic_info_message)] @@ -8,6 +9,7 @@ #![no_std] // just keep it ... +#[macro_use] extern crate alloc; pub use crate::process::{processor, new_kernel_context}; From 5987c2068b1422b95611a2c83d1a17010976d348 Mon Sep 17 00:00:00 2001 From: equation314 Date: Sun, 16 Dec 2018 22:26:04 +0800 Subject: [PATCH 04/30] aarch64/fb: remap framebuffer base address --- crate/memory/src/memory_set.rs | 14 +++-- crate/memory/src/paging/mod.rs | 14 ++++- kernel/Cargo.lock | 2 +- kernel/src/arch/aarch64/board/raspi3/fb.rs | 4 +- kernel/src/arch/aarch64/memory.rs | 64 +++++++++++++++------- kernel/src/arch/aarch64/paging.rs | 13 ++--- 6 files changed, 72 insertions(+), 39 deletions(-) diff --git a/crate/memory/src/memory_set.rs b/crate/memory/src/memory_set.rs index 3c631eb..7c5c1c8 100644 --- a/crate/memory/src/memory_set.rs +++ b/crate/memory/src/memory_set.rs @@ -222,8 +222,8 @@ pub struct MemoryAttr { user: bool, readonly: bool, execute: bool, - mmio: bool, hide: bool, + mmio: usize, } impl MemoryAttr { @@ -251,8 +251,12 @@ impl MemoryAttr { self.execute = true; self } - pub fn mmio(mut self) -> Self { - self.mmio = true; + /* + ** @brief set the MMIO type + ** @retval MemoryAttr the memory attribute itself + */ + pub fn mmio(mut self, value: usize) -> Self { + self.mmio = value; self } /* @@ -273,9 +277,9 @@ impl MemoryAttr { if self.user { entry.set_user(true); } if self.readonly { entry.set_writable(false); } if self.execute { entry.set_execute(true); } - if self.mmio { entry.set_mmio(true); } + if self.mmio != 0 { entry.set_mmio(self.mmio); } if self.hide { entry.set_present(false); } - if self.user || self.readonly || self.execute || self.mmio || self.hide { entry.update(); } + if self.user || self.readonly || self.execute || self.mmio != 0 || self.hide { entry.update(); } } } diff --git a/crate/memory/src/paging/mod.rs b/crate/memory/src/paging/mod.rs index 6bbe9b2..0fa7447 100644 --- a/crate/memory/src/paging/mod.rs +++ b/crate/memory/src/paging/mod.rs @@ -195,6 +195,16 @@ pub trait Entry { ** @retval none */ fn set_execute(&mut self, value: bool); - fn mmio(&self) -> bool; - fn set_mmio(&mut self, value: bool); + /* + ** @brief get MMIO type + ** (e.g. aarch64 can have normal/device/normal_non_cacheable memory) + ** @retval usize + */ + fn mmio(&self) -> usize; + /* + ** @brief set MMIO type + ** @param value: usize the value distinguished memory type + ** @retval none + */ + fn set_mmio(&mut self, value: usize); } diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index ecc04cb..a39024e 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -1,7 +1,7 @@ [[package]] name = "aarch64" version = "2.2.2" -source = "git+https://github.com/equation314/aarch64#06b2f5507dd5393e40c1506cd4414ef36864afc6" +source = "git+https://github.com/equation314/aarch64#95e875933967067908bf1da66bf74db24d450062" dependencies = [ "bit_field 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index 00ff2da..ef3b187 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -143,9 +143,11 @@ impl Framebuffer { ))?; } + use crate::arch::memory; let paddr = info.bus_addr & !0xC0000000; + let vaddr = memory::ioremap(paddr as usize, info.screen_size as usize, "fb") as u32; Ok(Framebuffer { - buf: ColorBuffer::new(color_format, paddr, info.screen_size), + buf: ColorBuffer::new(color_format, vaddr, info.screen_size), color_format, fb_info: info, }) diff --git a/kernel/src/arch/aarch64/memory.rs b/kernel/src/arch/aarch64/memory.rs index 6a5996f..00ff312 100644 --- a/kernel/src/arch/aarch64/memory.rs +++ b/kernel/src/arch/aarch64/memory.rs @@ -1,11 +1,13 @@ //! Memory initialization for aarch64. +use crate::memory::{init_heap, MemoryArea, MemoryAttr, MemorySet, FRAME_ALLOCATOR}; +use aarch64::paging::{memory_attribute::*, PhysFrame as Frame}; +use aarch64::{addr::*, barrier, regs::*}; +use atags::atags::Atags; +use lazy_static::lazy_static; use log::*; +use spin::Mutex; use ucore_memory::PAGE_SIZE; -use atags::atags::Atags; -use aarch64::{barrier, regs::*, addr::*}; -use aarch64::paging::{PhysFrame as Frame, memory_attribute::*}; -use crate::memory::{FRAME_ALLOCATOR, init_heap, MemoryArea, MemoryAttr, MemorySet}; /// Memory initialization. pub fn init() { @@ -62,19 +64,19 @@ pub fn init_mmu_early() { // Switch the MMU on. // // First, force all previous changes to be seen before the MMU is enabled. - unsafe { barrier::isb(barrier::SY); } + unsafe { barrier::isb(barrier::SY) } // Enable the MMU and turn on data and instruction caching. SCTLR_EL1.modify(SCTLR_EL1::M::Enable + SCTLR_EL1::C::Cacheable + SCTLR_EL1::I::Cacheable); // Force MMU init to complete before next instruction - unsafe { barrier::isb(barrier::SY); } + unsafe { barrier::isb(barrier::SY) } } fn init_frame_allocator() { + use crate::consts::MEMORY_OFFSET; use bit_allocator::BitAlloc; use core::ops::Range; - use crate::consts::MEMORY_OFFSET; let (start, end) = memory_map().expect("failed to find memory map"); let mut ba = FRAME_ALLOCATOR.lock(); @@ -82,14 +84,14 @@ fn init_frame_allocator() { info!("FrameAllocator init end"); /* - * @param: - * start: start address - * end: end address - * @brief: - * transform the memory address to the page number - * @retval: - * the page number range from start address to end address - */ + * @param: + * start: start address + * end: end address + * @brief: + * transform the memory address to the page number + * @retval: + * the page number range from start address to end address + */ fn to_range(start: usize, end: usize) -> Range { let page_start = (start - MEMORY_OFFSET) / PAGE_SIZE; let page_end = (end - MEMORY_OFFSET - 1) / PAGE_SIZE + 1; @@ -97,9 +99,13 @@ fn init_frame_allocator() { } } +lazy_static! { + pub static ref KERNEL_MEMORY_SET: Mutex = Mutex::new(MemorySet::new_bare()); +} + /// remap kernel page table after all initialization. fn remap_the_kernel() { - let mut ms = MemorySet::new_bare(); + let mut ms = KERNEL_MEMORY_SET.lock(); ms.push(MemoryArea::new_identity(0, bootstacktop as usize, MemoryAttr::default(), "kstack")); ms.push(MemoryArea::new_identity(stext as usize, etext as usize, MemoryAttr::default().execute().readonly(), "text")); ms.push(MemoryArea::new_identity(sdata as usize, edata as usize, MemoryAttr::default(), "data")); @@ -107,13 +113,29 @@ fn remap_the_kernel() { ms.push(MemoryArea::new_identity(sbss as usize, ebss as usize, MemoryAttr::default(), "bss")); use super::board::{IO_REMAP_BASE, IO_REMAP_END}; - ms.push(MemoryArea::new_identity(IO_REMAP_BASE, IO_REMAP_END, MemoryAttr::default().mmio(), "io_remap")); - - unsafe { ms.get_page_table_mut().activate_as_kernel(); } - ::core::mem::forget(ms); + ms.push(MemoryArea::new_identity( + IO_REMAP_BASE, + IO_REMAP_END, + MemoryAttr::default().mmio(MairDevice::attr_value().value as usize), + "io_remap", + )); + + unsafe { ms.get_page_table_mut().activate_as_kernel() } info!("kernel remap end"); } +pub fn ioremap(start: usize, len: usize, name: &'static str) -> usize { + let mut ms = KERNEL_MEMORY_SET.lock(); + let area = MemoryArea::new_identity( + start, + start + len, + MemoryAttr::default().mmio(MairNormalNonCacheable::attr_value().value as usize), + name, + ); + ms.push(area); + start +} + /// Returns the (start address, end address) of the available memory on this /// system if it can be determined. If it cannot, `None` is returned. /// @@ -131,7 +153,7 @@ fn memory_map() -> Option<(usize, usize)> { None } -extern { +extern "C" { fn bootstacktop(); fn stext(); fn etext(); diff --git a/kernel/src/arch/aarch64/paging.rs b/kernel/src/arch/aarch64/paging.rs index fa0e074..cfe1770 100644 --- a/kernel/src/arch/aarch64/paging.rs +++ b/kernel/src/arch/aarch64/paging.rs @@ -162,15 +162,10 @@ impl Entry for PageEntry { self.as_flags().set(EF::PXN, !value) } } - fn mmio(&self) -> bool { - self.0.attr().value == MairDevice::attr_value().value - } - fn set_mmio(&mut self, value: bool) { - if value { - self.0.modify_attr(MairDevice::attr_value()) - } else { - self.0.modify_attr(MairNormal::attr_value()) - } + fn mmio(&self) -> usize { self.0.attr().value as usize } + fn set_mmio(&mut self, value: usize) { + use aarch64::paging::{PageTableAttribute, MEMORY_ATTR_MASK}; + self.0.modify_attr(PageTableAttribute::new(MEMORY_ATTR_MASK, 0, value as u64)) } } From 48cf25716f257794ef097daa7214788fc77cd3fa Mon Sep 17 00:00:00 2001 From: equation314 Date: Mon, 17 Dec 2018 01:33:42 +0800 Subject: [PATCH 05/30] aarch64/fb: flush data cache around mailbox accesses can run on real raspi3 --- kernel/Cargo.lock | 2 +- kernel/src/arch/aarch64/board/raspi3/mailbox.rs | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index a39024e..47635c9 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -1,7 +1,7 @@ [[package]] name = "aarch64" version = "2.2.2" -source = "git+https://github.com/equation314/aarch64#95e875933967067908bf1da66bf74db24d450062" +source = "git+https://github.com/equation314/aarch64#9770a21c00f5d74c32ed044ca200f0459caca828" dependencies = [ "bit_field 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs index 6efb670..1bee860 100644 --- a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs +++ b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs @@ -8,7 +8,7 @@ use lazy_static::lazy_static; use alloc::string::String; use core::mem; use spin::Mutex; -use aarch64::barrier; +use aarch64::{asm, barrier}; lazy_static! { static ref MAILBOX: Mutex = Mutex::new(Mailbox::new()); @@ -185,14 +185,16 @@ macro_rules! send_request { end_tag: RPI_FIRMWARE_PROPERTY_END, }); - unsafe { barrier::wmb() } + let start = &req as *const _ as u32; + let end = start + req.0.buf_size; { - let addr = &req as *const _ as u32; + // flush data cache around mailbox accesses let mut mbox = MAILBOX.lock(); - mbox.write(MailboxChannel::Property, addr); + asm::flush_dcache_range(start as usize, end as usize); + mbox.write(MailboxChannel::Property, start); mbox.read(MailboxChannel::Property); + asm::flush_dcache_range(start as usize, end as usize); } - unsafe { barrier::rmb() } match req.0.req_resp_code { RPI_FIRMWARE_STATUS_SUCCESS => Ok(req.0.buf), From b5cc79d1b299de0908a7e6343271b07d64f888ca Mon Sep 17 00:00:00 2001 From: equation314 Date: Mon, 17 Dec 2018 14:28:51 +0800 Subject: [PATCH 06/30] modify mmio() & set_mmio() in PageEntry --- crate/memory/src/memory_set.rs | 4 +- crate/memory/src/paging/mod.rs | 8 ++-- kernel/Cargo.lock | 2 +- kernel/src/arch/aarch64/board/raspi3/fb.rs | 6 ++- .../src/arch/aarch64/board/raspi3/mailbox.rs | 2 +- kernel/src/arch/aarch64/memory.rs | 9 +++-- kernel/src/arch/aarch64/paging.rs | 38 +++++++++++++++---- kernel/src/arch/riscv32/paging.rs | 6 +-- kernel/src/arch/x86_64/paging.rs | 4 +- 9 files changed, 53 insertions(+), 26 deletions(-) diff --git a/crate/memory/src/memory_set.rs b/crate/memory/src/memory_set.rs index 7c5c1c8..7886509 100644 --- a/crate/memory/src/memory_set.rs +++ b/crate/memory/src/memory_set.rs @@ -223,7 +223,7 @@ pub struct MemoryAttr { readonly: bool, execute: bool, hide: bool, - mmio: usize, + mmio: u8, } impl MemoryAttr { @@ -255,7 +255,7 @@ impl MemoryAttr { ** @brief set the MMIO type ** @retval MemoryAttr the memory attribute itself */ - pub fn mmio(mut self, value: usize) -> Self { + pub fn mmio(mut self, value: u8) -> Self { self.mmio = value; self } diff --git a/crate/memory/src/paging/mod.rs b/crate/memory/src/paging/mod.rs index 0fa7447..af8b0ae 100644 --- a/crate/memory/src/paging/mod.rs +++ b/crate/memory/src/paging/mod.rs @@ -198,13 +198,13 @@ pub trait Entry { /* ** @brief get MMIO type ** (e.g. aarch64 can have normal/device/normal_non_cacheable memory) - ** @retval usize + ** @retval u8 the MMIO type */ - fn mmio(&self) -> usize; + fn mmio(&self) -> u8; /* ** @brief set MMIO type - ** @param value: usize the value distinguished memory type + ** @param value: u8 the MMIO type ** @retval none */ - fn set_mmio(&mut self, value: usize); + fn set_mmio(&mut self, value: u8); } diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index 47635c9..1228664 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -1,7 +1,7 @@ [[package]] name = "aarch64" version = "2.2.2" -source = "git+https://github.com/equation314/aarch64#9770a21c00f5d74c32ed044ca200f0459caca828" +source = "git+https://github.com/equation314/aarch64#b6a0f4a3be6f74927c88305a6af5ad2be079bccd" dependencies = [ "bit_field 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index ef3b187..5d6d8f3 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -48,7 +48,7 @@ use self::ColorFormat::*; #[repr(C)] union ColorBuffer { - base_addr: u32, + base_addr: usize, buf16: &'static mut [u16], buf32: &'static mut [u32], } @@ -154,10 +154,11 @@ impl Framebuffer { } #[inline] - pub fn base_addr(&self) -> u32 { + pub fn base_addr(&self) -> usize { unsafe { self.buf.base_addr } } + /// Read pixel at `(x, y)`. #[inline] pub fn read(&self, x: u32, y: u32) -> u32 { match self.color_format { @@ -166,6 +167,7 @@ impl Framebuffer { } } + /// Write pixel at `(x, y)`. #[inline] pub fn write(&mut self, x: u32, y: u32, pixel: u32) { match self.color_format { diff --git a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs index 1bee860..9b63027 100644 --- a/kernel/src/arch/aarch64/board/raspi3/mailbox.rs +++ b/kernel/src/arch/aarch64/board/raspi3/mailbox.rs @@ -8,7 +8,7 @@ use lazy_static::lazy_static; use alloc::string::String; use core::mem; use spin::Mutex; -use aarch64::{asm, barrier}; +use aarch64::asm; lazy_static! { static ref MAILBOX: Mutex = Mutex::new(Mailbox::new()); diff --git a/kernel/src/arch/aarch64/memory.rs b/kernel/src/arch/aarch64/memory.rs index 00ff312..60a3334 100644 --- a/kernel/src/arch/aarch64/memory.rs +++ b/kernel/src/arch/aarch64/memory.rs @@ -1,6 +1,7 @@ //! Memory initialization for aarch64. use crate::memory::{init_heap, MemoryArea, MemoryAttr, MemorySet, FRAME_ALLOCATOR}; +use super::paging::MMIOType; use aarch64::paging::{memory_attribute::*, PhysFrame as Frame}; use aarch64::{addr::*, barrier, regs::*}; use atags::atags::Atags; @@ -32,8 +33,8 @@ pub fn init_mmu_early() { // device. MAIR_EL1.write( - MAIR_EL1::Attr0.val(MairDevice::config_value()) + - MAIR_EL1::Attr1.val(MairNormal::config_value()) + + MAIR_EL1::Attr0.val(MairNormal::config_value()) + + MAIR_EL1::Attr1.val(MairDevice::config_value()) + MAIR_EL1::Attr2.val(MairNormalNonCacheable::config_value()), ); @@ -116,7 +117,7 @@ fn remap_the_kernel() { ms.push(MemoryArea::new_identity( IO_REMAP_BASE, IO_REMAP_END, - MemoryAttr::default().mmio(MairDevice::attr_value().value as usize), + MemoryAttr::default().mmio(MMIOType::Device as u8), "io_remap", )); @@ -129,7 +130,7 @@ pub fn ioremap(start: usize, len: usize, name: &'static str) -> usize { let area = MemoryArea::new_identity( start, start + len, - MemoryAttr::default().mmio(MairNormalNonCacheable::attr_value().value as usize), + MemoryAttr::default().mmio(MMIOType::NormalNonCacheable as u8), name, ); ms.push(area); diff --git a/kernel/src/arch/aarch64/paging.rs b/kernel/src/arch/aarch64/paging.rs index cfe1770..453f7c8 100644 --- a/kernel/src/arch/aarch64/paging.rs +++ b/kernel/src/arch/aarch64/paging.rs @@ -22,7 +22,7 @@ pub fn setup_temp_page_table(frame_lvl4: Frame, frame_lvl3: Frame, frame_lvl2: F p2.zero(); let (start_addr, end_addr) = (0, 0x40000000); - let block_flags = EF::VALID | EF::AF | EF::WRITE | EF::XN; + let block_flags = EF::VALID | EF::AF | EF::WRITE | EF::UXN; for page in Page::::range_of(start_addr, end_addr) { let paddr = PhysAddr::new(page.start_address().as_u64()); @@ -106,6 +106,14 @@ impl ActivePageTable { } } +#[repr(u8)] +pub enum MMIOType { + Normal = 0, + Device = 1, + NormalNonCacheable = 2, + Unsupported = 3, +} + impl Entry for PageEntry { fn update(&mut self) { let addr = VirtAddr::new_unchecked((self as *const _ as u64) << 9); @@ -150,22 +158,38 @@ impl Entry for PageEntry { } fn execute(&self) -> bool { if self.user() { - !self.0.flags().contains(EF::XN) + !self.0.flags().contains(EF::UXN) } else { !self.0.flags().contains(EF::PXN) } } fn set_execute(&mut self, value: bool) { if self.user() { - self.as_flags().set(EF::XN, !value) + self.as_flags().set(EF::UXN, !value) } else { self.as_flags().set(EF::PXN, !value) } } - fn mmio(&self) -> usize { self.0.attr().value as usize } - fn set_mmio(&mut self, value: usize) { - use aarch64::paging::{PageTableAttribute, MEMORY_ATTR_MASK}; - self.0.modify_attr(PageTableAttribute::new(MEMORY_ATTR_MASK, 0, value as u64)) + fn mmio(&self) -> u8 { + let value = self.0.attr().value; + if value == MairNormal::attr_value().value { + 0 + } else if value == MairDevice::attr_value().value { + 1 + } else if value == MairNormalNonCacheable::attr_value().value { + 2 + } else { + 3 + } + } + fn set_mmio(&mut self, value: u8) { + let attr = match value { + 0 => MairNormal::attr_value(), + 1 => MairDevice::attr_value(), + 2 => MairNormalNonCacheable::attr_value(), + _ => return, + }; + self.0.modify_attr(attr); } } diff --git a/kernel/src/arch/riscv32/paging.rs b/kernel/src/arch/riscv32/paging.rs index 6cce3f3..631a9f8 100644 --- a/kernel/src/arch/riscv32/paging.rs +++ b/kernel/src/arch/riscv32/paging.rs @@ -26,7 +26,7 @@ pub fn setup_page_table(frame: Frame) { // Set kernel identity map // 0x10000000 ~ 1K area p2.map_identity(0x40, EF::VALID | EF::READABLE | EF::WRITABLE); - // 0x80000000 ~ 12M area + // 0x80000000 ~ 12M area p2.map_identity(KERNEL_P2_INDEX, EF::VALID | EF::READABLE | EF::WRITABLE | EF::EXECUTABLE); p2.map_identity(KERNEL_P2_INDEX + 1, EF::VALID | EF::READABLE | EF::WRITABLE | EF::EXECUTABLE); p2.map_identity(KERNEL_P2_INDEX + 2, EF::VALID | EF::READABLE | EF::WRITABLE | EF::EXECUTABLE); @@ -196,8 +196,8 @@ impl Entry for PageEntry { fn set_user(&mut self, value: bool) { self.as_flags().set(EF::USER, value); } fn execute(&self) -> bool { self.0.flags().contains(EF::EXECUTABLE) } fn set_execute(&mut self, value: bool) { self.as_flags().set(EF::EXECUTABLE, value); } - fn mmio(&self) -> bool { unimplemented!() } - fn set_mmio(&mut self, value: bool) { unimplemented!() } + fn mmio(&self) -> u8 { 0 } + fn set_mmio(&mut self, _value: u8) { } } impl PageEntry { diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index bdf9a4c..e269935 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -142,8 +142,8 @@ impl Entry for PageEntry { } fn execute(&self) -> bool { !self.0.flags().contains(EF::NO_EXECUTE) } fn set_execute(&mut self, value: bool) { self.as_flags().set(EF::NO_EXECUTE, !value); } - fn mmio(&self) -> bool { unimplemented!() } - fn set_mmio(&mut self, value: bool) { unimplemented!() } + fn mmio(&self) -> u8 { 0 } + fn set_mmio(&mut self, _value: u8) { } } fn get_entry_ptr(addr: usize, level: u8) -> *mut PageEntry { From b47c4758bf3f0e7c97fbe60bdf64e0d61b585a5d Mon Sep 17 00:00:00 2001 From: equation314 Date: Tue, 18 Dec 2018 00:16:56 +0800 Subject: [PATCH 07/30] aarch64/fb: add basic console driver --- kernel/src/arch/aarch64/board/raspi3/fb.rs | 11 +- .../src/arch/aarch64/board/raspi3/serial.rs | 2 +- kernel/src/arch/aarch64/driver/console.rs | 198 ++++++++++++++++++ kernel/src/arch/aarch64/driver/mod.rs | 8 +- kernel/src/arch/aarch64/io.rs | 14 +- 5 files changed, 224 insertions(+), 9 deletions(-) create mode 100644 kernel/src/arch/aarch64/driver/console.rs diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index 5d6d8f3..19f9887 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -175,6 +175,16 @@ impl Framebuffer { RGBA8888 => self.buf.write32(y * self.fb_info.xres + x, pixel), } } + + /// Clean screen + pub fn clear(&mut self) { + let mut start = self.base_addr(); + let end = start + self.fb_info.screen_size as usize; + while start < end { + unsafe { *(start as *mut usize) = 0 } + start += core::mem::size_of::(); + } + } } lazy_static! { @@ -185,7 +195,6 @@ lazy_static! { pub fn init() { match Framebuffer::new(0, 0, 0) { Ok(fb) => { - let info = fb.fb_info; info!("framebuffer: init end\n{:#x?}", fb); *FRAME_BUFFER.lock() = Some(fb); } diff --git a/kernel/src/arch/aarch64/board/raspi3/serial.rs b/kernel/src/arch/aarch64/board/raspi3/serial.rs index d74432a..abb4ff6 100644 --- a/kernel/src/arch/aarch64/board/raspi3/serial.rs +++ b/kernel/src/arch/aarch64/board/raspi3/serial.rs @@ -22,7 +22,7 @@ impl SerialPort { } /// Init a newly created SerialPort, can only be called once. - pub fn init(&mut self) { + fn init(&mut self) { assert_has_not_been_called!("SerialPort::init must be called only once"); self.mu.init(); diff --git a/kernel/src/arch/aarch64/driver/console.rs b/kernel/src/arch/aarch64/driver/console.rs new file mode 100644 index 0000000..f0b01e5 --- /dev/null +++ b/kernel/src/arch/aarch64/driver/console.rs @@ -0,0 +1,198 @@ +//! Framebuffer console display driver for ARM64 + +use super::board::fb::{FramebufferInfo, FRAME_BUFFER}; +use alloc::vec::Vec; +use core::fmt::{self, Write}; +use lazy_static::lazy_static; +use spin::Mutex; + +#[derive(Debug, Clone, Copy)] +struct Color(u8); + +#[derive(Debug, Clone, Copy)] +#[repr(C)] +pub struct ConsoleChar { + ascii_char: u8, + color: Color, +} + +impl Default for ConsoleChar { + fn default() -> Self { + ConsoleChar { + ascii_char: b' ', + color: Color(0), + } + } +} + +const CHAR_WIDTH: u16 = 8; +const CHAR_HEIGHT: u16 = 16; + +/// Character buffer +struct ConsoleBuffer { + num_row: u16, + num_col: u16, + buf: Vec>, +} + +impl ConsoleBuffer { + fn new(num_row: u16, num_col: u16) -> ConsoleBuffer { + ConsoleBuffer { + num_row, + num_col, + buf: vec![vec![ConsoleChar::default(); num_col as usize]; num_row as usize], + } + } + + /// Read one character at `(row, col)`. + fn read(&self, row: u16, col: u16) -> ConsoleChar { + self.buf[row as usize][col as usize] + } + + /// Write one character at `(row, col)`. + /// TODO: font & color + fn write(&mut self, row: u16, col: u16, ch: ConsoleChar) { + self.buf[row as usize][col as usize] = ch; + + let off_x = col * CHAR_WIDTH; + let off_y = row * CHAR_HEIGHT; + if let Some(fb) = FRAME_BUFFER.lock().as_mut() { + for y in 0..CHAR_HEIGHT { + for x in 0..CHAR_WIDTH { + let pixel = if ch.color.0 == 0 { 0 } else { !0 }; + fb.write((off_x + x) as u32, (off_y + y) as u32, pixel); + } + } + } + } + + /// Delete one character at `(row, col)`. + fn delete(&mut self, row: u16, col: u16) { + self.write(row, col, ConsoleChar::default()); + } + + /// Insert one blank line at the bottom and remove the top line. + /// TODO: improve performance + fn new_line(&mut self) { + for i in 1..self.num_row { + for j in 0..self.num_col { + self.write(i - 1, j, self.read(i, j)); + } + } + for j in 0..self.num_col { + self.write(self.num_row - 1, j, ConsoleChar::default()); + } + } + + /// Clear the entire buffer and screen. + fn clear(&mut self) { + for i in 0..self.num_row as usize { + for j in 0..self.num_col as usize { + self.buf[i][j] = ConsoleChar::default() + } + } + if let Some(fb) = FRAME_BUFFER.lock().as_mut() { + fb.clear(); + } + } +} + +/// Console structure +pub struct Console { + /// current color + color: Color, + /// cursor row + row: u16, + /// cursor column + col: u16, + /// number of rows + num_row: u16, + /// number of columns + num_col: u16, + /// character buffer + buf: ConsoleBuffer, +} + +impl Console { + fn new(fb: &FramebufferInfo) -> Console { + let num_row = fb.yres as u16 / CHAR_HEIGHT; + let num_col = fb.xres as u16 / CHAR_WIDTH; + Console { + color: Color(1), + row: 0, + col: 0, + num_row, + num_col, + buf: ConsoleBuffer::new(num_row, num_col), + } + } + + fn new_line(&mut self) { + self.col = 0; + if self.row < self.num_row - 1 { + self.row += 1; + } else { + self.buf.new_line(); + } + } + + fn write_byte(&mut self, byte: u8) { + match byte { + b'\x7f' => { + if self.col > 0 { + self.col -= 1; + self.buf.delete(self.row, self.col); + } else if self.row > 0 { + self.row -= 1; + self.col = self.num_col - 1; + self.buf.delete(self.row, self.col); + } + } + b'\n' => self.new_line(), + b'\r' => self.col = 0, + byte => { + if self.col >= self.num_col { + self.new_line(); + } + + let ch = ConsoleChar { + ascii_char: byte, + color: self.color, + }; + self.buf.write(self.row, self.col, ch); + self.col += 1; + } + } + } + + pub fn clear(&mut self) { + self.color = Color(1); + self.row = 0; + self.col = 0; + self.buf.clear(); + } +} + +impl fmt::Write for Console { + fn write_str(&mut self, s: &str) -> fmt::Result { + for byte in s.bytes() { + self.write_byte(byte) + } + Ok(()) + } +} + +lazy_static! { + pub static ref CONSOLE: Mutex> = Mutex::new(None); +} + +/// Initialize console driver +pub fn init() { + if let Some(fb) = FRAME_BUFFER.lock().as_ref() { + *CONSOLE.lock() = Some(Console::new(&fb.fb_info)); + } + + if let Some(console) = CONSOLE.lock().as_mut() { + console.write_str("Hello Raspberry Pi!\n").unwrap(); + } +} diff --git a/kernel/src/arch/aarch64/driver/mod.rs b/kernel/src/arch/aarch64/driver/mod.rs index 43d8c43..78e3ba5 100644 --- a/kernel/src/arch/aarch64/driver/mod.rs +++ b/kernel/src/arch/aarch64/driver/mod.rs @@ -1,12 +1,14 @@ -/// ARM64 drivers +//! ARM64 drivers +use super::board; use once::*; -use super::board; +pub mod console; /// Initialize ARM64 common drivers pub fn init() { - assert_has_not_been_called!(); + assert_has_not_been_called!("driver::init must be called only once"); board::init_driver(); + console::init(); } diff --git a/kernel/src/arch/aarch64/io.rs b/kernel/src/arch/aarch64/io.rs index bb3c986..b9815d3 100644 --- a/kernel/src/arch/aarch64/io.rs +++ b/kernel/src/arch/aarch64/io.rs @@ -1,14 +1,20 @@ //! Serial driver for aarch64. -use core::fmt::{Arguments, Write}; use super::board::serial::*; +use super::driver::console::CONSOLE; +use core::fmt::{Arguments, Write}; pub fn getchar() -> char { - unsafe { SERIAL_PORT.force_unlock(); } + unsafe { SERIAL_PORT.force_unlock() } SERIAL_PORT.lock().receive() as char } pub fn putfmt(fmt: Arguments) { - unsafe { SERIAL_PORT.force_unlock(); } - SERIAL_PORT.lock().write_fmt(fmt).unwrap() + unsafe { SERIAL_PORT.force_unlock() } + SERIAL_PORT.lock().write_fmt(fmt).unwrap(); + + unsafe { CONSOLE.force_unlock() } + if let Some(console) = CONSOLE.lock().as_mut() { + console.write_fmt(fmt).unwrap(); + } } From 7b8359eeef95c61446bd52614f0f68aa716ee728 Mon Sep 17 00:00:00 2001 From: equation314 Date: Tue, 18 Dec 2018 17:51:22 +0800 Subject: [PATCH 08/30] aarch64/fb: add 8x16 font --- kernel/src/arch/aarch64/board/raspi3/fb.rs | 2 +- kernel/src/arch/aarch64/driver/console.rs | 91 +- .../src/arch/aarch64/driver/fonts/font8x16.rs | 4629 +++++++++++++++++ kernel/src/arch/aarch64/driver/fonts/mod.rs | 12 + kernel/src/arch/aarch64/driver/mod.rs | 4 + kernel/src/arch/aarch64/io.rs | 2 +- 6 files changed, 4689 insertions(+), 51 deletions(-) create mode 100644 kernel/src/arch/aarch64/driver/fonts/font8x16.rs create mode 100644 kernel/src/arch/aarch64/driver/fonts/mod.rs diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index 19f9887..5f9ba64 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -198,6 +198,6 @@ pub fn init() { info!("framebuffer: init end\n{:#x?}", fb); *FRAME_BUFFER.lock() = Some(fb); } - Err(err) => error!("framebuffer init failed: {}", err), + Err(err) => warn!("framebuffer init failed: {}", err), } } diff --git a/kernel/src/arch/aarch64/driver/console.rs b/kernel/src/arch/aarch64/driver/console.rs index f0b01e5..209b45e 100644 --- a/kernel/src/arch/aarch64/driver/console.rs +++ b/kernel/src/arch/aarch64/driver/console.rs @@ -1,9 +1,12 @@ //! Framebuffer console display driver for ARM64 -use super::board::fb::{FramebufferInfo, FRAME_BUFFER}; +use super::fb::{FramebufferInfo, FRAME_BUFFER}; +use super::fonts::{Font, Font8x16}; use alloc::vec::Vec; -use core::fmt::{self, Write}; +use core::fmt; +use core::marker::PhantomData; use lazy_static::lazy_static; +use log::*; use spin::Mutex; #[derive(Debug, Clone, Copy)] @@ -25,41 +28,35 @@ impl Default for ConsoleChar { } } -const CHAR_WIDTH: u16 = 8; -const CHAR_HEIGHT: u16 = 16; - /// Character buffer -struct ConsoleBuffer { - num_row: u16, - num_col: u16, +struct ConsoleBuffer { + num_row: usize, + num_col: usize, buf: Vec>, + font: PhantomData, } -impl ConsoleBuffer { - fn new(num_row: u16, num_col: u16) -> ConsoleBuffer { +impl ConsoleBuffer { + fn new(num_row: usize, num_col: usize) -> ConsoleBuffer { ConsoleBuffer { num_row, num_col, - buf: vec![vec![ConsoleChar::default(); num_col as usize]; num_row as usize], + buf: vec![vec![ConsoleChar::default(); num_col]; num_row], + font: PhantomData, } } - /// Read one character at `(row, col)`. - fn read(&self, row: u16, col: u16) -> ConsoleChar { - self.buf[row as usize][col as usize] - } - /// Write one character at `(row, col)`. - /// TODO: font & color - fn write(&mut self, row: u16, col: u16, ch: ConsoleChar) { - self.buf[row as usize][col as usize] = ch; + /// TODO: color + fn write(&mut self, row: usize, col: usize, ch: ConsoleChar) { + self.buf[row][col] = ch; - let off_x = col * CHAR_WIDTH; - let off_y = row * CHAR_HEIGHT; + let off_x = col * F::WIDTH; + let off_y = row * F::HEIGHT; if let Some(fb) = FRAME_BUFFER.lock().as_mut() { - for y in 0..CHAR_HEIGHT { - for x in 0..CHAR_WIDTH { - let pixel = if ch.color.0 == 0 { 0 } else { !0 }; + for y in 0..F::HEIGHT { + for x in 0..F::WIDTH { + let pixel = if ch.color.0 != 0 && F::get(ch.ascii_char, x, y) { !0 } else { 0 }; fb.write((off_x + x) as u32, (off_y + y) as u32, pixel); } } @@ -67,7 +64,7 @@ impl ConsoleBuffer { } /// Delete one character at `(row, col)`. - fn delete(&mut self, row: u16, col: u16) { + fn delete(&mut self, row: usize, col: usize) { self.write(row, col, ConsoleChar::default()); } @@ -76,7 +73,7 @@ impl ConsoleBuffer { fn new_line(&mut self) { for i in 1..self.num_row { for j in 0..self.num_col { - self.write(i - 1, j, self.read(i, j)); + self.write(i - 1, j, self.buf[i][j]); } } for j in 0..self.num_col { @@ -86,8 +83,8 @@ impl ConsoleBuffer { /// Clear the entire buffer and screen. fn clear(&mut self) { - for i in 0..self.num_row as usize { - for j in 0..self.num_col as usize { + for i in 0..self.num_row { + for j in 0..self.num_col { self.buf[i][j] = ConsoleChar::default() } } @@ -98,38 +95,32 @@ impl ConsoleBuffer { } /// Console structure -pub struct Console { +pub struct Console { /// current color color: Color, /// cursor row - row: u16, + row: usize, /// cursor column - col: u16, - /// number of rows - num_row: u16, - /// number of columns - num_col: u16, + col: usize, /// character buffer - buf: ConsoleBuffer, + buf: ConsoleBuffer, } -impl Console { - fn new(fb: &FramebufferInfo) -> Console { - let num_row = fb.yres as u16 / CHAR_HEIGHT; - let num_col = fb.xres as u16 / CHAR_WIDTH; +impl Console { + fn new(fb: &FramebufferInfo) -> Console { + let num_row = fb.yres as usize / F::HEIGHT; + let num_col = fb.xres as usize / F::WIDTH; Console { color: Color(1), row: 0, col: 0, - num_row, - num_col, buf: ConsoleBuffer::new(num_row, num_col), } } fn new_line(&mut self) { self.col = 0; - if self.row < self.num_row - 1 { + if self.row < self.buf.num_row - 1 { self.row += 1; } else { self.buf.new_line(); @@ -144,14 +135,14 @@ impl Console { self.buf.delete(self.row, self.col); } else if self.row > 0 { self.row -= 1; - self.col = self.num_col - 1; + self.col = self.buf.num_col - 1; self.buf.delete(self.row, self.col); } } b'\n' => self.new_line(), b'\r' => self.col = 0, byte => { - if self.col >= self.num_col { + if self.col >= self.buf.num_col { self.new_line(); } @@ -173,7 +164,7 @@ impl Console { } } -impl fmt::Write for Console { +impl fmt::Write for Console { fn write_str(&mut self, s: &str) -> fmt::Result { for byte in s.bytes() { self.write_byte(byte) @@ -183,7 +174,7 @@ impl fmt::Write for Console { } lazy_static! { - pub static ref CONSOLE: Mutex> = Mutex::new(None); + pub static ref CONSOLE: Mutex>> = Mutex::new(None); } /// Initialize console driver @@ -192,7 +183,9 @@ pub fn init() { *CONSOLE.lock() = Some(Console::new(&fb.fb_info)); } - if let Some(console) = CONSOLE.lock().as_mut() { - console.write_str("Hello Raspberry Pi!\n").unwrap(); + if !CONSOLE.lock().is_none() { + info!("console: init end"); + } else { + warn!("console: init failed"); } } diff --git a/kernel/src/arch/aarch64/driver/fonts/font8x16.rs b/kernel/src/arch/aarch64/driver/fonts/font8x16.rs new file mode 100644 index 0000000..d62518c --- /dev/null +++ b/kernel/src/arch/aarch64/driver/fonts/font8x16.rs @@ -0,0 +1,4629 @@ +//! CP437 8x16 dot matrix font + +use super::Font; + +pub enum Font8x16 {} + +impl Font8x16 { + /// font data + /// copied from `linux/lib/fonts/font_8x16.c` + const DATA: [u8; 256 * 16] = [ + /* 0 0x00 '^@' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 1 0x01 '^A' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x81, /* 10000001 */ + 0xa5, /* 10100101 */ + 0x81, /* 10000001 */ + 0x81, /* 10000001 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0x81, /* 10000001 */ + 0x81, /* 10000001 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 2 0x02 '^B' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xdb, /* 11011011 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 3 0x03 '^C' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 4 0x04 '^D' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 5 0x05 '^E' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0xe7, /* 11100111 */ + 0xe7, /* 11100111 */ + 0xe7, /* 11100111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 6 0x06 '^F' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 7 0x07 '^G' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 8 0x08 '^H' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xe7, /* 11100111 */ + 0xc3, /* 11000011 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 9 0x09 '^I' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x42, /* 01000010 */ + 0x42, /* 01000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 10 0x0a '^J' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0x99, /* 10011001 */ + 0xbd, /* 10111101 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0xc3, /* 11000011 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 11 0x0b '^K' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1e, /* 00011110 */ + 0x0e, /* 00001110 */ + 0x1a, /* 00011010 */ + 0x32, /* 00110010 */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 12 0x0c '^L' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 13 0x0d '^M' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x33, /* 00110011 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x70, /* 01110000 */ + 0xf0, /* 11110000 */ + 0xe0, /* 11100000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 14 0x0e '^N' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x67, /* 01100111 */ + 0xe7, /* 11100111 */ + 0xe6, /* 11100110 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 15 0x0f '^O' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xdb, /* 11011011 */ + 0x3c, /* 00111100 */ + 0xe7, /* 11100111 */ + 0x3c, /* 00111100 */ + 0xdb, /* 11011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 16 0x10 '^P' */ + 0x00, /* 00000000 */ + 0x80, /* 10000000 */ + 0xc0, /* 11000000 */ + 0xe0, /* 11100000 */ + 0xf0, /* 11110000 */ + 0xf8, /* 11111000 */ + 0xfe, /* 11111110 */ + 0xf8, /* 11111000 */ + 0xf0, /* 11110000 */ + 0xe0, /* 11100000 */ + 0xc0, /* 11000000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 17 0x11 '^Q' */ + 0x00, /* 00000000 */ + 0x02, /* 00000010 */ + 0x06, /* 00000110 */ + 0x0e, /* 00001110 */ + 0x1e, /* 00011110 */ + 0x3e, /* 00111110 */ + 0xfe, /* 11111110 */ + 0x3e, /* 00111110 */ + 0x1e, /* 00011110 */ + 0x0e, /* 00001110 */ + 0x06, /* 00000110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 18 0x12 '^R' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 19 0x13 '^S' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 20 0x14 '^T' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7f, /* 01111111 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7b, /* 01111011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 21 0x15 '^U' */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 22 0x16 '^V' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 23 0x17 '^W' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 24 0x18 '^X' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 25 0x19 '^Y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 26 0x1a '^Z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 27 0x1b '^[' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 28 0x1c '^\' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 29 0x1d '^]' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x28, /* 00101000 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x28, /* 00101000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 30 0x1e '^^' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 31 0x1f '^_' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 32 0x20 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 33 0x21 '!' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 34 0x22 '"' */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x24, /* 00100100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 35 0x23 '#' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 36 0x24 '$' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x86, /* 10000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 37 0x25 '%' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc2, /* 11000010 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0x86, /* 10000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 38 0x26 '&' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 39 0x27 ''' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 40 0x28 '(' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 41 0x29 ')' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 42 0x2a '*' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0xff, /* 11111111 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 43 0x2b '+' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 44 0x2c ',' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 45 0x2d '-' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 46 0x2e '.' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 47 0x2f '/' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x02, /* 00000010 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 48 0x30 '0' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 49 0x31 '1' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x38, /* 00111000 */ + 0x78, /* 01111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 50 0x32 '2' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 51 0x33 '3' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x3c, /* 00111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 52 0x34 '4' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x1c, /* 00011100 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 53 0x35 '5' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 54 0x36 '6' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 55 0x37 '7' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 56 0x38 '8' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 57 0x39 '9' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 58 0x3a ':' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 59 0x3b ';' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 60 0x3c '<' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 61 0x3d '=' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 62 0x3e '>' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 63 0x3f '?' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 64 0x40 '@' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xdc, /* 11011100 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 65 0x41 'A' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 66 0x42 'B' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 67 0x43 'C' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc2, /* 11000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 68 0x44 'D' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 69 0x45 'E' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x66, /* 01100110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x60, /* 01100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 70 0x46 'F' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x66, /* 01100110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 71 0x47 'G' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xde, /* 11011110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x66, /* 01100110 */ + 0x3a, /* 00111010 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 72 0x48 'H' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 73 0x49 'I' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 74 0x4a 'J' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1e, /* 00011110 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 75 0x4b 'K' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe6, /* 11100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x78, /* 01111000 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 76 0x4c 'L' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 77 0x4d 'M' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xee, /* 11101110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 78 0x4e 'N' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xfe, /* 11111110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 79 0x4f 'O' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 80 0x50 'P' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 81 0x51 'Q' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xde, /* 11011110 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x0e, /* 00001110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 82 0x52 'R' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 83 0x53 'S' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 84 0x54 'T' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x5a, /* 01011010 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 85 0x55 'U' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 86 0x56 'V' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 87 0x57 'W' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0xee, /* 11101110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 88 0x58 'X' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 89 0x59 'Y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 90 0x5a 'Z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x86, /* 10000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc2, /* 11000010 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 91 0x5b '[' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 92 0x5c '\' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x80, /* 10000000 */ + 0xc0, /* 11000000 */ + 0xe0, /* 11100000 */ + 0x70, /* 01110000 */ + 0x38, /* 00111000 */ + 0x1c, /* 00011100 */ + 0x0e, /* 00001110 */ + 0x06, /* 00000110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 93 0x5d ']' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 94 0x5e '^' */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 95 0x5f '_' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 96 0x60 '`' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 97 0x61 'a' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 98 0x62 'b' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 99 0x63 'c' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 100 0x64 'd' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1c, /* 00011100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 101 0x65 'e' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 102 0x66 'f' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1c, /* 00011100 */ + 0x36, /* 00110110 */ + 0x32, /* 00110010 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 103 0x67 'g' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* 104 0x68 'h' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x6c, /* 01101100 */ + 0x76, /* 01110110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 105 0x69 'i' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 106 0x6a 'j' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 107 0x6b 'k' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x78, /* 01111000 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 108 0x6c 'l' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 109 0x6d 'm' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xec, /* 11101100 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 110 0x6e 'n' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 111 0x6f 'o' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 112 0x70 'p' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + + /* 113 0x71 'q' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + + /* 114 0x72 'r' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x66, /* 01100110 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 115 0x73 's' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 116 0x74 't' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0xfc, /* 11111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x36, /* 00110110 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 117 0x75 'u' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 118 0x76 'v' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 119 0x77 'w' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 120 0x78 'x' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 121 0x79 'y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + + /* 122 0x7a 'z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xcc, /* 11001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 123 0x7b '{' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 124 0x7c '|' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 125 0x7d '}' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 126 0x7e '~' */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 127 0x7f '' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 128 0x80 'Ç' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc2, /* 11000010 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc2, /* 11000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 129 0x81 'ü' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 130 0x82 'é' */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 131 0x83 'â' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 132 0x84 'ä' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 133 0x85 'à' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 134 0x86 'å' */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 135 0x87 'ç' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 136 0x88 'ê' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 137 0x89 'ë' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 138 0x8a 'è' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 139 0x8b 'ï' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 140 0x8c 'î' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 141 0x8d 'ì' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 142 0x8e 'Ä' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 143 0x8f 'Å' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 144 0x90 'É' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x66, /* 01100110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 145 0x91 'æ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xec, /* 11101100 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x6e, /* 01101110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 146 0x92 'Æ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3e, /* 00111110 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xce, /* 11001110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 147 0x93 'ô' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 148 0x94 'ö' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 149 0x95 'ò' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 150 0x96 'û' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 151 0x97 'ù' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 152 0x98 'ÿ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* 153 0x99 'Ö' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 154 0x9a 'Ü' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 155 0x9b '¢' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 156 0x9c '£' */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x64, /* 01100100 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xe6, /* 11100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 157 0x9d '¥' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 158 0x9e '₧' */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xf8, /* 11111000 */ + 0xc4, /* 11000100 */ + 0xcc, /* 11001100 */ + 0xde, /* 11011110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 159 0x9f 'ƒ' */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 160 0xa0 'á' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 161 0xa1 'í' */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 162 0xa2 'ó' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 163 0xa3 'ú' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 164 0xa4 'ñ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 165 0xa5 'Ñ' */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xfe, /* 11111110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 166 0xa6 'ª' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 167 0xa7 'º' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 168 0xa8 '¿' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 169 0xa9 '⌐' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 170 0xaa '¬' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 171 0xab '½' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0xe0, /* 11100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xdc, /* 11011100 */ + 0x86, /* 10000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 172 0xac '¼' */ + 0x00, /* 00000000 */ + 0x60, /* 01100000 */ + 0xe0, /* 11100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x66, /* 01100110 */ + 0xce, /* 11001110 */ + 0x9a, /* 10011010 */ + 0x3f, /* 00111111 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 173 0xad '¡' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 174 0xae '«' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x36, /* 00110110 */ + 0x6c, /* 01101100 */ + 0xd8, /* 11011000 */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 175 0xaf '»' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xd8, /* 11011000 */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x6c, /* 01101100 */ + 0xd8, /* 11011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 176 0xb0 '░' */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + 0x11, /* 00010001 */ + 0x44, /* 01000100 */ + + /* 177 0xb1 '▒' */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + + /* 178 0xb2 '▓' */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + + /* 179 0xb3 '│' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 180 0xb4 '┤' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 181 0xb5 '╡' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 182 0xb6 '╢' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 183 0xb7 '╖' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 184 0xb8 '╕' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 185 0xb9 '╣' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 186 0xba '║' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 187 0xbb '╗' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 188 0xbc '╝' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 189 0xbd '╜' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 190 0xbe '╛' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 191 0xbf '┐' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 192 0xc0 '└' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 193 0xc1 '┴' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 194 0xc2 '┬' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 195 0xc3 '├' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 196 0xc4 '─' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 197 0xc5 '┼' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 198 0xc6 '╞' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 199 0xc7 '╟' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 200 0xc8 '╚' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 201 0xc9 '╔' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 202 0xca '╩' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 203 0xcb '╦' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 204 0xcc '╠' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 205 0xcd '═' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 206 0xce '╬' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 207 0xcf '╧' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 208 0xd0 '╨' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 209 0xd1 '╤' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 210 0xd2 '╥' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 211 0xd3 '╙' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 212 0xd4 '╘' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 213 0xd5 '╒' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 214 0xd6 '╓' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 215 0xd7 '╫' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 216 0xd8 '╪' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 217 0xd9 '┘' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 218 0xda '┌' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 219 0xdb '█' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 220 0xdc '▄' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 221 0xdd '▌' */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + + /* 222 0xde '▐' */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + + /* 223 0xdf '▀' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 224 0xe0 'α' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 225 0xe1 'ß' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 226 0xe2 'Γ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 227 0xe3 'π' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 228 0xe4 'Σ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 229 0xe5 'σ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 230 0xe6 'µ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 231 0xe7 'τ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 232 0xe8 'Φ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 233 0xe9 'Θ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 234 0xea 'Ω' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xee, /* 11101110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 235 0xeb 'δ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1e, /* 00011110 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x3e, /* 00111110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 236 0xec '∞' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 237 0xed 'φ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x03, /* 00000011 */ + 0x06, /* 00000110 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0xf3, /* 11110011 */ + 0x7e, /* 01111110 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 238 0xee 'ε' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1c, /* 00011100 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 239 0xef '∩' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 240 0xf0 '≡' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 241 0xf1 '±' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 242 0xf2 '≥' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 243 0xf3 '≤' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 244 0xf4 '⌠' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 245 0xf5 '⌡' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 246 0xf6 '÷' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 247 0xf7 '≈' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 248 0xf8 '°' */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 249 0xf9 '·' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 250 0xfa '•' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 251 0xfb '√' */ + 0x00, /* 00000000 */ + 0x0f, /* 00001111 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xec, /* 11101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x3c, /* 00111100 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 252 0xfc 'ⁿ' */ + 0x00, /* 00000000 */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 253 0xfd '²' */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x32, /* 00110010 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 254 0xfe '■' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 255 0xff ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + ]; +} + +impl Font for Font8x16 { + const HEIGHT: usize = 16; + const WIDTH: usize = 8; + + #[inline] + fn get(byte: u8, x: usize, y: usize) -> bool { + Self::DATA[byte as usize * 16 + y] & (1 << (7 - x)) != 0 + } +} diff --git a/kernel/src/arch/aarch64/driver/fonts/mod.rs b/kernel/src/arch/aarch64/driver/fonts/mod.rs new file mode 100644 index 0000000..277f477 --- /dev/null +++ b/kernel/src/arch/aarch64/driver/fonts/mod.rs @@ -0,0 +1,12 @@ +//! Console font + +mod font8x16; + +pub use self::font8x16::Font8x16; + +pub trait Font { + const HEIGHT: usize; + const WIDTH: usize; + + fn get(byte: u8, x: usize, y: usize) -> bool; +} diff --git a/kernel/src/arch/aarch64/driver/mod.rs b/kernel/src/arch/aarch64/driver/mod.rs index 78e3ba5..c7553ff 100644 --- a/kernel/src/arch/aarch64/driver/mod.rs +++ b/kernel/src/arch/aarch64/driver/mod.rs @@ -3,6 +3,10 @@ use super::board; use once::*; +pub use self::board::fb; +pub use self::board::serial; + +pub mod fonts; pub mod console; /// Initialize ARM64 common drivers diff --git a/kernel/src/arch/aarch64/io.rs b/kernel/src/arch/aarch64/io.rs index b9815d3..cfad9eb 100644 --- a/kernel/src/arch/aarch64/io.rs +++ b/kernel/src/arch/aarch64/io.rs @@ -1,6 +1,6 @@ //! Serial driver for aarch64. -use super::board::serial::*; +use super::driver::serial::*; use super::driver::console::CONSOLE; use core::fmt::{Arguments, Write}; From 9dda78d2e32077ead3c8077cafff0854a220d55c Mon Sep 17 00:00:00 2001 From: equation314 Date: Tue, 18 Dec 2018 22:53:20 +0800 Subject: [PATCH 09/30] aarch64/fb: improve the performance of ConsoleBuffer::new_line() --- kernel/src/arch/aarch64/board/raspi3/fb.rs | 41 ++++++++++++++++++---- kernel/src/arch/aarch64/driver/console.rs | 21 +++++++---- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index 5f9ba64..869b7eb 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -176,15 +176,44 @@ impl Framebuffer { } } - /// Clean screen - pub fn clear(&mut self) { - let mut start = self.base_addr(); - let end = start + self.fb_info.screen_size as usize; + /// Copy buffer `[src_off .. src_off + size]` to `[dst_off .. dst_off + size]`. + /// `dst_off`, `src_off` and `size` must be aligned with `usize`. + pub fn copy(&mut self, dst_off: usize, src_off: usize, size: usize) { + const USIZE: usize = core::mem::size_of::(); + let mut dst = self.base_addr() + dst_off; + let mut src = self.base_addr() + src_off; + let src_end = src + size; + while src < src_end { + unsafe { *(dst as *mut usize) = *(src as *mut usize) } + dst += USIZE; + src += USIZE; + } + } + + /// Fill buffer `[offset .. offset + size]` with `pixel`. + /// `offset` and `size` must be aligned with `usize`. + pub fn fill(&mut self, offset: usize, size: usize, pixel: u32) { + const USIZE: usize = core::mem::size_of::(); + let mut value: usize = 0; + let repeat = USIZE * 8 / self.fb_info.depth as usize; + let mask = ((1u64 << self.fb_info.depth) - 1) as usize; + for i in 0..repeat { + value <<= self.fb_info.depth; + value += pixel as usize & mask; + } + + let mut start = self.base_addr() + offset; + let end = start + size; while start < end { - unsafe { *(start as *mut usize) = 0 } - start += core::mem::size_of::(); + unsafe { *(start as *mut usize) = value } + start += USIZE; } } + + /// Fill the entire buffer with `0`. + pub fn clear(&mut self) { + self.fill(0, self.fb_info.screen_size as usize, 0); + } } lazy_static! { diff --git a/kernel/src/arch/aarch64/driver/console.rs b/kernel/src/arch/aarch64/driver/console.rs index 209b45e..4822e41 100644 --- a/kernel/src/arch/aarch64/driver/console.rs +++ b/kernel/src/arch/aarch64/driver/console.rs @@ -9,10 +9,10 @@ use lazy_static::lazy_static; use log::*; use spin::Mutex; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq)] struct Color(u8); -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq)] #[repr(C)] pub struct ConsoleChar { ascii_char: u8, @@ -68,16 +68,23 @@ impl ConsoleBuffer { self.write(row, col, ConsoleChar::default()); } - /// Insert one blank line at the bottom and remove the top line. - /// TODO: improve performance - fn new_line(&mut self) { + /// Insert one blank line at the bottom, and scroll up one line. + /// XXX: read framebuffer is toooo slow, do not use `fb.copy()`. + pub fn new_line(&mut self) { for i in 1..self.num_row { for j in 0..self.num_col { - self.write(i - 1, j, self.buf[i][j]); + if self.buf[i - 1][j] != self.buf[i][j] { + self.write(i - 1, j, self.buf[i][j]); + } } } for j in 0..self.num_col { - self.write(self.num_row - 1, j, ConsoleChar::default()); + self.buf[self.num_row - 1][j] = ConsoleChar::default(); + } + + if let Some(fb) = FRAME_BUFFER.lock().as_mut() { + let rowbytes = F::HEIGHT * fb.fb_info.pitch as usize; + fb.fill(rowbytes * (self.num_row - 1), rowbytes, 0); } } From 6c717905d7b2352ba58feff33a47f995a4f4580a Mon Sep 17 00:00:00 2001 From: equation314 Date: Wed, 19 Dec 2018 14:49:15 +0800 Subject: [PATCH 10/30] aarch64/fb: add foreground & background color --- kernel/src/arch/aarch64/board/raspi3/fb.rs | 43 +++++---- .../src/arch/aarch64/driver/console/color.rs | 90 +++++++++++++++++++ .../driver/{ => console}/fonts/font8x16.rs | 0 .../aarch64/driver/{ => console}/fonts/mod.rs | 0 .../driver/{console.rs => console/mod.rs} | 56 +++++++++--- kernel/src/arch/aarch64/driver/mod.rs | 2 - kernel/src/arch/aarch64/io.rs | 2 +- 7 files changed, 156 insertions(+), 37 deletions(-) create mode 100644 kernel/src/arch/aarch64/driver/console/color.rs rename kernel/src/arch/aarch64/driver/{ => console}/fonts/font8x16.rs (100%) rename kernel/src/arch/aarch64/driver/{ => console}/fonts/mod.rs (100%) rename kernel/src/arch/aarch64/driver/{console.rs => console/mod.rs} (77%) diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index 869b7eb..8c4ab36 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -39,12 +39,11 @@ pub struct FramebufferInfo { #[repr(u32)] #[derive(Debug, Clone, Copy)] -#[allow(non_camel_case_types)] -pub enum ColorFormat { - BGR565 = 16, - RGBA8888 = 32, +pub enum ColorDepth { + ColorDepth16 = 16, + ColorDepth32 = 32, } -use self::ColorFormat::*; +use self::ColorDepth::*; #[repr(C)] union ColorBuffer { @@ -54,16 +53,16 @@ union ColorBuffer { } impl ColorBuffer { - fn new(color_format: ColorFormat, bus_addr: u32, size: u32) -> ColorBuffer { + fn new(color_depth: ColorDepth, bus_addr: u32, size: u32) -> ColorBuffer { unsafe { - match color_format { - BGR565 => ColorBuffer { + match color_depth { + ColorDepth16 => ColorBuffer { buf16: core::slice::from_raw_parts_mut( bus_addr as *mut u16, (size / 2) as usize, ), }, - RGBA8888 => ColorBuffer { + ColorDepth32 => ColorBuffer { buf32: core::slice::from_raw_parts_mut( bus_addr as *mut u32, (size / 4) as usize, @@ -97,7 +96,7 @@ impl ColorBuffer { /// Frambuffer structure pub struct Framebuffer { pub fb_info: FramebufferInfo, - pub color_format: ColorFormat, + pub color_depth: ColorDepth, buf: ColorBuffer, } @@ -105,7 +104,7 @@ impl fmt::Debug for Framebuffer { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mut f = f.debug_struct("Framebuffer"); f.field("fb_info", &self.fb_info); - f.field("color_format", &self.color_format); + f.field("color_depth", &self.color_depth); f.field("base_addr", unsafe { &self.buf.base_addr }); f.finish() } @@ -127,9 +126,9 @@ impl Framebuffer { }; let info = mailbox::framebuffer_alloc(width, height, depth)?; - let color_format = match info.depth { - 16 => BGR565, - 32 => RGBA8888, + let color_depth = match info.depth { + 16 => ColorDepth16, + 32 => ColorDepth32, _ => Err(format!("unsupported color depth {}", info.depth))?, }; @@ -147,8 +146,8 @@ impl Framebuffer { let paddr = info.bus_addr & !0xC0000000; let vaddr = memory::ioremap(paddr as usize, info.screen_size as usize, "fb") as u32; Ok(Framebuffer { - buf: ColorBuffer::new(color_format, vaddr, info.screen_size), - color_format, + buf: ColorBuffer::new(color_depth, vaddr, info.screen_size), + color_depth, fb_info: info, }) } @@ -161,18 +160,18 @@ impl Framebuffer { /// Read pixel at `(x, y)`. #[inline] pub fn read(&self, x: u32, y: u32) -> u32 { - match self.color_format { - BGR565 => self.buf.read16(y * self.fb_info.xres + x) as u32, - RGBA8888 => self.buf.read32(y * self.fb_info.xres + x), + match self.color_depth { + ColorDepth16 => self.buf.read16(y * self.fb_info.xres + x) as u32, + ColorDepth32 => self.buf.read32(y * self.fb_info.xres + x), } } /// Write pixel at `(x, y)`. #[inline] pub fn write(&mut self, x: u32, y: u32, pixel: u32) { - match self.color_format { - BGR565 => self.buf.write16(y * self.fb_info.xres + x, pixel as u16), - RGBA8888 => self.buf.write32(y * self.fb_info.xres + x, pixel), + match self.color_depth { + ColorDepth16 => self.buf.write16(y * self.fb_info.xres + x, pixel as u16), + ColorDepth32 => self.buf.write32(y * self.fb_info.xres + x, pixel), } } diff --git a/kernel/src/arch/aarch64/driver/console/color.rs b/kernel/src/arch/aarch64/driver/console/color.rs new file mode 100644 index 0000000..b5cdfe4 --- /dev/null +++ b/kernel/src/arch/aarch64/driver/console/color.rs @@ -0,0 +1,90 @@ +//! Frambuffer color + +pub trait FramebufferColor { + /// pack as 32-bit integer + fn pack16(&self) -> u16; + + /// pack as 32-bit integer + fn pack32(&self) -> u32; +} + +#[repr(C)] +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct RgbColor(u8, u8, u8); + +#[repr(u8)] +#[allow(dead_code)] +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum ConsoleColor { + Black = 0, + Red = 1, + Green = 2, + Yellow = 3, + Blue = 4, + Magenta = 5, + Cyan = 6, + White = 7, + BrightBlack = 60, + BrightRed = 61, + BrightGreen = 62, + BrightYellow = 63, + BrightBlue = 64, + BrightMagenta = 65, + BrightCyan = 66, + BrightWhite = 67, +} +use self::ConsoleColor::*; + +impl From for RgbColor { + /// Convert `ConsoleColor` to `RgbColor`. + /// use `CMD` color scheme. + /// (ref: https://en.wikipedia.org/wiki/ANSI_escape_code) + fn from(color: ConsoleColor) -> Self { + match color { + Black => RgbColor(0, 0, 0), + Red => RgbColor(128, 0, 0), + Green => RgbColor(0, 128, 8), + Yellow => RgbColor(128, 128, 0), + Blue => RgbColor(0, 0, 128), + Magenta => RgbColor(128, 0, 128), + Cyan => RgbColor(0, 128, 128), + White => RgbColor(192, 192, 192), + BrightBlack => RgbColor(128, 128, 128), + BrightRed => RgbColor(255, 0, 0), + BrightGreen => RgbColor(0, 255, 0), + BrightYellow => RgbColor(255, 255, 0), + BrightBlue => RgbColor(0, 0, 255), + BrightMagenta => RgbColor(255, 0, 255), + BrightCyan => RgbColor(0, 255, 255), + BrightWhite => RgbColor(255, 255, 255), + } + } +} + +impl FramebufferColor for RgbColor { + #[inline] + fn pack16(&self) -> u16 { + // BGR565 + ((self.0 as u16 & 0xF8) << 8) | ((self.1 as u16 & 0xFC) << 3) | (self.2 as u16 >> 3) + } + + #[inline] + fn pack32(&self) -> u32 { + // BGRA8888 + // FIXME: qemu and low version RPi use RGBA order for 24/32-bit color depth, + // but RPi3 B+ uses BGRA order for 24/32-bit color depth. + ((self.0 as u32) << 16) | ((self.1 as u32) << 8) | (self.2 as u32) + } +} + +impl FramebufferColor for ConsoleColor { + #[inline] + fn pack16(&self) -> u16 { + RgbColor::from(*self).pack16() + } + + #[inline] + fn pack32(&self) -> u32 { + RgbColor::from(*self).pack32() + } +} diff --git a/kernel/src/arch/aarch64/driver/fonts/font8x16.rs b/kernel/src/arch/aarch64/driver/console/fonts/font8x16.rs similarity index 100% rename from kernel/src/arch/aarch64/driver/fonts/font8x16.rs rename to kernel/src/arch/aarch64/driver/console/fonts/font8x16.rs diff --git a/kernel/src/arch/aarch64/driver/fonts/mod.rs b/kernel/src/arch/aarch64/driver/console/fonts/mod.rs similarity index 100% rename from kernel/src/arch/aarch64/driver/fonts/mod.rs rename to kernel/src/arch/aarch64/driver/console/fonts/mod.rs diff --git a/kernel/src/arch/aarch64/driver/console.rs b/kernel/src/arch/aarch64/driver/console/mod.rs similarity index 77% rename from kernel/src/arch/aarch64/driver/console.rs rename to kernel/src/arch/aarch64/driver/console/mod.rs index 4822e41..89d9135 100644 --- a/kernel/src/arch/aarch64/driver/console.rs +++ b/kernel/src/arch/aarch64/driver/console/mod.rs @@ -1,7 +1,12 @@ //! Framebuffer console display driver for ARM64 -use super::fb::{FramebufferInfo, FRAME_BUFFER}; -use super::fonts::{Font, Font8x16}; +mod color; +mod fonts; + +use self::color::{ConsoleColor, ConsoleColor::*, FramebufferColor}; +use self::fonts::{Font, Font8x16}; + +use super::fb::{ColorDepth::*, FramebufferInfo, FRAME_BUFFER}; use alloc::vec::Vec; use core::fmt; use core::marker::PhantomData; @@ -9,21 +14,28 @@ use lazy_static::lazy_static; use log::*; use spin::Mutex; +#[repr(C)] #[derive(Debug, Clone, Copy, PartialEq)] -struct Color(u8); +struct ColorPair { + foreground: C, + background: C, +} -#[derive(Debug, Clone, Copy, PartialEq)] #[repr(C)] +#[derive(Debug, Clone, Copy, PartialEq)] pub struct ConsoleChar { ascii_char: u8, - color: Color, + color: ColorPair, } impl Default for ConsoleChar { fn default() -> Self { ConsoleChar { ascii_char: b' ', - color: Color(0), + color: ColorPair { + foreground: Black, + background: Black, + }, } } } @@ -47,16 +59,29 @@ impl ConsoleBuffer { } /// Write one character at `(row, col)`. - /// TODO: color fn write(&mut self, row: usize, col: usize, ch: ConsoleChar) { self.buf[row][col] = ch; let off_x = col * F::WIDTH; let off_y = row * F::HEIGHT; if let Some(fb) = FRAME_BUFFER.lock().as_mut() { + let (foreground, background) = match fb.color_depth { + ColorDepth16 => ( + ch.color.foreground.pack16() as u32, + ch.color.background.pack16() as u32, + ), + ColorDepth32 => ( + ch.color.foreground.pack32(), + ch.color.background.pack32(), + ), + }; for y in 0..F::HEIGHT { for x in 0..F::WIDTH { - let pixel = if ch.color.0 != 0 && F::get(ch.ascii_char, x, y) { !0 } else { 0 }; + let pixel = if F::get(ch.ascii_char, x, y) { + foreground + } else { + background + }; fb.write((off_x + x) as u32, (off_y + y) as u32, pixel); } } @@ -70,7 +95,7 @@ impl ConsoleBuffer { /// Insert one blank line at the bottom, and scroll up one line. /// XXX: read framebuffer is toooo slow, do not use `fb.copy()`. - pub fn new_line(&mut self) { + fn new_line(&mut self) { for i in 1..self.num_row { for j in 0..self.num_col { if self.buf[i - 1][j] != self.buf[i][j] { @@ -104,7 +129,7 @@ impl ConsoleBuffer { /// Console structure pub struct Console { /// current color - color: Color, + color: ColorPair, /// cursor row row: usize, /// cursor column @@ -118,7 +143,10 @@ impl Console { let num_row = fb.yres as usize / F::HEIGHT; let num_col = fb.xres as usize / F::WIDTH; Console { - color: Color(1), + color: ColorPair { + foreground: BrightWhite, + background: Black, + }, row: 0, col: 0, buf: ConsoleBuffer::new(num_row, num_col), @@ -134,6 +162,7 @@ impl Console { } } + // TODO: pasre color with ANSI escape sequences fn write_byte(&mut self, byte: u8) { match byte { b'\x7f' => { @@ -164,7 +193,10 @@ impl Console { } pub fn clear(&mut self) { - self.color = Color(1); + self.color = ColorPair { + foreground: BrightWhite, + background: Black, + }; self.row = 0; self.col = 0; self.buf.clear(); diff --git a/kernel/src/arch/aarch64/driver/mod.rs b/kernel/src/arch/aarch64/driver/mod.rs index c7553ff..9c29662 100644 --- a/kernel/src/arch/aarch64/driver/mod.rs +++ b/kernel/src/arch/aarch64/driver/mod.rs @@ -5,8 +5,6 @@ use once::*; pub use self::board::fb; pub use self::board::serial; - -pub mod fonts; pub mod console; /// Initialize ARM64 common drivers diff --git a/kernel/src/arch/aarch64/io.rs b/kernel/src/arch/aarch64/io.rs index cfad9eb..d452fcb 100644 --- a/kernel/src/arch/aarch64/io.rs +++ b/kernel/src/arch/aarch64/io.rs @@ -1,4 +1,4 @@ -//! Serial driver for aarch64. +//! Input/output for aarch64. use super::driver::serial::*; use super::driver::console::CONSOLE; From 09c2b6e7b7906d67a5f98d49fa4c96c594931ddd Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 20 Dec 2018 15:45:17 +0800 Subject: [PATCH 11/30] aarch64/fb: add ANSI escape sequences parser --- .../aarch64/driver/console/escape_parser.rs | 152 ++++++++++++++++++ .../aarch64/driver/console/fonts/font8x16.rs | 3 + .../arch/aarch64/driver/console/fonts/mod.rs | 4 + kernel/src/arch/aarch64/driver/console/mod.rs | 89 +++++----- 4 files changed, 207 insertions(+), 41 deletions(-) create mode 100644 kernel/src/arch/aarch64/driver/console/escape_parser.rs diff --git a/kernel/src/arch/aarch64/driver/console/escape_parser.rs b/kernel/src/arch/aarch64/driver/console/escape_parser.rs new file mode 100644 index 0000000..5c308f2 --- /dev/null +++ b/kernel/src/arch/aarch64/driver/console/escape_parser.rs @@ -0,0 +1,152 @@ +//! ANSI escape sequences parser +//! (ref: https://en.wikipedia.org/wiki/ANSI_escape_code) + +use super::color::{ConsoleColor, ConsoleColor::*, FramebufferColor}; +use alloc::vec::Vec; + +#[repr(C)] +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct CharacterAttribute { + /// foreground color + pub foreground: C, + /// background color + pub background: C, + /// show underline + pub underline: bool, + /// swap foreground and background colors + pub reverse: bool, + /// text marked cfor deletion + pub strikethrough: bool, +} + +impl Default for CharacterAttribute { + fn default() -> Self { + CharacterAttribute { + foreground: White, + background: Black, + underline: false, + reverse: false, + strikethrough: false, + } + } +} + +#[derive(Debug, PartialEq)] +enum ParseStatus { + /// The last character is `ESC`, start parsing the escape sequence. + BeginEscapeSequence, + + /// The character followed by `ESC` is `[`, start parsing the CSI (Control + /// Sequence Introducer) sequence. The CSI sequence format is like + /// `ESC [ n1 ; n2 ; ... m`. + ParsingCSI, + + /// Display text Normally. + Text, +} + +#[derive(Debug)] +pub struct EscapeParser { + status: ParseStatus, + char_attr: CharacterAttribute, + current_param: Option, + params: Vec, +} + +impl EscapeParser { + pub fn new() -> EscapeParser { + EscapeParser { + status: ParseStatus::Text, + char_attr: CharacterAttribute::default(), + params: Vec::new(), + current_param: None, + } + } + + pub fn is_parsing(&self) -> bool { + self.status != ParseStatus::Text + } + + /// See an `ECS` character, start parsing escape sequence. + pub fn start_parse(&mut self) { + assert!(self.status == ParseStatus::Text); + self.status = ParseStatus::BeginEscapeSequence; + self.current_param = None; + } + + //// Parse SGR (Select Graphic Rendition) parameters. + fn parse_sgr_params(&mut self) { + use core::mem::transmute; + for param in &self.params { + match param { + 0 => self.char_attr = CharacterAttribute::default(), + 4 => self.char_attr.underline = true, + 7 => self.char_attr.reverse = true, + 9 => self.char_attr.strikethrough = true, + 24 => self.char_attr.underline = false, + 27 => self.char_attr.reverse = false, + 29 => self.char_attr.strikethrough = false, + 30...37 | 90...97 => self.char_attr.foreground = unsafe { transmute(param - 30) }, + 40...47 | 100...107 => self.char_attr.background = unsafe { transmute(param - 40) }, + _ => { /* unimplemented!() */ } + } + } + } + + /// See a character during parsing. + pub fn parse(&mut self, byte: u8) -> bool { + assert!(self.status != ParseStatus::Text); + match self.status { + ParseStatus::BeginEscapeSequence => match byte { + b'[' => { + self.status = ParseStatus::ParsingCSI; + self.current_param = Some(0); + self.params.clear(); + return true; + } + _ => { /* unimplemented!() */ } + }, + ParseStatus::ParsingCSI => match byte { + b'0'...b'9' => { + let digit = (byte - b'0') as u32; + if let Some(param) = self.current_param { + let res: u32 = param as u32 * 10 + digit; + self.current_param = if res <= 0xFF { Some(res as u8) } else { None }; + } + return true; + } + b';' => { + if let Some(param) = self.current_param { + self.params.push(param); + } + self.current_param = Some(0); + return true; + } + // @A–Z[\]^_`a–z{|}~ + 0x40...0x7E => { + if let Some(param) = self.current_param { + self.params.push(param); + } + match byte { + b'm' => self.parse_sgr_params(), + _ => { /* unimplemented!() */ } + } + self.status = ParseStatus::Text; + self.current_param = None; + self.params.clear(); + return true; + } + _ => {} + }, + ParseStatus::Text => {} + } + self.status = ParseStatus::Text; + self.current_param = None; + self.params.clear(); + false + } + + pub fn char_attribute(&self) -> CharacterAttribute { + self.char_attr + } +} diff --git a/kernel/src/arch/aarch64/driver/console/fonts/font8x16.rs b/kernel/src/arch/aarch64/driver/console/fonts/font8x16.rs index d62518c..89ffe67 100644 --- a/kernel/src/arch/aarch64/driver/console/fonts/font8x16.rs +++ b/kernel/src/arch/aarch64/driver/console/fonts/font8x16.rs @@ -4622,6 +4622,9 @@ impl Font for Font8x16 { const HEIGHT: usize = 16; const WIDTH: usize = 8; + const UNDERLINE: usize = 13; + const STRIKETHROUGH: usize = 8; + #[inline] fn get(byte: u8, x: usize, y: usize) -> bool { Self::DATA[byte as usize * 16 + y] & (1 << (7 - x)) != 0 diff --git a/kernel/src/arch/aarch64/driver/console/fonts/mod.rs b/kernel/src/arch/aarch64/driver/console/fonts/mod.rs index 277f477..fde1f9a 100644 --- a/kernel/src/arch/aarch64/driver/console/fonts/mod.rs +++ b/kernel/src/arch/aarch64/driver/console/fonts/mod.rs @@ -8,5 +8,9 @@ pub trait Font { const HEIGHT: usize; const WIDTH: usize; + const UNDERLINE: usize; + const STRIKETHROUGH: usize; + + /// Whether the character `byte` is visible at `(x, y)`. fn get(byte: u8, x: usize, y: usize) -> bool; } diff --git a/kernel/src/arch/aarch64/driver/console/mod.rs b/kernel/src/arch/aarch64/driver/console/mod.rs index 89d9135..90fc38a 100644 --- a/kernel/src/arch/aarch64/driver/console/mod.rs +++ b/kernel/src/arch/aarch64/driver/console/mod.rs @@ -1,9 +1,11 @@ //! Framebuffer console display driver for ARM64 mod color; +mod escape_parser; mod fonts; -use self::color::{ConsoleColor, ConsoleColor::*, FramebufferColor}; +use self::color::FramebufferColor; +use self::escape_parser::{CharacterAttribute, EscapeParser}; use self::fonts::{Font, Font8x16}; use super::fb::{ColorDepth::*, FramebufferInfo, FRAME_BUFFER}; @@ -14,28 +16,18 @@ use lazy_static::lazy_static; use log::*; use spin::Mutex; -#[repr(C)] -#[derive(Debug, Clone, Copy, PartialEq)] -struct ColorPair { - foreground: C, - background: C, -} - #[repr(C)] #[derive(Debug, Clone, Copy, PartialEq)] pub struct ConsoleChar { ascii_char: u8, - color: ColorPair, + attr: CharacterAttribute, } impl Default for ConsoleChar { fn default() -> Self { ConsoleChar { - ascii_char: b' ', - color: ColorPair { - foreground: Black, - background: Black, - }, + ascii_char: 0, + attr: CharacterAttribute::default(), } } } @@ -60,24 +52,40 @@ impl ConsoleBuffer { /// Write one character at `(row, col)`. fn write(&mut self, row: usize, col: usize, ch: ConsoleChar) { + if self.buf[row][col] == ch { + return; + } self.buf[row][col] = ch; let off_x = col * F::WIDTH; let off_y = row * F::HEIGHT; if let Some(fb) = FRAME_BUFFER.lock().as_mut() { - let (foreground, background) = match fb.color_depth { + let (mut foreground, mut background) = match fb.color_depth { ColorDepth16 => ( - ch.color.foreground.pack16() as u32, - ch.color.background.pack16() as u32, + ch.attr.foreground.pack16() as u32, + ch.attr.background.pack16() as u32, ), ColorDepth32 => ( - ch.color.foreground.pack32(), - ch.color.background.pack32(), + ch.attr.foreground.pack32(), + ch.attr.background.pack32(), ), }; + if ch.attr.reverse { + core::mem::swap(&mut foreground, &mut background); + } + let underline_y = if ch.attr.underline { + F::UNDERLINE + } else { + F::HEIGHT + }; + let strikethrough_y = if ch.attr.strikethrough { + F::STRIKETHROUGH + } else { + F::HEIGHT + }; for y in 0..F::HEIGHT { for x in 0..F::WIDTH { - let pixel = if F::get(ch.ascii_char, x, y) { + let pixel = if y == underline_y || y == strikethrough_y || F::get(ch.ascii_char, x, y) { foreground } else { background @@ -98,18 +106,11 @@ impl ConsoleBuffer { fn new_line(&mut self) { for i in 1..self.num_row { for j in 0..self.num_col { - if self.buf[i - 1][j] != self.buf[i][j] { - self.write(i - 1, j, self.buf[i][j]); - } + self.write(i - 1, j, self.buf[i][j]); } } for j in 0..self.num_col { - self.buf[self.num_row - 1][j] = ConsoleChar::default(); - } - - if let Some(fb) = FRAME_BUFFER.lock().as_mut() { - let rowbytes = F::HEIGHT * fb.fb_info.pitch as usize; - fb.fill(rowbytes * (self.num_row - 1), rowbytes, 0); + self.write(self.num_row - 1, j, ConsoleChar::default()); } } @@ -128,12 +129,12 @@ impl ConsoleBuffer { /// Console structure pub struct Console { - /// current color - color: ColorPair, /// cursor row row: usize, /// cursor column col: usize, + /// escape sequence parser + parser: EscapeParser, /// character buffer buf: ConsoleBuffer, } @@ -143,17 +144,21 @@ impl Console { let num_row = fb.yres as usize / F::HEIGHT; let num_col = fb.xres as usize / F::WIDTH; Console { - color: ColorPair { - foreground: BrightWhite, - background: Black, - }, row: 0, col: 0, + parser: EscapeParser::new(), buf: ConsoleBuffer::new(num_row, num_col), } } fn new_line(&mut self) { + let attr_blank = ConsoleChar { + ascii_char: 0, + attr: self.parser.char_attribute(), + }; + for j in self.col..self.buf.num_col { + self.buf.write(self.row, j, attr_blank); + } self.col = 0; if self.row < self.buf.num_row - 1 { self.row += 1; @@ -162,8 +167,12 @@ impl Console { } } - // TODO: pasre color with ANSI escape sequences fn write_byte(&mut self, byte: u8) { + if self.parser.is_parsing() { + if self.parser.parse(byte) { + return; + } + } match byte { b'\x7f' => { if self.col > 0 { @@ -177,6 +186,7 @@ impl Console { } b'\n' => self.new_line(), b'\r' => self.col = 0, + b'\x1b' => self.parser.start_parse(), byte => { if self.col >= self.buf.num_col { self.new_line(); @@ -184,7 +194,7 @@ impl Console { let ch = ConsoleChar { ascii_char: byte, - color: self.color, + attr: self.parser.char_attribute(), }; self.buf.write(self.row, self.col, ch); self.col += 1; @@ -193,12 +203,9 @@ impl Console { } pub fn clear(&mut self) { - self.color = ColorPair { - foreground: BrightWhite, - background: Black, - }; self.row = 0; self.col = 0; + self.parser = EscapeParser::new(); self.buf.clear(); } } From b0915b102a0be1bc530a6daddeaf559e2e86075d Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 20 Dec 2018 17:01:56 +0800 Subject: [PATCH 12/30] aarch64/fb: add new rust user program `fantastic_text` --- user/src/bin/fantastic_text.rs | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 user/src/bin/fantastic_text.rs diff --git a/user/src/bin/fantastic_text.rs b/user/src/bin/fantastic_text.rs new file mode 100644 index 0000000..40deec9 --- /dev/null +++ b/user/src/bin/fantastic_text.rs @@ -0,0 +1,43 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate ucore_ulib; + +macro_rules! color_text { + ($text:expr, $color:expr) => {{ + format_args!("\x1b[{}m{}\x1b[0m", $color, $text) + }}; +} + +// IMPORTANT: Must define main() like this +#[no_mangle] +pub fn main() { + println!( + "{}{}{}{}{} {}{}{}{} {}{}{}{}{}{}", + color_text!("H", 31), + color_text!("e", 32), + color_text!("l", 33), + color_text!("l", 34), + color_text!("o", 35), + color_text!("R", 36), + color_text!("u", 37), + color_text!("s", 90), + color_text!("t", 91), + color_text!("u", 92), + color_text!("C", 93), + color_text!("o", 94), + color_text!("r", 95), + color_text!("e", 96), + color_text!("!", 97), + ); + + let text = "reguler \x1b[4munderline\x1b[24m \x1b[7mreverse\x1b[27m \x1b[9mstrikethrough\x1b[29m"; + println!("\x1b[47m{}\x1b[0m", color_text!(text, 30)); + for i in 31..38 { + println!("{}", color_text!(text, i)); + } + for i in 90..98 { + println!("{}", color_text!(text, i)); + } +} From a55f3b61e6eb08d111d0bc768f0c93dcc1ea29a6 Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 20 Dec 2018 17:34:24 +0800 Subject: [PATCH 13/30] add Makefile option `graphic` & cargo feature `nographic` --- kernel/Cargo.toml | 1 + kernel/Makefile | 52 +++++++++++++-------- kernel/src/arch/aarch64/board/raspi3/mod.rs | 1 + 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 6718500..f1040ee 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -12,6 +12,7 @@ no_mmu = [] # Kernel in M-mode (for riscv32) m_mode = ["no_mmu"] # (for aarch64 RaspberryPi3) +nographic = [] board_raspi3 = ["bcm2837"] raspi3_use_generic_timer = ["bcm2837/use_generic_timer"] diff --git a/kernel/Makefile b/kernel/Makefile index 7173184..a6cfb7a 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -1,22 +1,23 @@ # Commands: -# make build Build -# make run Build and run in QEMU -# make justrun Run the last build -# make doc Generate docs -# make asm Open the deassemble file of the last build -# make header Open 'objdump -h' of the last build -# make clean Clean +# make build Build +# make run Build and run in QEMU +# make justrun Run the last build +# make doc Generate docs +# make asm Open the deassemble file of the last build +# make header Open 'objdump -h' of the last build +# make clean Clean # # Options: -# arch = x86_64 | riscv32 | aarch64 -# d = int | in_asm | ... QEMU debug info -# mode = debug | release -# LOG = off | error | warn | info | debug | trace -# SFSIMG = SFS image path of user programs -# smp = 1 | 2 | ... SMP core number -# board = fpga Only available on riscv32, build without bbl, run on board -# | raspi3 Only available on aarch64, run on Raspberry Pi 3 Model B/B+ -# m_mode Only available on riscv32, build for M-Mode, without MMU +# arch = x86_64 | riscv32 | aarch64 +# d = int | in_asm | ... QEMU debug info +# mode = debug | release +# LOG = off | error | warn | info | debug | trace +# SFSIMG = SFS image path of user programs +# smp = 1 | 2 | ... SMP core number +# graphic = on | off enable/disable qemu graphical output +# board = fpga Only available on riscv32, build without bbl, run on board +# | raspi3 Only available on aarch64, run on Raspberry Pi 3 Model B/B+ +# m_mode Only available on riscv32, build for M-Mode, without MMU arch ?= riscv32 board ?= raspi3 @@ -24,7 +25,7 @@ mode ?= debug LOG ?= debug smp ?= 4 # NOTE: crate 'process' use this name 'm_mode' as an environment -# to set interrupt (MIE or SIE) +# to set interrupt (MIE or SIE) m_mode ?= target := $(arch)-blog_os @@ -40,10 +41,15 @@ user_obj := build/$(arch)/user.o export ARCH = $(arch) export SFSIMG = $(user_dir)/build/user-$(arch).img +ifeq ($(arch), aarch64) +graphic ?= on +else +graphic ?= off +endif + ### qemu options ### qemu_opts := \ - -smp cores=$(smp) \ - -nographic + -smp cores=$(smp) ifeq ($(arch), x86_64) qemu_opts += \ @@ -67,6 +73,10 @@ qemu_opts += \ -kernel $(bin) endif +ifneq ($(graphic), on) +qemu_opts += -nographic +endif + ifdef d qemu_opts += -d $(d) endif @@ -78,6 +88,10 @@ features += no_bbl endif endif +ifneq ($(graphic), on) +features += nographic +endif + ifeq ($(board), raspi3) # qemu only has generic timer # TODO: configure system/generic timer automatically diff --git a/kernel/src/arch/aarch64/board/raspi3/mod.rs b/kernel/src/arch/aarch64/board/raspi3/mod.rs index 2bbee12..6954e99 100644 --- a/kernel/src/arch/aarch64/board/raspi3/mod.rs +++ b/kernel/src/arch/aarch64/board/raspi3/mod.rs @@ -22,6 +22,7 @@ pub fn init_serial_early() { /// Initialize raspi3 drivers pub fn init_driver() { + #[cfg(not(feature = "nographic"))] fb::init(); timer::init(); } From f8b48e8b8524bd7f0debac45ebdb0e64836331e9 Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 20 Dec 2018 17:36:29 +0800 Subject: [PATCH 14/30] update display configures in raspi-firmware/config.txt --- tools/raspi-firmware/config.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/raspi-firmware/config.txt b/tools/raspi-firmware/config.txt index 89ebfb4..c952e46 100755 --- a/tools/raspi-firmware/config.txt +++ b/tools/raspi-firmware/config.txt @@ -25,8 +25,8 @@ #hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) -#hdmi_group=1 -#hdmi_mode=1 +hdmi_group=2 # DMT +hdmi_mode=85 # 1280x720 # uncomment to force a HDMI mode rather than DVI. This can make audio work in # DMT (computer monitor) modes From bd2fbc86cfa3eeecab890fbb515f91355a8fc56c Mon Sep 17 00:00:00 2001 From: equation314 Date: Wed, 26 Dec 2018 23:56:00 +0800 Subject: [PATCH 15/30] aarch64/doc: add overview --- docs/2_OSLab/g2/boot.md | 1 + docs/2_OSLab/g2/context.md | 1 + docs/2_OSLab/g2/drivers.md | 1 + docs/2_OSLab/g2/environment.md | 1 + docs/2_OSLab/g2/memory.md | 1 + docs/2_OSLab/g2/overview.md | 31 +++++++++++++++++++++++++++++++ docs/2_OSLab/g2/peripherals.md | 1 + docs/2_OSLab/g2/raspi3.md | 17 +++++++++++++++++ 8 files changed, 54 insertions(+) create mode 100644 docs/2_OSLab/g2/boot.md create mode 100644 docs/2_OSLab/g2/context.md create mode 100644 docs/2_OSLab/g2/drivers.md create mode 100644 docs/2_OSLab/g2/environment.md create mode 100644 docs/2_OSLab/g2/memory.md create mode 100644 docs/2_OSLab/g2/overview.md create mode 100644 docs/2_OSLab/g2/peripherals.md create mode 100644 docs/2_OSLab/g2/raspi3.md diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md new file mode 100644 index 0000000..2c888d4 --- /dev/null +++ b/docs/2_OSLab/g2/boot.md @@ -0,0 +1 @@ +# 启动 diff --git a/docs/2_OSLab/g2/context.md b/docs/2_OSLab/g2/context.md new file mode 100644 index 0000000..973bce1 --- /dev/null +++ b/docs/2_OSLab/g2/context.md @@ -0,0 +1 @@ +# 上下文切换 diff --git a/docs/2_OSLab/g2/drivers.md b/docs/2_OSLab/g2/drivers.md new file mode 100644 index 0000000..dd94d13 --- /dev/null +++ b/docs/2_OSLab/g2/drivers.md @@ -0,0 +1 @@ +# 驱动 diff --git a/docs/2_OSLab/g2/environment.md b/docs/2_OSLab/g2/environment.md new file mode 100644 index 0000000..58c35fd --- /dev/null +++ b/docs/2_OSLab/g2/environment.md @@ -0,0 +1 @@ +# 环境配置 diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md new file mode 100644 index 0000000..cbfa311 --- /dev/null +++ b/docs/2_OSLab/g2/memory.md @@ -0,0 +1 @@ +# 内存管理 diff --git a/docs/2_OSLab/g2/overview.md b/docs/2_OSLab/g2/overview.md new file mode 100644 index 0000000..2313e8b --- /dev/null +++ b/docs/2_OSLab/g2/overview.md @@ -0,0 +1,31 @@ +# 概述 + +## Raspberry Pi 简介 + +本实验的目标是将 Rust OS 移植到 Raspberry Pi 3 Model B+ 上。Raspberry Pi 3B+ 的主要硬件参数如下: + +| Raspberry Pi 3B+ | | +|-------|---------| +| 指令集 | ARMv8-A 64 bit | +| 片上系统(SoC) | Broadcom BCM2837 | +| 处理器(CPU) | 4 x Cortex-A53 1.4Ghz +| 图形处理器(GPU) | Broadcom VideoCore IV | +| 内存 | 1GB(与 GPU 共享) | + +## 官方文档 + +* [ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile](https://static.docs.arm.com/ddi0487/da/DDI0487D_a_armv8_arm.pdf):Aarch64 的完整文档,有 7000 多页,最为详细。 +* [ARM Cortex-A Series Programmer’s Guide for ARMv8-A](http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf):可认为是上一文档的精简版,仅有不到 300 页。 +* [BCM2837 ARM Peripherals](https://web.stanford.edu/class/cs140e/docs/BCM2837-ARM-Peripherals.pdf):Raspberry Pi SoC BCM283x 系列的外围设备文档,包含对 GPIO、中断控制器、mini UART、System Timer 等外围设备的访问。 +* [BCM2836 ARM-local peripherals](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2836/QA7_rev3.4.pdf):仅用于如何使用 ARM Generic Timer。 +* [Raspberry Pi firmware](https://github.com/raspberrypi/firmware):Raspberry Pi 二进制固件,部分开源,其中最有价值的是 [mailbox](https://github.com/raspberrypi/firmware/wiki) 的文档。 + +## 其他参考 + +* [Stanford CS140e](http://cs140e.stanford.edu/):Stanford CS140e 课程,一个用 Rust 语言编写的 Raspberry Pi 3 操作系统,包含串口输入输出、文件系统、进程管理等功能,但没有虚拟内存管理。 + +* [Learning operating system development using Linux kernel and Raspberry Pi](https://github.com/s-matyukevich/raspberry-pi-os):一个用 C 语言编写的 Raspberry Pi 3 操作系统,仿照 Linux,特点是文档非常详细。其中 Kernel Initialization、Interrupt handling、Virtual memory management 部分很有参考价值。 + +* [Bare Metal Rust Programming on Raspberry Pi 3](https://github.com/bztsrc/raspi3-tutorial):另一个用 C 语言编写的 Raspberry Pi 3 操作系统。 + +* [Bare Metal Rust Programming on Raspberry Pi 3 (Rust)](https://github.com/rust-embedded/rust-raspi3-tutorial):上一个项目的 Rust 版本,主要参考的是虚拟内存部分。 diff --git a/docs/2_OSLab/g2/peripherals.md b/docs/2_OSLab/g2/peripherals.md new file mode 100644 index 0000000..83ddc31 --- /dev/null +++ b/docs/2_OSLab/g2/peripherals.md @@ -0,0 +1 @@ +# 外围设备 diff --git a/docs/2_OSLab/g2/raspi3.md b/docs/2_OSLab/g2/raspi3.md new file mode 100644 index 0000000..c9fb8ee --- /dev/null +++ b/docs/2_OSLab/g2/raspi3.md @@ -0,0 +1,17 @@ +# Rust OS 在 Raspberry Pi 3 上的移植 + +计54 贾越凯 2015011335 + +计54 寇明阳 2015011318 + +计55 孔彦 2015011349 + +## 目录 + +* [概述](overview.md) +* [环境配置](environment.md) +* [启动](boot.md) +* [外围设备](peripherals.md) +* [内存管理](memory.md) +* [上下文切换](context.md) +* [驱动](drivers.md) From b5e61fa0b4b6f6771e038c10d043b895cc26246d Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 27 Dec 2018 14:36:30 +0800 Subject: [PATCH 16/30] aarch64/doc: add environment --- docs/2_OSLab/g2/environment.md | 99 ++++++++++++++++++++++++++++ docs/2_OSLab/g2/img/usb-ttl-pi3.png | Bin 0 -> 30373 bytes docs/2_OSLab/g2/overview.md | 4 +- 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 docs/2_OSLab/g2/img/usb-ttl-pi3.png diff --git a/docs/2_OSLab/g2/environment.md b/docs/2_OSLab/g2/environment.md index 58c35fd..17e972b 100644 --- a/docs/2_OSLab/g2/environment.md +++ b/docs/2_OSLab/g2/environment.md @@ -1 +1,100 @@ # 环境配置 + +## 软件需求 + +* [Rust](https://www.rust-lang.org/) nightly 编译器 + + ``` + curl https://sh.rustup.rs -sSf | sh + rustup component add rust-src + ``` + +* Cargo tools: [cargo-xbuild](https://github.com/rust-osdev/cargo-xbuild) + + ``` + cargo install cargo-xbuild + ``` + +* [QEMU](https://www.qemu.org/) >= 3.0.0 +* [AArch64 GNU toolchain](https://web.stanford.edu/class/cs140e/assignments/0-blinky/) + + + macOS: 从 [homebrew](https://brew.sh/) 安装: + + ``` + brew tap SergioBenitez/osxct + brew install aarch64-none-elf + ``` + + + Linux: 下载 [aarch64-none-elf-linux-x64.tar.gz](https://web.stanford.edu/class/cs140e/files/aarch64-none-elf-linux-x64.tar.gz) 并解压到任意目录。 + +## 硬件需求 + +* 1 块 Raspberry Pi 3 Model A+/B/B+ +* 1 块 4GB 及以上的 microSD 卡与读卡器 +* 1 个 CP2102 USB 转 TTL 模块 +* 若干杜邦线 + +## 在模拟器中运行 + +* 构建并运行 + + ``` + git clone https://github.com/wangrunji0408/RustOS.git --recursive + cd RustOS/kernel + rustup override set nightly + make run arch=aarch64 [board=raspi3] + ``` + +* 使用 GDB 调试 + + ``` + make debug + ``` + +* 反汇编 + + ``` + make asm + ``` + +* 更多 Makefile 选项 + + * `mode=debug|release`:指定 `debug` 还是 `release` 模式。默认 `debug`。 + * `graphic=on|off`:是否启用图形输出。默认 `on`。 + * `smp=1|2|3|4|...`:指定 SMP 的核数。目前 aarch64 的 SMP 未实现,该选项无效。 + * `raspi3_timer=system/generic`:使用 Raspberry Pi 的 System Timer 还是 Generic Timer。默认 `generic`,且在 QEMU 中只能使用 Generic Timer。 + * `prefix=`:指定 aarch64 工具链前缀。默认 `aarch64-none-elf-`,某些 Linux 中的工具链前缀为 `aarch64-linux-gnu-`。 + * `LOG=off|error|warn|info|debug|trace`:指定输出日志的级别。默认 `warn`。 + * `SFSIMG=`:用户程序 SFS 镜像路径。默认 `../user/img/ucore-aarch64.img`,即用 C 语言编写的直接从原 uCore 中移植过来的用户程序。如欲使用 Rust 编写的用户程序可将其设为 `../user/build/user-aarch64.img`。 + +## 在真机上运行 + +1. 往 SD 卡中写入 [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) 原版系统镜像:直接看 。然后需要将原版的 `config.txt` 替换为 `tools/raspi-firmware/config.txt`。 + +2. 写入 RustOS 内核镜像: + + ``` + make install + ``` + +3. 连接 Raspberry Pi、CP2102 模块与 PC: + + ![](img/usb-ttl-pi3.png) + + 注意最好使用 Raspberry Pi 自带的电源适配器供电,而不要用 CP2102 模块的 +5V 供电(即不用连上图中的红线)。 + +4. 使用 [screen](https://www.gnu.org/software/screen/manual/screen.html#Overview) 与串口进行通信: + + ``` + screen /dev/ 115200 + ``` + + 在 macOS 中 CP2102 模块的设备路径一般为 `/dev/tty.SLAB_USBtoUART`,在 Linux 中一般为 `/dev/ttyUSB0`。 + +5. 插入 SD 卡,上电,看终端的输出结果。如果连接了 Raspberry Pi 的 HDMI 接口与显示器,还能看到显示器中有输出。 + + +## 实用技巧 + +1. 从 QEMU 中退出:按 ` c`,再输入 `q`。 +2. 从 screen 中退出:按 ` k`,再输入 `y`。 diff --git a/docs/2_OSLab/g2/img/usb-ttl-pi3.png b/docs/2_OSLab/g2/img/usb-ttl-pi3.png new file mode 100644 index 0000000000000000000000000000000000000000..32660a2fdde241e513f14974ee8b01d7ce414a2b GIT binary patch literal 30373 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 {S3IcD#7QQW?0mZr0>6E{nerUawaJdEE z{WV-X9pMEoti$)zTb{qacu1%yq)jI;PngJbBy4;1*I$NN>-F6y#c;2PhSyvc);5a) zZg=Ai_`c7GEmmZcT<9SR$RR`1jcZ2le|?Rx>Ni4?et+-)o_@^c?qZt7!~xgeQiR#a z2t(Ibo~*py93?xm!lu?Me!pQD;yaqaOPE%H^~}_6x}qV;o324`D!`vIu*0kInD?3< z_tZTYZ{#Yfa6r0U*BFE~pwmMn55~HeoI|289`F2uYFqd)fJ$P0!VfWraKx$F4!UkinvAMnGYWSiLzv;0 zsfDzL8H8Gx;Qpdc!X4|bf68~^5`~ysP9+Wj?augUlROD2hAQkc@0G$gycbY zuMP-xiio^knLbisuFR>kEa~w6T-#q6RGnT5&MiQ9zRDK4OBt+0Pdt*KKcmuXc4=Uv z;)d(L!jqjJd1E7a=`vNj>X56!s-GBpq+HSK_uSU&e-CT6|3PO-p8I$o4GF##lbS=5 zeoi*Vb{oL^Ju{_T+^21iuan7n)*d?0fOjP@;>Y-nlegG-B@+Q}wy$oxaaSB>Pj43) zSf&x~MO8T)Wt^|*Ia0RiR=k?Cqdf-_EvXm1rl}(Y!c?@q_@jZ_?s&H>zB76%>~iIB z^n5n2Q?Tp!s$Ln-qvbo7sV!eCKmut#+gjbOxMZS^4#f!3^$F^RPP9lX>#Rg`KPyDr zSW8|g;|m`rxo3AN-FKAIehY@pD_jQs4#oOr>VwoKnHch&X-iMK+|{9hhLtbJYwc>r z$RPr9`t#7^;RhU}R$sh^Zyg-34J;7+fkX-Yk`bJM5=wk;AsQ37cB{e8`f6zH%GW#2 zC@2gOjIS*YZh2K>g%E)S1wXS)I-F_bI~)%XGF`8VN)@KYuV^JHq65+^_M%rbykm3T zPM%slv&yx+cTxMjWMyM~8f}gcsw%tTDkrCgFuuoE-9z$6x{wX4s{asOQd7<27K~4> z)Nnw`n2C8iy;IAzehH0mH7i(+1oU%|YD$%zQ45!iWp_S5xl+w3*}XkOK^!VJ*E1za z$V%*}Q<^)}c=KuB`A&avlwgB2C4#wgE({(0b;d5bZl=l+GcJyV3fF32Ndye8i9!W) zXCgH+ksL_Ck~2@+|0A2ln{v(m#G^?dv(k}L%={_E#7+V1K+rhOIg+T0s$zmd!mycMs45pP`hh=XQN{e(_u^Lr z*xLwkSWQ0#(=0Lj5-O3$Y)UlpZLJEF?5#j&yhI-z7H>DDQa#pf0(mhLxUC}h2|JAd zM=a3DR*tyI^&)fW&k`=gk+%w@RU%i+^O_>hA_Vjw%$XWtO0{clr{Xh@x;Vm-Mf4Z+ zvy#f#>t2JA05H$vmYQ6F(-dHa%N<-#TQKiQRA;SD-F%EqohZ8%=2{V89m%UW&7ta= ze{>X)P;JX!NrspfoxIB}J15F-Q8@Yjv|IxblgBI=($;Z53CW=d9UH122Tew} zKMr93#8k&VjaaeMuMx<;A>(qSyKtKl@A2_P6|Lj4p|T1zRwcs9DW1Z*nM2Pnrn1cu zHwFmbcqj(bJ2D@9pCi97Fj@S*=tC-k>XOMvlE(;rhZOg5k`Ofn?e?(g#~)#tk!&g@*k>U zI(az6$?lgvwA|2!dqN?>Y<2s^S__kIV$@0);V~8CIZeLo1OQijwfQU4-CZ8n>@{dC z6(T}5q3eov8i_RqRrY&_YbfxbY=yaIPBg~vqmff&J_yE zoLaGzBufkYxJ&@=Ii!msSHCH@O1o-Lzu(bUk2%P?GbX-r)sk>D;p_4-wt9O8opqn; ze|iD1(vwD-g})Jdm4U7@r0@T33>P z(%DuV(!GOxClg0?CgWvF7%HF%rmV5(=PeBOX;zQ?4pQvIo60hre>|(?#VtNWs3ukM zqlW862J7YZ?aIYJG@7!kCbL02u7kCEbRgrK4!1Mac-co3(7oTwJ1Tt@alwWC+OhR- zH@>7z1Q?k;Mt@0=sGckpfj#39haEf)pc&(#R?~{5ZHW<8S+n&X2F&3ZDwleLZWZrv z!!A;tF3{cszbdZOmx8D7-q$nJGNx4I^KK-Nj3+$pI;1&0oeuTZ7tD`K-@2r)07c+@QKkT0dug~S|)4*6K)<@;lL(WG$gyrfj8@& z)SsOW&LZKLNxJ7)Z@@c5@f)YA+;q`)bjaRfafoE500(SUoI-y5Ku{YwOi%Un5rl6X zc)qiA9=Os+eoVKWHIVA<&rh`)))oy6tqyNQuC}Tcg9hG7?$~8epLHnLl3L&Y4Kf5@ z$PR7*uNKl5^EP+y4!#hMPMgo#pPtKdl2&$j_mi50l}nSB1w+Efj;hx~824F-Nn4m< z5Bi^|ZD^|mJBpSIT-4ypKeu(uv^1I~4%H(amyVqT;Po_jO%^{YBCZddzZBwzN#yn0 z2&4=-GL>nT6qeB92IvpUpYK1jd+-*{M`2QN3Qb);fWqe+{19n-Y)K?LmU+sQSduI@ zSU*vbx;!d?9vibL)Tx=f$~u^fwe&i+q8j%_;t^}^MIT)r0HKuN<3Dew4AP^Ek8Zm| zufsdi5(OkyT%pw-BJTje;uO&dl~jHXEl>EM0ITZ1?S9e;lr63bK_>u2R&4F30*f?C z9{3*seke%<+K4n$haThM2a_izKwd@NSAo#Nk6MVfa_+M}Dbyvr-M2@SF?0p zHjoe)rb+Vn(JeZtr5S>%qJBJM$y6H5{ObLoH{mS9bWtDCtF2!;ztAdWdKI3NMu2~* zSS!af>h2^K(S$sG(~_GlpeeE}yDU zxk6_Q)Szm0Op;-gZBMgTGN~WgaSnBPxN?Z$QhN`Agg^#eSj@2XfUxBopsNcU|G1PB zeRr_JksQyjh+A&!j-dM?bk!f3smJnhJ43OCm2uU4`km&R zdm0O|i0)ytTlg8AMJ04ah|Z7h1_Eql3fa7yS=U^jtjQgq-vtJUCT^1VcJI#_bebgg zzv#akU%3L;L=6=LYI8&n7VY#JTd0jJBc^Z3opn8dPS0ZHA6d_BRebXL#=M;)d9?6N zdqwt~^kPZq=vq+wYdI3|<7+^W<+4R~41cq-L=9e4;IqM=ob*0dG~ysDy2=+apT=>9 zVG4ms|0!baK<0hxUZuwzIO3P)AId_*;)x0+7=(uT41062&RkeG z{W6`;8+kC|4m~@}RbiF<(OTo+xnedso(N3y;JsO^@gV-qy&h>p#gLMv-8PzD+Rp6Z zSWJZ1pklT=C3ygekS#i*9sD);6n_nK3d#m5cuM2O+$Brnl;Xn!k&jlqYNpUG_n0LG(=H$nt zg$n3~+NY+EDvw6>otYo4hyRu9AvCe#4e+vhN)xT9=^8+x_++S5EU{>a+Am(6@O=3% z1lj;T@(|w5XBq3zMecu4W_#5s7|VU1NB}WdO*l|_f|4T;**w6LQ7>zoLy-MIv0x47qvQZv%5d@FjRTk;h(RUv<*m>_3no->&@RG>{ zJV+ft&+a##8veee-R6wM_IqEG=}CALp?5GOa8Gue-u&ljy-RP}x{+?vgO(qv)GD5r zCvC6}3OqYt3i%7etOXr)5)7qeE;O%XK7E{f1vlKsLu)q2lx^MYMRk>6urJA)sb@{& zhMj(Gx^sGouhicuw+fIUD880IYMFC!;j6exXny!B4nG%4ec4Vifi%~_b$zLOb+{Rs zyebCv%+Bo(EaehfOb87^7~{uid1C=LFJ;b=iRy#vG~>wCy*I!&;`nrnY<0etQhP$r zz!k#6Md4;6Z}CPsg?-XUuY{5QjIT)&-@QKRRk18Dw@+G zif72XUBL;&0%5+Z(6E1z=utA8l|$9p-LT}xT3dm zcq=^4c!HAm!3QlGO|jZuZdJ_rS4=@v+e;uzD+xJ6Q>Zh+DbY#5Sw_^9)ltNRkk@`P z^9x*#Oq;IF1HaG47~X%nis%%7PX>~91f_Z^dI{2C?=pC zN)o;_HdI{`rwd%otUjmjqic(#VuNh4!OhS&<~SHxCHG>wa^u)<;$>QoONT@$0?C7! z4(vkW4{|ve-_y}b{km-kX$s8sh$X zy0<045D_-bL!K+xW!avQbD&iT#W?j1&tU?m+MMxB1|GRl1&a1SufmxZ^8^N-=kpwW z(7_ZF*(&e%_kEkHz|(y0!#g~1P9zVAULhM%IvfSY7C0~mWN_cohCA1tKOf5%+udf& zR&Jbb%FnugJp6f~vGH+R-m94uY$$S@0EzY*97hf!GPz;a&1+KKuJROHAT{vMS_yZj zieX()BJbU{y62DYR&%iI$~$)&n!a*AnR`>XNvI14m7y8z5HZ}ziqNQEmw3GQ*GC~> z8C{LQ#qK0t)(lQ)A@+)}k|Xy&A&pxFEvhkSQerVeE9+CZ>K_hDEcp9a98JahYcGCn zRp|x522+Jc93hP;P6WAw#HTRYNPbqk&&N%CVZ;{bFL8%ttMrOc;#$?jO-s0|xsaT> zm`}R1t#unu1}8*2tUqJU!_N29t`h?R=r0o}m?jUkoL-vEM1^NaFh9v4dOBXKAz?)| zTi_lj8U~QM5Hh48oMKXhW8j*9!`-EwBCP>yZC<2(XP)Lt!oz=2kq7;Zk5@#pw z_v_1?nI*|z5XZn=x(WsSiQ(*jvn(fEdcFI%IZ8L{t#4mRe0ZjADeg2n5J>3dOeBBl zL4`j~2L|tP)MW~?b~EGt4qhf~eotQlb%l1`KK+aNNjx~xf02@bW4Wko&CcJfa6C7I zlc-_ns4#Sj=<4Lnw!03BAU_xBMn#E`X#ps;Ax`#Gxe~S zz|dyw&%I8EuE$rvTd)-O`A}QZl~_WL?c8_9OIN^L4fOZ4!7G@EGG#PZM>I~<*4Qi` zv*Nw|5Y3yS8Kht4*Ac}s0tH*S9nx%|QCt?P5?`isYUgB$F%y@-R>iG#=85{oh8uV# zBVHI=C+T%D)R52t_@ug*9Pg%#@MSOgWBGI4r}J*$1nv@?eVZ5dw&Rouo@&d68`}hC z+JmD2W%dU**d$&6(E%7*y3QM2CLsi&c~JS0z!p~YsSaVcijKq-&)k)v9gT&?ke#LU zc9+KJa9I6Gxr!Qaj9GY2o=85z1NHq4n@49d)g zw5vh8n|@N@-8Q{O1Sh`=Kf4Xoj?-L*v(IotegKQ*b3$8LGLi4|2X-9zU3BSR5E zMh!uF2tHHwD}sBa<22Spc(=mAZaxM1GiCU9g}(}SF+~WWknl!Sr=6xkg(UQV5i{{P zN3$w&`2#7s`&(q3wAUYk)e0@K#vd)V=uD-9{L2vas^}O>rA0xyHV#Zr-=n{-uY$}( zx?%nE^V}72MAaAjrED-m+7Rg*{MG{tf+c`gPqqRin}iDM4h=4e`e+e*K%H4p@1b8D z+gb+R^d2T85^WsVY@g{K-uj0kr%ZcZNN4QST&dLKN}Eqm$ody+u4b|EEvkSEwizCj ztU_bc?dE*YoC6~CL)uU87R;Vyf55JkS4W*v%)5YKPM;~IiJtW;kEX0^CVp_U?{B`tf!1A#mwanmAQs>6v;>lRS z;6x$pm4vd;;jlaOEPfOPj2;xs(98*OY$R52s%Ox8{5EUI%; zMqnKHsnV7Nd`2?_zlbP;?bLo>)0mJoq9 z9o{(gw-kirQi@4^hw!bQ`9%bxtA?wkm)@WM#y)fJC`q<`C7XHwCIRFN#&H8+#1>ar z(Rh{}9<*3eRZyX3(>n&-Bc;Cj8xGPCcC8&Z^oKj?QX7D{jQ)X>X-C|{Ms2||EXVRbzFF2FuPqGMNJ#hb-&k9+t-PqZGMOZKEEPp`jIUd(M@nb zmtHGl?dGSqubwBTjTRl57RN~D#AFbn(S;DOw1}`X#)$%b{2151Iu^L zztv5RBBqu;?NidHj46bXo?V5rn{&Zz(q>LxhewH_-XT0?^+`$(U$%5_oCC!=<5Sce zgoDO1?%OT*8lzoe0qN(f3$AGU>B3hEuyC)zmYgyRwdiz9@4=^AxBp`lCMG=RTD z#i=XktKDya+1wUrc5-T4QERQ&da3EVSq!zTBoyMeQZck?wXHWs>H=@}S$Ip8tgO&g zwODRjvEYxL8p<@y_t&D=24B0orl?kdP7{s-mIPC{!BruV=bSV7yEWZ)T8G1Xa5XB- zfhs)1t~I4GVx85yT^DXxnM`;gFxG&~mC&sn(Ub--t9!uW?tebl%-xs9I#!oFMECb{ zr#+o)c(0mZTF7s5R@_VL3Uxq6^W$eORZt#v^a;;As6GR-bjE4zg#8MwJ}TO;Or8>T zR8_>AUr_;VDha&-{cg|#!l7j{c_z93OTaRliyGcLnP;gx{>M6n;qnTW3#qUrSjIfu zwCYwQqtCavu0pHdAmz19N0K3qixcWi65=RN>c5uu1_d3)jDuQNKbO4Ak&jtyv$*|E zXWSA#eICr&(6c{ZNNsgYK^vl?iY-2J_PgJ({ZmEUcxh}}&A7ku%MEU)R0f)fh8iPho*}`v1dgUy}p|9i!WHjqIFfBv4bBYIm zA7}JZ56;yv0Y1K)wBLqF2zkR5oqIQb&SaH3%`vV(U}>qPTU#!740oCptZ%M@BN9&D zUH$cgaNDXvf-NTBpZT`G?nb>rE$N%XM3M0nDeV(bQ6F$c!XG& zfzkdAkgJx-Y`E?-V4c~~PWMM_Yiiw`c;Pkh7S3d?ViJ_dEt~Ag&xu466gS}6cWdmW z0Yt)uZKizq=-931QN!K6bHLBdIi^PeFL)=;Hc#L3nhD{3p6JD4AZKoKmHJ0Cnl*rK zT({Jk<7Q<{_iJ~RGZ|E+;i|z!R@Dl1U+QbOP^i(GfS+n~Oz?&YDVlZ3)LSK>?(Z)1 z%`3@|w)DBd)A^sPZeIn=F!^e10nbzEwA<@a8k{4!*fm!0xM~ z&${jA{%_qUgrpATfk9lM&*|x>w`$J^7N=iS+@Gb(=H(9*J}MiAaicb0`)m(}+9M}7 zoHU`-LhV-xs!bNKf=#w?JDxekM+!t8c(V)66OLIX*ir5Fz2jh-h`Xb@X7F^Lz$&eX z7ljX@reDU#UZ>lx+J3t3s6TnK7$lpbwJ2n_XvYk{zDJXrxAx1Nork~c#s^E}YhsWi zApSbx1&nBO{EXW@YrhCtWMEIGP32=~%v0pi(eNy#n@52Z!f~u4$gq-Ynothw=K<^; z$5K&oqmLEp97z29ON8vQx@{KiusY*5AI*IloR>YE>FO!YG!@Q!-j5eIx^?|6J)!X8 z4I2sDefPt*F<>hPR2>KTo9BkR-w0qh%xVV3SB`{A2(?VtJbva@B`+7X#TRi{v(gUN zWsLuys}z0Kf?f;M#Vy@A%s3G+QHW!P1Ev&CqI%jWj%s{Neh$C_RZ06w@L^K=ZS`rcnFg6;o-#gYCLFe9`sJ-aErL6+Vk`CSob6LLAoDQ+jLZf2Y6p{%h+H!WOBvF zF}duhr7^+sN8q=#;u-iWGP$KAOzNQu3CJH%SnFc5OAJmHs7CRw$6E-itre&laiC5e zB98?K1aR>=WrKv2k7O7yLaorL4G3}YC-u8?w=voLRPlTT;v_&`x*U|Klo=vU5=3 z!cI*2m=X)_M|Wav(Cc1*7gu^hC0JkEJxo*2TX5r~khnjHP)Zq}fYb_sa>ALcZTyv3 z48uq`5G~Lg%%VVrHTPhV#m-kOFLaxPkF|_sRlkxmHTN-+DE}({NBl~P?);Wn)i;1 zW469T&e?Q(5#d~*>j3}DIB7qgt&{fQS;?R;nawb8qV zx;Q5Icf&NB(EZ^Rp>Ms1IJuf>)Y*gnlbxeLypTzFM_6DsD!XGMa9ez8c&>7jr7Yi{S|-wET)_orV;AlMcwh@ zRHqgx<~p+!5j-ajtG_dE?mWCP9DmG)+U=mj*nzyQ$T?fG&1e;Qnv5 z+-uMcaQHsPvHxzRKLh-Ch(ePnzkc4dnU4#ZzR-_zdLc#V8z#`hRr!0{%}_MDjxDuJ zL=IL;`N`Oy!iy5lb2`O@UW`jBlV;NbdTopG4%I`u>5P$aQ7O^$=PMm9r z!QnAEl)w1}xI=4F?#7pYtvN;lO*CQU1xH{?uIaGwp zJ26I)%_bNkCciTJEN;qHHoMXa%)$* zkH#8AtSY%CyU#rz_OIYIfAX`f`)P66Jkw_0;jD{+$0k^!nMlt45SnLdRdoE(ofsc7 z*QV;*8u@WK+3R(%9E`kS4q=~2uF8cQp5YlTcox*hhWo6+{`T}0kUG11fAQ2l58<|^ zZv_8Cq5nll|I5DH#V5snZkxw%Z`G_(z$~AC1x*fxOtvgkM0!)>W5gLhOGV;@NVl`_=3=m((bT&NrB_Db;#?l@o)Tx+U!D$(R_{c~ z+HpritRF8v{_(dNY?_Tyqew3Yn-={-Y5c#n04h$61bI>WsBm^OZSvEH3uD7q71)eX zYcj3bwV{7bNx%Z8O=jpraOcsk@z|EN^lpU3aTj4`&2{BSJTYBeRD`awHVGr&u(LNu zSA=+>HGT_=3N%w^VpJ<9CFJ8>9(zny7^@8((tPyBPzbx`8G0;sbbegiut8kR>7(9)L(0|RY|4X z@6J1+?^`c_LsQFg2WNBL(fh(`Y&xS!K|TbShT4l2Yz`uyCo0?_e=yBmoIFJfXXiqs z5}IxFAyp;w>&f3t9p95=ptCiNH^~ki$mSqW(A@ZgFV$ss24;hE6(*uYK||sI?Zmf+ zG$Ww=iopFkuQoVn>zNTegCO=T4xb5zF1QiX*XLZed7_E! zOEr0nj+i1VpEQ{(iG6skI*nLtaS`m-3N{Tkx1t(wA%qn8%1VzHB}@P0AHI89He2N> z9rmK8XC{d^;RM067>GReFhtMQLGR}hWU^lY%>j2>wM4I+6_v_c0m`e=jro4K@HNuZ z-(kye7G`v%Ci-thoKo;ObTwe#ea>9YyT{;iit z1NY*>>0CLvCkOY#@6qTtVlzjvo`byoC9n0*6HodKzBlrUP$wV3Dypv-iewM;itojy zlsAj)Jvs2)`UhXTBGE{g7{JSQ){yg($f{v#$H36O4IJKVm#CZ;p{6smIzpg2vXTc8 z5cZiq)0w{h^@A7%p=un@Jo>GuT*N_HjTM`swg`=HDDc%P1^IxkBV!AR;SLi?zpC!Kh5(&9&nKrb-}huK?BZze zjr?dYBu^$J_(*aGeYoZ=8L!h4?2DJ+$n;W20j-y!Srktap|H8s-A zU8`>}=#?erL00{@=btTI98S?y0Au>g*^zulR{xwTC%39NmVs$0T}86UGAG9M9bhq; z2NIzXq{AEqwv93X1H<{MA|nnw=VPqo1c>Uo;k&bmIlZ^B2v2gCKF4m>Os%KIP8@bq z<>CK1gy|N3mzez5vKR9OVKBR?Sek%l@s(H;Y`fHQJs1T6Qslb$kNH^VE;$lI>)FQh zO`-MTefUB!TLsX(*D5rYSSq|tZgt!fN9(+A*PyZsKr~%SpnSfg=r;LpRl{?eL%Vd) zp@r?Qs90{SGr_j-V5497^uDm=iu_;Se~qLjZcU7uat8%{nCbZN6TvYeHk2fuY$W*) z8rkbtFw)NX$=s&wmodf!%lsR78{OCpQ8CbACG1hf{p~$c#;wr{6Cp~=K#==V8@hkZ zLQaO?{0{z44MbI)tyEbN3rdRxieFk|N?soaYt(ZndGsqMwz8i3<-|WwOvwJp>75sE zu3}At_MUyL+cn9EmRl@%PTLe{e~XDa2nV`QuD)_Gwh9fE8Ogdy8=1`@HmeXjM=kaa zvs9eBM{w7oBKYVk`OP-Q<1s&mLQfv~w$IYoZ$Ke~c#O|%uUTGLH_+dPCCImMYDnk$ z$&1Q8C(de=(T4Gd+yV?ukDg29W`}j%sFUghgn{9a2d8H|N2cSn#$cT$Lo+@Bd1PhG zOaOH0&5o}*9Mf}sNyA6lb*ZXu&$m=0UvIC*o8dWvuE$&64)z(VK`vhx{T zENy@lNo%>7>}+yB<=YO|x-cY$@8C=P4e4 z8Qv_;4rfpQ0V~Y?34UVuLWX1I&R;RERj7`@`^+N1i>x&!LgY{V@TnuG zcwqs|IA&uL+i$Jl%cqY#;9Uky2;g7Gj1}o1o$dRn!ZaK8Lq**kZou~ogVytU{oZYF z9p2uPH(A(u0RY>b>xk8)4*4zEY z-lx1G$Gbxm_%v_J`Cz9L6@qmI+6cUZdAh;oB^CqGU8=xDszhl5EXxQO`|`^0^KZ49 zJxOLBAo)C6j^0|1Aow1tTz$6lR%>dP*uuqi7B-`xzvFK)lf_8JuDLejU(T4!XQiyU zBav$%%{*X~1KrZ_K<4E?I%#^g3@ZSEKqzSY@$aQ~!My9FP5A7ZmK-(Ry_D=)?O7?Q z!uszqIXmT-on6o32^!BwqUw3Nir#Vnw8H|cb){(aso&#U`Ue+R%Zk%eB3>igoQj|J zsppN|WgdFjODO&GN*Pm(mXf~P%vT_*XgKMGq2OrIrLZ7^*ALNf_LRtdDTXaJ2UuEI zhq{-f6`uj&2sY#O3<3u#@e3}Y=dglc_UjC19On^iUQxs1+l5rp;(&i1cpiOtY{nZ! z$GNisZ%rj!{1Db)$(GB@6|l)Zcs!EC|AhZ?2k@Z5ql|}CQR!8tV)9lbIt5V5F?z^P zxU65Ey~u$chyT|`Hmwib+!G;hH`T;ODBy!<8HwGA++vGm7%MY zXz3h4%eWj%6+wTfJTCNfDY&qik|NlqEwfzfL-=y^7I10xnhkWCZNB%u*RpQ$Z>th~ zGJ1wy){Z-RRxtZfWPA%?YRMLx=}s@Qb!TstpySA?q*+6^N%kTBfR>hKRC7?OCt1ma zJL@aqtmXnF*;%A0@*(N-r9;$c&m^rhE^#?3DruH+4;^kI=(RGf-yCG=iIk+n1;U-t zPna;pI{yzoJFWZ(NHG7WH)LNx;MelfH;^}K8T!X&z;+KrfIL*$oL zc?sP;4(BlMhLJ+Ghz@k3K;Z-IUyQ-LW0cI6cj1kK%iq#5)ohPcTYkC^R)1+aB^L#i z7@cUd*|2xrt@U`b!LacIn#rt*cgS=(b0$x_nP=pTCqn+}Q_FIpg4j2ss!d+V(TOsj zd(FM$tsZbKU{_&($o6#VAMT&tmh5CTs4+es))g`>-pCIcB(fv+x~vJ!(*3#BAy-U!>QKX%CtA zBxRYi!53vmCDfJQ9wGX%`!FHDat>e4vv-kri!Y_Rs(DZEUu_Oji(vOrEVE6_8Gil) zM3cZ5yW3;@L}bQwST8bH=saNPy9diQIn1VW_xY6GnC4;M_26Fdy5;}#qi|-l>~~YI z`p;}VDPfC{lTXe;SeF-@HP%JS3!+}&xsCnvfZrog(8#S;nyzxHC0)qnc@=)K?P=8^tEXm-zcNHAaGVt611EiKaw&~yBFzH5R{Qq7%Zx#%9p{PrVgm}#HHRByoRl|uSyab|#CNKF1*^u~%i_K8GEFtqPoK`s8Y zY*}pMyEk9}@X2O&BYRp)E*eV^p^1yKCGbR?ImlGandX+)z_x?&Buc_0Aq{@b+f}bXQwf{3-T+e}_utSfTBm5U%{7_hsS3n( zjYx5yL)et3^tcyV-0;BmcWw`j+cdq_OY5Tx}>o6VM_R^LJvCNl@#GrJXw8fj~hZE-r`s!6lh**HiQ z86`t4!ry-=Ym_@WHrY;Jsb|B2ec{9x*mnY=imlG+a6S~eb;{s^)sbI#k?Sn zVe=cxzHP9XUTl!+;0*gpdm>HI$5dTDPo3)oMJ1eCe{Gt}9Jp5UeP->P}58+X)8L3`>Wu$i;7D6qB zWC81#6hhmVtRHGz=}M(ic7pL{zb+C5Z%e#}hHaNcIlIi=;X~Dk#qfGw_lS-wgt=;#Vrpkc1s;&|?+MzD*UG!%?J++Kp<*07L z0<>IuM?baUKmV#B73A4y)YRKqUP0nPY}W+;n-Jc%qo>y2FxTf7qT6t>W%7Bid4s|+ z24TQxR^v^dI}Tfh$5W+CjA(r(!$0w?ifVMY&R!1@2|`(|nq;ieI?fIayAG$G`?6%b z%H&7+WWR+Q0F|pGksMv#F;)6`xYdS|i@nL^zt-FH(SfJfl&r0%wrJK)U6Gj5)*+$R zq!fvXBR;Ta-fLIqhjR7_i4fxBkTwd?v#!dhISzzs&ZaiFl3t?~&|KD2GGLeOr(pAR z^v)k1LeBPWc~7$aX!eAu6J^ot-iI2Ey}|tOI#p)g zxVUK4@|a|XJMWd&?svyF_^?loDg}PT*i?TncVz4w0UEkwm@mGN3h4tSs(0#mdQ$Ks zFJ6`PXmb$OoBU?UWEw6+OI8(UHh6=9Y4z90W?%p^i#)552PhrujpY1q<#$&k?OBWV zCzNn6UU7bt^&jggT=ycsJ!}X?4!xf&8+y5E$SrSvp6`7ub07%1`>1s4x-pSQDd7b;!!P~!Oj#~FCM?x04OW%VPy2g(wG5TejT z}wqQx5umAn~7q_Ka zjVe@6!t5u@dXxVXv|6}k(j$$rA-RX0t`Pz2%$Qim3m0dfT9-|gyk1>{Zs&N|8w3gp zb32zs$#e*0*+-nC**5{dB?KNxN=ZhAb*Yt^A2|{6-9CQ-LQcZmbd`;E#Kov+NNg+f z@LZo=xRz&AZvp0}3HZ1+uSPz0X_e(ga9CEz)VLbvTi1Bn7MN^!(g(yyt3QS+8Jf|X z@u@agc=d-u>0A_)WU5A(Vu^54In;m5?D{2C;&sc1Kf1xx0Z3T)O?Cx1i*?erjdypZ z2i(){S>DW9zwhFEfsYUZWsgoYW}Jr90hxkG5B;N7dM)0LPo7-}c!;SOt6jA^&v*P4 zvgEtw#J|AN-mb|c`Txac99LGhX3@yvvYaxhU;PmZ=|E@nT z5-k3ET?OkXa3GxhtU5Vxm>;!4$P=X1ySfws-%*HGzYy|kogb@s`hbQzh?*UPhgRS- zbU8(MF2ofqkAAO$#F>dSGY5FFf`{k@w4#FW*{^gHWsWm+m8M9{mjBlJ>xCZr zfD{KzL4hp%HH^G8UQEagRLGPE4s1R*-qUILTjRijUwt4K- zH@rKRr!D?8=r0&*hg*u4^)SmWnaHbV@{yz{D>%UQ_g63}D7*kCh0@fmc(I9%ID~Pw z#~JRh#yvpmBE+}!Ft*R6D?I=rV||M^T!6yeLzXzzAipD7;f^y`;)*854)1otgq<98 z-?SNj9GhNOBXpBvIrVQaWG{>Dk4`QemNYZGH0uC%ViFI{a zxP4+5`+;c4c1zuHy&kk80CK8a(P<)p+BC_CG0jx=-89>mlO|_&C3_dtT@?=PY#y=| z1ZOC~*DiZC_fAOw`Mhs)I(%GTpg4RsjXrSWpUB?NDuY$E^n%m2F{V5%EkM!1HXTs) zH{4dk?gs#R9qymrd4jM^b0^^f`Y+f@TSxz#9n{q&r0dQTwX;JD4QLeoEcrU7$kr)& zNI@r3schZq%S$+xP=qS&hTKr$aQ1|cj~l9Hi^3yk$&>hb8MpQ61W$K7>Bhsj^jAsu zclL#{QrL*GvvZoSnQ1Y{?Q?+5`2D%s2J7 z|Lte!&oPb|$70rau5FhFG)A`D=$L5)iQCuoGRCuQV%knuq4m*IH)=YV*qF1PF+}!r%^pV!xc@nqpPl+0-6aA!JFC2%ByQGKm01{pfE|a!E@g; zCn;>S__j?S&3EuQYce(LEnFX+xi}n)niF= zrz=4>9FX_#(?)LYWq5^@QCgia(z?n^7-+!08%^tclg%i*A;u*Sp^Q;remT!04LQ~bIyd> zE{2@j8OnQEM!-IXoJ;d|X=#!pnbl_fFKE{JAlO|Z1kJrgT;&s%M%!?Y)Iq1K>lK>zFaq2dhc~No z7y3A3+m!8=x3}w{@E)jL(C8C_(tGYeL&W!Y@cDdr?y4kCey=;vent2l07)#P*N8p5 z{X^V8Gn@*o1|-_iy}qu6qYfS_OY~I{%|VGzw43{O-{WdePj_&Y(qGMcVslN3=%HM% z2-6Zg)cTb7DxlJsk@F>j;YAuWMtdRJ632nHSJAfpD~V)hwTFRQ_hsz@#jpt z&4rVA08aP|IBH{utR(Rz7hoBXEJehG{Kt?o;cT~vwE>a{_fFKR&@v-2-mjj@kR|3@ z1f47TG$49V3J9Ro#nIKs{Gr)i>7U8nM{>|cc1t&(hPlGXvxX#Up@R328338Z8VTJc++q1oFy$;+3&TN`S(&G%)|5v@?1 z?=D<+K}owPN+lq=so;0prWn1?JJk~De?@$Gw>}nc6bmC@R1#hH6_p6&aYhpD^GZ=K z76D!vnt|f_g&2FA^E(=za^d#SY1CcaV_E(O4gO8d|2jw=NVP3~4YMeRtawMe$iC{J>@}I81dSdG zz5e7FmqoLkAJfVdwj9Krk>e}+I2qCE#LFE~W0FLzYmDm*{Z*3Wr?o)XpR&>erm_sF zU!G%^d_5^PWuE)Tq_?dGcvjXceyD>8$yFT&-1mwA+(~0gBAS;yNC${x>SqU(HTGz*S!Ol&K=2 z{%l{na3TxK@qN4hBS5wzIBp%aAj$M8)}z z;&OMT#*5vKOc(jRbr|`??{wI^Ztz*vpBI-Gs{A%Rn*zVr#y@s(C@pevSR4K3(1Ezx z&9f&){M$J%ptE;zBJY55??P?w7$I&Ctmw!r1l?u@N@m3D{&x}n&+>a>mxIgJld56ZcU*5UEmweXJ}fK+`OpaxEBa)GFagpC ze~Ro*QP`}>XJ#QA<8tMRjk5CK2bI;I5)wAPh>A2TU|w1b(KvmdW<|>aEh%akv_VdM z`gv%iWHGIGg=K{W%GLvqBsx3+R?`3~*RyUKUf^j3JMY7C5*2r~`ci|0YRZRqx8d8#f z9z)or9#0#jw(@Qfp1FWsP@IZ2cCnjvqSU+*Bp$0gw^b=k&pKm-t0~kRFCUdafu;)wIV%5>uJVP$ zN-XRdN?$ zkhAy0hrf2@UliV;dlB$g#+W3?yJFZw5nr}2F}>GK1%zm1dT(ty*)6us9Yu$WFO^Y1 zS~DbIRybDyzrE1HnIU+oc3C77Pm=|BW_$oxg2bmu8sVkK9dWc%lJ7^FVCGr zRD?y3psVISp@t|1gFm82YD+lDoG!D`69R`Zgm6EGCf;+_K9+=hnLjfbhA=#mCl_wA zpXmd?@}-TTa)4p_DliwX+72TPOj_BjHYx#NWky~^Q`ZL9#o5~h;6;Bxk@%d;=9}GeCVj$|H{==r9DbE&{`F>Q|@}v}A_Z!SX z?8OiSXj9eL`Q+&DQn}NCecuh|3x7rDOQG$3zPNMlZ(XZGcO1CC3#>=T4N<=-ZY1kF z&RU90u4KbZ3TLi!@CV*{ee->Hc1=iOX(8Dtzrp+Pfg$dsY-7yZMWZwdPh3ZE5ys+g z_Ot!qrAOowd&~dOIg!IFL1_bnI+9u34OzIL564=&m5*{zMfeEscTGgV5Ke99Wfk?K zq0fgVZxZm8cVop1t4^6bn;RJ<4Sj3410;#>Fz?dYmU27H?piuXO1dclEWzGK`g=al zTx`sa+7uI*xHFB1YetpRPtA5B`dh1KPNmT1Z2XVybtlcz^;XnjV3@J9J?>nfoE1yM zv+LHD{~fvh%kXuvGEo`lXkW6Suu4W36d#P4b;l!r?1bO*kbV7IJhLrS%9debF`82% zMMSv$l}5L3L%+}CM9fUyM#Ik?xl#X>ijzJYNWdAlvBtQjnBRE{VtD6pJs2A zM9(WW)XzhLHz~B0R2%YusXgb~j&pUv*nslygE*cis>D!3=AsVix*>Bf{y)?gl|ngU zwd#Jl%NjY9N#~*Ohu;R}opxNv12p!f;dCDy z;=(u_(>8d*K;pEXm6`LxD=&^Dluek4j65p{$zt36}w&8MPT@OFS!FE9NWXt3i5Jh59-jDaSjd0a((~C) znl<|yQo}=G)kE%agweMS`!3{@!>oiip_)h;;>O=sA7pGBsGiBz@@UQ9XG(DH=hna4 zMg@Lq=$>nYKr8*7^3~cK+IT&SV%{or#LQjeQ| zr)0BKrApg^8G8?_5N^_@L&CX9DBrhKHU18`E~j1c!WI1|NYS$I|C#Qqflv-eOD&^f z+(O@>jvr4x!=+mnMFcV~xt_!In<&%RQEWpmG83ry`UC<_S%Y(1W9hWCjP!EntB&v( z)hpZ-ysqsT9&s5oA#QJo4S6&RF8vYeAm4NyJ=8@Yd%&>3@baIwblERw-%~F zOkHKl4ermj9Xi9jX^87@2WNK|wV)N4^B3@O>>_MYg-{wQ)fNceUnIAp`2^I0I1>pAsuIc2^$)W@9paSD{l#KB%D zd{AkR>$eAOWeWRhu0t!Keqsy0n5sYh^}JV@P*b#j#|{;D4%Zl{iAzcFFHj?5xZ_A6 zCqGwp>N$-kSclkGSyV~CM{F#FV&$8-mAxAS(;58K=ilj?Ay!C_jtQh`k!c`(@8J_> zH0Q0-e4a7nR|oHW-+oL%~9BD-vfIj_X*vY zsnm=O_mZo88euyrDfprYL?rz9Y+1xi+H2Hr-7_uoD*#~OsOy)fuAyD-Kb6?H(9YJv z7FBGXW{wE|3K3X8OJvXN#kIStA`FF(PED6fT9Kbf6{_Im(9a*<<8Havq^-F8{II}9 zYA3ml8q^@3A6Pl{rq5QF2i7@^X;KW*(EwDYX8 zGdClZ)T=+-xZel;#_nlYA()M(Xi#K0uzUAZo~~q=jE`i#EwLwe$PbRMAvaxG=ZC~h z8M@;gF;|BX9UP(Hli+1b*OzJ$2?XsSL@IjU;W<8^Z!MHbzR4cQn(X37-AJ@1H@wl5 zxNl1-63cv1S~v(dyf`)v#dL0*-hyg9$}+~HkOQ95{HVShf?+2##q;8LR$Bu_#6B~^ zYI%5kb8_UuU3=bmrFR|VKTW}H_eJJ<2jTus9!=$^m%|2cwhdcOaS*xh;`P6-$ApJh z+~+F(2;YKg!fpw%GA-USu{jIO1*keRTK%>5P&flIICazo9EZL1gv%-+p7?&v zfoy}CQaNl@@>xU4s5bbn=D_8^VWHRTmm8xudK2V%%yJ++|C!uE-j9YgxNk?X09K2XaR)oylH!CKV^GS{DLz$%Q`C-Lw5KC_k@P76rfjagk)Mn*(O*60_pPlYSw+*g z^^wkm=3?(MF67z0pIhuz89jO@YhI46P-Iq7wAeQBlfQ;bp`dRr4bE?V?5!>k`Q_Z9 zWVOhmdkp7^Y3E@;{UZy`d0T=Tc}?9;Ao{bt7Z=eNQf6178G|dLB7AqO2Z9)TeWh^- zaA=t|QqrjlvIzT^ywVBPOvH*W^n9JV*TYWXX*l}AE)HXz_nfcCAN~mYE9b%c_nV}B z+u+Bc?6UNIysGhr?RaGqVNRAwNpuc8!+8xYVBE`mFFtX)8uwGDOR55DbXMP)jLWsp?IqOe+e0f8Y6p>0)VBv0nq7gX6D|TBOvb!|FE52{^C&}q1nVQi(aXwG6TLRH zkg~Gyh3lERLatpr2iP6lWjK3TzwE{ Date: Thu, 27 Dec 2018 15:54:07 +0800 Subject: [PATCH 17/30] aarch64/doc: add boot process --- docs/2_OSLab/g2/boot.md | 179 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md index 2c888d4..f838739 100644 --- a/docs/2_OSLab/g2/boot.md +++ b/docs/2_OSLab/g2/boot.md @@ -1 +1,180 @@ # 启动 + +## 启动流程 + +树莓派的启动流程如下: + +1. 第一阶段:第一级 bootloader 位于片上 ROM 中,它挂载 SD 卡中的 FAT32 启动分区,并载入第二级 bootloader。 +2. 第二阶段:第二级 bootloader 位于`bootcode.bin` 中,它将载入 GPU 固件代码,并启动 GPU,进入第三级 bootloader。 +3. GPU 固件:该阶段将运行 GPU 固件 `start.elf`,它会读取 `config.txt` 中的启动参数,并将内核镜像 `kernel8.img` 复制到 `0x80000` 上。 +4. CPU 代码:CPU 从 `0x80000` 处开始执行内核代码。 + +> 参考:https://github.com/DieterReuter/workshop-raspberrypi-64bit-os/blob/master/part1-bootloader.md + +## linker.ld + +链接脚本位于 `kernel/src/arch/aarch64/boot/linker.ld`,主要内容如下: + +``` +SECTIONS { + . = 0x80000; /* Raspbery Pi 3 Aarch64 (kernel8.img) load address */ + + .boot : { + KEEP(*(.text.boot)) /* from boot.S */ + } + + . = 0x100000; /* Load the kernel at this address. It's also kernel stack top address */ + bootstacktop = .; + + .text : { + stext = .; + *(.text.entry) + *(.text .text.* .gnu.linkonce.t*) + . = ALIGN(4K); + etext = .; + } + + /* ... */ +} +``` + +几个要点: + +* CPU 最先从 `.text.boot (0x80000)` 处开始执行。 +* 在 `boot.S` 中做好了必要的初始化后,将跳转到 `.text.entry/_start (0x100000)`,再从这里跳转到 Rust 代码 `rust_main()`。 +* `boot.S` 的偏移为 `0x80000`,Rust 代码的偏移为 `0x100000`。 +* 跳转到 `rust_main()` 后,`0x0~0x100000` 这段内存将被作为内核栈,大小为 1MB,栈顶即 `bootstacktop (0x100000)`。 +* `boot.S` 结束后还未启用 MMU,可直接访问物理地址。 + +## boot.S + +CPU 启动代码位于 `kernel/src/arch/aarch64/boot/boot.S`,主要流程如下: + +1. 获取核的编号,目前只使用 0 号核,其余核将被闲置: + + ```armasm + .section .text.boot + boot: + # read cpu affinity, start core 0, halt rest + mrs x1, mpidr_el1 + and x1, x1, #3 + cbz x1, setup + + halt: + # core affinity != 0, halt it + wfe + b halt + ``` + +2. 读取当前异常级别(Exception level): + + ```armasm + # read the current exception level into x0 (ref: C5.2.1) + mrs x0, CurrentEL + and x0, x0, #0b1100 + lsr x0, x0, #2 + ``` + +3. 如果当前位于 EL3,初始化一些 EL3 下的系统寄存器,并使用 `eret` 指令切换到 EL2: + + ```armasm + switch_to_el2: + # switch to EL2 if we are in EL3. otherwise switch to EL1 + cmp x0, #2 + beq switch_to_el1 + + # set-up SCR_EL3 (bits 0, 4, 5, 7, 8, 10) (A53: 4.3.42) + mov x0, #0x5b1 + msr scr_el3, x0 + + # set-up SPSR_EL3 (bits 0, 3, 6, 7, 8, 9) (ref: C5.2.20) + mov x0, #0x3c9 + msr spsr_el3, x0 + + # switch + adr x0, switch_to_el1 + msr elr_el3, x0 + + eret + ``` + +4. 当前位于 EL2,初值化 EL2 下的系统寄存器,并使用 `eret` 指令切换到 EL1: + + ```armasm + switch_to_el1: + # switch to EL1 if we are not already in EL1. otherwise continue with start + cmp x0, #1 + beq set_stack + + # set the stack-pointer for EL1 + msr sp_el1, x1 + + # set-up HCR_EL2, enable AArch64 in EL1 (bits 1, 31) (ref: D10.2.45) + mov x0, #0x0002 + movk x0, #0x8000, lsl #16 + msr hcr_el2, x0 + + # do not trap accessing SVE registers (ref: D10.2.30) + msr cptr_el2, xzr + + # enable floating point and SVE (SIMD) (bits 20, 21) (ref: D10.2.29) + mrs x0, cpacr_el1 + orr x0, x0, #(0x3 << 20) + msr cpacr_el1, x0 + + # Set SCTLR to known state (RES1: 11, 20, 22, 23, 28, 29) (ref: D10.2.100) + mov x0, #0x0800 + movk x0, #0x30d0, lsl #16 + msr sctlr_el1, x0 + + # set-up SPSR_EL2 (bits 0, 2, 6, 7, 8, 9) (ref: C5.2.19) + mov x0, #0x3c5 + msr spsr_el2, x0 + + # enable CNTP for EL1/EL0 (ref: D7.5.2, D7.5.13) + # NOTE: This does not actually enable the counter stream. + mrs x0, cnthctl_el2 + orr x0, x0, #3 + msr cnthctl_el2, x0 + msr cntvoff_el2, xzr + + # switch + adr x0, set_stack + msr elr_el2, x0 + + eret + ``` + +5. 当前位于 EL1,设置栈顶地址为 `_start (0x100000)`,清空 BSS 段的数据: + + ```armasm + set_stack: + # set the current stack pointer + mov sp, x1 + + zero_bss: + # load the start address and number of bytes in BSS section + ldr x1, =sbss + ldr x2, =__bss_length + + zero_bss_loop: + # zero out the BSS section, 64-bits at a time + cbz x2, zero_bss_loop_end + str xzr, [x1], #8 + sub x2, x2, #8 + cbnz x2, zero_bss_loop + + zero_bss_loop_end: + b _start + ``` + +6. 最后跳转到 Rust 代码 `rust_main()`: + + ```armasm + .section .text.entry + .globl _start + _start: + # jump to rust_main, which should not return. halt if it does + bl rust_main + b halt + ``` From 5abf7691e664b0502ba030bb5063620a478adcc7 Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 27 Dec 2018 18:36:27 +0800 Subject: [PATCH 18/30] aarch64/doc: update boot.md & table of contents --- docs/2_OSLab/g2/boot.md | 15 +++++++++++++-- docs/2_OSLab/g2/drivers.md | 12 +++++++++++- docs/2_OSLab/g2/interrupt.md | 1 + docs/2_OSLab/g2/peripherals.md | 1 - docs/2_OSLab/g2/raspi3.md | 4 ++-- 5 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 docs/2_OSLab/g2/interrupt.md delete mode 100644 docs/2_OSLab/g2/peripherals.md diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md index f838739..d17118c 100644 --- a/docs/2_OSLab/g2/boot.md +++ b/docs/2_OSLab/g2/boot.md @@ -48,7 +48,18 @@ SECTIONS { ## boot.S -CPU 启动代码位于 `kernel/src/arch/aarch64/boot/boot.S`,主要流程如下: +CPU 启动代码位于 `kernel/src/arch/aarch64/boot/boot.S`,负责初始化一些系统寄存器,并将当前异常级别(exception level)切换到 EL1。 + +AArch64 有 4 个异常级别,相当于 x86 的特权级,分别为: + +* EL0: Applications. +* EL1: OS kernel and associated functions that are typically described as privileged. +* EL2: Hypervisor. +* EL3: Secure monitor. + +在 RustOS 中,内核将运行在 EL1 上,用户程序将运行在 EL0 上。 + +`boot.S` 的主要流程如下: 1. 获取核的编号,目前只使用 0 号核,其余核将被闲置: @@ -66,7 +77,7 @@ CPU 启动代码位于 `kernel/src/arch/aarch64/boot/boot.S`,主要流程如 b halt ``` -2. 读取当前异常级别(Exception level): +2. 读取当前异常级别: ```armasm # read the current exception level into x0 (ref: C5.2.1) diff --git a/docs/2_OSLab/g2/drivers.md b/docs/2_OSLab/g2/drivers.md index dd94d13..2d415c9 100644 --- a/docs/2_OSLab/g2/drivers.md +++ b/docs/2_OSLab/g2/drivers.md @@ -1 +1,11 @@ -# 驱动 +# 设备驱动 + +## Mini UART + +## Timer + +## Mailbox + +## Framebuffer + +## Console diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md new file mode 100644 index 0000000..4f57665 --- /dev/null +++ b/docs/2_OSLab/g2/interrupt.md @@ -0,0 +1 @@ +# 中断 diff --git a/docs/2_OSLab/g2/peripherals.md b/docs/2_OSLab/g2/peripherals.md deleted file mode 100644 index 83ddc31..0000000 --- a/docs/2_OSLab/g2/peripherals.md +++ /dev/null @@ -1 +0,0 @@ -# 外围设备 diff --git a/docs/2_OSLab/g2/raspi3.md b/docs/2_OSLab/g2/raspi3.md index c9fb8ee..268ec5f 100644 --- a/docs/2_OSLab/g2/raspi3.md +++ b/docs/2_OSLab/g2/raspi3.md @@ -11,7 +11,7 @@ * [概述](overview.md) * [环境配置](environment.md) * [启动](boot.md) -* [外围设备](peripherals.md) +* [中断](interrupt.md) * [内存管理](memory.md) * [上下文切换](context.md) -* [驱动](drivers.md) +* [设备驱动](drivers.md) From 92c47de31a9d9c53f42a79d04651e579d3f4d8bc Mon Sep 17 00:00:00 2001 From: equation314 Date: Thu, 27 Dec 2018 22:59:20 +0800 Subject: [PATCH 19/30] aarch64/doc: add interrupt --- docs/2_OSLab/g2/environment.md | 6 +- docs/2_OSLab/g2/interrupt.md | 230 +++++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+), 3 deletions(-) diff --git a/docs/2_OSLab/g2/environment.md b/docs/2_OSLab/g2/environment.md index 17e972b..29fb105 100644 --- a/docs/2_OSLab/g2/environment.md +++ b/docs/2_OSLab/g2/environment.md @@ -48,13 +48,13 @@ * 使用 GDB 调试 ``` - make debug + make debug arch=aarch64 ``` * 反汇编 ``` - make asm + make asm arch=aarch64 ``` * 更多 Makefile 选项 @@ -74,7 +74,7 @@ 2. 写入 RustOS 内核镜像: ``` - make install + make install arch=aarch64 ``` 3. 连接 Raspberry Pi、CP2102 模块与 PC: diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md index 4f57665..44c0378 100644 --- a/docs/2_OSLab/g2/interrupt.md +++ b/docs/2_OSLab/g2/interrupt.md @@ -1 +1,231 @@ # 中断 + +## AArch64 异常模型 + +> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile, capture D1.1, D1.7, D1.10, D1.11, D1.13, D1.14, D1.16. + +在 AArch64 中,各种中断被统称为异常(exception),包括: + +* Reset. +* Interrupts. +* Memory system aborts. +* Undefined instructions. +* Supervisor calls (SVCs), Secure Monitor calls (SMCs), and hypervisor calls (HVCs). +* Debug exceptions. + +这些异常可分为同步异常(synchronous exception)与异步异常(asynchronous exception)两大类: + +* 同步异常:发生在执行一条特定的指令时,包括执行系统调用指令(`svc`、`hvc`)、断点指令(debug exceptions)、Instruction Aborts、Data Aborts 等。 +* 异步异常:发生的时机不确定,又被称为中断(interrupt),是发送给处理机的信号,包括 SError、IRQ、FIQ 等。 + +### 异常处理 + +当发生异常时,CPU 会根据异常的类型,跳转到特定的地址执行,该地址被称为异常向量(exception vector)。 + +不同类型异常的异常向量通过统一的向量基地址寄存器(Vector Base Address Register, VBAR)加上不同的偏移得到。在 EL1、EL2、EL3 下各有一个 VBAR 寄存器 `VBAR_ELx`。此时异常被分为 4 大类,每一类根据异常来源的不同又可分为 4 类,于是共有 16 个异常向量。 + +4 种类型的异常分别为: + +1. Synchronous exception +2. IRQ (Interrupt Request) +3. FIQ (Fast Interrupt Request) +4. SError (System Error) + +4 种异常来源分为: + +1. Current Exception level with `SP_EL0`. 即发生异常时的异常级别与当前(指跳转到异常向量后)一样,且 `SP = SP_EL0` (`SPsel = 0`)。 +2. Current Exception level with `SP_ELx`, `x>0`. 即发生异常时的异常级别与当前一样,且 `SP = SP_ELx` (`SPsel = 1`)。 +3. Lower Exception level, where the implemented level immediately lower than the target level is using AArch64. 即发生异常时的异常级别低于当前级别,且运行于 AArch64 模式。 +4. Lower Exception level, where the implemented level immediately lower than the target level is using AArch32. 即发生异常时的异常级别低于当前级别,且运行于 AArch32 模式。 + +16 种异常对应的异常向量相对于 VBAR 的偏移如下表所示: + +| Exception taken from | Synchronous | IRQ | FIQ | SError | +|----------------------|-------------|---------|---------|---------| +| CurrentSpEl0 | `0x000` | `0x080` | `0x100` | `0x180` | +| CurrentSpElx | `0x200` | `0x280` | `0x300` | `0x380` | +| LowerAArch64 | `0x400` | `0x480` | `0x500` | `0x580` | +| LowerAArch32 | `0x600` | `0x680` | `0x700` | `0x780` | + +如果该异常是 Synchronous 或 SError,异常症状寄存器(Exception Syndrome Register, ESR)将被设置,用于记录具体的异常类别 EC (exception class) 与 ISS (Instruction Specific Syndrome)。在 EL1、EL2、EL3 下各有一个 ESR 寄存器 `ESR_ELx`。具体的 EC、ISS 编码见官网文档 ARMv8 Reference Manual D1.10.4 节。 + +### 异常屏蔽 + +某些异常可以被屏蔽(mask),即发生时不跳转到相应的异常向量。可被屏蔽的异常包括所有异步异常与调试时的同步异常(debug exceptions),共 4 种,分别由 `DAIF` 4 个位控制: + +1. `D`: Debug exception +2. `A`: SError interrupt +3. `I`: IRQ interrupt +4. `F`: FIQ interrupt + +可通过设置 `SPSR_ELx`、`DAIF`、`DAIFSet` 、`DAIFClr` 等特殊目的寄存器(special-purpose registers)中相应的位来选择屏蔽或取消屏蔽相应的异常。 + +### 异常返回 + +当发生异常时,异常返回地址会被设置,保存在异常链接寄存器(Exception Link Register, ELR) `ELR_ELx` 中。 + +异常返回使用 `eret` 指令完成。当异常返回时,`PC` 会根据当前特权级被恢复为 `ELR_ELx` 中的,`PSTATE` (process state)也会被恢复为 `SPSR_ELx` 中的。`PSTATE` 是当前进程状态信息的抽象,保存在 `SPSR_ELx` 中,包含条件标志位 `NZCV`、异常屏蔽位 `DAIF`、当前特权级等信息。如果修改了 `SPSR_ELx` 中相应的位并进行异常返回,就能实现异常级别切换、异常开启/屏蔽等功能。 + +### 系统调用 + +一般使用 `svc` 指令(supervisor call)完成,将触发一个同步异常。 + +## RustOS 中的实现 + +中断部分的代码主要位于 `kernel/src/arch/aarch64/interrupt/` 中。 + +### 异常启用与屏蔽 + +在 `interrupt/mod.rs` 中使用了 `DAIFClr` 与 `DAIFSet` 特殊目的寄存器分别实现了异常的启用与屏蔽(仅针对 IRQ),分别为 `enable()` 与 `disable()` 函数,代码如下: + +```rust +/// Enable the interrupt (only IRQ). +#[inline(always)] +pub unsafe fn enable() { + asm!("msr daifclr, #2"); +} + +/// Disable the interrupt (only IRQ). +#[inline(always)] +pub unsafe fn disable() { + asm!("msr daifset, #2"); +} +``` + +此外,也可在中断返回前通过修改保存的 `SPSR` 寄存器启用或屏蔽中断,详见 `interrupt/context.rs` 中的 `TrapFrame::new_kernel_thread()` 与 `TrapFrame::new_user_thread()` 函数。 + +### 异常向量 + +全局符号 `__vectors` 定义了异常向量基址,并在 `interrupt/mod.rs` 的 `init()` 函数中通过 `msr vbar_el1, x0` 指令,将 `VBAR_EL1` 设为了 `__vectors`。 + +16 个异常向量分别通过宏 `HANDLER source kind` 定义在 `interrupt/vector.S` 中,代码如下: + +```armasm +.macro HANDLER source kind + .align 7 + stp lr, x0, [sp, #-16]! + mov x0, #\source + movk x0, #\kind, lsl #16 + b __alltraps +.endm +``` + +不同的异常向量对应的异常处理例程结构相同,仅有 `source` 和 `kind` 不同。`source` 与 `kind` 将会被合并成一个整数并存到寄存器 `x0` 中,以便作为参数传给 Rust 编写的异常处理函数。 + +由于不同异常向量的间距较少(仅为 `0x80` 字节),所以不在 `HANDLER` 中做细致的处理,而是统一跳转到 `__alltraps` 中进行处理。 + +### 异常处理 + +统一异常处理例程 `__alltraps` 的代码如下: + +```armasm +.global __alltraps +__alltraps: + SAVE_ALL + + # x0 is set in HANDLER + mrs x1, esr_el1 + mov x2, sp + bl rust_trap + +.global __trapret +__trapret: + RESTORE_ALL + eret +``` + +流程如下: + +1. 首先通过宏 `SAVE_ALL` 保存各寄存器,构成 `TrapFrame`; +2. 然后构造函数参数 `x0`、`x1`、`x2`,分别表示异常类型、异常症状 `ESR`、`TrapFrame`,并调用 Rust 异常处理函数 `rust_trap()`; +3. 当该函数返回时,通过宏 `RESTORE_ALL` 从 `TrapFrame` 中恢复各寄存器; +4. 最后通过 `eret` 指令进行异常返回。 + +`TrapFrame` 定义在 `interrupt/context.rs` 中,结构如下: + +```rust +pub struct TrapFrame { + pub elr: usize, + pub spsr: usize, + pub sp: usize, + pub tpidr: usize, // currently unused + // pub q0to31: [u128; 32], // disable SIMD/FP registers + pub x1to29: [usize; 29], + pub __reserved: usize, + pub x30: usize, // lr + pub x0: usize, +} +``` + +目前保存的寄存器包括:通用寄存器 `x0~x30`、异常返回地址 `ELR`、栈指针 `SP`、进程状态 `SPSR`。由于在 `aarch64-blog_os.json` 中禁用了 `NEON` 指令,不需要保存 `q0~q31` 这些 SIMD/FP 寄存器。 + +`rust_trap()` 函数定义在 `interrupt/handler.rs` 中。首先判断传入的 `kind`: + +* 如果是 `Synchronous`:在 `interrupt/syndrome.rs` 中解析 `ESR`,根据具体的异常类别分别处理断点指令、系统调用、缺页异常等。 +* 如果是 `IRQ`:调用 `handle_irq()` 函数处理 IRQ。 +* 其他类型的异常(SError interrupt、Debug exception)暂不做处理,直接调用 `crate::trap::error()`。 + +#### 系统调用 + +如果 `ESR` 的异常类别是 `SVC`,则说明该异常由系统调用指令 `svc` 触发,紧接着会调用 `handle_syscall()` 函数。 + +RustOS 的系统调用方式如下(实现在 `user/ucore-lib/src/syscall.rs` 中): + +* 将系统调用号保存在寄存器 `x8`,将 6 参数分别保存在寄存器 `x0~x5` 中; +* 执行系统调用指令 `svc 0`; +* 系统调用返回值保存在寄存器 `x0` 中。 + +在 `handle_syscall()` 函数中,会从 `TrapFrame` 保存的寄存器中恢复系统调用参数,并调用 `crate::syscall::syscall()` 进行具体的系统调用。 + +#### 缺页异常 + +缺页异常只会在 MMU 启用后,虚拟地址翻译失败时产生,这时候根据是取指还是访存,分别触发 Instruction Abort 与 Data Abort。此时 ISS 中还记录了具体的状态码,例如: + +* Address size fault, level 0~3. +* Translation fault, level 0~3. +* Access flag fault, level 0~3. +* Permission fault, level 0~3. +* Alignment fault. +* TLB conflict abort. +* ... + +其中 level 表示在第几级页表产生异常。当状态码是 translation fault、access flag fault、permission fault 时,将被判断为是缺页异常,并调用 `handle_page_fault()` 处理缺页异常。 + +发生 Instruction Abort 与 Data Abort 的虚拟地址将会被保存到 `FAR_ELx` 系统寄存器中。此时再调用 `crate::memory::page_fault_handler(addr)` 来做具体的缺页处理。 + +#### IRQ + +如果该异常是 IRQ,则会调用 `kernel/src/arch/aarch64/board/raspi3/irq.rs` 中的 `handle_irq()` 函数。该函数与 board 相关,即使都是在 aarch64 下,不同 board 的 IRQ 处理方式也不一样,所以放到了 `kernel/src/arch/board/raspi3` 中,表示是 RPi3 特有的 IRQ 处理方式。 + +该函数首先会判断是否有时钟中断,如果有就先处理时钟中断: + +```rust +let controller = bcm2837::timer::Timer::new(); +if controller.is_pending() { + super::timer::set_next(); + crate::trap::timer(); +} +``` + +其中使用了 crate `bcm2837`,位于 `crate/bcm2837` 中,是一个封装良好的访问 RPi3 底层外围设备的库。 + +然后会遍历所有其他未处理的 IRQ,如果该 IRQ 已注册,就调用它的处理函数: + +```rust +for int in Controller::new().pending_interrupts() { + if let Some(handler) = IRQ_HANDLERS[int] { + handler(); + } +} +``` + +IRQ 的注册可通过调用 `register_irq()` 函数进行,实现如下: + +```rust +pub fn register_irq(int: Interrupt, handler: fn()) { + unsafe { + *(&IRQ_HANDLERS[int as usize] as *const _ as *mut Option) = Some(handler); + } + Controller::new().enable(int); +} +``` From d895ab9228bbcbcef57c35d934770682ced31f43 Mon Sep 17 00:00:00 2001 From: equation314 Date: Fri, 28 Dec 2018 02:58:02 +0800 Subject: [PATCH 20/30] aarch64/doc: add aarch64 virtual memory --- docs/2_OSLab/g2/img/address-translation.png | Bin 0 -> 127953 bytes .../img/block-page-descriptor_attributes.png | Bin 0 -> 122532 bytes docs/2_OSLab/g2/img/level012-descriptor.png | Bin 0 -> 186743 bytes docs/2_OSLab/g2/img/level3-descriptor.png | Bin 0 -> 55561 bytes .../g2/img/table-descriptor_attributes.png | Bin 0 -> 61350 bytes docs/2_OSLab/g2/memory.md | 149 ++++++++++++++++++ 6 files changed, 149 insertions(+) create mode 100644 docs/2_OSLab/g2/img/address-translation.png create mode 100644 docs/2_OSLab/g2/img/block-page-descriptor_attributes.png create mode 100644 docs/2_OSLab/g2/img/level012-descriptor.png create mode 100644 docs/2_OSLab/g2/img/level3-descriptor.png create mode 100644 docs/2_OSLab/g2/img/table-descriptor_attributes.png diff --git a/docs/2_OSLab/g2/img/address-translation.png b/docs/2_OSLab/g2/img/address-translation.png new file mode 100644 index 0000000000000000000000000000000000000000..47d883eb0b0b82f539b3ae09858b0852fc5bc617 GIT binary patch literal 127953 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

Uwo~hcch=$8{pKCqVS#B;A-jI&0_QkIy|A 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 literal 0 HcmV?d00001 diff --git a/docs/2_OSLab/g2/img/block-page-descriptor_attributes.png b/docs/2_OSLab/g2/img/block-page-descriptor_attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..16cc30f44b6df90b9e7c71781643ebabbe0d8cee GIT binary patch literal 122532 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�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

fn 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 KD3;5c1^zEeberG+ literal 0 HcmV?d00001 diff --git a/docs/2_OSLab/g2/img/level3-descriptor.png b/docs/2_OSLab/g2/img/level3-descriptor.png new file mode 100644 index 0000000000000000000000000000000000000000..99d2424ef66ca1f67356d65b5bbd788e4ca8f8b1 GIT binary patch literal 55561 zcmeFZbyQUE-UkYZQqm>eEunOG4bmwoBGMt(tP1rWI3U?fP0K+`{t2IvjTMXG3!CT0EG|~I z;Aj{a0T({-tCg{XA-Ri{rL{euiy-CCBly7Y(3e>$$$uW=U?E7UC9gy-ZewRm&dI{T z!bT~COioTNVE5uBpNfRk@6*9wf|RBX4z_%(tj^BPEY9pKHg+bgk9c``S=k=5K7Py$ zj$pQTwRSLcVYarX`t>1yK1agX-pJ0(*1^oinjHGMhR9$Z7{5j!V`z|Rx@^%QG^B?d0K2v}d`UL-YqF=-H^HnfjLdXKFf5%=3`QctGJeUq*GYLgC z@DmO?H{f3$_)q`)C-_}8uZ;&!83slKMpi;p%>{O=0ihmenR24O)ZlS#Ss zH4WuEh^mN0h*UAsBhAxg5F4>j)=w1O1y)k?BTjSC%$p_ zc4w_F=jZ3YOddnonVpzWoi*9nvKLx)O}2l%O4bewizosEhw&N)o*d@ieH3Q--te?uxzd!PybHS_Ri%8_rFRz$kVE(u9 z0gvwfj}!j=*Z+I;|C{yy*im4K{QrN!n@K&}nXb{OvV3aMpXx*6&@XB>>K3o_z(+k_ zW8wp|PQlaiml{R7HO(xm*Bn$OR#RL$6{hbiEhh#U)p8?V7UtAQQm`3!;qYIqWfVeU z7$s{GEe1ni7873H(fGd7n=CkGK3ZT_X+Bc+7#wvtq)X}q7mUwZW#D~1Lda?UB9Pcl zW;{Xe@}2Cn>x<))<1quB!m7E%ZE%=kI2_yTJ@1+`r+E3fw;kL}`PHMuz z8J3k|K;+n7d%(lxQL}knx#VkCesbIzALxo@P3g*3a>hb@lEBrYQJ`h0SLal@F_KT0 zcJJL28lRDT%_%=5>;lCUA&ne`BsDJo+9-+n4?5PRuy^ihX=rFfnx~GdVLkIul@&gB z3@70qovgC5*q*Eumyr|N`C{>r=T-Xk)nVUgo+@3wZjIgiv8tgRl8i(GuYLCM*2ECA z3w1RY1U>%C$@bKC5M6Rfqvxe|gWK_&qT~xWatvA`lr)alusO*8TNomrhR1-k2nto8 z!ChjE*SnUJxXk;oSXQg$sa)3g1s&0*jttJ!IoFlwHQx-nKRh(Q4i~;Ly&(Ef&6dZ0 zKpB0r`m!h9Sep11d>-zgH~rxj>|z4lhmORnl>{5zim+xUbe{Rw9Y?`oTQsS|QhYd7 zI<*e#4Rq(ikKvtmrp?MSa9wk1u%s&x>8%1(n24Rm4W0JBB1q@kAGKp5Muqw-b;%?7 za8R*%-+072=UC6wK7cjja*{OLnXI(1+8iw${rt)(Hn@sDWg-5Eg8Yux*Ee^U=;c!= zn4ILuT;^e8wS7uTo@dAfqq8-dJ$gc8ok?p}R%||;>l2~z{N2L!{9u+`&!Irl*{#;6w8aF_0ep3qI@tYE<})S$P@A>TzFz;L4ohl z#mG6~k7y_qRjym6C^(HGzH57*FXLAaysnoen0pbaAU~mvs_Dhy%E#82N8tNn?2|v* za(FwHz(l61s?cHr;g0ACW3jg@;SZ|^IQ!2w2TqI8LRsg&el0^!=bF$e%P39rO(pRl z(O&9j*XH6-j`@0sp5D$jp@oTPQ3<_oq@ z0)?OO9rWN56qWrk`p3<5D~On+L?}uI_pAu^E~XypR6WGr=OAuM=Wy+b=j4Uj+6}gm6 z>gb!j7Id&>c`er{?@uKQx=$xk<+i!^ym~&DR^}sj!2JNa2rCe|31UUapTL77*CjZX zdA@I#Rv5P2Q#EZQeLUxNSvWONE*nKVnr%gtubXFARl=C|a-rG(WJJ?o;^KHy?@X+4 zva&#alS`w{Y1^|4RrNMw7SA8G6R|&R4Uu_($m)8#P^+eykaV`6z-?fYLeTAEJ!iY1 zythod(j1oR4g7;SL^N~VSUgt!Ejt;_Je4eosQS<8E(Bt5U=`V?opM@?QhTZ+elzh- zsBoOpn5s7`pTg8bLm(cYB$vkOF(@x9lPOf{=riwmMW34msgDT+dBBKRxnJ#nvzo1UWm%{x8WS&aKizR!&x);` z7NQna9E8DBDc~ZEh%Ls7>0b1q(uQ~1ov_+$(%;3SX8V!BSyeh)zrRA{^aF_wJpah^ zoHGInIGe`v>?GS}q!1gwc8*4-vMlOIja((zG!D`y68haNA2j2W`)ZO^uUM9PNWIDy<0Xb>1jhbKgztrsYv1#Ndo;%_6!pC~K^k~)zhSQ#B?+PR z<0GT3+>EfU6E2cR&;1%MHu9Z%ILEZ+8a=J1KfmHKAEw_N$OuFw6Pk9d3Q86u0Bd)( zp5XSl*qhh+{CgTMAmV1%`?kD2lxWJv>yRjc!z@zgc%WtTqfuBVo=(hZmi=lk?WwC^ zrh}DNf}}sG3L&>rzV}6XlxE36znw(zmro=4TgOPnb+{VKY0Ga(eRQmA+V0(dFi-nq zV3S1fxkrX4Iz6&9cB9kwBt@pAZ7#^6o~}L|Y|&%wu`VX{nkO{PH;ZJqY*uh>|D`h$aX}I|88^yqc+x9$X}P-Ru#uND z`AI!Lk}=x+P-U6c^Y;35`}1O0_b9%EEZnxbrk?TkRJF6%CoU&Q&Yd)lB&pyku`hI~ z5=WCu(o9@ga5P}XiDvkE4)5g-Pfwd}XC$jvK9h$VG`}#Sh+cUllK4jC zBNDxI9=y`_Sq?&4t3u%e1{=AVT1UMdnq}4)`r7Ah$g$na)lJuhQ(LmGtTaXKXv?n3 zZVT zaTMJ9a)$-Fpoj;kzMM(fJXv(lEYX`#=~5=NVQn*L**v02bx?bkX+B;;QJ0>x%eFFQ z#~alVW(@*&7{`lquh-mz?_P7U-Yi8aPU{o%9N`E#bmBocb9m2}qU7NU?J~@*vAyZ( zj$BuhRvm&@Q@m%ln=o&^^owJJM9kn@o{3XMuW*Vb`ii_oY7Okkk9&-`^t|cWSGd(l zuPLi)UUb#M3bVjV9h-)cS=Ut(x@dj7P8z)1w)9isn=>P@)OWXnSsQIQ5Wyako zOwYv&pR7Mlv!X*~;`K4^{t(BtF*wI2eT2x?I6yRXMrzia^Oo3uyWOtlTT|aAC}xvV z9XkSOE5+Qxjr9vP-KZu8-gPun39yQ-dn!5hR54eV_6UvuyNnvxRL!VZ1&tkn8-00;ksj4o$u*~5^^Sf%kjfsrcfuv z*#7ACBZzK=?FPqdu26@&I{t9lzAvu%z*vUPX=M@G0%SvO1F_n=R9o?}u<#9y(L z#v{ZCaO@)Zb1X}k)2d!z^i#`ww>*9NG*d(7-aJNh9?8=>$K98X=3_{r7N%n9NNkNk zw1hT9erZ7ZWkqy1i|mrz&HSHkf=loMl{PEp=qoEV7TEYTv^DP@%1 zjK)??KxYz+8|;6D^MrgtEYEy*wxP}w#I%!?+pBL@sj2v;x zIAz9VG1QuBs#%-l=Tw#q{P0Bd3wf>4?AVHucyLn>_RmbO9rv`YuMWf5Wvxcqk$50l z<<0eF-E@Ygo@0!B+~YQo`BpW2o--9)9K6@5w@UGy{`kZn)>t3AXb+Mj}Fxl~* zs!%c*&%I@9s=}!TD+Zg|sZc_*X0SWs4V4yLS3?GCtog{NQbN*)7b51WI|ZmjT%SDz z3jz?{2<$;{-VC2~RB6;;k!Ja{pr?wpbHj8n6o@&gg63IIi!N#(2TdaK6NrZ8OixK~ zmw29FE#crXg%1|$RM+N`s4!*Pl1HjlCc5F^KCN@IiVa|q9g)Z$C-+kkRAsGQqvU4c zp7SV&R;>yhptq=+QUVoHxKpn#Bv3h8oNM&GG-;gC;d;6U3&9w9G_5bAu^4#}{7PTS zF8ude$ITUt!6jZsR^=cza6K;nB>M2+=8$MI3I18lLhTWnuOF27Uj2|*J$Cs1=-cN# z|Mj7qI)sGgBLq}JHR{tdYA1H1;8ALMDgDLv(9U9Z^^>FhCN z>=*6^YG4ISzsRB*z4#?e2$Q*&}s|_ z3X$tuYoI&eRY zP}M3LjAD2!x85d0_MsVMx)F#0r%5ld#mJ`^x%ZKo=JZv5@JE*FFY@u6aVHpyuYas; zq7Sw+79=2M`D6YH5@K64ubqC@#fodz9RVgy3G7yr9I8c6X&Odj?*l}mK)az!KV`30 zc0S@8H^@o!ao4Y5?@UVwxHV)*i-zr9?l#$o2i!01W^J0b>d2j5n#9yd;9|@QJ9x8B zEd2v9EztagnPQ%SSgLD!QnQ-8i6@Xg!tYk@dFkX1GERZb zT%$&@zTj(#2$2Xb4Z|}qA5^WE|3uLdKYp42>T3l$*OPg1bnWu&9^LIRJ?ErDi1%7r zpzf0B7x{F)zn~F@D}dtPlRf8qzzGM5F0d^TN8@d^YQ(9$F?RE=SZo-irGFt)W5f#@ z8rQqW+y#0uNSh&}nLnXQlvWI@f~@vsDDyZ7HZ}+lMqRpD9h;9q_;7K#LE6EH@|5uzR}f_8JcA}7L+>CM z!m`I8O0NsF#&ej7-4uWW(&IA{BL&@0IGh?3aRzK-GOkjQH}609;CJ4!1T}cI@XdZW zz@`FuF-#I)1(3LJmD1X%PQVfe(XiRf3ebr#wP6Ow1Q`I8IwQOb!#*}{M5Kr6<6`i5{0pd9?@M>#28 zlK>W2+{u4r)IJUt{1%rpa&tasEtPEFAASW98+M`}VlV>w;b>_M%IJXg-c)7`dcW5P zPNuO_#f=xABA8r>eo{dyqA+P3xWm5r>>c~p%drMO`=3~Sw@zqZ#ckGK)Qhk0l2-V% zJRmo6J|HRn&n09Y!%k>{Hn196E^iFyMJ-Jtvyi4$JQJ!%@lnFmDtYDu?U}Y+^6QO} z`&RxCN96JFP}rz>ySU**J2uDRG^pLAP?XpXQ8mmEDa(2Kl{9(HJjw>Xn3<@93pyMH6$UmWmes%-`fO9E+%M!a zdH-xt>bI|HQM&4!SCgEzLB!R|(=_m`1Sza{+ryw(zX5(k;?bW&U+}>$OL|`)k8M{B zDU>Hz*LGTY;loF{@6>$L_t=-LHl!6Z!)VRB1BXcou2g9NXDfS_#IHys@&Ktow`S04dKgsG zM7GN?`5Kk+h1!)}N&Ksc_E4y)0u(C#rRx<)zbQi>4(iuRwa)z*kfFVmtj;(&uyE|Z zB`5!U7?Bl>@lvC}8Rt3AlUeuOII)2+-jxSaad-Ta z#eR=Kgc^u5?)#L{w8vZ-wusap0MYo|RfX^uV?!PSztWRnGP$llo7r@Gy$fY2xV&!! z>Q>?{3PJhx6U4JOwB)yX^P4p#7X-t#L&EJhcvSCg<`{q_Lf_NxlQZ>mh9i`r)r<|m zu^j7~MvL^O(0JxyqEJ&qiTeakb*pRM^uGEFg84{biqOxJL4>iki&rcgcZsD zPw-zP0D2(*Jm6QI7Nyhbgs=8|uMfIeH2`wJq*v>ZTU+6NYJIu?jchwY9If;Yxg+{`s1?q#XRA02N>TyM(^Hxu2i(N$(#?$O6bo1PA(1ox* z;J?t)nDFnIq9G|y%U%Ta93JKtKW%95`oO$7c&E~OW^!Y!xG6mOy#Wy>N5C&tF`7+6_XK2o-(D{%qdAQwNJk{YK=KzY1@V;MHCW zCrTK^c+HSw;i3 zCO+w;xs*mr?58Yn{$VT^D3pl*Lao*rojWsiQ*kEA>s#-t=e(w9pL~2~M@+`_;>*kCD>z0fPa@~4_U#kz18P-3U;chsdBtYuR+6If8ZYH60+?>Z@D6>K1wCAqH zV1KIU9ee^+K#y4(9<-nfSAedkW-ShE*WIY1Rj^r$3qiXoF9q)FgRg%V6pzk_a&bjZ z{2THT0W>uzS<@<%swRB6+Q+@D5l-?*v|J?%@?nIhTf5ra3N)(rHmi=FTlS?Xf^J78 zZpRyOMe6V&@Tw$OmNe<$ZU&B@=J_A-RiolE1*ZI21DOFLulxo zHt#!{t4uX!nk8F*_9Ga|0-Q9Xu=3Q=7vEhvBc+UPADZWceWoaO*n5*F_E(r=^| zMBLU6QSkEA6$?=zC!lkVqs0NuM`c?u{?tMs*^b@ou5QX3Xwhg1M&9XYKw1Zs>(kWY zZ}Mrep(IEYu{@*N2U=c$;Fm(VQbpSXEQpa6v?$KkL`RCrbIN6j$(N0!eazZ;mJTS3 zu>Q+4(LeJ}j*3`+bRg%n7(pc8-Y6j+6jH{Y?7qW$c{HRr^D>-|&c_yH9Ttvl5DY5k zZf{Om!eimvEQ%XOlRZzKZcbL_&v;#KTMuIH^18L4a*qSV-sJXbRao9haw|ffg6R3d zQfIGyx!rPC@8}s6*D7g2v&W9>P2x8R&H`<@{thNTJ2>wxa*xlq^ciWMZ0Tv3_rNCdeJGxGlVYs$La| zR35Q)kgiM=g|92tFAdD@EUMn$n7%%pv#FJ$I0NM=Ly5E@HpIBzR)pLN@oW|;nbpnh zCiCkdw@jDysln}qW*c<<2PdNLP4fO?zaa}Ku^)pv+3G>_k1q1XtBj1{5LB<^1(N78<==- zlO2`ZM807)Q#*1AaPGCnY6LXmwd+;k+x=0`hTcPb2SMS!T4zvSDH8O z#x0x&mnO4Hxp{dVZXK2ut+U@y7OuLRwJNykR9Ws9)ow64-?S6i9C;LLm?W$b&PBCs zg5qqf)JS@_uzL2uqjb=72LK@ZS9cBjPVen|uxg$HNZNR|0zJnSuowp(#Tb3~7J_rw zT$dMs7j|!auz4Qb<$4npx+vY{a+BHd$^|fI(~f0h!>1sXbn!2SunQO@9_za<<9?&B z!><2Z=`F*1d}B2U)b%_bNhZToedeBNa)wEj-1K0p@ph5*L=~M+N9^L=?iajUjpX8M zPrbx;P+`Zqc&R-}9)ouUiC1QFxN;6285;uTWbOR?k-&A@c`}%O${*{Aw0Gip*1~(y zgY3O4KnbRoN*R-wAoR zs~Aj^E4iy-Wt=nzkaLooC}Nlni|Td`jxYu?KbiC;E5O7chA3^=9+3U6M63{(@E|!) z;(l*-cniudE?~XjfmEvn3<*XoL z&_AI+7T--$Cc_qSY^ayM?q}Tv1z6qTV05)VeDB9Vll#HDJKOcLfYtZ0L`M_8KkF*I zmLnkkJWzm^rG8JW4?V40SwY!v5a=p+b~Q(K183XbIm}Xk?(Os{6axcNp0@}0D=S8j z!rP%_d9Bq43+>xGxnYqV@>RHOtkU#^QNCCDM33znwUOhehV<@H9W85`+AQI_^f-1C zg%ih`&B$%4g+q{XQ|hwG7wm_!Ls_~cpPQunt5nLpDXLekd`+^cxpQ*B|0ffE#iswH z^r=mMg5llh@nOd9kdp9qs=Zj0&|(h4TVj(xf{6jM zh)s(N$=<8TQ_ZPma})OdSZ%iqan8HxU*;=PDtA#-bxk$L$|&)?9y&%gKIB%ljl%b4 zhr>_LwsXXxjb@xK0s*n;rk<4k_SE}!HSdW4ghb)S_g6WTiR$B$rnc@Jt+MKet+031 z6K8iM$`!a3aOPdw5&aR2KrH`m{m`NPCwFwgBc+q)R@P~1PVYB(K#i??<`MSphu8jL zrkhu<6aLpSqg6CTFt-*nMEp(#huZ3<_35UwE{mv&PEmtbriR=r>x6Z)eY`8pE6Z(! zx4Qt>>QdlUi;&KX&+L<}P&f5@h%2J2>WcKI5qXD*qe-vM*X(+DYrvPPRUZ3L?}rK= zNO*7eu;FB>l|Cx*xgD9>bdNTq8y659V5rY36P(6J)7y-L;&Qur-+27?=ulBXKs{Gy zC-K1n%==UZBmI10-+QPBV9zWv2pE8oGRoevQ#UXa%M)N(i^Zz7_jkiI`8ES}Kmo07Z?RcNun|VV3NH_(V;)) z)<3wKdD#%mQfrzry;;h4th#VoX0KLkNr9Bo<`Xh=v*^#&+3BB{#S)my#)mIxst%Kj>ne)L&s4tNtNHRxG$ zyg%Mj)ki4`#r0oK+n$lY1<``BiRVw$KNben1FzrUnSDIl8Go}IvTT%zKNmwp1R+08 zdUga?PxNU362sjZeWbK|rKDUnjNKdSdSPLP(xs0D731SNMF6O!SP9nz~qV60$b zE>qH9JwH(e+o8NqXtQ4Dc0b(vg?rk{lN6kU_s!|IE|8)7d_M8)zZb7Vi_`QvVo z$?-c!tyqKq~;XB5d}c`)~1+M3%@~uQd=xINva6I z)M2ChPmJZMeydy0PDnKImFPX2d5(KPTO0~1TsL-;p6`#&`*$i$k{mxA!YQMbf&#ot zE_;usCb#Ki(qgtqkH4J12r1|wE(SCo;e(cpe-dRTg3q+rdehA@Yq9JQ?JP*r8_ho! z1vy5ju5ZST!g&Xj7S_sM*||q=@X519pGYTXX%wehQ?e3nw#MmTvqG$*;u+j zr#MZQhI$ppB|47{Pdxw-$SLaQY7?`pxt+c&x<$ruld9otT-v8V`aGC6-LI(x;8*2}q{) zcaUNyJIH6tMX|B{zsIl|%z~nd)H&f%fo|oXY9p$v7h{tK5C=`e%jiGgLq4RBQTi0< ze-Q1oJ3Esg;96E~Iq}#AXw0nNWIP7SHW)t@>8RV^*w4B+c{K?3n#(xq`h8$*imhXv zmzng+okA~Xy#bJu2=l3*!+*T{UZ)&At`EA<*%#HFeo)Tx?hb;5G{E@IgLgeMsvcUP z=#<#{OpUAXidXjMbD6T=Mf%j0^odG1O>NhVq8d>7pfXHawIoBTt<~30g+l+&^WjIP zZ(pEv>Zpt5aaly3Jb^v+P0u746EOq)l2A&^!?E#h?pbdNYlq8Wwfa? z&v*H%ZoGtvNgdO?v;b~MCHBv@}O!$udgn`{{_`;{k$bf`tk z&_4d0!i>vqNoI4dsp-5%yxe_h7tg|Z#xeHXdJf9oCXhjPXAhlItMwb);!*;KuY_$6 zTfTqCXDk=a5k`$!T^%g*MdRz3thTYa2|HSGkB=87C;`&R1lFQ>R+o5T*vE5~(^m+= z=d%L7@Z#d(dozE-6YPvICGL4(TWG6O_ zG6^%J4SRRh$6i*>q;SNgaC3gUy!s1wng4B7deC#KNd?_LvYN*?t!;Rn4qbgr!5+S9 zdwOUeS$lZn*W7So9}}NaJv@Qgs2Om+u)pGN_HlP4ZU$5M#mv>7tBG(2?S6w`kAXvv z*PMZaBUkWl*7_E*Fj?OAY{S$Qo3~DbTjlw{Lnp&qltRcd;|@ENL0nCC@4eE^a2i&Y zHjd4}FRQd}Jby_f>{Wjbmv^pDQH1X0rFy7}%R5E$4dLe2;A(n%w8q}#P|#HG@>-r0 z6xDURaT}I707lUUI=vozn?kSaixpP1Rdt-zzhEaUtY@HHAJ6U8VN%rsYb4${@&qze zymO9b=me#^b{&P6BZiEmLP?FkkvZ27sUSaW^;WHl;=u79vdT%3(UD#DQHqCL4C`6K zHRilICqn;7R=eD)C>;KQsRiAJeU5+Vs^|Xq(_A)T55YQ1d0J>^?^R}a$Zcfz!+1+x z5MBrf#ZHsSASvR{MmTR6gRT!#ZaJSS*o6%~)(I6?t&2Ve4Bh3~VtCK#nQc^_s-ob?6^UujDdQ`2T6rnzPwixg zS^FF=sK28!I_v~87Fp%9{5Ex@c)p6yyp9`c)g4Tts=*mID+nvAB#zi{!qRS4GY6nA zO=#_fHlRVD_8X$)DNEH-VqY_)J-X4Vb;vtEAGSIvm{@TS<4b5qzpg&{R>d7us=XCT z5~xsH zxg%&PgdZmc0`-Tf3T2vF)P2|d3yM=DvqDnpc#+O-by8Y?c|r^b_M0TJ-xJS3LEZ;J zdRs<^Cb0Jv2DHe84iNpw*fJ)y8(xXuIScU72| z1zx|=1#+c_06uJMZfpBfh5Q4o!toK2^&h0f(VM41%)0wyK^{>gl^h&?cVI#AH&$DL z*ugG-yW~lDc)w>;x57={=I_e93k7+HJC)<#)rIp>D2ag+Y2d$o`~AL|lt==k_v51$ zuk&Mk{<7`&EZ=H-&DiCZErky{8de7jbU5(;z`GFuE1ltIL(HOR5H-VtKcEDr4Sd{Q z(O*byy0l1wpt-XPQo5$TYgYF;fcW_8fbMI$1~dtP%^|^S2pgjMn^eSL(i~Ww{05_^ zz0{C>A^}9oOu#L4_t(Ob;f6E%7FJ1@?9#kbf2hEJJghpC9e$y=y4aVc(`3r}r{rJw z2{`KlQMIf0AS2?EEI^zUA13pmjV`E3zVh0w_c}pb5B9ev0UnS zKe0+V_KFYwPc;ld1i)}xm{NS?R5*k}=`nPm7Ta@v57fF;D!{^=reA%V09;BXCJHqWSAO822KtyWw8w3d6Q}D#);`?Ib zYVm&t?u!@3M*!Y2KP_v8_W1a33~C+BPA`B&&AATB{5uLmRx|!CYjQeRULzpi9QdSJ zYz@%wQcxML)|1ON$tUs*j27ycbU~+px&sHrCl^br-lbH}X~Nk02hNDlAnTv8Il&rl z^sEy+>K7j^HW1ENN_zw7r*^0UVe2)JE!Bo5J^Q_oKoy%VBGUWJ`(h{s?(juVI00$a z`TGR{crlr00RBD!Nb@AXuf)gs{yvTfB~tzM$&~dWtvn&1t&EaapN5kPCO&iPV#v_~ z5pi%m~ExJ+^mnu3NM>yu6a6P#V9LPhQl2Oxu{Frcs z(8ROoe(v9Cy1m)5clC}h|2sA?aBVcNm9%xA>!SZ&PSAzy1A}-UNL(AQ4&;b9&7-04 z!bol?p3vnMdv&MkmM)BZ+P_GL2uxrxV1NE`o%+w5W4spO!yK=4kJY=ll$()41`Jm@ z081wTP`o`T$LdINT57*OOgD-A_ma&DU>j{wNnHMkAz&0AhkZdH^LRF9;N5^qDliU& z09MQ0vDMI)*?vsl-3l;Ecf5Q|E zhQbq+sDJXS{ zwq29t@)ZWO{;V?chO@uB85}nI(>;IU-fBRL05ZH+1eMQrQ z{_W*o@#$xX7qNqmR4i-OKS$~}_w{Rsn~8wwK)n}4`-c+yv+@6aN+(z~@w$!Czni5$ zt=qpoB@-45BF6*jc*MVx{LjY#A4nYw`YpS26~6!VQU7l+{xx?0w=({*2LC@d805)c zrfcjAEhoxG0SCpumg@Us?uR2hB9zXqvYs;UiRXec8fDYAiAYF14bi*K% zh+XN_havhfsAi83NRwFs+960Ld`(IKww*g!>PWxu-#u><#l8fy8Bop#Fkt3Dj#>t^ zI@B#@62+HLDh#S2i08Jk285;Q5#PrJ!AU@O_r$S(12z$3Tqce0wuA#)UOz1Wrn5#z zjLq=+E(>?_H45W@yWPkZl3%_Y%T`D-$C3j|M02R_@(Cj54iHY{TLB-%XpSOTKFB?O z?(sExb;}=gEWf;l{SXrqQ-eV{ZQst_?7Qh~wKZNkT4kjJ*l-dtZTLX9AFV+rhke32 zz#&%vh5>WS@TD^p|0yS6f2jo?aOREl%b~aWyVW*x)`|lAeo%%4To1niZIBA(r%Md= z4}$nN0{w|@FQ6KNkfysZ5!UcHwfVMe{&TU6>Wnk-itZ>BCHAWdP?}p$%V~Wu3#BH$ zdMNY@pnG0i5EZHAMMBMR>!Ti%I`DA7C1`J$fG$4~vzS=hLpIZaK2qfzG~?SqCsqx}%EXeUObi99G=8To zwrf;wtI6nLf;^IUnIkvAy!aG|LJ(2p2p5L&1ONri-RQVEDsLs8E64!fcy@r2uU`H^ z&eJ#I15PUgvszv#b@aw=tiUY;I9;s>IMNu@(X{IZik-ws*=4F=Rg z=(_l%6GH~s2P_{xADr;P%z1g&G%)>k=jAWvAIZv{+fvuVc7@W0<5?~FRf{+82c&-i zYI_}!*(YQuaWdYYNdcv@31K#tu~BEj5wM@MXK*~Z6O~$JTB?G;QSf*YAD-19s3$afJ3ceID+!8<7vh^KmJco0o=qSqC)9sE z4pG1-(mqXJnc%D7!LIOa1)9_{e6%;YI@cr5quZq?#bj4_f1190&+@a;5UC@+fEsYR zB?ssrE*~5KQi!dv6?k0RalFz=1c6!Rxz%J9s5co+h)}hy^gi3Bp}=b7Rv*xee$wln ztgtqMmcmz}$sz(~2E(9KTWwUc7|s>d(wYokX(Um)DFE-+mRK^su$2h^0(_=hnNbRM zX>}3dY?v@G*k;i00{H8qc?ekW<)$b-wMbe0iuFwIU7Qbv8QRC@PR|Gq{BmyJu59_J zXo4Bgl@db*@CZd z3`8VY!MEUU5Rx@4pMQf0?+!vG&oP?%j|$1nsNO@(advU~ui9{TC>R#h(0idW0^l5Z zrP{m%fXv#>!9A?5JHc4E_Kz zbQnjRH9%zGn$a0%4V=r^7U^R^lm4EP0;my)HUw@DT#|tG>H2!t+c~|6GK7P5j8Z;< z%W4bV`^@)vZJ;F!U1rqOT;UcdFD4@>#1rk?fe3ARLqWqc#rvk_kLZIAF8_wi>+CBq z$v%hntk{8zoWXAcgM1Ea&w$_9QR+?OllCx@O*{RK zpUyd`T#Z!wz#J;Xcib56jE<5+S1uHQ_ANVKPX%9hyU`{~g+Y{-}0Fs^y04#JJjX+N>iw&u^ zoO$kBOkzpqvFBs|IWprlUdB>1&90JbIT{hyL*^s|phRt$seyr8pd{Z{bycX)CUpPO z#eM|D4GymR6*|+((j+n4NROVkBDx=sXl}<_6g?6w`4&oK0(f4#{HHB}=*|la8);(u zm%vy@x^;Uo)|6Q1@!2hzpztXW5zDEu6ze-}h0K2Jeyz+CCT3I7^&L|X?w7Gn@67th zO*;I+oax*hpdoU4&vU?YpE5_M!YrWJ*$ywFI?73s?ppq=-Naib)8RR?BQWvsD)V2W zu=}ONnydh)SpjgV%N}=3rxeWrQ1xV3RdE8?B~0qB4!ZRS1!8hmd!eNNsw?laFECJ` z0V_FOb|A~nV^G%s(=uPPSfN&labJ^A9E{#Jkl{J>X&gI)p3iB&4Zm(}1c(;D@><|7 z^K(M=-FZ@xci@2bb>SEp3F_vux6vG0mWQg}Ck0QZjT+ofdku*_z#yFf;Y#1K+BR9lJHmD4$^HbPaR1ovC9d-tUox|&_?6A68P`6OjQq6Lpxd+DQG zcemaA7awahC?;OZVG*?D>(|wEy=?<%B2FljY~lOIqZcy|6^~2-U6l#&^NFI-VI1JaY zLK&sc@~MNVn;e+Gaio8g(JFA04o?}jE3}GSU9QsnKSOnqy~4L1M0^gW&21k3N8K40 zAW}G?DMCeQ3@VS}#MYmhBrV%TLD_OB7-PJNvQfREPWT2`^7$#$iTJaI0FJ7VA*n+# zkFAt`a0mV2VxTeE#zCSf!WUHq-nM7~ZFD`P>=e(FxOGuIAi=AKR#mLkk7TQHuK=QPbTzR;4Mb-uf zmpb}&{Q=aFxxJs#-^}oE8UE-RsBl%=xtFQlC*CuqdSDfhH_TmncX?@8A}^0T^@#gr z^6jY(1;3;^&O=egOHimYBZFfKgeEV!EsP zcxvuu)PI#}*Z7L1$W0OH!z%E4{F|vS;DID{LUxP@!2#gJrcG!bN0RiGC|s8;BIs1u zzVA-S^1lzP8%k?YDye>)4RnNDCmVg6Ob+qM~%Hs%VD< z&74*o=}mLfy>~hb;|6`nOI#0Mt}5rWK@P4EL`F91XORm5dJR~^0Z4UdX z1NRTb+Z88&0q?XmzR;>b;Bw%kRsJ&6zSIE7lkKgVfVwa-FfVeL$?O{NZsxo7hhf+d z)|w@(;8UEDOET}P(nDLQTyZ*9F%XSJm*qW>M8bu)@$M~0$E!mrjt6g zbf&?*y4&*`wLn~^s%BOFy=bCPS(lA=@;FZR#?H)yi!xBHsmiXu+oPAicA>7lTX(wk zK|If0h`li=JK^GBX@Qns+n(HVZ8%&yT_@Gy)w}vA#AFt(3N9@-;J}tQJjL3pOnJ+7 zb-$T{0nm{QSG0h%)ULFQG3tnA(J>dSJ+(#C2V8E;PiN-?1uq|f9CpA&yuxSyQTfh( z(k!QD&z0tLV`@r@%mg~aI})3Q>kp`eJROAxAq4F0u8i%o!MAy~^FWN5;FKM_J**j> z*}ZSP=XQ%^TB-Itp4R+<>t!FiB@MkLJ#F;kMnj^c)(UCf^cY}}Zf?dJx?GEGK9h0} z!L7|lDxh6JG#enYnCR!@Xb-UgdH$I!&$5lvyIjSBWu@x~Ing=&JE$ zv*~+*OZ`!a{}C_?#t$U|t6&wN2SG|aJ(*yGC}??Jo;dd2Q4~B@doQ*dqb+(N{=m}I zZ_rdodQIIAsl!*z03-gb+`|~=llv_}}<1$We~ZN;h#4xM(x0yM;{4&SuPAeqURFR#6~;Rzt;nQi1FR zv4nF9InHJAoaUgbV$Z1Ss-(Sy@S-hR<$YiCJaW%FlH#k_H^U&+8=xaBBJC=dUpNKT z!z=x)1#^gNYclxC zkZNE6?Y{wx&u7%kANZ+2Q~uKXtc9!q*w4cxl^y(lc^)qDyH_bN*kF-Tu(SaDnoL4C zSLe(s%-u0{(v@GVwK~MV>Vn7$a9n@_uOBR%ao5+_ukxh<8L$vbpV`$N=Bk5?7-D}U z(-!2gX8;gZSx%*K;MO`39S%?;gkK&W-3R)ry88b3xAqd@FpESDk3x4bfwCcVtwD-D zboOKWsf^eD+= zPS>DbZ`JH4rLPv-Yt&OeY9?r`FX0sv=OpnvSMl$BZXqCq&)atl#Q_N zRw8tOwPFEv6M>E~hgysRF-?s$_29!uw)_QyG#QEA{r7J#fM{}ZZ6E_GLQli3KCGL- z_@#38i+(L2Mq|zBz>ODQC^2AX6?C~Mok|6rvg@>!ll4gfQ%;+%W{^pT~WyLW4cB%Kp@ zB!Qv~8CDEiHJwHI<$BDYC^xC|FpuA2Xut%`M+cF->+#b2fNzEs?HUaOJ3kHxp~aZ} z$2HXA?TPYlK#Gk$ska+5xdTL~yOiidAInwB0vN$4#9VQz{@fS>HIBm0JHp4dz$NqMvuOz}>YYZdYfA9>rdIvU%1?@<& zLu?#u;J2R?c$jz51V-RBy!x=6zc-_h#8)FwF|cX)@>GU$64-3?x=Q0YJE=%2>kNTh z)7qZe3PTO_{r!%LVRAszY?pQlbiL)^+b&ktWhc|b5mq~>F*)O;F@TnY)#?YpjySU# zBZ|lk&wy;`6&gi`RCw89IKR+TO@7Hu05k_PTUNM`!I_DP7@kaiHyg~9g?`OR^=5|O zgTk#25~0~T*?eK(f%%l;aZVL`q|2*%B(gi06`W+>%ljbQ?C}Z*_Ro4MU0ww99+uM) z3F)EjcR>9y^z;7$uth#2Jp?pE1=-ug56FBK51iXxGetHsET!BW(Q)^Yaan4;7vw`R zclO%tl=D8&iLyFKh)Oca^BNQLKSE%JwDCJFYf3%nqlylArDlo^k4&E0<5i)WL&|r) z-EjeI9K2xBXWrf3sB!PJp89N<0hMnMCivkh3EI%az1EO(-knV{Qb}B5WDpX8L+&0B z^RM?e%43HsNd5#z&IXK|_$rd-{xHvSQs0q((=-eK4vR#TzF_9(8;M*B5!H)8VwPlt z$#Iv5Qga#TwHLRTvPio~SO{u*Up@=0=tvb$))%!Yi1hhELV`|2qi67UJ217nGYT{LZk+4wuRc^?E_bAPq~ zfB#T*zACzo{iH`m0ebd5oK8R|QJ47RfKgp5Z*Y;`GjMRDRXX_pVeh-+xqRRD(Yugj z6|z@IM%l^UJ1b-)Df^A=y|>J4Ws{PTJ+g(0Y_gRR$;i&?ciw%z_4z)p*YnTs|L3n> z75BLA>pHLVJkH}du3X06(#kteDv4(Vf(E>xA-HA$;G=64(|&r~XcJ09dH@xGukc9GBui@UgNvQ~nah4XF~{sTDJX^f z)TFfHt<6Pp9!h;ByL~BpaUh6hy8V>}HWyFTzjAyrfWtvgnIz38cgFXeThQ(M zD5h{r*Y~lQO_1+?<>;0c7M_diN;GfdTrh3bzY?p}ra1!i?5EYngmV)hJ+d0e4VwZ* zHFy!Bv9si&X>4*z_Z>cGJvreR13^)FiEg*zuh-p$*obe^3)|AyV3alewSti2re1v* zPvf#kqFd!%$rlXe&}i(uuYK2-!HyG=FB<&&oPcXQ4V6{xkHJ^=Pt7T%zl5n+MA$AZ zEYXvn%s?C?Uw41utd*;)l-bh7A0`HgvZ!?L1B;t0ugYIR8D%kKnX0FS1sYR88*Iia zoi}D%I9bxhp}S-TyUCpW)2o&fwZ(RbGn#YlaQpy9R-WD6W#_jr7YvpfNXzAo5^QpG zTs^AM6Q-al;9X_r3^@gg(-_7ue&zQdqOFvy2r7ngM} z3dMVwt&@@CRgTuCvqcW(zSYcf?s%O5H{=J=p z!xVyIbDC|V1-2uGzU?%FOEOP&*F8O zi+PoLIs4sJe6xTDM5^dod)^po!yH-sr}!E-FDSe)RKEkB3<3+jNu!7*1j@qXqAWpH z#Wl${1b&1>YVyha{;@HC9W2EiaUVlHqH;EaYA?6ax_@9n>kZI!zCUxBenfdgLHKg- zeaFs>^#8P3xg*7U^!PXm)wSP~-8>NkAI@LD9&O%u^T&Ym`!nns1DT&4O@YKhfy7u@ zL4CMH%V*E}JF3xbv-zpzF=Y;%zCI8!Kolq@PZCcdq=7Q z)z`JDDUXj09_v$6hv{Dxz~JeI=5z|rR?khNWwIk~LrHNQ-qToI%APIfg=fV*07FR2 zZhVJ(b7TPfZJ6~ZS-lWYR832Z{$UlRW_k}xRZ$Ap3qm{zkwXv+9TblY~P zT#P7rⅅ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 literal 0 HcmV?d00001 diff --git a/docs/2_OSLab/g2/img/table-descriptor_attributes.png b/docs/2_OSLab/g2/img/table-descriptor_attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..0989b58035f8fe033b42d572fd30af293d9cb7cd GIT binary patch literal 61350 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

  • I)QCC)ygBSz73n`G1;{U1MmH4zE@TUv+O>)1 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 literal 0 HcmV?d00001 diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md index cbfa311..ee938a1 100644 --- a/docs/2_OSLab/g2/memory.md +++ b/docs/2_OSLab/g2/memory.md @@ -1 +1,150 @@ # 内存管理 + +## AArch64 虚拟内存系统 + +> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile, capture D5: The AArch64 Virtual Memory System Architecture. + +(注:AArch64 可能拥有一些可选的配置,如页大小、页表级数等,以下描述都是指在 RustOS 中的实现,不代表只有这一种实现方式) + +### 地址空间 (D5.1.3) + +AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为: + +* 低地址空间:高 16 位是 0,从 `0x0000000000000000` 到 `0x0000FFFFFFFFFFFF` +* 高地址空间:高 16 位是 1,从 `0xFFFF000000000000` 到 `0xFFFFFFFFFFFFFFFF` + +在 RustOS 中,低地址空间被用于内核地址空间,高地址空间被用户用户程序地址空间。 + +### 地址翻译系统 (D5.2) + +地址翻译系统(address translation system),会随着 MMU 的启用而启用,负责将虚拟地址(或输入地址,IA)映射为物理地址(或输出地址,OA)。完整的翻译过程包含两个阶段 stage 1 与 stage 2,一般只使用 stage 1 的输出作为最终的物理地址。 + +翻译的基本流程是:给定翻译表(translation table,也可称为页表)的基址,截取虚拟地址中的一段 bit,将其作为索引去翻译表中查找,查得的地址作为下一级翻译表的基址。最后一级翻译表返回的是物理页帧(page)的基址,加上虚拟地址页内偏移即可得到物理地址。 + +第 0 级翻译表的基址保存在翻译表基址寄存器(Translation Table Base Register, TTBR)中,有两个,分别为 `TTBR0_EL1` 和 `TTBR1_EL1`,MMU 会根据虚拟地址是位于低地址空间还是高地址空间,自动选择对应的 TTBR。相当于低地址空间与高地址空间各用一套不同的地址翻译系统。 + +翻译表共有 4 级(0~3),一般每级有 512 个表项,因此每级翻译表的索引为 9 位,一个翻译表的大小为 512 x 8 = 4KB。而最后得到的物理页帧的大小一般为 4KB,页内偏移有 12 字节。 + +一般来说,最后一级得到的物理页帧大小为 4KB,不过也可不用翻译到最后一级,而在中间的某一级就停止翻译,直接返回一个物理页帧的地址,此时该页帧的大小会大于 4KB,一般称其为块(block)。如在第 1 级就返回,会得到一个 1GB 的物理内存块;如在第 2 级返回,会得到一个 2MB 的物理内存块。翻译表项中有专门的位来区别该表项中的地址是下一级翻译表的基址还是一个块的基址。 + +![](img/address-translation.png) + +使用翻译控制寄存器(Translation Control Register, TCR) `TCR_EL1` 可配置翻译系统的参数,常用的字段如下: + +1. AS, bit [36]:ASID 的大小,8 位或 16位。RustOS 中为 16 位。 +2. IPS, bit [24:32]:中间级物理地址大小。由于 RustOS 不使用 stage2 翻译系统,所以该地址就是物理地址。一般设为与 `ID_AA64MMFR0_EL1` 中的 `PARange` 字段一致。 +3. TG0/1:低/高地址空间翻译系统的物理页帧粒度,4KB、16KB 或 64KB。RustOS 中都为 4KB。 +4. SH0/1:低/高地址空间翻译系统的内存共享属性,不共享、内部共享或外部共享。RustOS 中都为内部共享。 +5. ORGN0/1:低/高地址空间翻译系统的外部缓存属性。 +6. IRGN0/1:低/高地址空间翻译系统的内部缓存属性。 +7. EPD0/1:是否使用 `TTBR0/1_EL1` 翻译系统。RustOS 中为都使用。 +8. T0/1SZ:在低/高地址空间翻译系统中,第 0 级翻译表从高往低数第几位开始索引。RustOS 中都为 16,即从第 48 位开始索引。 +9. A1:ASID 定义在 `TTBR0_EL1` 还是 `TTBR1_EL1` 中。RustOS 中为 `TTBR1_EL1`。 + +### 翻译表描述符 (D5.3) + +翻译表描述符即翻译表项,由一段地址空间的基址与这段地址空间的属性构成。根据这段地址空间的用处不同,将描述符分为 3 类: + +1. 页描述符(page descriptor):该描述符中的地址指向一个 4KB 大小的页; +2. 块描述符(block descriptor):该描述符中的地址指向一个 1GB 或 2MB 大小的块; +3. 表描述符(table descriptor):该描述符中的地址指向另一个翻译表。 + +#### 第 0, 1, 2 级翻译表描述符 + +第 0 级翻译表只能包含表描述符,第 1、2 级翻译表同时支持表描述符与块描述符。一个描述符的各字段如下图所示: + +![](img/level012-descriptor.png) + +#### 第 3 级翻译表描述符 + +第 3 级翻译表只能包含页描述符。一个描述符的各字段如下图所示: + +![](img/level3-descriptor.png) + +#### 表描述符属性 + +![](img/table-descriptor_attributes.png) + +#### 块/页描述符属性 + +![](img/block-page-descriptor_attributes.png) + +各字段的具体说明详见官网文档 ARMv8 Reference Manual D5.3.3 节。 + +### 内存属性 (D5.5) + +可为一段内存设置的特定属性,如可缓存性、可共享性、内存类型等。 + +#### 内存类型与可缓存性 + +可为内存设置多达 8 个不同的类型,每个类型的内存的可缓存性不同。如普通可缓存内存、普通不可缓存内存、设备内存等。 +在块/页描述符的 AttrIndex 字段可设置内存的类型。 + +8 种内存类型的配置通过 `MAIR_EL1` 实现,每 8 位代表一种类型的内存配置。具体参见 ARMv8 Reference Manual D12.2.82 节。 + +#### 可共享性 + +可共享性分为 3 种: + +1. 不可共享,即每个核都不与其他核共享这段内存; +2. 内部共享,即多核之间可以共享这段内存; +3. 外部共享,即除了多核之间外,CPU 与 GPU 之间也可共享这段内存。 + +在块/页描述符的 SH 字段可设置内存的可共享性。 + + +### TLB、Cache 操作 + +#### TLB 操作 (C5.5) + +TLB (Translation Lookaside Buffers) 是翻译表的缓存,如果一个虚拟地址在 TLB 中命中,将不再通过地址翻译系统翻译,而是直接从缓存中得到物理地址。 + +当翻译表被修改后,需要刷新 TLB,以防由于缓存而使新的虚拟——物理地址映射不起作用。有以下两种刷新方式: + +* 根据虚拟地址刷新:只会使 TLB 中的该虚拟地址无效,代码如下: + + ```armasm + dsb ishst + tlbi vaae1is, + dsb ish + isb + ``` + +* 全部刷新:会使 TLB 中的所有表项无效,代码如下: + + ```armasm + dsb ishst + tlbi vmalle1is + dsb ish + isb + ``` + +#### Cache 操作 (C5.3) + +Cache 是主存的缓存,如果一个物理地址在 cache 中命中,将不会访问主存,而是直接从 cache 中得到数据。Cache 又分为指令 cache 与 数据 cache,分别作用在取指与普通访存时。 + +当通过普通访存的形式修改了代码段的数据,并跳转到了这里运行,此时需要刷新指令 cache,以防取指时从指令 cache 中取到旧的数据。指令 cache 可使用下列代码一次性全部清空: + +```armasm +ic ialluis +dsb ish +isb +``` + +当 CPU 与 GPU 通信,共享一段内存时,由于 GPU 不使用 cache,需要保证 CPU 写入数据时一定被写入主存了而不是在 cache 中,以便 GPU 能读出正确的数据;同时,也要保证这段内存不在 cache 中,以便 GPU 对其进行修改后 CPU 能立即看到修改的结果。这时候就需要清空数据 cache 了。可使用下列代码清空一个 cache line 的数据: + +```armasm +dc civac, +dsb sy +isb +``` + +Cache line 的大小可通过 `CTR_EL0` 寄存器读取,一般为 16 个 WORD,即 64 字节。 + +### ASID 机制 (D5.9.1) + +在上下文切换时,需要修改 TTBR1_EL1 寄存器,如果不刷新 TLB 也不使用 ASID,TLB 中将会保留旧进程的虚拟——物理地址映射关系,导致进程访问错误的物理地址。不过如果每次上下文切换都刷新 TLB,开销又较大。 + +ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下文切换时,每个进程会被分配一个唯一的 ASID,并将其保存到 `TTBR1_EL1` 的高 16 位中。此时 TLB 中会同时记录一个虚拟地址及其进程的 ASID 对应的物理地址,使得不同进程的相同虚拟地址在 TLB 中也会被映射为不同的物理地址。 + +## RustOS 中的实现 From 7716017800e81a5aa508f7b85316a2ddcbbf952e Mon Sep 17 00:00:00 2001 From: equation314 Date: Fri, 28 Dec 2018 09:34:28 +0800 Subject: [PATCH 21/30] aarch64/doc: update memory.md --- docs/2_OSLab/g2/interrupt.md | 2 +- docs/2_OSLab/g2/memory.md | 63 ++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md index 44c0378..ba6ea52 100644 --- a/docs/2_OSLab/g2/interrupt.md +++ b/docs/2_OSLab/g2/interrupt.md @@ -207,7 +207,7 @@ if controller.is_pending() { } ``` -其中使用了 crate `bcm2837`,位于 `crate/bcm2837` 中,是一个封装良好的访问 RPi3 底层外围设备的库。 +其中使用了 crate bcm2837,位于 `crate/bcm2837` 中,是一个封装良好的访问 RPi3 底层外围设备的库。 然后会遍历所有其他未处理的 IRQ,如果该 IRQ 已注册,就调用它的处理函数: diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md index ee938a1..ed77c64 100644 --- a/docs/2_OSLab/g2/memory.md +++ b/docs/2_OSLab/g2/memory.md @@ -23,7 +23,7 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为 第 0 级翻译表的基址保存在翻译表基址寄存器(Translation Table Base Register, TTBR)中,有两个,分别为 `TTBR0_EL1` 和 `TTBR1_EL1`,MMU 会根据虚拟地址是位于低地址空间还是高地址空间,自动选择对应的 TTBR。相当于低地址空间与高地址空间各用一套不同的地址翻译系统。 -翻译表共有 4 级(0~3),一般每级有 512 个表项,因此每级翻译表的索引为 9 位,一个翻译表的大小为 512 x 8 = 4KB。而最后得到的物理页帧的大小一般为 4KB,页内偏移有 12 字节。 +翻译表共有 4 级(0~3),每级有 512 个表项,因此每级翻译表的索引为 9 位,一个翻译表的大小为 512 x 8 = 4KB。而最后得到的物理页帧的大小一般为 4KB,页内偏移有 12 字节。 一般来说,最后一级得到的物理页帧大小为 4KB,不过也可不用翻译到最后一级,而在中间的某一级就停止翻译,直接返回一个物理页帧的地址,此时该页帧的大小会大于 4KB,一般称其为块(block)。如在第 1 级就返回,会得到一个 1GB 的物理内存块;如在第 2 级返回,会得到一个 2MB 的物理内存块。翻译表项中有专门的位来区别该表项中的地址是下一级翻译表的基址还是一个块的基址。 @@ -77,8 +77,8 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为 #### 内存类型与可缓存性 -可为内存设置多达 8 个不同的类型,每个类型的内存的可缓存性不同。如普通可缓存内存、普通不可缓存内存、设备内存等。 -在块/页描述符的 AttrIndex 字段可设置内存的类型。 +可为内存设置多达 8 个不同的类型,每个类型的内存的可缓存性不同,如普通可缓存内存、普通不可缓存内存、设备内存等。 +在块/页描述符的 AttrIndex 字段可设置内存的类型。关于内存类型、Device 与 Normal 内存的区别的详细资料参见 Programmer’s Guide for ARMv8-A 13.1 节。 8 种内存类型的配置通过 `MAIR_EL1` 实现,每 8 位代表一种类型的内存配置。具体参见 ARMv8 Reference Manual D12.2.82 节。 @@ -148,3 +148,60 @@ Cache line 的大小可通过 `CTR_EL0` 寄存器读取,一般为 16 个 WORD ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下文切换时,每个进程会被分配一个唯一的 ASID,并将其保存到 `TTBR1_EL1` 的高 16 位中。此时 TLB 中会同时记录一个虚拟地址及其进程的 ASID 对应的物理地址,使得不同进程的相同虚拟地址在 TLB 中也会被映射为不同的物理地址。 ## RustOS 中的实现 + +在 RustOS,aarch64 平台相关的内存管理主要实现在 `kernel/src/arch/aarch64/memory.rs` 与 `kernel/src/arch/aarch64/paging.rs` 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 aarch64 底层系统寄存器、翻译表的访问。 + +### 物理内存探测 + +### 翻译表 + +与其他平台一样,翻译表(页表) 实现在 `paging.rs` 中,其实只是套了层壳,诸如 map 等复杂操作的实现位于 aarch64 库中。 + +#### 翻译表描述符 + +在 `aarch64/src/paging/page_table.rs` 中实现了翻译表(`PageTable`)与翻译表项描述符(`PageTableEntry`)。翻译表有 512 个项,每个项是一个 64 位描述符。一个翻译表项描述符由下面 3 部分字段构成: + +1. 地址(address):位于描述符的第 12 到 47 位。根据描述符的 `TABLE_OR_PAGE` 位,分别指向下列 3 种地址: + + 1. 页描述符(page descriptor):该地址指向一个 4KB 大小的页,该地址 4KB 对齐; + 2. 块描述符(block descriptor):该地址指向一个 1GB 或 2MB 大小的块,该地址 1GB 或 2MB 对齐; + 3. 表描述符(table descriptor):该地址指向另一个翻译表,该地址 4KB 对齐。 + +2. 标志位(flags):仅由一个位来表示的内存属性。对于表/块描述符包含下列位: + + * VALID(0):该描述符是否有效; + * TABLE_OR_PAGE(1):表示该描述符是块描述符还是表/页描述符; + * AP_EL0(6):这段内存是否可在 EL0 下访问,即用户态; + * AP_RO(7):这段内存是否是只读的; + * AF(10):Access flag,必须为 1; + * nG(11):是否不是全局内存。用户态内存必须设置这一位才能使用 ASID; + * DBM(51):Dirty Bit Modifier。不过 dirty 位只在 ARMv8.2 中由硬件自动设置,该位用于软件模拟 dirty 位; + * PXN(52):这段内存是否在特权级下不可执行; + * UXN(53):这段内存是否在非特权级下不可执行。 + + 以及下列保留给软件实现特定功能的位: + + * WRITE(51):软件实现的 DMB 位; + * DIRTY(55):软件实现的 dirty 位; + * SWAPPED(56):软件实现的页换出标志位; + * WRITABLE_SHARED(57):软件实现的可写共享位,用于 COW 机制; + * READONLY_SHARED(58):软件实现的只读共享位,用于 COW 机制。 + + 对于表描述符包含下列位: + + * PXNTable(59):该翻译表对于的所有内存都是特权级下不可执行的; + * XNTable(60):该翻译表对于的所有内存都是非特权级下不可执行的。 + +3. 属性(attribute):属性字段指明了这段内存的内存属性,包括内存类型(位 2、3、4)与可共享性(位 8、9)。在 `aarch64/src/paging/memory_attribute.rs` 中预定义了 3 中内存属性,分别为: + + 1. Normal:普通可缓存内存,cache 属性为 Write-Back Non-transient Read-Allocate Write-Allocate,内部共享; + 2. Device:Device-nGnRE 类型的内存,不可缓存,外部共享; + 3. NormalNonCacheable:普通不可缓存内存,外部共享。 + +#### 自映射机制 + +### 启用 MMU + +### 重新映射内核 + +### 同时使用 TTBR0_EL1 与 TTBR1_EL1 From a7b6050bc314226ea4b83f2860a18956592c3645 Mon Sep 17 00:00:00 2001 From: equation314 Date: Mon, 31 Dec 2018 02:13:16 +0800 Subject: [PATCH 22/30] aarch64/doc: update memory.md --- docs/2_OSLab/g2/memory.md | 230 ++++++++++++++++++++++++++++++-------- 1 file changed, 185 insertions(+), 45 deletions(-) diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md index ed77c64..01104ae 100644 --- a/docs/2_OSLab/g2/memory.md +++ b/docs/2_OSLab/g2/memory.md @@ -10,29 +10,29 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为: -* 低地址空间:高 16 位是 0,从 `0x0000000000000000` 到 `0x0000FFFFFFFFFFFF` -* 高地址空间:高 16 位是 1,从 `0xFFFF000000000000` 到 `0xFFFFFFFFFFFFFFFF` +* 低地址空间:高 16 位是 0,从 `0x0000_0000_0000_0000` 到 `0x0000_FFFF_FFFF_FFFF` +* 高地址空间:高 16 位是 1,从 `0xFFFF_0000_0000_0000` 到 `0xFFFF_FFFF_FFFF_FFFF` -在 RustOS 中,低地址空间被用于内核地址空间,高地址空间被用户用户程序地址空间。 +在 RustOS 中,低地址空间被用于内核地址空间,高地址空间被用于用户程序地址空间。 ### 地址翻译系统 (D5.2) 地址翻译系统(address translation system),会随着 MMU 的启用而启用,负责将虚拟地址(或输入地址,IA)映射为物理地址(或输出地址,OA)。完整的翻译过程包含两个阶段 stage 1 与 stage 2,一般只使用 stage 1 的输出作为最终的物理地址。 -翻译的基本流程是:给定翻译表(translation table,也可称为页表)的基址,截取虚拟地址中的一段 bit,将其作为索引去翻译表中查找,查得的地址作为下一级翻译表的基址。最后一级翻译表返回的是物理页帧(page)的基址,加上虚拟地址页内偏移即可得到物理地址。 +翻译的基本流程是:给定**翻译表**(translation table,也可称为页表)的基址,截取虚拟地址中的一段 bit,将其作为索引去翻译表中查找,查得的物理地址作为下一级翻译表的基址。最后一级翻译表返回的是物理页帧(page)的基址,加上虚拟地址页内偏移即可得到原虚拟地址对应的物理地址。 -第 0 级翻译表的基址保存在翻译表基址寄存器(Translation Table Base Register, TTBR)中,有两个,分别为 `TTBR0_EL1` 和 `TTBR1_EL1`,MMU 会根据虚拟地址是位于低地址空间还是高地址空间,自动选择对应的 TTBR。相当于低地址空间与高地址空间各用一套不同的地址翻译系统。 +第 0 级翻译表的基址保存在**翻译表基址寄存器**(Translation Table Base Register, TTBR)中,有两个,分别为 `TTBR0_EL1` 和 `TTBR1_EL1`,MMU 会根据虚拟地址是位于低地址空间还是高地址空间,自动选择对应的 TTBR。相当于低地址空间与高地址空间各用一套不同的地址翻译系统。 翻译表共有 4 级(0~3),每级有 512 个表项,因此每级翻译表的索引为 9 位,一个翻译表的大小为 512 x 8 = 4KB。而最后得到的物理页帧的大小一般为 4KB,页内偏移有 12 字节。 -一般来说,最后一级得到的物理页帧大小为 4KB,不过也可不用翻译到最后一级,而在中间的某一级就停止翻译,直接返回一个物理页帧的地址,此时该页帧的大小会大于 4KB,一般称其为块(block)。如在第 1 级就返回,会得到一个 1GB 的物理内存块;如在第 2 级返回,会得到一个 2MB 的物理内存块。翻译表项中有专门的位来区别该表项中的地址是下一级翻译表的基址还是一个块的基址。 +一般来说,最后一级得到的物理页帧大小为 4KB,不过也可不用翻译到最后一级,而在中间的某一级就停止翻译,直接返回一个物理页帧的地址,此时该页帧的大小会大于 4KB,一般称其为**块**(block)。如在第 1 级就返回,会得到一个 1GB 的物理内存块;如在第 2 级返回,会得到一个 2MB 的物理内存块。翻译表项中有专门的位来区别该表项中的地址是下一级翻译表的基址还是一个块的基址。 ![](img/address-translation.png) -使用翻译控制寄存器(Translation Control Register, TCR) `TCR_EL1` 可配置翻译系统的参数,常用的字段如下: +使用**翻译控制寄存器**(Translation Control Register, TCR) `TCR_EL1` 可配置翻译系统的参数,常用的字段如下: -1. AS, bit [36]:ASID 的大小,8 位或 16位。RustOS 中为 16 位。 -2. IPS, bit [24:32]:中间级物理地址大小。由于 RustOS 不使用 stage2 翻译系统,所以该地址就是物理地址。一般设为与 `ID_AA64MMFR0_EL1` 中的 `PARange` 字段一致。 +1. AS:ASID 的大小,8 位或 16位。RustOS 中为 16 位。 +2. IPS:中间级物理地址大小。由于 RustOS 不使用 stage2 翻译系统,所以该地址就是物理地址。一般设为与 `ID_AA64MMFR0_EL1` 中的 `PARange` 字段一致。 3. TG0/1:低/高地址空间翻译系统的物理页帧粒度,4KB、16KB 或 64KB。RustOS 中都为 4KB。 4. SH0/1:低/高地址空间翻译系统的内存共享属性,不共享、内部共享或外部共享。RustOS 中都为内部共享。 5. ORGN0/1:低/高地址空间翻译系统的外部缓存属性。 @@ -45,9 +45,9 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为 翻译表描述符即翻译表项,由一段地址空间的基址与这段地址空间的属性构成。根据这段地址空间的用处不同,将描述符分为 3 类: -1. 页描述符(page descriptor):该描述符中的地址指向一个 4KB 大小的页; -2. 块描述符(block descriptor):该描述符中的地址指向一个 1GB 或 2MB 大小的块; -3. 表描述符(table descriptor):该描述符中的地址指向另一个翻译表。 +1. **页描述符**(page descriptor):该描述符中的地址指向一个 4KB 大小的页; +2. **块描述符**(block descriptor):该描述符中的地址指向一个 1GB 或 2MB 大小的块; +3. **表描述符**(table descriptor):该描述符中的地址指向另一个翻译表。 #### 第 0, 1, 2 级翻译表描述符 @@ -92,12 +92,11 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为 在块/页描述符的 SH 字段可设置内存的可共享性。 - ### TLB、Cache 操作 #### TLB 操作 (C5.5) -TLB (Translation Lookaside Buffers) 是翻译表的缓存,如果一个虚拟地址在 TLB 中命中,将不再通过地址翻译系统翻译,而是直接从缓存中得到物理地址。 +**TLB** (Translation Lookaside Buffers) 是翻译表的缓存,如果一个虚拟地址在 TLB 中命中,将不再通过地址翻译系统翻译,而是直接从缓存中得到物理地址。 当翻译表被修改后,需要刷新 TLB,以防由于缓存而使新的虚拟——物理地址映射不起作用。有以下两种刷新方式: @@ -149,50 +148,58 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 ## RustOS 中的实现 -在 RustOS,aarch64 平台相关的内存管理主要实现在 `kernel/src/arch/aarch64/memory.rs` 与 `kernel/src/arch/aarch64/paging.rs` 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 aarch64 底层系统寄存器、翻译表的访问。 +在 RustOS 中,aarch64 平台相关的内存管理主要实现在 `kernel/src/arch/aarch64/memory.rs` 与 `kernel/src/arch/aarch64/paging.rs` 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 aarch64 底层系统寄存器、翻译表的访问。 + +(注:为了保持与其他平台的一致性,下文使用“页表”指代“翻译表”,并且下文中页表的级数 1, 2, 3, 4 分别指官方文档中翻译表的级数 3, 2, 1, 0) ### 物理内存探测 -### 翻译表 +### aarch64 库中的页表 -与其他平台一样,翻译表(页表) 实现在 `paging.rs` 中,其实只是套了层壳,诸如 map 等复杂操作的实现位于 aarch64 库中。 +与其他平台一样,页表实现在内核代码 `paging.rs` 中,其实只是套了层壳,诸如 map 等复杂操作的实现位于 aarch64 库中。 -#### 翻译表描述符 +#### 页表描述符 -在 `aarch64/src/paging/page_table.rs` 中实现了翻译表(`PageTable`)与翻译表项描述符(`PageTableEntry`)。翻译表有 512 个项,每个项是一个 64 位描述符。一个翻译表项描述符由下面 3 部分字段构成: +在 `aarch64/src/paging/page_table.rs` 中实现了页表(`PageTable`)与页表项(`PageTableEntry`)。页表有 512 个项,每个页表项是一个 64 位描述符。一个页表项描述符由下面 3 部分字段构成: -1. 地址(address):位于描述符的第 12 到 47 位。根据描述符的 `TABLE_OR_PAGE` 位,分别指向下列 3 种地址: +1. **地址**(address):位于描述符的第 12 到 47 位。根据描述符的 `TABLE_OR_PAGE` 位,分别指向下列 3 种地址: 1. 页描述符(page descriptor):该地址指向一个 4KB 大小的页,该地址 4KB 对齐; 2. 块描述符(block descriptor):该地址指向一个 1GB 或 2MB 大小的块,该地址 1GB 或 2MB 对齐; - 3. 表描述符(table descriptor):该地址指向另一个翻译表,该地址 4KB 对齐。 - -2. 标志位(flags):仅由一个位来表示的内存属性。对于表/块描述符包含下列位: - - * VALID(0):该描述符是否有效; - * TABLE_OR_PAGE(1):表示该描述符是块描述符还是表/页描述符; - * AP_EL0(6):这段内存是否可在 EL0 下访问,即用户态; - * AP_RO(7):这段内存是否是只读的; - * AF(10):Access flag,必须为 1; - * nG(11):是否不是全局内存。用户态内存必须设置这一位才能使用 ASID; - * DBM(51):Dirty Bit Modifier。不过 dirty 位只在 ARMv8.2 中由硬件自动设置,该位用于软件模拟 dirty 位; - * PXN(52):这段内存是否在特权级下不可执行; - * UXN(53):这段内存是否在非特权级下不可执行。 + 3. 表描述符(table descriptor):该地址指向另一个页表,该地址 4KB 对齐。 + +2. **标志位**(flags):仅由一个位来表示的内存属性。对于表/块描述符包含下列位: + + | 位 | 名称 | 描述 | + |------|-----------------|---------------------------------------------------------------------| + | 0 | VALID | 该描述符是否有效 | + | 1 | TABLE_OR_PAGE | 为 0 表示是块描述符,为 1 表示是表或页描述符 | + | 6 | AP_EL0 | 这段内存是否可在 EL0 (用户态) 下访问 | + | 7 | AP_RO | 这段内存是否是只读的 | + | 10 | AF | Access flag,必须为 1 | + | 11 | nG | 是否不是全局内存。用户态内存必须设置这一位才能使用 ASID | + | 51 | DBM | Dirty Bit Modifier。不过 dirty 位只在 ARMv8.2 中由硬件自动设置,该位用于软件模拟 dirty 位 | + | 52 | PXN | 这段内存是否在特权级下不可执行 | + | 53 | UXN | 这段内存是否在非特权级下不可执行 | 以及下列保留给软件实现特定功能的位: - * WRITE(51):软件实现的 DMB 位; - * DIRTY(55):软件实现的 dirty 位; - * SWAPPED(56):软件实现的页换出标志位; - * WRITABLE_SHARED(57):软件实现的可写共享位,用于 COW 机制; - * READONLY_SHARED(58):软件实现的只读共享位,用于 COW 机制。 + | 位 | 名称 | 描述 | + |------|-----------------|---------------------------------------------------------------------| + | 51 | WRITE | 软件模拟的 DMB 位 | + | 55 | DIRTY | 软件模拟的 dirty 位 | + | 56 | SWAPPED | 软件实现的页换出标志位 | + | 57 | WRITABLE_SHARED | 软件实现的可写共享位,用于 COW 机制 | + | 57 | READONLY_SHARED | 软件实现的只读共享位,用于 COW 机制 | - 对于表描述符包含下列位: + 对于表描述符只包含下列位: - * PXNTable(59):该翻译表对于的所有内存都是特权级下不可执行的; - * XNTable(60):该翻译表对于的所有内存都是非特权级下不可执行的。 + | 位 | 名称 | 描述 | + |------|-----------------|---------------------------------------------------------------------| + | 59 | PXNTable | 该页表所映射的所有内存都是特权级下不可执行的 | + | 60 | XNTable | 该页表所映射的所有内存都是非特权级下不可执行的 | -3. 属性(attribute):属性字段指明了这段内存的内存属性,包括内存类型(位 2、3、4)与可共享性(位 8、9)。在 `aarch64/src/paging/memory_attribute.rs` 中预定义了 3 中内存属性,分别为: +3. **属性**(attribute):属性字段指明了这段内存的内存属性,包括内存类型(位 2、3、4)与可共享性(位 8、9)。在 `aarch64/src/paging/memory_attribute.rs` 中预定义了 3 中内存属性,分别为: 1. Normal:普通可缓存内存,cache 属性为 Write-Back Non-transient Read-Allocate Write-Allocate,内部共享; 2. Device:Device-nGnRE 类型的内存,不可缓存,外部共享; @@ -200,8 +207,141 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 #### 自映射机制 -### 启用 MMU +为了方便对页表的修改,与其他平台一样,aarch64 下的 RustOS 也使用了**自映射**的页表。 + +具体地,设**递归索引**为 `R` (RustOS 中为 `0o777 = 512`,即页表的最后一项),只需将第 4 级页表的第 `R` 项映射为第 4 级页表自身即可建立自映射页表。这样一来,一个虚拟地址 `IA` 的四级页表分别被以下虚拟地址所映射(`||` 表示比特串的连接): + +* 4 级页表:`R || R || R || R`; +* 3 级页表:`R || R || R || IA[47..39]`; +* 2 级页表:`R || R || IA[47..39] || IA[38..30]`; +* 1 级页表:`R || IA[47..39] || IA[38..30] || IA[29..21]`; + +在 `aarch64/src/paging/recursive.rs` 中,为结构体 `RecursivePageTable` 实现了一系列函数,主要几个如下: + +* `new(table: PageTable)`:将虚拟地址表示的 `table` 作为 4 级页表,新建 `RecursivePageTable` 对象; +* `map_to(self, page: Page, frame: PhysFrame, flags: PageTableFlags, attr: PageTableAttribute, allocator: FrameAllocator)`:将虚拟地址表示的**页** `page`,映射为物理地址表示的**帧** `frame`,并设置标志位 `flags` 和属性 `attr`,如果需要新分配页表就用 `allocator` 分配。页与帧的大小都是 4KB; +* `unmap(self, page: Page)`:取消虚拟地址表示的页 `page` 的映射。 + +### 实现内存管理 + +下面是 `memory.rs` 与 `paging.rs` 中对内存管理的实现。 + +#### 启用 MMU + +由于在真机上使用原子指令需要 MMU 的支持,应该尽量早地启用 MMU,而 `boot.S` 中并没有建立页表与启用 MMU,所以启动完毕一进入 `rust_main()` 函数,就会调用 `memory.rs` 里的 `init_serial_early()` 函数来启用 MMU。 + +该函数主要做了下面三件事: + +1. 建立一个临时的地址翻译系统。 + + 这部分的代码主要位于 `paging.rs` 里的 `setup_temp_page_table()` 函数。这个地址翻译系统只是临时的,未进行细致的权限控制,更细致的地址翻译系统将在下节“重新映射内核地址空间”中建立。 + + 该过程共需要三个 4KB 大小的页面,分别用于第 2~4 级页表。然后按下图方式映射: + + ``` + +------------+ + | TTBR0_EL1 |---+ + +------------+ | + | + | + +------+-------------------+ + | | + p4_table v | + +-----------+ 0x0000_0000_0000 | + 0 | D_Table |--------------------+ | + +-----------+ 0x0080_0000_0000 | | + | ... | | | + +-----------+ | | + | ... | | | + +-----------+ 0xFF80_0000_0000 | | + 511 | D_Table |------------------------+ + +-----------+ | + +----------------------+ + | + p3_table v + +-----------+ 0x0000_0000_0000 + 0 | D_Table |--------------------+ + +-----------+ 0x0000_4000_0000 | + 1 | D_Block | | + +-----------+ 0x0000_8000_0000 | + | ... | | + +-----------+ | + | ... | | + +-----------+ | + +----------------------+ + | + p2_table v + +-----------+ 0x0000_0000_0000 + 0 | D_Block | + +-----------+ 0x0000_0020_0000 + 1 | D_Block | + +-----------+ 0x0000_0040_0000 + | ... | + +-----------+ 0x0000_3FE0_0000 + 511 | D_Block | + +-----------+ + ``` + + 注意 `4000_0000 ~ 0x8000_0000` 以及 `0x3F00_0000 ~ 0x4000_0000` 这些内存区域是 IO 地址空间,内存属性为 Device,其他内存区域属性都是 Normal。 + +2. 初始化 `MAIR_EL1`、`TCR_EL1` 等系统寄存器。 + + `MAIR_EL1` 系统寄存器定义了三种内存属性:Normal、Device 和 NormalNonCacheable。 + + `TCR_EL1` 系统寄存器用于设置翻译系统的参数(详见上文描述)。 + +3. 修改 `SCTLR_EL1` 寄存器以启用 MMU。 + + 一切准备就绪后,用下列代码启用 MMU 和 cache: + + ```rust + unsafe { barrier::isb(barrier::SY) } + SCTLR_EL1.modify(SCTLR_EL1::M::Enable + SCTLR_EL1::C::Cacheable + SCTLR_EL1::I::Cacheable); + unsafe { barrier::isb(barrier::SY) } + ``` + + 注意修改 `SCTLR_EL1` 系统寄存器的前后都要需要有内存屏障指令 `isb sy`。 + +#### 初始化内存管理 + +这部分实现在 `memory.rs` 里的 `init()` 函数中。包含下列三部分: + +1. 探测物理内存,初始化物理页帧分配器:由函数 `init_frame_allocator()`,先用 atags 库探测出可用物理内存的区间 `[start, end]`,然后以 4KB 大小的页为单位插入 `FRAME_ALLOCATOR` 中。由于 Raspberry Pi 3 拥有 1GB 内存,物理页帧数多达 256K,所以需要使用 `bit_allocator::BitAlloc1M`。 + +2. 初始化堆分配器:直接调用 `crate::memory::init_heap()`,堆大小为 8MB。 +3. 重新映射内核地址空间:由函数 `remap_the_kernel()` 完成,见下节。 + +#### 重新映射内核地址空间 + +有了物理页帧分配器后,就可以使用 `RecursivePageTable` 等结构体提高的函数映射页面,而不用像 `setup_temp_page_table()` 那样手动映射了。 + +在函数 `remap_the_kernel()` 中,使用了类 `MemorySet` 来管理内核使用的内存空间。新建一个 `MemorySet` 将新建一个 `InactivePageTable`,即一个非活跃页表或一套地址翻译系统。为了以后方便实现 ioremap,使用全局变量 `KERNEL_MEMORY_SET` 记录内核的 `MemorySet` 结构。 + +然后,该函数分别将内核的栈、代码段、数据段、只读数据段、BSS 段加入 `MemorySet`,设置好访问权限,建立 `Linear` 对等映射,这会导致调用 `ActivePageTable` 的 `map()` 函数,进而调用 `RecursivePageTable` 的 `map_to()` 函数建立映射。需要注意的是,对于 IO 地址空间 `0x3F00_0000 ~ 0x4000_1000`,额外设置了 `MemoryAttr` 的 `mmio` 属性,这将使得这段内存的内存属性为 Device。最后调用 `InactivePageTable` 的 `activate_as_kernel()` 函数向 `TTBR0_EL1` 写入新的页表基址。 + +如果以后想访问其他的 IO 地址空间(如 Framebuffer),可调用 `ioremap()` 函数建立对等映射。该函数会将要映射的内存区域插入全局的 `KERNEL_MEMORY_SET` 结构,并将内存属性设为 NormalNonCacheable。 + +#### InactivePageTable + +`InactivePageTable` 定义了一个**非活跃页表**,准确地说是由第 4 级页表基址指定的一套地址翻译系统,一般随着 `MemorySet` 的建立而建立。除了在 `remap_the_kernel()` 中建立的是内核新页表,其他时候都是用户页表。 + +在不同的平台下需要各自实现以下函数(`paging.rs` 中): + +* `new_bare()`:新建一套地址翻译系统。首先调用 `alloc_frame()` 分配一个物理页帧用于存放唯一的 4 级页表,然后修改该物理页帧,使得其最后一项映射到自身,即建立自映射页表。通过调用 `active_table().with_temporary_map()` 让当前活跃的页表新建一个临时的映射,可在页表被激活后也能修改任意物理页帧。 +* `token()`:获取该翻译系统的页表基址,即第 4 级页表的物理地址。 +* `set_token(token)`:将页表基址 `token` 写入页表基址寄存器,用于激活该地址翻译系统。RustOS 中是写入 `TTBR1_EL1`。 +* `active_token()`:获取当前活跃页表的页表基址寄存器内容。RustOS 中是读取 `TTBR1_EL1`。 +* `flush_tlb()`:刷新 TLB 以立即生效对地址翻译系统的修改。 +* `edit()`:让该翻译系统变得可编辑。本质上是将当前活跃页表(`TTBR0_EL1` 指向的页表)的递归索引指向该翻译系统的第 4 级页表,使得所有对该翻译系统第 1~4 级页表的访问,都可直接通过自映射机制构造相应的虚拟地址来实现。同时由于不修改当前活跃页表的其他表项,对内核地址空间可正常访问。 +* `new()`:建立用户页表时调用,会同时调用 `new_bare()` 和 `map_kernel()`。不过在 aarch64 下不需要 `map_kernel()`。 +* `map_kernel()`:为了让用户程序陷入中断后能访问内核地址空间,需要在用户页表中映射内核的地址空间,通过 `edit()` 函数修改自身来实现。使用 `new()` 建立用户页表时会额外调用该函数。不过在 aarch64 下可使用 `TTBR0_EL1` 与 `TTBR1_EL1` 区分内核页表与用户页表,所以 aarch64 下该函数无效。 + +#### 分离内核页表与用户页表 + +AArch64 提供了两个翻译表基址寄存器 `TTBR0_EL1` 与 `TTBR1_EL1`,MMU 会根据虚拟地址是低地址空间还是高地址空间自动选择相应的 TTBR 作为翻译表基址。 + +在 RustOS 中,低地址空间(高 16 位是 0)用于内核地址空间,高地址空间(高 16 位是 1)用于用户程序地址空间。这样在内核态可不加偏移直接访问 IO 地址空间,只需建立对等映射;而用户程序的地址都需加上偏移 `0xFFFF_0000_0000_0000`。 -### 重新映射内核 +实现该机制,只需记住一点:内核页表基址 `TTBR0_EL1` 在设好后就无需修改了(其实 RustOS 修改了一次,即重新映射内核地址时),之后所有的对页表基址的修改一定都是 `TTBR1_EL1`。于是像 `set_token()`、`active_token()` 等函数,以及上下文切换中的页表基址都是 `TTBR1_EL1`。 -### 同时使用 TTBR0_EL1 与 TTBR1_EL1 +需要注意的是,当映射用户程序地址空间时,要调用 `InactivePageTable` 的 `edit()` 函数来编辑用户页表,这时用于访问翻译系统各级页表的地址的高 16 位都是 1,会自动使用 `TTBR1_EL1` 作为页表基址寄存器。于是 `edit()` 中除了设置当前活跃页表的递归索引外,`TTBR1_EL1` 也需设为该翻译系统的第 4 级页表。 From 1523e7ea5fb039083fb8dbf0492bd06900469fb2 Mon Sep 17 00:00:00 2001 From: equation314 Date: Mon, 31 Dec 2018 16:20:39 +0800 Subject: [PATCH 23/30] aarch64/doc: add context switch --- docs/2_OSLab/g2/boot.md | 38 +++++- docs/2_OSLab/g2/context.md | 225 +++++++++++++++++++++++++++++++++++ docs/2_OSLab/g2/interrupt.md | 6 +- docs/2_OSLab/g2/raspi3.md | 4 +- 4 files changed, 266 insertions(+), 7 deletions(-) diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md index d17118c..10b267e 100644 --- a/docs/2_OSLab/g2/boot.md +++ b/docs/2_OSLab/g2/boot.md @@ -1,6 +1,6 @@ -# 启动 +# 启动与初始化 -## 启动流程 +## 树莓派启动流程 树莓派的启动流程如下: @@ -189,3 +189,37 @@ AArch64 有 4 个异常级别,相当于 x86 的特权级,分别为: bl rust_main b halt ``` + +## rust_main + +在 `boot.S` 初始化完毕后,会进入 Rust 函数 `rust_main()`: + +```rust +/// The entry point of kernel +#[no_mangle] // don't mangle the name of this function +pub extern "C" fn rust_main() -> ! { + memory::init_mmu_early(); // Enable mmu and paging + board::init_serial_early(); + + crate::logging::init(); + interrupt::init(); + memory::init(); + driver::init(); + println!("{}", LOGO); + + crate::process::init(); + + crate::kmain(); +} +``` + +流程如下: + +1. 建立临时页表,启动 MMU; +2. 初始化串口输入输出,可以使用 `println!()` 等宏了; +3. 初始化 logging 模块,可以使用 `info!()`、`error!()` 等宏了; +4. 初始化中断,其实就是设置了异常向量基址; +5. 初始化内存管理,包括物理页帧分配器与内核堆分配器,最后会建立一个新的页表重新映射内核; +6. 初始化其他设备驱动,包括 Frambuffer、Console、Timer; +7. 初始化进程管理,包括线程调度器、进程管理器,并为每个核建立一个 idle 线程,最后会加载 SFS 文件系统加入用户态 shell 进程; +8. 最后调用 `crate::kmain()`,按调度器轮流运行创建的线程。 diff --git a/docs/2_OSLab/g2/context.md b/docs/2_OSLab/g2/context.md index 973bce1..c8bfcf4 100644 --- a/docs/2_OSLab/g2/context.md +++ b/docs/2_OSLab/g2/context.md @@ -1 +1,226 @@ # 上下文切换 + +平台无关的代码位于 `kernel/src/process/context.rs` 中,而平台相关(aarch64)的代码位于 `kernel/src/arch/aarch64/interrupt/context.rs` 中。 + +## 相关数据结构 + +在 `kernel/src/arch/aarch64/interrupt/context.rs` 中定义了下列数据结构: + +1. `TrapFrame`: + + ```rust + pub struct TrapFrame { + pub elr: usize, + pub spsr: usize, + pub sp: usize, + pub tpidr: usize, // currently unused + // pub q0to31: [u128; 32], // disable SIMD/FP registers + pub x1to29: [usize; 29], + pub __reserved: usize, + pub x30: usize, // lr + pub x0: usize, + } + ``` + + 在陷入异常时向栈中压入的内容,由 `trap.S` 的 `__alltraps` 构建。详见“中断与异常”章节。 + +2. `ContextData`: + + ```rust + struct ContextData { + x19to29: [usize; 11], + lr: usize, + } + ``` + + 执行上下文切换时向栈中压入的内容,由 `__switch()` 函数构建。仅需保存 callee-saved 寄存器(被调用者保存,即 `x19~x30`)。详见下节“切换流程”。 + +3. `InitStack`: + + ```rust + pub struct InitStack { + context: ContextData, + tf: TrapFrame, + } + ``` + + 对于新创建的线程,不仅要向栈中压入 `ContextData` 结构,还需手动构造 `TrapFrame` 结构。为了方便管理就定义了 `InitStack` 包含这两个结构体。 + +4. `Context`: + + ```rust + pub struct Context { + stack_top: usize, + ttbr: PhysFrame, + asid: Asid, + } + ``` + + 每个进程控制块 `Process` (`kernel/src/process/context.rs`) 都会维护一个平台相关的 `Context` 对象,在 aarch64 中包含下列信息: + + 1. `stack_top`:内核栈顶地址; + 2. `ttbr`:页表基址; + 3. `asid`:Address Space ID,详见下文“页表切换与 ASID 机制”。 + +## 切换流程 + +在 `kernel/src/process/context.rs` 里,`switch_to()` 是平台无关的切换函数,最终会调用 `kernel/src/arch/aarch64/interrupt/context.rs` 里平台相关的切换函数 `Context::switch()`: + +```rust +pub unsafe fn switch(&mut self, target: &mut Self) { + target.asid = ASID_ALLOCATOR.lock().alloc(target.asid); + + // with ASID we needn't flush TLB frequently + ttbr_el1_write_asid(1, target.asid.value, target.ttbr); + barrier::dsb(barrier::ISH); + Self::__switch(&mut self.stack_top, &mut target.stack_top); +} +``` + +### 页表切换与 ASID 机制 + +首先进行的是页表的切换,即向 `TTBR1_EL1` 寄存器写入目标线程页表基址 `target.ttbr`。一般来说,切换页表后需要刷新 TLB,不过 aarch64 引入了 ASID (Address Space ID) 机制来避免频繁刷新 TLB。 + +#### ASID 机制 + +在页表项描述符中,有一个 `nG` 位,如果该位为 0,表示这页内存是全局可访问的(用于内核空间);如果该位为 1,表示这页内存不是全局可访问的,只有特定线程可访问。具体地,如果页表项中该位为 1,当访问相应虚拟地址更新 TLB 时,会有额外的信息被写入 TLB,该信息即 ASID,由操作系统分配,下次在 TLB 中查找该虚拟地址时就会检查 TLB 表项中的 ASID 是否与当前 ASID 匹配。相当于为不同的 ASID 各自创建了一个页表。 + +ASID 的大小可以为 8 位或 16 位,由 `TCR_EL1` 的 `AS` 字段指定,当前的 ASID 保存在 TTBR 的高位中,也可以由 `TCR_EL1` 的 `A1` 字段指定是 `TTBR0_EL1` 还是 `TTBR1_EL1`。在 RustOS 中,ASID 大小为 16 位,当前 ASID 保存在 `TTBR1_EL1` 的高 16 位。 + +在 `switch()` 函数里,首先会为目标线程分配一个 ASID,然后同时将该 ASID 与 `target.ttbr` 写入 `TTBR1_EL1` 即可,无需进行 TLB 刷新。 + +#### ASID 的分配 + +ASID 的分配需要保证同一时刻不同线程的 ASID 是不同的。这一部分参考了 Linux,主要思想是每次上下文切换时检查该线程原来的 ASID 是否有效,如果无效需要重新分配并刷新 TLB。 + +使用的数据结构如下: + +```rust +struct Asid { + value: u16, + generation: u16, +} + +struct AsidAllocator(Asid); +``` + +一个 ASID 结构由 16 位的 `value` 和 `generation` 组成,`value` 即 ASID 的具体值,`generation` 相当于时间戳。初始的 ASID 两个值都是 0,一定是无效的。该结构也被用于实现 ASID 分配器 `AsidAllocator`,此时该结构表示上一个被分配出去的 ASID。 + +```rust +const ASID_MASK: u16 = 0xffff; + +impl AsidAllocator { + fn new() -> Self { + AsidAllocator(Asid { value: 0, generation: 1 }) + } + + fn alloc(&mut self, old_asid: Asid) -> Asid { + if self.0.generation == old_asid.generation { + return old_asid; + } + + if self.0.value == ASID_MASK { + self.0.value = 0; + self.0.generation = self.0.generation.wrapping_add(1); + if self.0.generation == 0 { + self.0.generation += 1; + } + tlb_invalidate_all(); + } + self.0.value += 1; + return self.0; + } +} +``` + +分配的流程如下: + +1. 判断 `old_asid` 是否等于 `self.0.generation`,如果相等说明这一代的 ASID 还是有效的,直接返回 `old_asid`; +2. 否则,`old_asid` 已失效,如果当前代的 65535 个 ASID 没有分配完,就直接分配下一个; +3. 如果当前代的 65535 个 ASID 都分配完了,就开始新的一代,同时刷新 TLB。 + +### 寄存器与栈的切换 + +这一部分即 `Context` 的 `__switch()` 函数,传入的两个参数 `_self_stack` 与 `_target_stack` 是两个引用,分别用于保存**当前线程内核栈顶**与**目标线程内核栈顶**。 + +该函数用汇编实现(两个参数分别保存在 `x0` 和 `x1` 寄存器中): + +```armasm +mov x10, #-(12 * 8) +add x8, sp, x10 +str x8, [x0] +stp x19, x20, [x8], #16 // store callee-saved registers +stp x21, x22, [x8], #16 +stp x23, x24, [x8], #16 +stp x25, x26, [x8], #16 +stp x27, x28, [x8], #16 +stp x29, lr, [x8], #16 + +ldr x8, [x1] +ldp x19, x20, [x8], #16 // restore callee-saved registers +ldp x21, x22, [x8], #16 +ldp x23, x24, [x8], #16 +ldp x25, x26, [x8], #16 +ldp x27, x28, [x8], #16 +ldp x29, lr, [x8], #16 +mov sp, x8 + +str xzr, [x1] +ret +``` + +流程如下: + +1. 保存**当前栈顶** `sp` 到 `_self_stack` (`x0`),保存 **callee-saved 寄存器**到当前栈上; +2. 从 `_target_stack` (`x1`) 获取目标线程的**内核栈顶**,从目标线程内核栈顶恢复 **callee-saved 寄存器**; +4. 将 `sp` 设为目标线程内核栈顶,将 `_target_stack` (`x1`) 里的内容清空; +5. 使用 `ret` 指令返回,这会跳转到目标线程 `lr` 寄存器中存放的地址。 + +为什么只保存了 `sp` 与 callee-saved 寄存器,而不是所有寄存器?因为执行上下文切换就是在调用一个函数,在调用前后编译器会自动保存并恢复 caller-saved 寄存器(调用者保存,即 `x0~x18`)。 + +### 特权级切换 + +特权级保存在 `TrapFrame` 的 `spsr` 中,在中断返回后即能自动进行特权级切换。通过构造特定的 `spsr` 可让新线程运行在指定的特权级。 + +## 创建新线程 + +线程可通过下列三种方式创建: + +1. 创建新的**内核线程**:直接给出一个内核函数; +2. 创建新的**用户线程**:解析 ELF 文件; +3. 从一个线程 **fork** 出一个新线程:通过 `fork` 系统调用。 + +三种线程的平台无关创建流程实现在 `kernel/src/process/context.rs` 里,最终会分别调用 `kernel/src/arch/aarch64/interrupt/context.rs` 里的 `new_kernel_thread()`、`new_user_thread()` 和 `new_fork()` 这三个函数创建平台相关的 `Context` 结构。 + +在这三个函数里,会构造 `ContextData` 与 `TrapFrame` 结构,构成一个 `InitStack`,并向新线程的内核栈压入 `InitStack` 结构,最后将新内核栈顶地址、页表基址等信息构成 `Context` 结构返回。这两个结构的构造方式如下: + +* `ContextData`: + + 三种线程的初始 `ContextData` 结构都一样:清空 `x19~x29` 寄存器,将 `lr` 寄存器设为 `__trapret`,表示在 `__switch()` 结束后立即返回 `__trapret`,避免破坏构建好的栈帧结构。 + +* `TrapFrame`: + + 三种线程的 `TrapFrame` 各不相同: + + 1. 内核线程: + + | `TrapFrame` 中的字段| 值 | + |---------------------|----------------------------------------| + | `x0` | 内核线程参数 `arg` | + | `sp` | 内核栈顶地址 `kstack_top` | + | `elr` | 内核线程入口函数 `entry` 的地址 | + | `spsr` | `0b1101_00_0101`,切换到 EL1,启用 IRQ | + | 其他 | 清零 | + + 2. 用户线程: + + | `TrapFrame` 中的字段| 值 | + |---------------------|----------------------------------------| + | `sp` | 用户栈顶地址 `ustack_top` | + | `elr` | 用户线程入口地址 `entry_addr` | + | `spsr` | `0b1101_00_0000`,切换到 EL0,启用 IRQ | + | 其他 | 清零 | + + 注意用户线程是根据 ELF 文件创建的,参数即命令行参数,通过栈而不是寄存器传递。 + + 3. fork 线程:直接复制父线程的 `TrapFrame`,并将 fork 的返回值 `x0` 设为 0。 diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md index ba6ea52..38e9888 100644 --- a/docs/2_OSLab/g2/interrupt.md +++ b/docs/2_OSLab/g2/interrupt.md @@ -1,4 +1,4 @@ -# 中断 +# 中断与异常 ## AArch64 异常模型 @@ -72,7 +72,7 @@ ## RustOS 中的实现 -中断部分的代码主要位于 `kernel/src/arch/aarch64/interrupt/` 中。 +中断与异常部分的代码主要位于 `kernel/src/arch/aarch64/interrupt/` 中。 ### 异常启用与屏蔽 @@ -92,7 +92,7 @@ pub unsafe fn disable() { } ``` -此外,也可在中断返回前通过修改保存的 `SPSR` 寄存器启用或屏蔽中断,详见 `interrupt/context.rs` 中的 `TrapFrame::new_kernel_thread()` 与 `TrapFrame::new_user_thread()` 函数。 +此外,也可在异常返回前通过修改保存的 `SPSR` 寄存器启用或屏蔽异常,详见 `interrupt/context.rs` 中的 `TrapFrame::new_kernel_thread()` 与 `TrapFrame::new_user_thread()` 函数。 ### 异常向量 diff --git a/docs/2_OSLab/g2/raspi3.md b/docs/2_OSLab/g2/raspi3.md index 268ec5f..52855e8 100644 --- a/docs/2_OSLab/g2/raspi3.md +++ b/docs/2_OSLab/g2/raspi3.md @@ -10,8 +10,8 @@ * [概述](overview.md) * [环境配置](environment.md) -* [启动](boot.md) -* [中断](interrupt.md) +* [启动与初始化](boot.md) +* [中断与异常](interrupt.md) * [内存管理](memory.md) * [上下文切换](context.md) * [设备驱动](drivers.md) From 9bc0a89a9447ad0067880c6ca76f0f12c4049a9c Mon Sep 17 00:00:00 2001 From: equation314 Date: Mon, 31 Dec 2018 17:23:11 +0800 Subject: [PATCH 24/30] aarch64/doc: add file links --- docs/2_OSLab/g2/boot.md | 16 ++++++------ docs/2_OSLab/g2/context.md | 12 ++++----- docs/2_OSLab/g2/environment.md | 4 +-- docs/2_OSLab/g2/interrupt.md | 46 +++++++++++++++++----------------- docs/2_OSLab/g2/memory.md | 24 +++++++++--------- docs/2_OSLab/g2/overview.md | 4 ++- 6 files changed, 54 insertions(+), 52 deletions(-) diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md index 10b267e..96e72e2 100644 --- a/docs/2_OSLab/g2/boot.md +++ b/docs/2_OSLab/g2/boot.md @@ -13,7 +13,7 @@ ## linker.ld -链接脚本位于 `kernel/src/arch/aarch64/boot/linker.ld`,主要内容如下: +链接脚本位于 [kernel/src/arch/aarch64/boot/linker.ld](../../../kernel/src/arch/aarch64/boot/linker.ld),主要内容如下: ``` SECTIONS { @@ -41,14 +41,14 @@ SECTIONS { 几个要点: * CPU 最先从 `.text.boot (0x80000)` 处开始执行。 -* 在 `boot.S` 中做好了必要的初始化后,将跳转到 `.text.entry/_start (0x100000)`,再从这里跳转到 Rust 代码 `rust_main()`。 -* `boot.S` 的偏移为 `0x80000`,Rust 代码的偏移为 `0x100000`。 +* 在 [boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 中做好了必要的初始化后,将跳转到 `_start (0x100000)`,再从这里跳转到 Rust 代码 `rust_main()`。 +* [boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 的偏移为 `0x80000`,Rust 代码的偏移为 `0x100000`。 * 跳转到 `rust_main()` 后,`0x0~0x100000` 这段内存将被作为内核栈,大小为 1MB,栈顶即 `bootstacktop (0x100000)`。 -* `boot.S` 结束后还未启用 MMU,可直接访问物理地址。 +* [boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 结束后还未启用 MMU,可直接访问物理地址。 ## boot.S -CPU 启动代码位于 `kernel/src/arch/aarch64/boot/boot.S`,负责初始化一些系统寄存器,并将当前异常级别(exception level)切换到 EL1。 +CPU 启动代码位于 [kernel/src/arch/aarch64/boot/boot.S](../../../kernel/src/arch/aarch64/boot/boot.S),负责初始化一些系统寄存器,并将当前异常级别(exception level)切换到 EL1。 AArch64 有 4 个异常级别,相当于 x86 的特权级,分别为: @@ -59,7 +59,7 @@ AArch64 有 4 个异常级别,相当于 x86 的特权级,分别为: 在 RustOS 中,内核将运行在 EL1 上,用户程序将运行在 EL0 上。 -`boot.S` 的主要流程如下: +[boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 的主要流程如下: 1. 获取核的编号,目前只使用 0 号核,其余核将被闲置: @@ -192,7 +192,7 @@ AArch64 有 4 个异常级别,相当于 x86 的特权级,分别为: ## rust_main -在 `boot.S` 初始化完毕后,会进入 Rust 函数 `rust_main()`: +在 [boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 初始化完毕后,会进入 [kernel/src/arch/aarch64/mod.rs](../../../kernel/src/arch/aarch64/mod.rs#L19) 的 Rust 函数 `rust_main()`: ```rust /// The entry point of kernel @@ -222,4 +222,4 @@ pub extern "C" fn rust_main() -> ! { 5. 初始化内存管理,包括物理页帧分配器与内核堆分配器,最后会建立一个新的页表重新映射内核; 6. 初始化其他设备驱动,包括 Frambuffer、Console、Timer; 7. 初始化进程管理,包括线程调度器、进程管理器,并为每个核建立一个 idle 线程,最后会加载 SFS 文件系统加入用户态 shell 进程; -8. 最后调用 `crate::kmain()`,按调度器轮流运行创建的线程。 +8. 最后调用 `crate::kmain()`,按调度器轮流执行创建的线程。 diff --git a/docs/2_OSLab/g2/context.md b/docs/2_OSLab/g2/context.md index c8bfcf4..078d65a 100644 --- a/docs/2_OSLab/g2/context.md +++ b/docs/2_OSLab/g2/context.md @@ -1,10 +1,10 @@ # 上下文切换 -平台无关的代码位于 `kernel/src/process/context.rs` 中,而平台相关(aarch64)的代码位于 `kernel/src/arch/aarch64/interrupt/context.rs` 中。 +平台无关的代码位于 [kernel/src/process/context.rs](../../../kernel/src/process/context.rs) 中,而平台相关(aarch64)的代码位于 [kernel/src/arch/aarch64/interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs) 中。 ## 相关数据结构 -在 `kernel/src/arch/aarch64/interrupt/context.rs` 中定义了下列数据结构: +在 [kernel/src/arch/aarch64/interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs) 中定义了下列数据结构: 1. `TrapFrame`: @@ -22,7 +22,7 @@ } ``` - 在陷入异常时向栈中压入的内容,由 `trap.S` 的 `__alltraps` 构建。详见“中断与异常”章节。 + 在陷入异常时向栈中压入的内容,由 [trap.S](../../../kernel/src/arch/aarch64/interrupt/trap.S#L92) 的 `__alltraps` 构建。详见“中断与异常”相关章节。 2. `ContextData`: @@ -56,7 +56,7 @@ } ``` - 每个进程控制块 `Process` (`kernel/src/process/context.rs`) 都会维护一个平台相关的 `Context` 对象,在 aarch64 中包含下列信息: + 每个进程控制块 `Process` ([kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L13)) 都会维护一个平台相关的 `Context` 对象,在 aarch64 中包含下列信息: 1. `stack_top`:内核栈顶地址; 2. `ttbr`:页表基址; @@ -64,7 +64,7 @@ ## 切换流程 -在 `kernel/src/process/context.rs` 里,`switch_to()` 是平台无关的切换函数,最终会调用 `kernel/src/arch/aarch64/interrupt/context.rs` 里平台相关的切换函数 `Context::switch()`: +在 [kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L22) 里,`switch_to()` 是平台无关的切换函数,最终会调用 [kernel/src/arch/aarch64/interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs#L129) 里平台相关的切换函数 `Context::switch()`: ```rust pub unsafe fn switch(&mut self, target: &mut Self) { @@ -190,7 +190,7 @@ ret 2. 创建新的**用户线程**:解析 ELF 文件; 3. 从一个线程 **fork** 出一个新线程:通过 `fork` 系统调用。 -三种线程的平台无关创建流程实现在 `kernel/src/process/context.rs` 里,最终会分别调用 `kernel/src/arch/aarch64/interrupt/context.rs` 里的 `new_kernel_thread()`、`new_user_thread()` 和 `new_fork()` 这三个函数创建平台相关的 `Context` 结构。 +三种线程的平台无关创建流程实现在 [kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L40) 里,最终会分别调用 [kernel/src/arch/aarch64/interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs#L146) 里的 `new_kernel_thread()`、`new_user_thread()` 和 `new_fork()` 这三个函数创建平台相关的 `Context` 结构。 在这三个函数里,会构造 `ContextData` 与 `TrapFrame` 结构,构成一个 `InitStack`,并向新线程的内核栈压入 `InitStack` 结构,最后将新内核栈顶地址、页表基址等信息构成 `Context` 结构返回。这两个结构的构造方式如下: diff --git a/docs/2_OSLab/g2/environment.md b/docs/2_OSLab/g2/environment.md index 29fb105..a7299a2 100644 --- a/docs/2_OSLab/g2/environment.md +++ b/docs/2_OSLab/g2/environment.md @@ -62,14 +62,14 @@ * `mode=debug|release`:指定 `debug` 还是 `release` 模式。默认 `debug`。 * `graphic=on|off`:是否启用图形输出。默认 `on`。 * `smp=1|2|3|4|...`:指定 SMP 的核数。目前 aarch64 的 SMP 未实现,该选项无效。 - * `raspi3_timer=system/generic`:使用 Raspberry Pi 的 System Timer 还是 Generic Timer。默认 `generic`,且在 QEMU 中只能使用 Generic Timer。 + * `raspi3_timer=system|generic`:使用 Raspberry Pi 的 System Timer 还是 Generic Timer。默认 `generic`,且在 QEMU 中只能使用 Generic Timer。 * `prefix=`:指定 aarch64 工具链前缀。默认 `aarch64-none-elf-`,某些 Linux 中的工具链前缀为 `aarch64-linux-gnu-`。 * `LOG=off|error|warn|info|debug|trace`:指定输出日志的级别。默认 `warn`。 * `SFSIMG=`:用户程序 SFS 镜像路径。默认 `../user/img/ucore-aarch64.img`,即用 C 语言编写的直接从原 uCore 中移植过来的用户程序。如欲使用 Rust 编写的用户程序可将其设为 `../user/build/user-aarch64.img`。 ## 在真机上运行 -1. 往 SD 卡中写入 [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) 原版系统镜像:直接看 。然后需要将原版的 `config.txt` 替换为 `tools/raspi-firmware/config.txt`。 +1. 往 SD 卡中写入 [Raspbian](https://www.raspberrypi.org/downloads/raspbian/) 原版系统镜像:直接看 。然后需要将原版的 `config.txt` 替换为 [tools/raspi-firmware/config.txt](../../../tools/raspi-firmware/config.txt)。 2. 写入 RustOS 内核镜像: diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md index 38e9888..121d833 100644 --- a/docs/2_OSLab/g2/interrupt.md +++ b/docs/2_OSLab/g2/interrupt.md @@ -4,7 +4,7 @@ > 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile, capture D1.1, D1.7, D1.10, D1.11, D1.13, D1.14, D1.16. -在 AArch64 中,各种中断被统称为异常(exception),包括: +在 AArch64 中,各种中断被统称为**异常**(exception),包括: * Reset. * Interrupts. @@ -13,16 +13,16 @@ * Supervisor calls (SVCs), Secure Monitor calls (SMCs), and hypervisor calls (HVCs). * Debug exceptions. -这些异常可分为同步异常(synchronous exception)与异步异常(asynchronous exception)两大类: +这些异常可分为**同步异常**(synchronous exception)与**异步异常**(asynchronous exception)两大类: * 同步异常:发生在执行一条特定的指令时,包括执行系统调用指令(`svc`、`hvc`)、断点指令(debug exceptions)、Instruction Aborts、Data Aborts 等。 -* 异步异常:发生的时机不确定,又被称为中断(interrupt),是发送给处理机的信号,包括 SError、IRQ、FIQ 等。 +* 异步异常:发生的时机不确定,又被称为**中断**(interrupt),是发送给处理机的信号,包括 SError、IRQ、FIQ 等。 ### 异常处理 -当发生异常时,CPU 会根据异常的类型,跳转到特定的地址执行,该地址被称为异常向量(exception vector)。 +当发生异常时,CPU 会根据异常的类型,跳转到特定的地址执行,该地址被称为**异常向量**(exception vector)。 -不同类型异常的异常向量通过统一的向量基地址寄存器(Vector Base Address Register, VBAR)加上不同的偏移得到。在 EL1、EL2、EL3 下各有一个 VBAR 寄存器 `VBAR_ELx`。此时异常被分为 4 大类,每一类根据异常来源的不同又可分为 4 类,于是共有 16 个异常向量。 +不同类型异常的异常向量通过统一的**向量基地址寄存器**(Vector Base Address Register, VBAR)加上不同的偏移得到。在 EL1、EL2、EL3 下各有一个 VBAR 寄存器 `VBAR_ELx`。此时异常被分为 4 大类,每一类根据异常来源的不同又可分为 4 类,于是共有 16 个异常向量。 4 种类型的异常分别为: @@ -47,11 +47,11 @@ | LowerAArch64 | `0x400` | `0x480` | `0x500` | `0x580` | | LowerAArch32 | `0x600` | `0x680` | `0x700` | `0x780` | -如果该异常是 Synchronous 或 SError,异常症状寄存器(Exception Syndrome Register, ESR)将被设置,用于记录具体的异常类别 EC (exception class) 与 ISS (Instruction Specific Syndrome)。在 EL1、EL2、EL3 下各有一个 ESR 寄存器 `ESR_ELx`。具体的 EC、ISS 编码见官网文档 ARMv8 Reference Manual D1.10.4 节。 +如果该异常是 Synchronous 或 SError,**异常症状寄存器**(Exception Syndrome Register, ESR)将被设置,用于记录具体的异常类别 EC (exception class) 与 ISS (Instruction Specific Syndrome)。在 EL1、EL2、EL3 下各有一个 ESR 寄存器 `ESR_ELx`。具体的 EC、ISS 编码见官网文档 ARMv8 Reference Manual D1.10.4 节。 ### 异常屏蔽 -某些异常可以被屏蔽(mask),即发生时不跳转到相应的异常向量。可被屏蔽的异常包括所有异步异常与调试时的同步异常(debug exceptions),共 4 种,分别由 `DAIF` 4 个位控制: +某些异常可以被**屏蔽**(mask),即发生时不跳转到相应的异常向量。可被屏蔽的异常包括所有异步异常与调试时的同步异常(debug exceptions),共 4 种,分别由 `DAIF` 4 个位控制: 1. `D`: Debug exception 2. `A`: SError interrupt @@ -62,21 +62,21 @@ ### 异常返回 -当发生异常时,异常返回地址会被设置,保存在异常链接寄存器(Exception Link Register, ELR) `ELR_ELx` 中。 +当发生异常时,异常返回地址会被设置,保存在**异常链接寄存器**(Exception Link Register, ELR) `ELR_ELx` 中。 -异常返回使用 `eret` 指令完成。当异常返回时,`PC` 会根据当前特权级被恢复为 `ELR_ELx` 中的,`PSTATE` (process state)也会被恢复为 `SPSR_ELx` 中的。`PSTATE` 是当前进程状态信息的抽象,保存在 `SPSR_ELx` 中,包含条件标志位 `NZCV`、异常屏蔽位 `DAIF`、当前特权级等信息。如果修改了 `SPSR_ELx` 中相应的位并进行异常返回,就能实现异常级别切换、异常开启/屏蔽等功能。 +异常返回使用 **`eret`** 指令完成。当异常返回时,`PC` 会根据当前特权级被恢复为 `ELR_ELx` 中的,**进程状态** `PSTATE` (process state)也会被恢复为 `SPSR_ELx` 中的。`PSTATE` 是当前进程状态信息的抽象,保存在 `SPSR_ELx` 中,包含条件标志位 `NZCV`、异常屏蔽位 `DAIF`、当前特权级等信息。如果修改了 `SPSR_ELx` 中相应的位并进行异常返回,就能实现异常级别切换、异常开启/屏蔽等功能。 ### 系统调用 -一般使用 `svc` 指令(supervisor call)完成,将触发一个同步异常。 +一般使用 **`svc`** 指令(supervisor call)完成,将触发一个同步异常。 ## RustOS 中的实现 -中断与异常部分的代码主要位于 `kernel/src/arch/aarch64/interrupt/` 中。 +中断与异常部分的代码主要位于模块 [kernel/src/arch/aarch64/interrupt](../../../kernel/src/arch/aarch64/interrupt/) 中。 ### 异常启用与屏蔽 -在 `interrupt/mod.rs` 中使用了 `DAIFClr` 与 `DAIFSet` 特殊目的寄存器分别实现了异常的启用与屏蔽(仅针对 IRQ),分别为 `enable()` 与 `disable()` 函数,代码如下: +在 [interrupt/mod.rs](../../../kernel/src/arch/aarch64/interrupt/mod.rs#L24) 中使用了 `DAIFClr` 与 `DAIFSet` 特殊目的寄存器分别实现了异常的启用与屏蔽(仅针对 IRQ),分别为 `enable()` 与 `disable()` 函数,代码如下: ```rust /// Enable the interrupt (only IRQ). @@ -92,13 +92,13 @@ pub unsafe fn disable() { } ``` -此外,也可在异常返回前通过修改保存的 `SPSR` 寄存器启用或屏蔽异常,详见 `interrupt/context.rs` 中的 `TrapFrame::new_kernel_thread()` 与 `TrapFrame::new_user_thread()` 函数。 +此外,也可在异常返回前通过修改保存的 `SPSR` 寄存器启用或屏蔽异常,详见 [interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs#L26) 中的 `TrapFrame::new_kernel_thread()` 与 `TrapFrame::new_user_thread()` 函数。 ### 异常向量 -全局符号 `__vectors` 定义了异常向量基址,并在 `interrupt/mod.rs` 的 `init()` 函数中通过 `msr vbar_el1, x0` 指令,将 `VBAR_EL1` 设为了 `__vectors`。 +全局符号 `__vectors` 定义了异常向量基址,并在 [interrupt/mod.rs](../../../kernel/src/arch/aarch64/interrupt/mod.rs#L13) 的 `init()` 函数中通过 `msr vbar_el1, x0` 指令,将 `VBAR_EL1` 设为了 `__vectors`。 -16 个异常向量分别通过宏 `HANDLER source kind` 定义在 `interrupt/vector.S` 中,代码如下: +16 个异常向量分别通过宏 `HANDLER source kind` 定义在 [interrupt/vector.S](../../../kernel/src/arch/aarch64/interrupt/vector.S) 中,代码如下: ```armasm .macro HANDLER source kind @@ -112,7 +112,7 @@ pub unsafe fn disable() { 不同的异常向量对应的异常处理例程结构相同,仅有 `source` 和 `kind` 不同。`source` 与 `kind` 将会被合并成一个整数并存到寄存器 `x0` 中,以便作为参数传给 Rust 编写的异常处理函数。 -由于不同异常向量的间距较少(仅为 `0x80` 字节),所以不在 `HANDLER` 中做细致的处理,而是统一跳转到 `__alltraps` 中进行处理。 +由于不同异常向量的间距较少(仅为 `0x80` 字节),所以不在 `HANDLER` 中做细致的处理,而是统一跳转到 [trap.S](../../../kernel/src/arch/aarch64/interrupt/trap.S#L92) 的 `__alltraps` 中进行处理。 ### 异常处理 @@ -141,7 +141,7 @@ __trapret: 3. 当该函数返回时,通过宏 `RESTORE_ALL` 从 `TrapFrame` 中恢复各寄存器; 4. 最后通过 `eret` 指令进行异常返回。 -`TrapFrame` 定义在 `interrupt/context.rs` 中,结构如下: +`TrapFrame` 定义在 [interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs#L12)中,结构如下: ```rust pub struct TrapFrame { @@ -159,9 +159,9 @@ pub struct TrapFrame { 目前保存的寄存器包括:通用寄存器 `x0~x30`、异常返回地址 `ELR`、栈指针 `SP`、进程状态 `SPSR`。由于在 `aarch64-blog_os.json` 中禁用了 `NEON` 指令,不需要保存 `q0~q31` 这些 SIMD/FP 寄存器。 -`rust_trap()` 函数定义在 `interrupt/handler.rs` 中。首先判断传入的 `kind`: +`rust_trap()` 函数定义在 [interrupt/handler.rs](../../../kernel/src/arch/aarch64/interrupt/handler.rs#L43) 中。首先判断传入的 `kind`: -* 如果是 `Synchronous`:在 `interrupt/syndrome.rs` 中解析 `ESR`,根据具体的异常类别分别处理断点指令、系统调用、缺页异常等。 +* 如果是 `Synchronous`:在 [interrupt/syndrome.rs](../../../kernel/src/arch/aarch64/interrupt/syndrome.rs) 中解析 `ESR`,根据具体的异常类别分别处理断点指令、系统调用、缺页异常等。 * 如果是 `IRQ`:调用 `handle_irq()` 函数处理 IRQ。 * 其他类型的异常(SError interrupt、Debug exception)暂不做处理,直接调用 `crate::trap::error()`。 @@ -169,7 +169,7 @@ pub struct TrapFrame { 如果 `ESR` 的异常类别是 `SVC`,则说明该异常由系统调用指令 `svc` 触发,紧接着会调用 `handle_syscall()` 函数。 -RustOS 的系统调用方式如下(实现在 `user/ucore-lib/src/syscall.rs` 中): +RustOS 的系统调用方式如下(实现在 [user/ucore-ulib/src/syscall.rs](../../../user/ucore-ulib/src/syscall.rs#L47) 中): * 将系统调用号保存在寄存器 `x8`,将 6 参数分别保存在寄存器 `x0~x5` 中; * 执行系统调用指令 `svc 0`; @@ -189,13 +189,13 @@ RustOS 的系统调用方式如下(实现在 `user/ucore-lib/src/syscall.rs` 中 * TLB conflict abort. * ... -其中 level 表示在第几级页表产生异常。当状态码是 translation fault、access flag fault、permission fault 时,将被判断为是缺页异常,并调用 `handle_page_fault()` 处理缺页异常。 +其中 level 表示在第几级翻译表产生异常。当状态码是 translation fault、access flag fault、permission fault 时,将被判断为是缺页异常,并调用 `handle_page_fault()` 处理缺页异常。 发生 Instruction Abort 与 Data Abort 的虚拟地址将会被保存到 `FAR_ELx` 系统寄存器中。此时再调用 `crate::memory::page_fault_handler(addr)` 来做具体的缺页处理。 #### IRQ -如果该异常是 IRQ,则会调用 `kernel/src/arch/aarch64/board/raspi3/irq.rs` 中的 `handle_irq()` 函数。该函数与 board 相关,即使都是在 aarch64 下,不同 board 的 IRQ 处理方式也不一样,所以放到了 `kernel/src/arch/board/raspi3` 中,表示是 RPi3 特有的 IRQ 处理方式。 +如果该异常是 IRQ,则会调用 [kernel/src/arch/aarch64/board/raspi3/irq.rs](../../../kernel/src/arch/aarch64/board/raspi3/irq.rs#L8) 中的 `handle_irq()` 函数。该函数与 board 相关,即使都是在 aarch64 下,不同 board 的 IRQ 处理方式也不一样,所以放到了模块 [kernel/src/arch/aarch64/board/raspi3](../../../kernel/src/arch/aarch64/board/raspi3/) 中,表示是 RPi3 特有的 IRQ 处理方式。 该函数首先会判断是否有时钟中断,如果有就先处理时钟中断: @@ -207,7 +207,7 @@ if controller.is_pending() { } ``` -其中使用了 crate bcm2837,位于 `crate/bcm2837` 中,是一个封装良好的访问 RPi3 底层外围设备的库。 +其中使用了 crate bcm2837,位于 [crate/bcm2837](../../../crate/bcm2837/) 中,是一个封装良好的访问 RPi3 底层外围设备的库。 然后会遍历所有其他未处理的 IRQ,如果该 IRQ 已注册,就调用它的处理函数: diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md index 01104ae..67f1671 100644 --- a/docs/2_OSLab/g2/memory.md +++ b/docs/2_OSLab/g2/memory.md @@ -120,7 +120,7 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为 #### Cache 操作 (C5.3) -Cache 是主存的缓存,如果一个物理地址在 cache 中命中,将不会访问主存,而是直接从 cache 中得到数据。Cache 又分为指令 cache 与 数据 cache,分别作用在取指与普通访存时。 +**Cache** 是主存的缓存,如果一个物理地址在 cache 中命中,将不会访问主存,而是直接从 cache 中得到数据。Cache 又分为指令 cache 与 数据 cache,分别作用在取指与普通访存时。 当通过普通访存的形式修改了代码段的数据,并跳转到了这里运行,此时需要刷新指令 cache,以防取指时从指令 cache 中取到旧的数据。指令 cache 可使用下列代码一次性全部清空: @@ -144,11 +144,11 @@ Cache line 的大小可通过 `CTR_EL0` 寄存器读取,一般为 16 个 WORD 在上下文切换时,需要修改 TTBR1_EL1 寄存器,如果不刷新 TLB 也不使用 ASID,TLB 中将会保留旧进程的虚拟——物理地址映射关系,导致进程访问错误的物理地址。不过如果每次上下文切换都刷新 TLB,开销又较大。 -ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下文切换时,每个进程会被分配一个唯一的 ASID,并将其保存到 `TTBR1_EL1` 的高 16 位中。此时 TLB 中会同时记录一个虚拟地址及其进程的 ASID 对应的物理地址,使得不同进程的相同虚拟地址在 TLB 中也会被映射为不同的物理地址。 +**ASID** (Address Space ID) 的引入就是为了避免在上下文切换过程中刷新 TLB。详见“上下文切换”相关章节。 ## RustOS 中的实现 -在 RustOS 中,aarch64 平台相关的内存管理主要实现在 `kernel/src/arch/aarch64/memory.rs` 与 `kernel/src/arch/aarch64/paging.rs` 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 aarch64 底层系统寄存器、翻译表的访问。 +在 RustOS 中,aarch64 平台相关的内存管理主要实现在 [kernel/src/arch/aarch64/memory.rs](../../../kernel/src/arch/aarch64/memory.rs) 与 [kernel/src/arch/aarch64/paging.rs](../../../kernel/src/arch/aarch64/paging.rs) 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 aarch64 底层系统寄存器、翻译表的访问。 (注:为了保持与其他平台的一致性,下文使用“页表”指代“翻译表”,并且下文中页表的级数 1, 2, 3, 4 分别指官方文档中翻译表的级数 3, 2, 1, 0) @@ -156,11 +156,11 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 ### aarch64 库中的页表 -与其他平台一样,页表实现在内核代码 `paging.rs` 中,其实只是套了层壳,诸如 map 等复杂操作的实现位于 aarch64 库中。 +与其他平台一样,页表实现在内核代码 [paging.rs](../../../kernel/src/arch/aarch64/paging.rs) 中,其实只是套了层壳,诸如 map 等复杂操作的实现位于 aarch64 库中。 #### 页表描述符 -在 `aarch64/src/paging/page_table.rs` 中实现了页表(`PageTable`)与页表项(`PageTableEntry`)。页表有 512 个项,每个页表项是一个 64 位描述符。一个页表项描述符由下面 3 部分字段构成: +在 [aarch64/src/paging/page_table.rs](https://github.com/equation314/aarch64/blob/master/src/paging/page_table.rs) 中实现了页表(`PageTable`)与页表项(`PageTableEntry`)。页表有 512 个项,每个页表项是一个 64 位描述符。一个页表项描述符由下面 3 部分字段构成: 1. **地址**(address):位于描述符的第 12 到 47 位。根据描述符的 `TABLE_OR_PAGE` 位,分别指向下列 3 种地址: @@ -199,7 +199,7 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 | 59 | PXNTable | 该页表所映射的所有内存都是特权级下不可执行的 | | 60 | XNTable | 该页表所映射的所有内存都是非特权级下不可执行的 | -3. **属性**(attribute):属性字段指明了这段内存的内存属性,包括内存类型(位 2、3、4)与可共享性(位 8、9)。在 `aarch64/src/paging/memory_attribute.rs` 中预定义了 3 中内存属性,分别为: +3. **属性**(attribute):属性字段指明了这段内存的内存属性,包括内存类型(位 2、3、4)与可共享性(位 8、9)。在 [aarch64/src/paging/memory_attribute.rs](https://github.com/equation314/aarch64/blob/master/src/paging/memory_attribute.rs) 中预定义了 3 中内存属性,分别为: 1. Normal:普通可缓存内存,cache 属性为 Write-Back Non-transient Read-Allocate Write-Allocate,内部共享; 2. Device:Device-nGnRE 类型的内存,不可缓存,外部共享; @@ -216,7 +216,7 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 * 2 级页表:`R || R || IA[47..39] || IA[38..30]`; * 1 级页表:`R || IA[47..39] || IA[38..30] || IA[29..21]`; -在 `aarch64/src/paging/recursive.rs` 中,为结构体 `RecursivePageTable` 实现了一系列函数,主要几个如下: +在 [aarch64/src/paging/recursive.rs](https://github.com/equation314/aarch64/blob/master/src/paging/recursive.rs) 中,为结构体 `RecursivePageTable` 实现了一系列函数,主要的几个如下: * `new(table: PageTable)`:将虚拟地址表示的 `table` 作为 4 级页表,新建 `RecursivePageTable` 对象; * `map_to(self, page: Page, frame: PhysFrame, flags: PageTableFlags, attr: PageTableAttribute, allocator: FrameAllocator)`:将虚拟地址表示的**页** `page`,映射为物理地址表示的**帧** `frame`,并设置标志位 `flags` 和属性 `attr`,如果需要新分配页表就用 `allocator` 分配。页与帧的大小都是 4KB; @@ -224,17 +224,17 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 ### 实现内存管理 -下面是 `memory.rs` 与 `paging.rs` 中对内存管理的实现。 +下面是 [memory.rs](../../../kernel/src/arch/aarch64/memory.rs) 与 [paging.rs](../../../kernel/src/arch/aarch64/paging.rs) 中对内存管理的实现。 #### 启用 MMU -由于在真机上使用原子指令需要 MMU 的支持,应该尽量早地启用 MMU,而 `boot.S` 中并没有建立页表与启用 MMU,所以启动完毕一进入 `rust_main()` 函数,就会调用 `memory.rs` 里的 `init_serial_early()` 函数来启用 MMU。 +由于在真机上使用原子指令需要 MMU 的支持,应该尽量早地启用 MMU,而 [boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 中并没有建立页表与启用 MMU,所以启动完毕一进入 `rust_main()` 函数,就会调用 [memory.rs](../../../kernel/src/arch/aarch64/memory.rs#L20) 里的 `init_mmu_early()` 函数来启用 MMU。 该函数主要做了下面三件事: 1. 建立一个临时的地址翻译系统。 - 这部分的代码主要位于 `paging.rs` 里的 `setup_temp_page_table()` 函数。这个地址翻译系统只是临时的,未进行细致的权限控制,更细致的地址翻译系统将在下节“重新映射内核地址空间”中建立。 + 这部分的代码主要位于 [paging.rs](../../../kernel/src/arch/aarch64/paging.rs#L14) 里的 `setup_temp_page_table()` 函数。这个地址翻译系统只是临时的,未进行细致的权限控制,更细致的地址翻译系统将在下节“重新映射内核地址空间”中建立。 该过程共需要三个 4KB 大小的页面,分别用于第 2~4 级页表。然后按下图方式映射: @@ -304,7 +304,7 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 #### 初始化内存管理 -这部分实现在 `memory.rs` 里的 `init()` 函数中。包含下列三部分: +这部分实现在 [memory.rs](../../../kernel/src/arch/aarch64/memory.rs#L12) 里的 `init()` 函数中。包含下列三部分: 1. 探测物理内存,初始化物理页帧分配器:由函数 `init_frame_allocator()`,先用 atags 库探测出可用物理内存的区间 `[start, end]`,然后以 4KB 大小的页为单位插入 `FRAME_ALLOCATOR` 中。由于 Raspberry Pi 3 拥有 1GB 内存,物理页帧数多达 256K,所以需要使用 `bit_allocator::BitAlloc1M`。 @@ -325,7 +325,7 @@ ASID 的引入就是为了避免在上下文切换过程中刷新 TLB。上下 `InactivePageTable` 定义了一个**非活跃页表**,准确地说是由第 4 级页表基址指定的一套地址翻译系统,一般随着 `MemorySet` 的建立而建立。除了在 `remap_the_kernel()` 中建立的是内核新页表,其他时候都是用户页表。 -在不同的平台下需要各自实现以下函数(`paging.rs` 中): +在不同的平台下需要各自实现以下函数([paging.rs](../../../kernel/src/arch/aarch64/paging.rs#L183) 中): * `new_bare()`:新建一套地址翻译系统。首先调用 `alloc_frame()` 分配一个物理页帧用于存放唯一的 4 级页表,然后修改该物理页帧,使得其最后一项映射到自身,即建立自映射页表。通过调用 `active_table().with_temporary_map()` 让当前活跃的页表新建一个临时的映射,可在页表被激活后也能修改任意物理页帧。 * `token()`:获取该翻译系统的页表基址,即第 4 级页表的物理地址。 diff --git a/docs/2_OSLab/g2/overview.md b/docs/2_OSLab/g2/overview.md index 41d9bad..832dd4e 100644 --- a/docs/2_OSLab/g2/overview.md +++ b/docs/2_OSLab/g2/overview.md @@ -10,7 +10,9 @@ | 片上系统(SoC) | Broadcom BCM2837B0 | | 处理器(CPU) | 4 x Cortex-A53 1.4Ghz | 图形处理器(GPU) | Broadcom VideoCore IV | -| 内存 | 1GB(与 GPU 共享) | +| 内存 | 1GB (与 GPU 共享) | + +## AArch64 简介 ## 官方文档 From e1d0d2a0200557c6981a9948cf66bede110c41aa Mon Sep 17 00:00:00 2001 From: equation314 Date: Mon, 31 Dec 2018 22:51:13 +0800 Subject: [PATCH 25/30] aarch64/doc: add overview of AArch64 --- docs/2_OSLab/g2/boot.md | 13 +-- docs/2_OSLab/g2/context.md | 12 +-- docs/2_OSLab/g2/environment.md | 4 +- docs/2_OSLab/g2/img/general-register.png | Bin 0 -> 166662 bytes docs/2_OSLab/g2/interrupt.md | 24 +++-- docs/2_OSLab/g2/memory.md | 8 +- docs/2_OSLab/g2/overview.md | 109 ++++++++++++++++++++++- kernel/src/arch/aarch64/boot/linker.ld | 2 +- 8 files changed, 132 insertions(+), 40 deletions(-) create mode 100644 docs/2_OSLab/g2/img/general-register.png diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md index 96e72e2..c71d8f7 100644 --- a/docs/2_OSLab/g2/boot.md +++ b/docs/2_OSLab/g2/boot.md @@ -17,7 +17,7 @@ ``` SECTIONS { - . = 0x80000; /* Raspbery Pi 3 Aarch64 (kernel8.img) load address */ + . = 0x80000; /* Raspbery Pi 3 AArch64 (kernel8.img) load address */ .boot : { KEEP(*(.text.boot)) /* from boot.S */ @@ -48,17 +48,10 @@ SECTIONS { ## boot.S -CPU 启动代码位于 [kernel/src/arch/aarch64/boot/boot.S](../../../kernel/src/arch/aarch64/boot/boot.S),负责初始化一些系统寄存器,并将当前异常级别(exception level)切换到 EL1。 - -AArch64 有 4 个异常级别,相当于 x86 的特权级,分别为: - -* EL0: Applications. -* EL1: OS kernel and associated functions that are typically described as privileged. -* EL2: Hypervisor. -* EL3: Secure monitor. - 在 RustOS 中,内核将运行在 EL1 上,用户程序将运行在 EL0 上。 +CPU 启动代码位于 [kernel/src/arch/aarch64/boot/boot.S](../../../kernel/src/arch/aarch64/boot/boot.S),负责初始化一些系统寄存器,并将当前异常级别切换到 EL1。 + [boot.S](../../../kernel/src/arch/aarch64/boot/boot.S) 的主要流程如下: 1. 获取核的编号,目前只使用 0 号核,其余核将被闲置: diff --git a/docs/2_OSLab/g2/context.md b/docs/2_OSLab/g2/context.md index 078d65a..4390675 100644 --- a/docs/2_OSLab/g2/context.md +++ b/docs/2_OSLab/g2/context.md @@ -56,7 +56,7 @@ } ``` - 每个进程控制块 `Process` ([kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L13)) 都会维护一个平台相关的 `Context` 对象,在 aarch64 中包含下列信息: + 每个进程控制块 `Process` ([kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L13)) 都会维护一个平台相关的 `Context` 对象,在 AArch64 中包含下列信息: 1. `stack_top`:内核栈顶地址; 2. `ttbr`:页表基址; @@ -79,13 +79,13 @@ pub unsafe fn switch(&mut self, target: &mut Self) { ### 页表切换与 ASID 机制 -首先进行的是页表的切换,即向 `TTBR1_EL1` 寄存器写入目标线程页表基址 `target.ttbr`。一般来说,切换页表后需要刷新 TLB,不过 aarch64 引入了 ASID (Address Space ID) 机制来避免频繁刷新 TLB。 +首先进行的是页表的切换,即向 `TTBR1_EL1` 寄存器写入目标线程页表基址 `target.ttbr`。一般来说,切换页表后需要刷新 TLB,不过 ARMv8 引入了 ASID (Address Space ID) 机制来避免频繁刷新 TLB。 #### ASID 机制 -在页表项描述符中,有一个 `nG` 位,如果该位为 0,表示这页内存是全局可访问的(用于内核空间);如果该位为 1,表示这页内存不是全局可访问的,只有特定线程可访问。具体地,如果页表项中该位为 1,当访问相应虚拟地址更新 TLB 时,会有额外的信息被写入 TLB,该信息即 ASID,由操作系统分配,下次在 TLB 中查找该虚拟地址时就会检查 TLB 表项中的 ASID 是否与当前 ASID 匹配。相当于为不同的 ASID 各自创建了一个页表。 +在页表项描述符中,有一个 nG 位,如果该位为 0,表示这页内存是全局可访问的(用于内核空间);如果该位为 1,表示这页内存不是全局可访问的,只有特定线程可访问。具体地,如果页表项中该位为 1,当访问相应虚拟地址更新 TLB 时,会有额外的信息被写入 TLB,该信息即 ASID,由操作系统分配,下次在 TLB 中查找该虚拟地址时就会检查 TLB 表项中的 ASID 是否与当前 ASID 匹配。相当于为不同的 ASID 各自创建了一个页表。 -ASID 的大小可以为 8 位或 16 位,由 `TCR_EL1` 的 `AS` 字段指定,当前的 ASID 保存在 TTBR 的高位中,也可以由 `TCR_EL1` 的 `A1` 字段指定是 `TTBR0_EL1` 还是 `TTBR1_EL1`。在 RustOS 中,ASID 大小为 16 位,当前 ASID 保存在 `TTBR1_EL1` 的高 16 位。 +ASID 的大小可以为 8 位或 16 位,由 `TCR_EL1` 的 AS 字段指定,当前的 ASID 保存在 TTBR 的高位中,也可以由 `TCR_EL1` 的 `A1` 字段指定是 `TTBR0_EL1` 还是 `TTBR1_EL1`。在 RustOS 中,ASID 大小为 16 位,当前 ASID 保存在 `TTBR1_EL1` 的高 16 位。 在 `switch()` 函数里,首先会为目标线程分配一个 ASID,然后同时将该 ASID 与 `target.ttbr` 写入 `TTBR1_EL1` 即可,无需进行 TLB 刷新。 @@ -178,9 +178,9 @@ ret 为什么只保存了 `sp` 与 callee-saved 寄存器,而不是所有寄存器?因为执行上下文切换就是在调用一个函数,在调用前后编译器会自动保存并恢复 caller-saved 寄存器(调用者保存,即 `x0~x18`)。 -### 特权级切换 +### 异常级别切换 -特权级保存在 `TrapFrame` 的 `spsr` 中,在中断返回后即能自动进行特权级切换。通过构造特定的 `spsr` 可让新线程运行在指定的特权级。 +异常发生前的异常级别保存在 `TrapFrame` 中 `spsr` 的相应位,在异常返回后会恢复给 PSTATE,实现异常级别切换。通过构造特定的 `spsr` 可让新线程运行在指定的异常级别。 ## 创建新线程 diff --git a/docs/2_OSLab/g2/environment.md b/docs/2_OSLab/g2/environment.md index a7299a2..6b4617b 100644 --- a/docs/2_OSLab/g2/environment.md +++ b/docs/2_OSLab/g2/environment.md @@ -61,9 +61,9 @@ * `mode=debug|release`:指定 `debug` 还是 `release` 模式。默认 `debug`。 * `graphic=on|off`:是否启用图形输出。默认 `on`。 - * `smp=1|2|3|4|...`:指定 SMP 的核数。目前 aarch64 的 SMP 未实现,该选项无效。 + * `smp=1|2|3|4|...`:指定 SMP 的核数。目前 AArch64 的 SMP 未实现,该选项无效。 * `raspi3_timer=system|generic`:使用 Raspberry Pi 的 System Timer 还是 Generic Timer。默认 `generic`,且在 QEMU 中只能使用 Generic Timer。 - * `prefix=`:指定 aarch64 工具链前缀。默认 `aarch64-none-elf-`,某些 Linux 中的工具链前缀为 `aarch64-linux-gnu-`。 + * `prefix=`:指定 AArch64 工具链前缀。默认 `aarch64-none-elf-`,某些 Linux 中的工具链前缀为 `aarch64-linux-gnu-`。 * `LOG=off|error|warn|info|debug|trace`:指定输出日志的级别。默认 `warn`。 * `SFSIMG=`:用户程序 SFS 镜像路径。默认 `../user/img/ucore-aarch64.img`,即用 C 语言编写的直接从原 uCore 中移植过来的用户程序。如欲使用 Rust 编写的用户程序可将其设为 `../user/build/user-aarch64.img`。 diff --git a/docs/2_OSLab/g2/img/general-register.png b/docs/2_OSLab/g2/img/general-register.png new file mode 100644 index 0000000000000000000000000000000000000000..05891f561a73d6728880d6b270110e3df0bcb562 GIT binary patch literal 166662 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 z z>4f$Km9pVH^CDPLVQ+(x)r&_mAuO0f= zhZjH422(YH)iJgbGriMG?Zo$!Ql;C-wb7@B+pl}KR7*UPSg*1L!HbDW-C9%|&!kmH z7aoe+`EsLFY;QFU{Tj){0C*U8&R1R!2j)7LvPQqn!Aa;zI4NublzASeTxCnYAeV?0 zp%*&9?l_)0o62a{w}UbEj}7P*wLoLqwFkqTgiX(o zP7#55!pt=kIp#)^yTpf`$yYt1iq@^Tceb^SidueH+_Bt5`brkpxBkv!^Nip)6_sFV zT;PaZIBmrGGv=k02K$yK<{QvocPO~1u)nj zlxVN~kcLq4mP4Z;uvnzk(oSGN>(%Gwp;ZBBFSzUG25gBK=}j z`5Vso9n|aGby6UF_t}^M0QF5&l^r}NfcTAI8Nbe)`_Ab#{4Z+r#|}*My}>rdu!s6V z*=r}g1~_n}AP3>g!6H^G8~@o7VS(U>Z5MP!fhFTKFm^~;GXA()K7zI|GzCvq8d*%{em7DrosZ%G&wIxiy38UoA32<{Up>jn3QrpEEN(Q4c{)J><9(LH+U ze_q+MI3?+>C8f1gGAQXicYe#)=0$foBQ2)2#dG| zB!e+q`vP=(NiD#<38-otutnpd#_2(U;Gt0NP*B>kAE2^UYc=CNhYyHV8)PEd07wPO zOO)I$FOa4G5OW8Q^94jKq*yEd3sB&k)4U88hB}8oho&HfzSMs^P0&}uPibfO&ELRe zE#FG6a~N)Z0LE&)n60!)a9FE@56Z*_81dS8Cwbp4)(w1i)wJy>*$e#9OX&f;vC3lV zm#Y^=Ys4RSM0u4AM|+)=cV$BWU+`z0ybjjZO5iSF3J)pu2_?58?BYa;eWo?buu}vP z$Ub%uHW18h5z04^#6fd^KXv^_Ru~EFMQ3<+-U4k8~|$+-`@yOMOJ8E=1WfDy^(a9Kd=~QWspWsN^gH zrV37KvTiv9#=*!$a`=mgN>jjq^v!O_#uYWuW6JItzKjct2 z*8e#ZU%N3?T9o&ea!tFev~KqTKAbs@c$3-B5xg!2*>s^(ua`B0fFh4(Mw_oeV(!gB zjtMNLV-Q{eBB>YLnEZHt930X%oF<_iX32eV6p!hVfgiTG9EKG9oQ*nJ#CA$G zt@$M^FIDlQo1X-UjFhTN{fN-U+EN+G=5~;Pyz@9WdVYo@k(IDbVb}$c^0K__d-qh78uOlmLSH;_rShlv z2$XzqcdQbZh_&M7MWq1kx`Ozm+DM5cDw)O~FnCv}((FL-JC&r#fy$wI0FPRgjYt)l z91I1Sl7V@UGR4_c>c9)BVoXMc_>7ugu#=4yo(!JviD@|+^!+p8sH@0YWp{|?$i8o*D@Nfh{jAII<_^- z%)WrNws3u7YhDZ}7CK1@QjVhkGbOU`_Yg#=F@Jbg3DuoT`?2C|PT(XRg55Z@QTs^$ zFM)@c2bnD&-So?*f?ke`EU#_wx#)88;Oy_B-^nu%-DiGUTP$=(i8rYHYPnSRXGU3Y z-x~={`=@JRccW>yv&ZxhaZgtJYZA6KQF4ZVOGikhUJ< z&g1R>&r^|Dk|zmF-I=;N)iBlek%hnGH)YH(_s}-g!7r?|;42B(w<2cZAECg;@m49h z-=+J*UsxpC#BmuY+s3ZvmCv!Na)O(9?JZ`F>?Q|vI?--CI>wLx{;c(0%k&furXe$I zst$1>UpeT@Ule^zibYNM-s-vc6ZM`7^Uulg-?Fl)_t`CIL_D#dsE&lMtr$)($N?2nSa2+oV_B47ii~)@a7_X1SJo*7%q&oax&Hx>izK0>e z5mlyKWWJ(abhv>IjAjJI7v;GT;59#l9Kk__z5SboM4jc}5@L3aeB*4cvuDmg-e+C( zgp6M>GhdSI&fG88c{#3y`f%XemHSDKxLNsx3hVjvtfapvJ)3q~=3bwS|FE8Kc(s*% zGogJvu-fXRi_P))oq`+1Ev!u!>g7OJHa;PrzdA*o%Vyz(ZE2_F%8@Vrhk-s&U4PpS zL<6$}aR)q+?W6xb+aQvc1HpZ`TRR-vE6P>Cw~1T=3oi<624^73J`?DScaNXbuZ${TqTlxLh61ej9 zH8r=puUy{O^$mA*%cP4Vd`2M<=NyvKh-d1E3SXL5W+;reIr6Ugx0^PbTus z{>c^l{KNl_Ky6T~jPUl-pFL8H3HB^BhTd6*O+^_wZT0*bPbw3)TS*TSCo%HB08JRF za_-ZI^^SeEb4CZpvh>wngMp(ytt~j&&`$U|V@iwsh9lH9pwbhlSs{FHF9*HzvjjTK zQoJE@eyjLH6>1g!dSU6cW7+t8|h&(vI>c4oT|X7&412JDfYiMu7w< zSGoj0X-hd+pJ6(t{}!}2Jx2&9WpTMkAowErbB@sH|Ce7RUBgP4x*0N9p|Ux3X5-b} z3(gl(=!daFd+uQy-4QKnX;hT?bk86AfbHfsJ*~;6T)YD9xeSo;ikrUXo!*8{j4y^e z;g^QO<>xymedM!O@A`hXdylgy#1Dp@`4TPajP)_-@LZomhXosa_BhL~u`5hJj z9bCU4-TLe{J727Wx4zoEf+XF*?8|C@%XuY|SE}1Vkx}C`3f|kk4a54Z;`IPQXH0F0 z#SY#aChFPOFfO0NOeaEL)pVpCyxf9{Oh=53u=nM$*s$Jn7rm~n!5C_Mu>#RRYvd?P z+oEO-dFp>0(xEuv$DM&a3o&MozxbxU&sFLqhpRtqzZ;_?-8A(BADfjN3fqo3^3<>n zRb=PUWRNlafHb32RYnAXNlbH3ss^qwKjcoNITAq$#<3Nc<{f{dHg!`g_{QzoI}u-4 zF*RfnaHI=bC8xP%9(}=~Gb!+llRW2X1?PBHU*Lb^!HIDnfY;$g5RcUs9 zrCq`8rt#?S=`S67>4RiEvDTRMg z3&Wg&Yphn#<6cc$9Fk@kADVQ)Ki3G5jke_=yrwx{vdWNdR4K0DIkPlB0Vi~5I8y9{ zo|XRZfBSz}k_7lS)QXN543^3!GbpLiclPk*1Y>+}(7uyXN8x=>LV7Y`Xym5Tr{}4P zY8K^h5K8?R*}UyVfUYsc4647D5S*G6@sjsHI@KS3&H`l?{f;68<7Z?d*zrBxH{0j( zH*U}aDV!IoLi8lhD@NXPFlCu;Z^15M)Tji%y1&E6P1?Kf&}K&>ZlaBuk!nC$;o}pT zaqrJF^7~G1lz^?XE|2rU7$jb$N8brcxZA8BstUKR!m2QLRTB8G8(nL^-~x=4yCxEa z9;wNfMCi549k5Rvnk=|6tI3;arQ{!<0cKxDhzHFsZ%u-_&6@H5pFV`|+kkJ%J%;K~ zK|ZMM4??FVY8PC7aO#jJ+1&Z}2ruePMfet=Pa$EoZ3$OBXa?puE?=klUaazUU~^)` zM8s^HCK-g_bV3_+J&LxiRtl0EgX*;N!jAtInou|DFk`>q+~qi|oHL+<($Vi^9u$)A z*GB|}PY~z-^X~1(V~1;S;5!G$z;J23Z#UJPEq}b-?fcu!7ZR*$z~~frfW|)N-8Va@ z$l9^6C9XcAJA5W1C#A|uUTy_*Ltmr2v4g5vwo^9=c4vNO=UQHnKbeWAZiU908Jd4i zI;2NTJf3LZ9Izid1qU4TTopkdcEUU-es`Y}1*nn)ve(@EKL@HzscBk+vRu?_v`mpSF4@e;`7BlpzwXe zKNbO5Zwq>UhtaO$U)}(5REcS)-H7|&9xr6Ry|`W!WuF7_LBZIxvCQ%X5f282(}o^= zCEa7BBIQVvXI#mrjY<5zoFAraCS)RC41S9(#56tuRBTp(8rML|9Be zN;vI#4WKN=RVU2pTgs3Ng`QaxG+|-@rAV636Tt%CoMTX@iZZlmh1_ts%~~NC{mG%% z;Q*Km?FpXKE|q(@rMTyM4O#83^8QTeYRp$8G;2a@cnL$>m4C^l)|bC;e&b^>>C^Lm z*UQp*L>NW?Vk$mFbbhQ%6Ol`XtDmgLMXJ~BN^i2E)aklRZB%hODG3jVdtm|swOD^` zq?X4mF)%mXpD(laG&tw zrw_@$%55oUW(Jc$c0Mj_ywYfJ{8b~8BYAB02owj;(67|Oo~iAMwDVj?*LsY-26Xd- zFK-v-6}`83alNF<#Z_n4c`XD@?ni)d;ZbLhTQ7LlpU&a^m0ztT^<+2gO6yk+;&eYL zxTs_Vs;WW;a%Oj4Zra(*@a#Gut+IR(=Jg#t?H7fIK3C>qztNC^EFZzEs~$O&ak+Ex wdAlQE-+|@*-@pEM3I1O{1r^1j3Pi1}&h`L(pWy8x@aMoEj(c, frame: PhysFrame, flags: PageTableFlags, attr: PageTableAttribute, allocator: FrameAllocator)`:将虚拟地址表示的**页** `page`,映射为物理地址表示的**帧** `frame`,并设置标志位 `flags` 和属性 `attr`,如果需要新分配页表就用 `allocator` 分配。页与帧的大小都是 4KB; +* `new(table: PageTable)`:将虚拟地址表示的 `table` 作为 4 级页表,新建 `RecursivePageTable` 对象。 +* `map_to(self, page: Page, frame: PhysFrame, flags: PageTableFlags, attr: PageTableAttribute, allocator: FrameAllocator)`:将虚拟地址表示的**页** `page`,映射为物理地址表示的**帧** `frame`,并设置标志位 `flags` 和属性 `attr`,如果需要新分配页表就用 `allocator` 分配。页与帧的大小都是 4KB。 * `unmap(self, page: Page)`:取消虚拟地址表示的页 `page` 的映射。 ### 实现内存管理 diff --git a/docs/2_OSLab/g2/overview.md b/docs/2_OSLab/g2/overview.md index 37f21ca..8409300 100644 --- a/docs/2_OSLab/g2/overview.md +++ b/docs/2_OSLab/g2/overview.md @@ -35,10 +35,10 @@ AArch64 有 31 个 64 位**通用寄存器**(General-purpose registers) `X0~X30`,每个 64 位寄存器都有一个 32 位的版本 `W0~W30`。寄存器的使用规范一般如下: -* 参数寄存器 (Argument registers, `X0~X7`):作为函数调用时的参数,返回值保存在 `X0`; -* 调用者保存寄存器(Caller-saved temporary registers, `X9~X15`):在函数调用前,如果调用者需要保护这些寄存器中的值直到函数调用之后,则调用者需要将它们保存到当前栈帧上,而被调用者可直接使用而不必保存与恢复; +* 参数寄存器 (Argument registers, `X0~X7`):作为函数调用时的参数,返回值保存在 `X0`。 +* 调用者保存寄存器(Caller-saved temporary registers, `X9~X15`):在函数调用前,如果调用者需要保护这些寄存器中的值直到函数调用之后,则调用者需要将它们保存到当前栈帧上,而被调用者可直接使用而不必保存与恢复。 * 被调用者保存寄存器(Callee-saved registers, `X19~X29`):在函数调用中,如果该函数需要修改这些寄存器,则需要在函数开始执行前将它们保存到当前栈帧上,并在返回时恢复它们。 -* 帧指针寄存器(Frame point register, `FP` 或 `X29`):用于保存当前函数的栈帧指针; +* 帧指针寄存器(Frame point register, `FP` 或 `X29`):用于保存当前函数的栈帧指针。 * 链接寄存器(Link register, `LR` 或 `X30`):用于保存函数返回的地址,执行 `ret` 指令会跳转到 `LR`。 ![](img/general-register.png) @@ -47,10 +47,10 @@ AArch64 有 31 个 64 位**通用寄存器**(General-purpose registers) `X0~X30` AArch64 有下列**特殊寄存器**(Special-purpose registers): -* 零寄存器(Zero register, ZR):被映射为立即数 0,可分别用 `WZR/XZR` 访问 32/64 位版本; -* 程序计数器(Program counter, `PC`):当前指令的地址,64 位; -* 栈指针(Stack pointer, `SP`):当前栈顶地址,64 位。在每个异常级别下都有一个栈指针,分别为 `SP_EL0`、`SP_EL1`、`SP_EL2`、`SP_EL3`,直接访问 `SP` 时会根据当前异常级别自动选择对应的(如果 `SPSel = 0`,则在任何异常级别下都使用 `SP_EL0`); -* 异常链接寄存器(Exception Link Register, ELR):用于保存异常返回的地址,在异常级别 1~3 下分别为 `ELR_ELx`,执行 `eret` 指令进行异常返回时会根据当前异常级别跳转到相应的 ELR; +* 零寄存器(Zero register, ZR):被映射为立即数 0,可分别用 `WZR/XZR` 访问 32/64 位版本。 +* 程序计数器(Program counter, `PC`):当前指令的地址,64 位。 +* 栈指针(Stack pointer, `SP`):当前栈顶地址,64 位。在每个异常级别下都有一个栈指针,分别为 `SP_EL0`、`SP_EL1`、`SP_EL2`、`SP_EL3`,直接访问 `SP` 时会根据当前异常级别自动选择对应的(如果 `SPSel = 0`,则在任何异常级别下都使用 `SP_EL0`)。 +* 异常链接寄存器(Exception Link Register, ELR):用于保存异常返回的地址,在异常级别 1~3 下分别为 `ELR_ELx`,执行 `eret` 指令进行异常返回时会根据当前异常级别跳转到相应的 ELR。 * 保存的进程状态寄存器(Saved Process Status Register, SPSR):用于保存异常发生时的进程状态(PSTATE),在异常级别 1~3 下分别为 `SPSR_ELx`。执行 `eret` 指令进行异常返回时会根据当前异常级别,从相应的 SPSR 恢复进程状态。 #### 进程状态 @@ -71,7 +71,7 @@ AArch64 有下列**特殊寄存器**(Special-purpose registers): + `I`: IRQ interrupt mask bit + `F`: FIQ interrupt mask bit -* 当前异常级别(Current Exception level, `CurrentEL`):获取当前的异常级别; +* 当前异常级别(Current Exception level, `CurrentEL`):获取当前的异常级别。 * 栈指针选择(Stack Pointer Select, `SPSel`):如果为 1,则在不同异常级别下分别使用相应的 `SP_ELx` 作为 `SP`,否则任何时候都使用 `SP_EL0` 作为 `SP`。 当异常发生时,当前的 PSTATE 会根据进入哪个异常级别保存到相应的 `SPSR_ELx` 中。 diff --git a/kernel/src/arch/aarch64/driver/console/fonts/mod.rs b/kernel/src/arch/aarch64/driver/console/fonts/mod.rs index fde1f9a..5a5bd9c 100644 --- a/kernel/src/arch/aarch64/driver/console/fonts/mod.rs +++ b/kernel/src/arch/aarch64/driver/console/fonts/mod.rs @@ -8,7 +8,9 @@ pub trait Font { const HEIGHT: usize; const WIDTH: usize; + /// The `y` coordinate of underline. const UNDERLINE: usize; + /// The `y` coordinate of strikethrough. const STRIKETHROUGH: usize; /// Whether the character `byte` is visible at `(x, y)`. From a485cfae04bb2c384780e23351c39b0189289976 Mon Sep 17 00:00:00 2001 From: equation314 Date: Wed, 2 Jan 2019 23:00:07 +0800 Subject: [PATCH 30/30] aarch64/doc: rename raspi3.md to README.md --- docs/2_OSLab/g2/{raspi3.md => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/2_OSLab/g2/{raspi3.md => README.md} (100%) diff --git a/docs/2_OSLab/g2/raspi3.md b/docs/2_OSLab/g2/README.md similarity index 100% rename from docs/2_OSLab/g2/raspi3.md rename to docs/2_OSLab/g2/README.md

    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 A!e!#h2sKlg{`i70V!d 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 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile, capture D5: The AArch64 Virtual Memory System Architecture. -(注:AArch64 可能拥有一些可选的配置,如页大小、页表级数等,以下描述都是指在 RustOS 中的实现,不代表只有这一种实现方式) +(注:完整的 AArch64 文档中描述了许多可选的配置,如页大小、翻译表级数等,以下描述都是指在 RustOS 中的实现,不代表只有这一种实现方式) ### 地址空间 (D5.1.3) @@ -148,7 +148,7 @@ Cache line 的大小可通过 `CTR_EL0` 寄存器读取,一般为 16 个 WORD ## RustOS 中的实现 -在 RustOS 中,aarch64 平台相关的内存管理主要实现在 [kernel/src/arch/aarch64/memory.rs](../../../kernel/src/arch/aarch64/memory.rs) 与 [kernel/src/arch/aarch64/paging.rs](../../../kernel/src/arch/aarch64/paging.rs) 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 aarch64 底层系统寄存器、翻译表的访问。 +在 RustOS 中,AArch64 平台相关的内存管理主要实现在 [kernel/src/arch/aarch64/memory.rs](../../../kernel/src/arch/aarch64/memory.rs) 与 [kernel/src/arch/aarch64/paging.rs](../../../kernel/src/arch/aarch64/paging.rs) 中。此外,crate [aarch64](https://github.com/equation314/aarch64) 类似其他平台下的 x86_64、riscv 库,封装了对 AArch64 底层系统寄存器、翻译表的访问。 (注:为了保持与其他平台的一致性,下文使用“页表”指代“翻译表”,并且下文中页表的级数 1, 2, 3, 4 分别指官方文档中翻译表的级数 3, 2, 1, 0) @@ -333,8 +333,8 @@ Cache line 的大小可通过 `CTR_EL0` 寄存器读取,一般为 16 个 WORD * `active_token()`:获取当前活跃页表的页表基址寄存器内容。RustOS 中是读取 `TTBR1_EL1`。 * `flush_tlb()`:刷新 TLB 以立即生效对地址翻译系统的修改。 * `edit()`:让该翻译系统变得可编辑。本质上是将当前活跃页表(`TTBR0_EL1` 指向的页表)的递归索引指向该翻译系统的第 4 级页表,使得所有对该翻译系统第 1~4 级页表的访问,都可直接通过自映射机制构造相应的虚拟地址来实现。同时由于不修改当前活跃页表的其他表项,对内核地址空间可正常访问。 -* `new()`:建立用户页表时调用,会同时调用 `new_bare()` 和 `map_kernel()`。不过在 aarch64 下不需要 `map_kernel()`。 -* `map_kernel()`:为了让用户程序陷入中断后能访问内核地址空间,需要在用户页表中映射内核的地址空间,通过 `edit()` 函数修改自身来实现。使用 `new()` 建立用户页表时会额外调用该函数。不过在 aarch64 下可使用 `TTBR0_EL1` 与 `TTBR1_EL1` 区分内核页表与用户页表,所以 aarch64 下该函数无效。 +* `new()`:建立用户页表时调用,会同时调用 `new_bare()` 和 `map_kernel()`。不过在 AArch64 下不需要 `map_kernel()`。 +* `map_kernel()`:为了让用户程序陷入中断后能访问内核地址空间,需要在用户页表中映射内核的地址空间,通过 `edit()` 函数修改自身来实现。使用 `new()` 建立用户页表时会额外调用该函数。不过在 AArch64 下可使用 `TTBR0_EL1` 与 `TTBR1_EL1` 区分内核页表与用户页表,所以 AArch64 下该函数无效。 #### 分离内核页表与用户页表 diff --git a/docs/2_OSLab/g2/overview.md b/docs/2_OSLab/g2/overview.md index 832dd4e..77bea7f 100644 --- a/docs/2_OSLab/g2/overview.md +++ b/docs/2_OSLab/g2/overview.md @@ -2,17 +2,118 @@ ## Raspberry Pi 简介 -本实验的目标是将 Rust OS 移植到 Raspberry Pi 3 Model B+ 上。Raspberry Pi 3B+ 的主要硬件参数如下: +本实验的目标是将 RustOS 移植到 Raspberry Pi 3 Model B+ 上。其主要硬件参数如下: | Raspberry Pi 3B+ | | |-------|---------| -| 指令集 | ARMv8-A 64 bit | +| 指令集 | ARMv8-A 32/64 bit | | 片上系统(SoC) | Broadcom BCM2837B0 | -| 处理器(CPU) | 4 x Cortex-A53 1.4Ghz +| 处理器(CPU) | 4 x Cortex-A53 1.4Ghz | | 图形处理器(GPU) | Broadcom VideoCore IV | | 内存 | 1GB (与 GPU 共享) | -## AArch64 简介 +## ARMv8 架构简介 + +### 运行状态 + +根据寄存器位数的不同,ARMv8 架构定义了两种**运行状态**(Execution States),分别为 **AArch64** 与 **AArch32**。两种运行状态使用的指令集也不相同。RustOS 实现的是 AArch64。 + +### 异常级别 + +在 AArch64 下,可在 4 个**异常级别**(Exception level)中运行,分别为: + +* EL0: Normal user applications. +* EL1: Operating system kernel typically described as *privileged*. +* EL2: Hypervisor. +* EL3: Secure monitor. + +级别越高,特权(privilege)越高。一般称 EL0 为非特权级(unprivileged),其他的为特权级(unprivileged)。 + +### 寄存器 + +#### 通用寄存器 + +AArch64 有 31 个 64 位**通用寄存器**(General-purpose registers) `X0~X30`,每个 64 位寄存器都有一个 32 位的版本 `W0~W30`。寄存器的使用规范一般如下: + +* 参数寄存器 (Argument registers, `X0~X7`):作为函数调用时的参数,返回值保存在 `X0`; +* 调用者保存寄存器(Caller-saved temporary registers, `X9~X15`):在函数调用前,如果调用者需要保护这些寄存器中的值直到函数调用之后,则调用者需要将它们保存到当前栈帧上,而被调用者可直接使用而不必保存与恢复; +* 被调用者保存寄存器(Callee-saved registers, `X19~X29`):在函数调用中,如果该函数需要修改这些寄存器,则需要在函数开始执行前将它们保存到当前栈帧上,并在返回时恢复它们。 +* 帧指针寄存器(Frame point register, `FP` 或 `X29`):用于保存当前函数的栈帧指针; +* 链接寄存器(Link register, `LR` 或 `X30`):用于保存函数返回的地址,执行 `ret` 指令会跳转到 `LR`。 + +![](img/general-register.png) + +#### 特殊寄存器 + +AArch64 有下列**特殊寄存器**(Special-purpose registers): + +* 零寄存器(Zero register, ZR):被映射为立即数 0,可分别用 `WZR/XZR` 访问 32/64 位版本; +* 程序计数器(Program counter, `PC`):当前指令的地址,64 位; +* 栈指针(Stack pointer, `SP`):当前栈顶地址,64 位。在每个异常级别下都有一个栈指针,分别为 `SP_EL0`、`SP_EL1`、`SP_EL2`、`SP_EL3`,直接访问 `SP` 时会根据当前异常级别自动选择对应的(如果 `SPSel = 0`,则在任何异常级别下都使用 `SP_EL0`); +* 异常链接寄存器(Exception Link Register, ELR):用于保存异常返回的地址,在异常级别 1~3 下分别为 `ELR_ELx`,执行 `eret` 指令进行异常返回时会根据当前异常级别跳转到相应的 ELR; +* 保存的进程状态寄存器(Saved Process Status Register, SPSR):用于保存异常发生时的进程状态(PSTATE),在异常级别 1~3 下分别为 `SPSR_ELx`。执行 `eret` 指令进行异常返回时会根据当前异常级别,从相应的 SPSR 恢复进程状态。 + +#### 进程状态 + +**进程状态**(Process state, PSTATE)是当前进程状态信息的抽象。AArch64 提供了一系列特殊寄存器来独立访问 PSTATE 中的每个字段,常用的几个如下(完整的字段描述参见 ARMv8 Reference Manual D1.7 节): + +* 条件标志位(Condition flags, `NZCV`): + + + `N`: Negative Condition flag + + `Z`: Zero Condition flag + + `C`: Carry Condition flag + + `V`: oVerflow Condition flag + +* 异常屏蔽位(exception masking bits, `DAIF`): + + + `D`: Debug exception mask bit + + `A`: SError interrupt mask bit + + `I`: IRQ interrupt mask bit + + `F`: FIQ interrupt mask bit + +* 当前异常级别(Current Exception level, `CurrentEL`):获取当前的异常级别; +* 栈指针选择(Stack Pointer Select, `SPSel`):如果为 1,则在不同异常级别下分别使用相应的 `SP_ELx` 作为 `SP`,否则任何时候都使用 `SP_EL0` 作为 `SP`。 + +当异常发生时,当前的 PSTATE 会根据进入哪个异常级别保存到相应的 `SPSR_ELx` 中。 + +#### 系统寄存器 + +可以通过**系统寄存器**(System registers)来进行 AArch64 的系统配置。一般每种系统寄存器在不同异常级别下都有相应的版本,用后缀 `_ELx` 表示。下表列出了常用的几个系统寄存器(全部系统寄存器参见 ARMv8 Reference Manual D12.1 节): + +| 系统寄存器_ELx | 名称 | 描述 | +|------------------|-----------------------------------------|------------------------------| +| CTR | Cache Type Register | 获取 cache 信息 | +| ESR | Exception Syndrome Register | 保存发生异常的原因 | +| FAR | Fault Address Register | 保存发生访存错误的虚拟地址 | +| HCR | Hypervisor Configuration Register | 配置 EL2 下的虚拟化 | +| MAIR | Memory Attribute Indirection Register | 配置内存属性 | +| MPIDR | Multiprocessor Affinity Register | 多核系统中核的编号 | +| SCTLR | System Control Register | 提供对内存系统等系统配置 | +| TCR | Translation Control Register | 配置地址翻译系统的参数 | +| TTBR0/TTBR1 | Translation Table Base Register | 设置翻译表(页表)基址 | +| VBAR | Vector Based Address Register | 设置异常向量基址 | + +对系统寄存器(包括部分特殊寄存器)的访问需要使用 `mrs` 与 `msr` 指令: + +* 读: + + ```armasm + mrs x0, TTBR0_EL1 + ``` + +* 写: + + ```armasm + msr TTBR0_EL1, x0 + ``` + +crate [aarch64](https://github.com/equation314/aarch64) 的 [regs](https://github.com/equation314/aarch64/tree/master/src/regs) 模块封装了对部分系统寄存器的访问。 + +#### SIMD/FP 寄存器 + +共有 32 个最高为 128 位的 **SIMD/floating-point 寄存器**,可分别通过 `Q0~Q31`、`D0~D31`、`S0~S31`、`H0~H31`、`B0~B31` 访问其 128、64、32、16、8 位版本。 + +使用这些寄存器需要 NEON 技术的支持。为了方便,在 RustOS 中禁用了 NEON (Cargo features `+a53,+strict-align,-neon`),这样在处理异常时无需保存这些寄存器。 ## 官方文档 diff --git a/kernel/src/arch/aarch64/boot/linker.ld b/kernel/src/arch/aarch64/boot/linker.ld index 2c7bdce..38dbba9 100644 --- a/kernel/src/arch/aarch64/boot/linker.ld +++ b/kernel/src/arch/aarch64/boot/linker.ld @@ -1,7 +1,7 @@ ENTRY(_start) SECTIONS { - . = 0x80000; /* Raspbery Pi 3 Aarch64 (kernel8.img) load address */ + . = 0x80000; /* Raspbery Pi 3 AArch64 (kernel8.img) load address */ .boot : { KEEP(*(.text.boot)) /* from boot.S */ From 7fda4e360f88ad157d3667bf6f83dbc088958979 Mon Sep 17 00:00:00 2001 From: equation314 Date: Tue, 1 Jan 2019 01:56:22 +0800 Subject: [PATCH 26/30] aarch64/doc: add GPIO, mini UART, mailbox drivers --- docs/2_OSLab/g2/drivers.md | 264 +++++++++++++++++- docs/2_OSLab/g2/interrupt.md | 2 +- docs/2_OSLab/g2/memory.md | 2 +- .../src/arch/aarch64/board/raspi3/serial.rs | 1 - 4 files changed, 265 insertions(+), 4 deletions(-) diff --git a/docs/2_OSLab/g2/drivers.md b/docs/2_OSLab/g2/drivers.md index 2d415c9..58d3f76 100644 --- a/docs/2_OSLab/g2/drivers.md +++ b/docs/2_OSLab/g2/drivers.md @@ -1,11 +1,273 @@ # 设备驱动 +树莓派上有着丰富的外围设备(peripherals),物理地址空间 `0x3F000000~0x3FFFFFFF` 专门用于访问外围设备。 + +一个设备一般提供多个可供访问的 IO 地址,一般 4 字节对齐。将它们按给定的偏移构造结构体,并使用 crate [volatile](https://crates.io/crates/volatile) 抽象为一些寄存器,可方便地对这些 IO 地址进行读写,例如: + +```rust +const INT_BASE: usize = IO_BASE + 0xB000 + 0x200; + +#[repr(C)] +#[allow(non_snake_case)] +struct Registers { + IRQBasicPending: ReadOnly, + IRQPending: [ReadOnly; 2], + FIQControl: Volatile, + EnableIRQ: [Volatile; 2], + EnableBasicIRQ: Volatile, + DisableIRQ: [Volatile; 2], + DisableBasicIRQ: Volatile, +} + +pub fn new() -> Controller { + Controller { + registers: unsafe { &mut *(INT_BASE as *mut Registers) }, + } +} +``` + +这些外围设备的最底层驱动实现在 crate [bcm2837](../../../crate/bcm2837/) 中,包括: + +* GPIO +* Mini UART +* Mailbox +* Timer + +一些稍微高级的与具体硬件板子相关的驱动实现在 [kernel/src/arch/aarch64/board/raspi3](../../../kernel/src/arch/aarch64/board/raspi3/) 中,包括: + +* Framebuffer +* IRQ +* Mailbox property interface +* Serial + +更高级的硬件无关的驱动实现在 [kernel/src/arch/aarch64/driver](../../../kernel/src/arch/aarch64/driver/) 中,包括: + +* Console + +## GPIO + +> 参考:BCM2837 ARM Peripherals: chapter 6, General Purpose I/O (GPIO). + +目前 RustOS 中的 GPIO 驱动只是为了初始化 mini UART 而使用,实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [gpio.rs](../../../crate/bcm2837/src/gpio.rs) 中。主要提供两个功能: + +* 设置引脚模式 +* 设置引脚上拉/下拉状态 + +### 设置引脚模式 + +引脚模式有 8 种:输入、输出与 alternative function 0~5。根据引脚编号向相应的 `FSEL` 寄存器的相应位写入模式代码即可。 + +```rust +pub fn into_alt(self, function: Function) -> Gpio { + let select = (self.pin / 10) as usize; + let offset = 3 * (self.pin % 10) as usize; + self.registers.FSEL[select].update(|value| { + *value &= !(0b111 << offset); + *value |= (function as u32) << offset; + }); + self.transition() +} + +pub fn into_output(self) -> Gpio { + self.into_alt(Function::Output).transition() +} + +pub fn into_input(self) -> Gpio { + self.into_alt(Function::Input).transition() +} +``` + +### 设置引脚上拉/下拉状态 + +引脚的上拉/下拉状态有 3 种:上拉(`10`)、下拉(`01`)与不拉(`00`)。设置该状态的流程如下: + +1. 向 `PUD` 寄存器写入状态代码; +2. 等待 150 个时钟周期; +3. 根据引脚编号向相应的 `PUDCLK` 寄存器的相应位写入 1; +4. 等待 150 个时钟周期; +5. 向 `PUD` 寄存器写入 0; +6. 根据引脚编号向相应的 `PUDCLK` 寄存器的相应位写入 0。 + +```rust +pub fn set_gpio_pd(&mut self, pud_value: u8) { + let index = if self.pin >= 32 { 1 } else { 0 }; + + self.registers.PUD.write(pud_value as u32); + delay(150); + self.registers.PUDCLK[index as usize].write((1 << self.pin) as u32); + delay(150); + self.registers.PUD.write(0); + self.registers.PUDCLK[index as usize].write(0); +} +``` + ## Mini UART -## Timer +> 参考:BCM2837 ARM Peripherals: chapter 2, Auxiliaries: UART1 & SPI1, SPI2; chapter 6, General Purpose I/O (GPIO), page 101~102. + +Mini UART 可用于树莓派与上位机直接的通信,一般被称为“串口”。该驱动实现简单,在没有显示器、键盘等驱动时是一种非常好的输入输出设备。 + +RustOS 中 mini UART 的驱动主要实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [mini_uart.rs](../../../crate/bcm2837/src/mini_uart.rs) 中。在 [kernel/src/arch/aarch64/board/raspi3/serial.rs](../../../kernel/src/arch/aarch64/board/raspi3/serial.rs) 中将其封装为了一个 `SerialPort`,以便通过统一的接口调用。 + +### 初始化 + +初始化 mini UART 的流程如下: + +1. 向 `AUX_ENABLES` 寄存写 1,启用 mini UART; +2. 将 GPIO 的 14/15 引脚都设为 alternative function ALT5 (TXD1/RXD1) 模式,并都设为不拉状态; +3. 配置 mini UART 参数: + + 1. 暂时禁用接收器与发送器; + 2. 启用接收中断,禁用发送中断; + 3. 设置数据大小为 8 bit; + 4. 设置 RTS line 为 high; + 5. 设置波特率为 115200; + 6. 重新启用接收器与发送器。 + +```rust +pub fn init(&mut self) { + // Enable the mini UART as an auxiliary device. + unsafe { (*AUX_ENABLES).write(1) } + + Gpio::new(14).into_alt(Function::Alt5).set_gpio_pd(0); + Gpio::new(15).into_alt(Function::Alt5).set_gpio_pd(0); + + self.registers.AUX_MU_CNTL_REG.write(0); // Disable auto flow control and disable receiver and transmitter (for now) + self.registers.AUX_MU_IER_REG.write(1); // Enable receive interrupts and disable transmit interrupts + self.registers.AUX_MU_LCR_REG.write(3); // Enable 8 bit mode + self.registers.AUX_MU_MCR_REG.write(0); // Set RTS line to be always high + self.registers.AUX_MU_BAUD_REG.write(270); // Set baud rate to 115200 + + self.registers.AUX_MU_CNTL_REG.write(3); // Finally, enable transmitter and receiver +} +``` + +### 读 + +```rust +pub fn has_byte(&self) -> bool { + self.registers.AUX_MU_LSR_REG.read() & (LsrStatus::DataReady as u8) != 0 +} + +pub fn read_byte(&self) -> u8 { + while !self.has_byte() {} + self.registers.AUX_MU_IO_REG.read() +} +``` + +### 写 + +```rust +pub fn write_byte(&mut self, byte: u8) { + while self.registers.AUX_MU_LSR_REG.read() & (LsrStatus::TxAvailable as u8) == 0 {} + self.registers.AUX_MU_IO_REG.write(byte); +} +``` ## Mailbox +> 参考:https://github.com/raspberrypi/firmware/wiki/Mailboxes + +Mailbox 是树莓派上 ARM CPU 与 VideoCore IV GPU 之间通信的渠道。Mailbox 能够识别一段按特定格式存储的请求指令,包含请求代码、请求长度、请求参数等信息,GPU 会根据请求的指令完成相应的操作,并将结果写在原处。 + +BCM283x 系列有两个 mailbox,一般 MB0 总是用于 GPU 向 CPU 发送消息 MB1 总是用于 CPU 向 GPU 发送消息,对 CPU 来说即一个只读一个只写。 + +Mailbox 有若干通道(channels),不同通道提供不同种类的功能。一般使用 property tags 通道(编号为 8),即 mailbox property interface。 + +### 基本读写 + +> 参考:https://github.com/raspberrypi/firmware/wiki/Accessing-mailboxes + +对 mailbox 的基本读写实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [mailbox.rs](../../../crate/bcm2837/src/mailbox.rs) 中。一般一次操作是向 mailbox 写入请求的地址,然后读 mailbox 来轮询等待操作完成。注意读写 mailbox 时只有数据的高 28 位有效,低 4 位被用于存放通道,所以如果写入的是一个地址则该地址必须 16 字节对齐。 + +读的流程如下: + +1. 读状态寄存器 `MAIL0_STA`,直到 `MailboxEmpty` 位没有被设置; +2. 从 `MAIL0_RD` 寄存器读取数据; +3. 如果数据的最低 4 位不与要读的通道匹配,则回到 1; +4. 否则返回数据的高 28 位。 + +```rust +pub fn read(&self, channel: MailboxChannel) -> u32 { + loop { + while self.registers.MAIL0_STA.read() & (MailboxStatus::MailboxEmpty as u32) != 0 {} + let data = self.registers.MAIL0_RD.read(); + if data & 0xF == channel as u32 { + return data & !0xF; + } + } +} +``` + +写的流程如下: + +1. 读状态寄存器 `MAIL1_STA`,直到 `MailboxFull` 位没有被设置; +3. 将数据(高 28 位)与通道(低 4 位)拼接,写入 `MAIL1_WRT` 寄存器。 + +```rust +pub fn write(&mut self, channel: MailboxChannel, data: u32) { + while self.registers.MAIL1_STA.read() & (MailboxStatus::MailboxFull as u32) != 0 {} + self.registers.MAIL1_WRT.write((data & !0xF) | (channel as u32)); +} +``` + +### Mailbox property interface + +> 参考:https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface + +Mailbox property interface 提供了丰富的访问底层硬件的接口,包括电源、温度、DMA、GPU、内存、Framebuffer 等模块。RustOS 中封装了一系列 mailbox property interface 函数,实现在 [kernel/src/arch/aarch64/board/raspi3/mailbox.rs](../../../kernel/src/arch/aarch64/board/raspi3/mailbox.rs) 中。 + +向 mailbox property interface 发送的请求需要符合一定的格式。在 RustOS 中,对 mailbox property interface 的一个功能调用被称为一个 `PropertyMailboxTag`,格式如下: + +```rust +#[repr(C, packed)] +struct PropertyMailboxTag { + id: PropertyMailboxTagId, + buf_size: u32, + req_resp_size: u32, + buf: T, +} +``` + +这里的 `buf` 一般是一个 32 位无符号整数的数组。一个或多个 `PropertyMailboxTag` 可构成一个 `PropertyMailboxRequest`,这是最终需要向 mailbox 发送的请求,格式如下: + +```rust +#[repr(C, packed)] +struct PropertyMailboxRequest { + buf_size: u32, + req_resp_code: PropertyMailboxStatus, + buf: T, + end_tag: PropertyMailboxTagId, +} +``` + +这里的 `buf` 可以是多个大小不一的 `PropertyMailboxTag` 构成的数组,不过内存布局必须连续而没有空隙。 + +为了方便构造这两个结构体,定义了宏 `send_one_tag!()` 与 `send_request!()`: + +* `send_request!($tags: ident)`:发送一个或多个 `PropertyMailboxTag`。这会构建一个 16 字节对齐的 `PropertyMailboxRequest` 结构体,将其地址写入 mailbox。等待 GPU 操作完毕后,返回被修改过的 `PropertyMailboxTag` 列表。 + +* `send_one_tag!($id: expr, [$($arg: expr),*])`:这会根据 `id` 与 32 位无符号整数的数组构造一个 `PropertyMailboxTag` 结构体,然后通过宏 `send_request!()` 发送给 mailbox,返回被修改过的数组。 + +有了这两个宏,就可以非常方便地实现所需的 mailbox property interface 功能了。例如获取 framebuffer 物理大小: + +```rust +pub fn framebuffer_get_physical_size() -> PropertyMailboxResult<(u32, u32)> { + let ret = send_one_tag!(RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT, [0, 0])?; + Ok((ret[0], ret[1])) +} +``` + +`framebuffer_alloc()` 函数是一次性发送多个大小不一的 `PropertyMailboxTag` 的例子。 + +需要注意的是,当启用 MMU 与 cache 后,在访问 mailbox 的前后都需要刷新整个 `PropertyMailboxRequest` 结构的数据缓存,因为这里涉及到 GPU 与 CPU 的数据共享,必须时刻保证主存与 cache 中数据的一致性。 + +## Timer + +### System Timer + +### Generic Timer + ## Framebuffer ## Console diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md index 1dd056e..1389b0f 100644 --- a/docs/2_OSLab/g2/interrupt.md +++ b/docs/2_OSLab/g2/interrupt.md @@ -2,7 +2,7 @@ ## AArch64 异常模型 -> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile, capture D1.1, D1.7, D1.10, D1.11, D1.13, D1.14, D1.16. +> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile: capture D1.1, D1.7, D1.10, D1.11, D1.13, D1.14, D1.16. 在 AArch64 中,各种中断被统称为**异常**(exception),包括: diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md index 6e20f43..adde2c3 100644 --- a/docs/2_OSLab/g2/memory.md +++ b/docs/2_OSLab/g2/memory.md @@ -2,7 +2,7 @@ ## AArch64 虚拟内存系统 -> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile, capture D5: The AArch64 Virtual Memory System Architecture. +> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile: capture D5, The AArch64 Virtual Memory System Architecture. (注:完整的 AArch64 文档中描述了许多可选的配置,如页大小、翻译表级数等,以下描述都是指在 RustOS 中的实现,不代表只有这一种实现方式) diff --git a/kernel/src/arch/aarch64/board/raspi3/serial.rs b/kernel/src/arch/aarch64/board/raspi3/serial.rs index abb4ff6..bdec9ac 100644 --- a/kernel/src/arch/aarch64/board/raspi3/serial.rs +++ b/kernel/src/arch/aarch64/board/raspi3/serial.rs @@ -85,7 +85,6 @@ lazy_static! { pub static ref SERIAL_PORT: Mutex = Mutex::new(SerialPort::new()); } - pub fn init() { SERIAL_PORT.lock().init(); } From 1aa8436d71c7532b4b200f49e94d9978bcea1a41 Mon Sep 17 00:00:00 2001 From: equation314 Date: Tue, 1 Jan 2019 20:47:19 +0800 Subject: [PATCH 27/30] aarch64/doc: add interruption & timer drivers --- crate/bcm2837/src/timer/generic_timer.rs | 33 ++- crate/bcm2837/src/timer/mod.rs | 34 +-- crate/bcm2837/src/timer/system_timer.rs | 39 ++-- docs/2_OSLab/g2/drivers.md | 213 +++++++++++++++++- docs/2_OSLab/g2/interrupt.md | 4 +- docs/2_OSLab/g2/memory.md | 4 +- docs/2_OSLab/g2/overview.md | 10 +- kernel/src/arch/aarch64/board/raspi3/fb.rs | 2 +- kernel/src/arch/aarch64/board/raspi3/irq.rs | 1 + kernel/src/arch/aarch64/board/raspi3/timer.rs | 12 +- 10 files changed, 268 insertions(+), 84 deletions(-) diff --git a/crate/bcm2837/src/timer/generic_timer.rs b/crate/bcm2837/src/timer/generic_timer.rs index 8333cb9..c4db806 100644 --- a/crate/bcm2837/src/timer/generic_timer.rs +++ b/crate/bcm2837/src/timer/generic_timer.rs @@ -1,5 +1,6 @@ extern crate aarch64; +use super::BasicTimer; use aarch64::regs::*; use volatile::*; @@ -43,41 +44,33 @@ struct Registers { } /// The ARM generic timer. -pub struct Timer { +pub struct GenericTimer { registers: &'static mut Registers, } -impl Timer { - /// Returns a new instance of `Timer`. - pub fn new() -> Timer { - Timer { +impl BasicTimer for GenericTimer { + fn new() -> Self { + GenericTimer { registers: unsafe { &mut *(GEN_TIMER_REG_BASE as *mut Registers) }, } } - /// Reads the generic timer's counter and returns the 64-bit counter value. - /// The returned value is the number of elapsed microseconds. - pub fn read(&self) -> u64 { + fn init(&mut self) { + self.registers.CORE_TIMER_IRQCNTL[0].write(1 << (CoreInterrupt::CNTPNSIRQ as u8)); + CNTP_CTL_EL0.write(CNTP_CTL_EL0::ENABLE::SET); + } + + fn read(&self) -> u64 { let cntfrq = CNTFRQ_EL0.get(); // 62500000 (CNTPCT_EL0.get() * 1000000 / (cntfrq as u64)) as u64 } - /// Sets up a match in timer 1 to occur `us` microseconds from now. If - /// interrupts for timer 1 are enabled and IRQs are unmasked, then a timer - /// interrupt will be issued in `us` microseconds. - pub fn tick_in(&mut self, us: u32) { + fn tick_in(&mut self, us: u32) { let cntfrq = CNTFRQ_EL0.get(); // 62500000 CNTP_TVAL_EL0.set(((cntfrq as f64) * (us as f64) / 1000000.0) as u32); } - /// Initialization timer - pub fn init(&mut self) { - self.registers.CORE_TIMER_IRQCNTL[0].write(1 << (CoreInterrupt::CNTPNSIRQ as u8)); - CNTP_CTL_EL0.write(CNTP_CTL_EL0::ENABLE::SET); - } - - /// Returns `true` if timer interruption is pending. Otherwise, returns `false`. - pub fn is_pending(&self) -> bool { + fn is_pending(&self) -> bool { self.registers.CORE_IRQ_SRC[0].read() & (1 << (CoreInterrupt::CNTPNSIRQ as u8)) != 0 } } diff --git a/crate/bcm2837/src/timer/mod.rs b/crate/bcm2837/src/timer/mod.rs index f88b33d..e628a99 100644 --- a/crate/bcm2837/src/timer/mod.rs +++ b/crate/bcm2837/src/timer/mod.rs @@ -1,28 +1,32 @@ #[cfg(feature = "use_generic_timer")] mod generic_timer; #[cfg(feature = "use_generic_timer")] -pub use self::generic_timer::Timer; +pub use self::generic_timer::GenericTimer as Timer; #[cfg(not(feature = "use_generic_timer"))] mod system_timer; #[cfg(not(feature = "use_generic_timer"))] -pub use self::system_timer::Timer; +pub use self::system_timer::SystemTimer as Timer; -/// Initialization timer -pub fn init() { - Timer::new().init(); -} +/// The Raspberry Pi timer. +pub trait BasicTimer { + /// Returns a new instance. + fn new() -> Self; -/// Returns the current time in microseconds. -pub fn current_time() -> u64 { - Timer::new().read() -} + /// Initialization timer. + fn init(&mut self); + + /// Reads the timer's counter and returns the 64-bit counter value. + /// The returned value is the number of elapsed microseconds. + fn read(&self) -> u64; + + /// Sets up a match in timer 1 to occur `us` microseconds from now. If + /// interrupts for timer 1 are enabled and IRQs are unmasked, then a timer + /// interrupt will be issued in `us` microseconds. + fn tick_in(&mut self, us: u32); -/// Sets up a match in timer 1 to occur `us` microseconds from now. If -/// interrupts for timer 1 are enabled and IRQs are unmasked, then a timer -/// interrupt will be issued in `us` microseconds. -pub fn tick_in(us: u32) { - Timer::new().tick_in(us); + /// Returns `true` if timer interruption is pending. Otherwise, returns `false`. + fn is_pending(&self) -> bool; } /// wait for `cycle` CPU cycles diff --git a/crate/bcm2837/src/timer/system_timer.rs b/crate/bcm2837/src/timer/system_timer.rs index 4d5dc12..9261c4a 100644 --- a/crate/bcm2837/src/timer/system_timer.rs +++ b/crate/bcm2837/src/timer/system_timer.rs @@ -1,5 +1,6 @@ -use crate::IO_BASE; +use super::BasicTimer; use crate::interrupt::{Controller, Interrupt}; +use crate::IO_BASE; use volatile::{ReadOnly, Volatile}; /// The base address for the ARM system timer registers. @@ -18,7 +19,7 @@ struct Registers { #[repr(u8)] #[allow(dead_code)] #[derive(Copy, Clone, PartialEq, Debug)] -enum SystemTimer { +enum SystemTimerId { Timer0 = 0, Timer1 = 1, Timer2 = 2, @@ -26,43 +27,35 @@ enum SystemTimer { } /// The Raspberry Pi ARM system timer. -pub struct Timer { +pub struct SystemTimer { registers: &'static mut Registers, } -impl Timer { - /// Returns a new instance of `Timer`. - pub fn new() -> Timer { - Timer { +impl BasicTimer for SystemTimer { + fn new() -> Self { + SystemTimer { registers: unsafe { &mut *(TIMER_REG_BASE as *mut Registers) }, } } - /// Reads the system timer's counter and returns the 64-bit counter value. - /// The returned value is the number of elapsed microseconds. - pub fn read(&self) -> u64 { + fn init(&mut self) { + Controller::new().enable(Interrupt::Timer1); + } + + fn read(&self) -> u64 { let low = self.registers.CLO.read(); let high = self.registers.CHI.read(); ((high as u64) << 32) | (low as u64) } - /// Sets up a match in timer 1 to occur `us` microseconds from now. If - /// interrupts for timer 1 are enabled and IRQs are unmasked, then a timer - /// interrupt will be issued in `us` microseconds. - pub fn tick_in(&mut self, us: u32) { + fn tick_in(&mut self, us: u32) { let current_low = self.registers.CLO.read(); let compare = current_low.wrapping_add(us); - self.registers.COMPARE[SystemTimer::Timer1 as usize].write(compare); - self.registers.CS.write(1 << (SystemTimer::Timer1 as usize)); // unmask - } - - /// Initialization timer - pub fn init(&mut self) { - Controller::new().enable(Interrupt::Timer1); + self.registers.COMPARE[SystemTimerId::Timer1 as usize].write(compare); + self.registers.CS.write(1 << (SystemTimerId::Timer1 as usize)); // unmask } - /// Returns `true` if timer interruption is pending. Otherwise, returns `false`. - pub fn is_pending(&self) -> bool { + fn is_pending(&self) -> bool { let controller = Controller::new(); controller.is_pending(Interrupt::Timer1) } diff --git a/docs/2_OSLab/g2/drivers.md b/docs/2_OSLab/g2/drivers.md index 58d3f76..cbc6835 100644 --- a/docs/2_OSLab/g2/drivers.md +++ b/docs/2_OSLab/g2/drivers.md @@ -29,6 +29,7 @@ pub fn new() -> Controller { 这些外围设备的最底层驱动实现在 crate [bcm2837](../../../crate/bcm2837/) 中,包括: * GPIO +* Interrupt * Mini UART * Mailbox * Timer @@ -36,7 +37,6 @@ pub fn new() -> Controller { 一些稍微高级的与具体硬件板子相关的驱动实现在 [kernel/src/arch/aarch64/board/raspi3](../../../kernel/src/arch/aarch64/board/raspi3/) 中,包括: * Framebuffer -* IRQ * Mailbox property interface * Serial @@ -55,7 +55,7 @@ pub fn new() -> Controller { ### 设置引脚模式 -引脚模式有 8 种:输入、输出与 alternative function 0~5。根据引脚编号向相应的 `FSEL` 寄存器的相应位写入模式代码即可。 +引脚模式有 8 种:输入、输出与 alternative function 0~5。根据引脚编号向相应的 GPFSELx 寄存器的相应位写入模式代码即可。 ```rust pub fn into_alt(self, function: Function) -> Gpio { @@ -81,12 +81,12 @@ pub fn into_input(self) -> Gpio { 引脚的上拉/下拉状态有 3 种:上拉(`10`)、下拉(`01`)与不拉(`00`)。设置该状态的流程如下: -1. 向 `PUD` 寄存器写入状态代码; +1. 向 GPPUD 寄存器写入状态代码; 2. 等待 150 个时钟周期; -3. 根据引脚编号向相应的 `PUDCLK` 寄存器的相应位写入 1; +3. 根据引脚编号向相应的 GPPUDCLK0/1 寄存器的相应位写入 1; 4. 等待 150 个时钟周期; -5. 向 `PUD` 寄存器写入 0; -6. 根据引脚编号向相应的 `PUDCLK` 寄存器的相应位写入 0。 +5. 向 GPPUD 寄存器写入 0; +6. 根据引脚编号向相应的 GPPUDCLK0/1 寄存器的相应位写入 0。 ```rust pub fn set_gpio_pd(&mut self, pud_value: u8) { @@ -101,6 +101,82 @@ pub fn set_gpio_pd(&mut self, pud_value: u8) { } ``` +## Interrupt + +> 参考:BCM2837 ARM Peripherals: chapter 7, Interrupts. + +该设备为其他外围设备提供异步异常(中断)支持,实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [interrupt.rs](../../../crate/bcm2837/src/interrupt.rs) 中。目前只有对 IRQ 的支持,没有对 FIQ 的支持。 + +当中断发生时,IRQ basic pending 寄存器中的某些位会被设置,表示哪个 basic IRQ 待处理(详见 BCM2837 ARM Peripherals 第 114 页的表)。如果其第 8 或 9 位被设置,则需要进一步到 IRQ pending 1/2 寄存器中去查找。此时共有 64 个中断,部分如下(详见第 113 页的表): + +| 编号 | 中断 | +|--------|------------------| +| 1 | system timer 1 | +| 3 | system timer 3 | +| 9 | USB controller | +| 29 | Aux int | +| 49 | gpio[0] | +| 50 | gpio[1] | +| 51 | gpio[2] | +| 52 | gpio[3] | +| 57 | uart_int | +| ... | ... | + +目前 RustOS 只支持上表中的 IRQ,不支持其他 basic IRQ。在 RustOS 中用到了 System Timer 与 mini UART 的 IRQ,分别为 system timer 1 (1) 与 Aux int (29)。 + +在 [kernel/src/arch/aarch64/board/raspi3/irq.rs](../../../kernel/src/arch/aarch64/board/raspi3/irq.rs#L23) 中实现了 IRQ 的注册,只需调用 `register_irq()` 函数绑定 IRQ 编号与处理函数,在 `handle_irq()` 里就会自动处理已注册的中断。 + +### 启用与禁用中断 + +只需分别向 Enable IRQs 1/2 和 Disable IRQs 1/2 寄存器的相应位写 1 即可: + +```rust +pub fn enable(&mut self, int: Interrupt) { + self.registers.EnableIRQ[int as usize / 32].write(1 << (int as usize) % 32); +} + +pub fn disable(&mut self, int: Interrupt) { + self.registers.DisableIRQ[int as usize / 32].write(1 << (int as usize) % 32); +} +``` + +### 获取待处理的中断 + +只需读取 IRQ pending 1/2 寄存器中的相应位,就能知道某一 IRQ 是否待处理: + +```rust +pub fn is_pending(&self, int: Interrupt) -> bool { + self.registers.IRQPending[int as usize / 32].read() & (1 << (int as usize) % 32) != 0 +} +``` + +此外也可将当前所有待处理的 IRQ 构成一个迭代器方便遍历: + +```rust +pub struct PendingInterrupts(u64); + +impl Iterator for PendingInterrupts { + type Item = usize; + + #[inline] + fn next(&mut self) -> Option { + let int = self.0.trailing_zeros(); + if int < 64 { + self.0 &= !(1 << int); + Some(int as usize) + } else { + None + } + } +} + +pub fn pending_interrupts(&self) -> PendingInterrupts { + let irq1 = self.registers.IRQPending[0].read() as u64; + let irq2 = self.registers.IRQPending[1].read() as u64; + PendingInterrupts((irq2 << 32) | irq1) +} +``` + ## Mini UART > 参考:BCM2837 ARM Peripherals: chapter 2, Auxiliaries: UART1 & SPI1, SPI2; chapter 6, General Purpose I/O (GPIO), page 101~102. @@ -113,7 +189,7 @@ RustOS 中 mini UART 的驱动主要实现在 crate [bcm2837](../../../crate/bcm 初始化 mini UART 的流程如下: -1. 向 `AUX_ENABLES` 寄存写 1,启用 mini UART; +1. 向 AUX_ENABLES 寄存器写 1,启用 mini UART; 2. 将 GPIO 的 14/15 引脚都设为 alternative function ALT5 (TXD1/RXD1) 模式,并都设为不拉状态; 3. 配置 mini UART 参数: @@ -182,8 +258,8 @@ Mailbox 有若干通道(channels),不同通道提供不同种类的功能。 读的流程如下: -1. 读状态寄存器 `MAIL0_STA`,直到 `MailboxEmpty` 位没有被设置; -2. 从 `MAIL0_RD` 寄存器读取数据; +1. 读状态寄存器 MAIL0_STA,直到 empty 位没有被设置; +2. 从 MAIL0_RD 寄存器读取数据; 3. 如果数据的最低 4 位不与要读的通道匹配,则回到 1; 4. 否则返回数据的高 28 位。 @@ -201,8 +277,8 @@ pub fn read(&self, channel: MailboxChannel) -> u32 { 写的流程如下: -1. 读状态寄存器 `MAIL1_STA`,直到 `MailboxFull` 位没有被设置; -3. 将数据(高 28 位)与通道(低 4 位)拼接,写入 `MAIL1_WRT` 寄存器。 +1. 读状态寄存器 MAIL1_STA,直到 full 位没有被设置; +3. 将数据(高 28 位)与通道(低 4 位)拼接,写入 MAIL1_WRT 寄存器。 ```rust pub fn write(&mut self, channel: MailboxChannel, data: u32) { @@ -264,10 +340,125 @@ pub fn framebuffer_get_physical_size() -> PropertyMailboxResult<(u32, u32)> { ## Timer +BCM283x 系列可用下列三种不同的时钟: + +* System Timer:BCM2837 ARM Peripherals 第 12 章,IO 基地址为 `0x3F003000`,最常用的时钟,但是在 QEMU 中不可用; +* ARM Timer:BCM2837 ARM Peripherals 第 14 章,IO 基地址为 `0x3F00B400`,在 QEMU 中也不可用,RustOS 并未实现; +* Generic Timer:ARMv8 Reference Manual 第 D10 章,通过 AArch64 系统寄存器访问 CPU 的时钟,外围设备只提供了中断控制(IO 基地址为 `0x40000000`),可同时在 QEMU 与真机上使用。 + +时钟主要实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [timer](../../../crate/bcm2837/src/timer) 模块中。可以指定 crate bcm2837 的 feature `use_generic_timer` 来选择是否使用 Generic Timer。在 [mod.rs](../../../crate/bcm2837/src/timer/mod.rs#L12) 中提供了以下 `trait`,具体的时钟驱动需要实现这些函数: + +```rust +/// The Raspberry Pi timer. +pub trait BasicTimer { + /// Returns a new instance. + fn new() -> Self; + + /// Initialization timer. + fn init(&mut self); + + /// Reads the timer's counter and returns the 64-bit counter value. + /// The returned value is the number of elapsed microseconds. + fn read(&self) -> u64; + + /// Sets up a match in timer 1 to occur `us` microseconds from now. If + /// interrupts for timer 1 are enabled and IRQs are unmasked, then a timer + /// interrupt will be issued in `us` microseconds. + fn tick_in(&mut self, us: u32); + + /// Returns `true` if timer interruption is pending. Otherwise, returns `false`. + fn is_pending(&self) -> bool; +} +``` + +在 [kernel/src/arch/aarch64/board/raspi3/timer.rs](../../../kernel/src/arch/aarch64/board/raspi3/timer.rs) 中对这些函数进行了简单封装。在 [kernel/src/arch/aarch64/board/raspi3/irq.rs](../../../kernel/src/arch/aarch64/board/raspi3/irq.rs#L9) 的 `handler_irq()` 函数中处理了时钟中断: + +```rust +let controller = bcm2837::timer::Timer::new(); +if controller.is_pending() { + super::timer::set_next(); + crate::trap::timer(); +} +``` + ### System Timer +> 参考:BCM2837 ARM Peripherals: chapter 12, System Timer. + +System Timer 通过 CS、CLO、CHI 等 IO 地址访问时钟,通过上文 Interrupt 节描述的 IRQ 控制器提供中断(IRQ 编号为 system timer 1)。实现方式如下: + +* 初始化:使用 [interrupt](../../../crate/bcm2837/src/interrupt.rs#L68) 模块的 `enable()` 函数启用 system timer 1 IRQ; +* 当前时刻:分别读取时钟计数器的高、低 32 位(CLO、CHI),再拼接起来得到 64 位计数器值(单位微秒); +* 设置下一次中断的时刻:向 System Timer Compare 1 (C1) 寄存器写入当前计数器值加上时间间隔,同时向 System Timer Control/Status (CS) 寄存器的第 1 位写入 1 表示当前的中断已被处理好; +* 判断是否有时钟中断:使用 [interrupt](../../../crate/bcm2837/src/interrupt.rs#L78) 模块的 `is_pending()` 函数。 + +```rust +fn init(&mut self) { + Controller::new().enable(Interrupt::Timer1); +} + +fn read(&self) -> u64 { + let low = self.registers.CLO.read(); + let high = self.registers.CHI.read(); + ((high as u64) << 32) | (low as u64) +} + +fn tick_in(&mut self, us: u32) { + let current_low = self.registers.CLO.read(); + let compare = current_low.wrapping_add(us); + self.registers.COMPARE[SystemTimerId::Timer1 as usize].write(compare); + self.registers.CS.write(1 << (SystemTimerId::Timer1 as usize)); // unmask +} + +fn is_pending(&self) -> bool { + let controller = Controller::new(); + controller.is_pending(Interrupt::Timer1) +} +``` + ### Generic Timer +> 参考: +> 1. ARMv8 Reference Manual: chapter D10, The Generic Timer in AArch64 state. +> 2. BCM2836 ARM-local peripherals (Quad-A7 control): section 4.6, Core timers interrupts; section 4.10, Core interrupt sources. + +RustOS 实现的 Generic Timer 是 CPU 在 EL1 下的 Physical Timer,可通过下列 AArch64 系统寄存器访问: + +| Generic Timer 系统寄存器 | 名称 | 描述 | +|----------------------------|----------------------------------------------------|------------------------------------------------| +| `CNTFRQ_EL0` | Counter-timer Frequency register | 获取时钟的频率,单位 Hz,典型的值为 62.5 MHz | +| `CNTP_CTL_EL0` | Counter-timer Physical Timer Control register | 控制 Physical Timer 是否启用,中断是否屏蔽等 | +| `CNTP_TVAL_EL0` | Counter-timer Physical Timer TimerValue register | 下一次时钟中断要再经过多少时钟周期。每当时钟计数器增加 1,该值就会减少 1,如果该值为 0 了就会触发时钟中断 | +| `CNTPCT_EL0` | Counter-timer Physical Count register | 获取时钟计数器的值 | + +而 Generic Timer 的中断控制器需要通过 `0x40000000` 开始的那些 IO 地址访问。Generic Timer 实现方式如下: + +* 初始化:将 `CNTP_CTL_EL0` 寄存器的 ENABLE 位置为 1,启用 CPU Physical Timer;将 Core0 timers Interrupt control 的 CNTPNSIRQ 位置为 1,开启中断; +* 当前时刻:读取 `CNTPCT_EL0` 寄存器获得当前时钟计数器的值,再与时钟频率 `CNTFRQ_EL0` 经过简单的换算即能得到以微秒为单位的当前时刻; +* 设置下一次中断的时刻:向 `CNTP_TVAL_EL0` 寄存器写入时间间隔对应的时钟周期数; +* 判断是否有时钟中断:判断 Core0 IRQ Source 的 CNTPNSIRQ 位是否为 1。 + +```rust +fn init(&mut self) { + self.registers.CORE_TIMER_IRQCNTL[0].write(1 << (CoreInterrupt::CNTPNSIRQ as u8)); + CNTP_CTL_EL0.write(CNTP_CTL_EL0::ENABLE::SET); +} + +fn read(&self) -> u64 { + let cntfrq = CNTFRQ_EL0.get(); // 62500000 + (CNTPCT_EL0.get() * 1000000 / (cntfrq as u64)) as u64 +} + +fn tick_in(&mut self, us: u32) { + let cntfrq = CNTFRQ_EL0.get(); // 62500000 + CNTP_TVAL_EL0.set(((cntfrq as f64) * (us as f64) / 1000000.0) as u32); +} + +fn is_pending(&self) -> bool { + self.registers.CORE_IRQ_SRC[0].read() & (1 << (CoreInterrupt::CNTPNSIRQ as u8)) != 0 +} +``` + ## Framebuffer ## Console diff --git a/docs/2_OSLab/g2/interrupt.md b/docs/2_OSLab/g2/interrupt.md index 1389b0f..62eef02 100644 --- a/docs/2_OSLab/g2/interrupt.md +++ b/docs/2_OSLab/g2/interrupt.md @@ -2,7 +2,7 @@ ## AArch64 异常模型 -> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile: capture D1.1, D1.7, D1.10, D1.11, D1.13, D1.14, D1.16. +> 参考:ARMv8 Reference Manual: chapter D1.1, D1.7, D1.10, D1.11, D1.13, D1.14, D1.16. 在 AArch64 中,各种中断被统称为**异常**(exception),包括: @@ -47,7 +47,7 @@ | LowerAArch64 | `0x400` | `0x480` | `0x500` | `0x580` | | LowerAArch32 | `0x600` | `0x680` | `0x700` | `0x780` | -如果该异常是 Synchronous 或 SError,**异常症状寄存器**(Exception Syndrome Register, ESR)将被设置,用于记录具体的异常类别 EC (exception class) 与 ISS (Instruction Specific Syndrome)。在 EL1、EL2、EL3 下各有一个 ESR 寄存器 `ESR_ELx`。具体的 EC、ISS 编码见官网文档 ARMv8 Reference Manual D1.10.4 节。 +如果该异常是 Synchronous 或 SError,**异常症状寄存器**(Exception Syndrome Register, ESR)将被设置,用于记录具体的异常类别 EC (exception class) 与 ISS (Instruction Specific Syndrome)。在 EL1、EL2、EL3 下各有一个 ESR 寄存器 `ESR_ELx`。具体的 EC、ISS 编码见官方文档 ARMv8 Reference Manual D1.10.4 节。 ### 异常屏蔽 diff --git a/docs/2_OSLab/g2/memory.md b/docs/2_OSLab/g2/memory.md index adde2c3..678d852 100644 --- a/docs/2_OSLab/g2/memory.md +++ b/docs/2_OSLab/g2/memory.md @@ -2,7 +2,7 @@ ## AArch64 虚拟内存系统 -> 参考:ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile: capture D5, The AArch64 Virtual Memory System Architecture. +> 参考:ARMv8 Reference Manual: chapter D5, The AArch64 Virtual Memory System Architecture. (注:完整的 AArch64 文档中描述了许多可选的配置,如页大小、翻译表级数等,以下描述都是指在 RustOS 中的实现,不代表只有这一种实现方式) @@ -69,7 +69,7 @@ AArch64 拥有 64 位地址,支持两段虚拟内存地址空间,分别为 ![](img/block-page-descriptor_attributes.png) -各字段的具体说明详见官网文档 ARMv8 Reference Manual D5.3.3 节。 +各字段的具体说明详见官方文档 ARMv8 Reference Manual D5.3.3 节。 ### 内存属性 (D5.5) diff --git a/docs/2_OSLab/g2/overview.md b/docs/2_OSLab/g2/overview.md index 77bea7f..37f21ca 100644 --- a/docs/2_OSLab/g2/overview.md +++ b/docs/2_OSLab/g2/overview.md @@ -27,7 +27,7 @@ * EL2: Hypervisor. * EL3: Secure monitor. -级别越高,特权(privilege)越高。一般称 EL0 为非特权级(unprivileged),其他的为特权级(unprivileged)。 +级别越高,特权(privilege)越高。一般称 EL0 为非特权级(unprivileged),其他的为特权级(privileged)。 ### 寄存器 @@ -83,8 +83,8 @@ AArch64 有下列**特殊寄存器**(Special-purpose registers): | 系统寄存器_ELx | 名称 | 描述 | |------------------|-----------------------------------------|------------------------------| | CTR | Cache Type Register | 获取 cache 信息 | -| ESR | Exception Syndrome Register | 保存发生异常的原因 | -| FAR | Fault Address Register | 保存发生访存错误的虚拟地址 | +| ESR | Exception Syndrome Register | 发生异常的原因 | +| FAR | Fault Address Register | 发生访存错误的虚拟地址 | | HCR | Hypervisor Configuration Register | 配置 EL2 下的虚拟化 | | MAIR | Memory Attribute Indirection Register | 配置内存属性 | | MPIDR | Multiprocessor Affinity Register | 多核系统中核的编号 | @@ -117,10 +117,10 @@ crate [aarch64](https://github.com/equation314/aarch64) 的 [regs](https://githu ## 官方文档 -* [ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile](https://static.docs.arm.com/ddi0487/da/DDI0487D_a_armv8_arm.pdf):AArch64 的完整文档,有 7000 多页,最为详细。 +* [ARM Architecture Reference Manual, for ARMv8-A architecture profile](https://static.docs.arm.com/ddi0487/da/DDI0487D_a_armv8_arm.pdf):AArch64 的完整文档,有 7000 多页,最为详细。 * [ARM Cortex-A Series Programmer’s Guide for ARMv8-A](http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf):可认为是上一文档的精简版,仅有不到 300 页。 * [BCM2837 ARM Peripherals](https://web.stanford.edu/class/cs140e/docs/BCM2837-ARM-Peripherals.pdf):Raspberry Pi SoC BCM283x 系列的外围设备文档,包含对 GPIO、中断控制器、mini UART、System Timer 等外围设备的访问。 -* [BCM2836 ARM-local peripherals](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2836/QA7_rev3.4.pdf):仅用于如何使用 ARM Generic Timer。 +* [BCM2836 ARM-local peripherals (Quad-A7 control)](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2836/QA7_rev3.4.pdf):仅用于如何使用 AArch64 Generic Timer 的中断。 * [Raspberry Pi firmware](https://github.com/raspberrypi/firmware):Raspberry Pi 二进制固件,部分开源,其中最有价值的是 [mailbox](https://github.com/raspberrypi/firmware/wiki) 的文档。 ## 其他参考 diff --git a/kernel/src/arch/aarch64/board/raspi3/fb.rs b/kernel/src/arch/aarch64/board/raspi3/fb.rs index 918c5a8..05fc6c0 100644 --- a/kernel/src/arch/aarch64/board/raspi3/fb.rs +++ b/kernel/src/arch/aarch64/board/raspi3/fb.rs @@ -203,7 +203,7 @@ impl Framebuffer { let mut value: usize = 0; let repeat = USIZE * 8 / self.fb_info.depth as usize; let mask = ((1u64 << self.fb_info.depth) - 1) as usize; - for i in 0..repeat { + for _i in 0..repeat { value <<= self.fb_info.depth; value += pixel as usize & mask; } diff --git a/kernel/src/arch/aarch64/board/raspi3/irq.rs b/kernel/src/arch/aarch64/board/raspi3/irq.rs index 9575e29..f31dee4 100644 --- a/kernel/src/arch/aarch64/board/raspi3/irq.rs +++ b/kernel/src/arch/aarch64/board/raspi3/irq.rs @@ -1,5 +1,6 @@ use crate::arch::interrupt::TrapFrame; use bcm2837::interrupt::Controller; +use bcm2837::timer::BasicTimer; pub use bcm2837::interrupt::Interrupt; diff --git a/kernel/src/arch/aarch64/board/raspi3/timer.rs b/kernel/src/arch/aarch64/board/raspi3/timer.rs index 8948441..d2a615f 100644 --- a/kernel/src/arch/aarch64/board/raspi3/timer.rs +++ b/kernel/src/arch/aarch64/board/raspi3/timer.rs @@ -1,17 +1,19 @@ -use bcm2837::timer; +use bcm2837::timer::{BasicTimer, Timer}; use log::*; +/// Initialization timer. pub fn init() { - timer::init(); + Timer::new().init(); set_next(); info!("timer: init end"); } +/// Returns the current time in microseconds. pub fn get_cycle() -> u64 { - timer::current_time() + Timer::new().read() } +/// Set next timer interrupt to 10 ms from now. pub fn set_next() { - // 10 ms - timer::tick_in(10 * 1000); + Timer::new().tick_in(10 * 1000); } From b4e0b382861f1617d1a183468293555e51a8f0de Mon Sep 17 00:00:00 2001 From: equation314 Date: Tue, 1 Jan 2019 21:48:35 +0800 Subject: [PATCH 28/30] aarch64/doc: add framebuffer driver --- docs/2_OSLab/g2/drivers.md | 257 +++++++++++++++++++++++-------------- 1 file changed, 158 insertions(+), 99 deletions(-) diff --git a/docs/2_OSLab/g2/drivers.md b/docs/2_OSLab/g2/drivers.md index cbc6835..200f199 100644 --- a/docs/2_OSLab/g2/drivers.md +++ b/docs/2_OSLab/g2/drivers.md @@ -239,105 +239,6 @@ pub fn write_byte(&mut self, byte: u8) { self.registers.AUX_MU_IO_REG.write(byte); } ``` - -## Mailbox - -> 参考:https://github.com/raspberrypi/firmware/wiki/Mailboxes - -Mailbox 是树莓派上 ARM CPU 与 VideoCore IV GPU 之间通信的渠道。Mailbox 能够识别一段按特定格式存储的请求指令,包含请求代码、请求长度、请求参数等信息,GPU 会根据请求的指令完成相应的操作,并将结果写在原处。 - -BCM283x 系列有两个 mailbox,一般 MB0 总是用于 GPU 向 CPU 发送消息 MB1 总是用于 CPU 向 GPU 发送消息,对 CPU 来说即一个只读一个只写。 - -Mailbox 有若干通道(channels),不同通道提供不同种类的功能。一般使用 property tags 通道(编号为 8),即 mailbox property interface。 - -### 基本读写 - -> 参考:https://github.com/raspberrypi/firmware/wiki/Accessing-mailboxes - -对 mailbox 的基本读写实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [mailbox.rs](../../../crate/bcm2837/src/mailbox.rs) 中。一般一次操作是向 mailbox 写入请求的地址,然后读 mailbox 来轮询等待操作完成。注意读写 mailbox 时只有数据的高 28 位有效,低 4 位被用于存放通道,所以如果写入的是一个地址则该地址必须 16 字节对齐。 - -读的流程如下: - -1. 读状态寄存器 MAIL0_STA,直到 empty 位没有被设置; -2. 从 MAIL0_RD 寄存器读取数据; -3. 如果数据的最低 4 位不与要读的通道匹配,则回到 1; -4. 否则返回数据的高 28 位。 - -```rust -pub fn read(&self, channel: MailboxChannel) -> u32 { - loop { - while self.registers.MAIL0_STA.read() & (MailboxStatus::MailboxEmpty as u32) != 0 {} - let data = self.registers.MAIL0_RD.read(); - if data & 0xF == channel as u32 { - return data & !0xF; - } - } -} -``` - -写的流程如下: - -1. 读状态寄存器 MAIL1_STA,直到 full 位没有被设置; -3. 将数据(高 28 位)与通道(低 4 位)拼接,写入 MAIL1_WRT 寄存器。 - -```rust -pub fn write(&mut self, channel: MailboxChannel, data: u32) { - while self.registers.MAIL1_STA.read() & (MailboxStatus::MailboxFull as u32) != 0 {} - self.registers.MAIL1_WRT.write((data & !0xF) | (channel as u32)); -} -``` - -### Mailbox property interface - -> 参考:https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface - -Mailbox property interface 提供了丰富的访问底层硬件的接口,包括电源、温度、DMA、GPU、内存、Framebuffer 等模块。RustOS 中封装了一系列 mailbox property interface 函数,实现在 [kernel/src/arch/aarch64/board/raspi3/mailbox.rs](../../../kernel/src/arch/aarch64/board/raspi3/mailbox.rs) 中。 - -向 mailbox property interface 发送的请求需要符合一定的格式。在 RustOS 中,对 mailbox property interface 的一个功能调用被称为一个 `PropertyMailboxTag`,格式如下: - -```rust -#[repr(C, packed)] -struct PropertyMailboxTag { - id: PropertyMailboxTagId, - buf_size: u32, - req_resp_size: u32, - buf: T, -} -``` - -这里的 `buf` 一般是一个 32 位无符号整数的数组。一个或多个 `PropertyMailboxTag` 可构成一个 `PropertyMailboxRequest`,这是最终需要向 mailbox 发送的请求,格式如下: - -```rust -#[repr(C, packed)] -struct PropertyMailboxRequest { - buf_size: u32, - req_resp_code: PropertyMailboxStatus, - buf: T, - end_tag: PropertyMailboxTagId, -} -``` - -这里的 `buf` 可以是多个大小不一的 `PropertyMailboxTag` 构成的数组,不过内存布局必须连续而没有空隙。 - -为了方便构造这两个结构体,定义了宏 `send_one_tag!()` 与 `send_request!()`: - -* `send_request!($tags: ident)`:发送一个或多个 `PropertyMailboxTag`。这会构建一个 16 字节对齐的 `PropertyMailboxRequest` 结构体,将其地址写入 mailbox。等待 GPU 操作完毕后,返回被修改过的 `PropertyMailboxTag` 列表。 - -* `send_one_tag!($id: expr, [$($arg: expr),*])`:这会根据 `id` 与 32 位无符号整数的数组构造一个 `PropertyMailboxTag` 结构体,然后通过宏 `send_request!()` 发送给 mailbox,返回被修改过的数组。 - -有了这两个宏,就可以非常方便地实现所需的 mailbox property interface 功能了。例如获取 framebuffer 物理大小: - -```rust -pub fn framebuffer_get_physical_size() -> PropertyMailboxResult<(u32, u32)> { - let ret = send_one_tag!(RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT, [0, 0])?; - Ok((ret[0], ret[1])) -} -``` - -`framebuffer_alloc()` 函数是一次性发送多个大小不一的 `PropertyMailboxTag` 的例子。 - -需要注意的是,当启用 MMU 与 cache 后,在访问 mailbox 的前后都需要刷新整个 `PropertyMailboxRequest` 结构的数据缓存,因为这里涉及到 GPU 与 CPU 的数据共享,必须时刻保证主存与 cache 中数据的一致性。 - ## Timer BCM283x 系列可用下列三种不同的时钟: @@ -459,6 +360,164 @@ fn is_pending(&self) -> bool { } ``` +## Mailbox + +> 参考:https://github.com/raspberrypi/firmware/wiki/Mailboxes + +Mailbox 是树莓派上 ARM CPU 与 VideoCore IV GPU 之间通信的渠道。Mailbox 能够识别一段按特定格式存储的请求指令,包含请求代码、请求长度、请求参数等信息,GPU 会根据请求的指令完成相应的操作,并将结果写在原处。 + +BCM283x 系列有两个 mailbox,一般 MB0 总是用于 GPU 向 CPU 发送消息 MB1 总是用于 CPU 向 GPU 发送消息,对 CPU 来说即一个只读一个只写。 + +Mailbox 有若干通道(channels),不同通道提供不同种类的功能。一般使用 property tags 通道(编号为 8),即 mailbox property interface。 + +### 基本读写 + +> 参考:https://github.com/raspberrypi/firmware/wiki/Accessing-mailboxes + +对 mailbox 的基本读写实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [mailbox.rs](../../../crate/bcm2837/src/mailbox.rs) 中。一般一次操作是向 mailbox 写入请求的地址,然后读 mailbox 来轮询等待操作完成。注意读写 mailbox 时只有数据的高 28 位有效,低 4 位被用于存放通道,所以如果写入的是一个地址则该地址必须 16 字节对齐。 + +读的流程如下: + +1. 读状态寄存器 MAIL0_STA,直到 empty 位没有被设置; +2. 从 MAIL0_RD 寄存器读取数据; +3. 如果数据的最低 4 位不与要读的通道匹配,则回到 1; +4. 否则返回数据的高 28 位。 + +```rust +pub fn read(&self, channel: MailboxChannel) -> u32 { + loop { + while self.registers.MAIL0_STA.read() & (MailboxStatus::MailboxEmpty as u32) != 0 {} + let data = self.registers.MAIL0_RD.read(); + if data & 0xF == channel as u32 { + return data & !0xF; + } + } +} +``` + +写的流程如下: + +1. 读状态寄存器 MAIL1_STA,直到 full 位没有被设置; +3. 将数据(高 28 位)与通道(低 4 位)拼接,写入 MAIL1_WRT 寄存器。 + +```rust +pub fn write(&mut self, channel: MailboxChannel, data: u32) { + while self.registers.MAIL1_STA.read() & (MailboxStatus::MailboxFull as u32) != 0 {} + self.registers.MAIL1_WRT.write((data & !0xF) | (channel as u32)); +} +``` + +### Mailbox property interface + +> 参考:https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface + +Mailbox property interface 提供了丰富的访问底层硬件的接口,包括电源、温度、DMA、GPU、内存、Framebuffer 等模块。RustOS 中封装了一系列 mailbox property interface 函数,实现在 [kernel/src/arch/aarch64/board/raspi3/mailbox.rs](../../../kernel/src/arch/aarch64/board/raspi3/mailbox.rs) 中。 + +向 mailbox property interface 发送的请求需要符合一定的格式。在 RustOS 中,对 mailbox property interface 的一个功能调用被称为一个 `PropertyMailboxTag`,格式如下: + +```rust +#[repr(C, packed)] +struct PropertyMailboxTag { + id: PropertyMailboxTagId, + buf_size: u32, + req_resp_size: u32, + buf: T, +} +``` + +这里的 `buf` 一般是一个 32 位无符号整数的数组。一个或多个 `PropertyMailboxTag` 可构成一个 `PropertyMailboxRequest`,这是最终需要向 mailbox 发送的请求,格式如下: + +```rust +#[repr(C, packed)] +struct PropertyMailboxRequest { + buf_size: u32, + req_resp_code: PropertyMailboxStatus, + buf: T, + end_tag: PropertyMailboxTagId, +} +``` + +这里的 `buf` 可以是多个大小不一的 `PropertyMailboxTag` 构成的数组,不过内存布局必须连续而没有空隙。 + +为了方便构造这两个结构体,定义了宏 `send_one_tag!()` 与 `send_request!()`: + +* `send_request!($tags: ident)`:发送一个或多个 `PropertyMailboxTag`。这会构建一个 16 字节对齐的 `PropertyMailboxRequest` 结构体,将其地址写入 mailbox。等待 GPU 操作完毕后,返回被修改过的 `PropertyMailboxTag` 列表。 + +* `send_one_tag!($id: expr, [$($arg: expr),*])`:这会根据 `id` 与 32 位无符号整数的数组构造一个 `PropertyMailboxTag` 结构体,然后通过宏 `send_request!()` 发送给 mailbox,返回被修改过的数组。 + +有了这两个宏,就可以非常方便地实现所需的 mailbox property interface 功能了。例如获取 framebuffer 物理分辨率: + +```rust +pub fn framebuffer_get_physical_size() -> PropertyMailboxResult<(u32, u32)> { + let ret = send_one_tag!(RPI_FIRMWARE_FRAMEBUFFER_GET_PHYSICAL_WIDTH_HEIGHT, [0, 0])?; + Ok((ret[0], ret[1])) +} +``` + +`framebuffer_alloc()` 函数是一次性发送多个大小不一的 `PropertyMailboxTag` 的例子。 + +需要注意的是,当启用 MMU 与 cache 后,在访问 mailbox 的前后都需要刷新整个 `PropertyMailboxRequest` 结构的数据缓存,因为这里涉及到 GPU 与 CPU 的数据共享,必须时刻保证主存与 cache 中数据的一致性。 + ## Framebuffer +Framebuffer 是一块内存缓存区,树莓派的 GPU 会将其中的数据转换为 HDMI 信号,输出给显示器。Framebuffer 的底层访问接口通过 mailbox property interface 实现。在 RustOS 中,树莓派的 framebuffer 实现在 [kernel/src/arch/aarch64/board/raspi3/fb.rs](../../../kernel/src/arch/aarch64/board/raspi3/fb.rs) 中。 + +### 相关数据结构 + +[fb.rs](../../../kernel/src/arch/aarch64/board/raspi3/fb.rs) 中定义了下列结构体: + +* `FramebufferInfo`:framebuffer 的信息,包括: + + + 实际可见的分辨率 `xres`、`yres` + + 虚拟的分辨率 `xres_virtual`、`yres_virtual` + + 位置偏移 `xoffset`、`yoffset` + + 颜色深度 `depth` + + 一行的字节数 `pitch` + + GPU 总线地址 `bus_addr` + + 大小 `screen_size` + +* `ColorDepth`:表示颜色深度的枚举值,目前支持 16 位和 32 位颜色深度; +* `ColorBuffer`:一个 union 类型,可将同一个 framebuffer 基址解析为下列三种类型: + + + 一个 32 位无符号整数,表示 framebuffer 基址的虚拟地址; + + 一个类型为 16 位整数,大小为 framebuffer 分辨率的数组,表示 16 位颜色深度下的每个像素点; + + 一个类型为 32 位整数,大小为 framebuffer 分辨率的数组,表示 32 位颜色深度下的每个像素点; + + ```rust + union ColorBuffer { + base_addr: usize, + buf16: &'static mut [u16], + buf32: &'static mut [u32], + } + ``` + + 该 union 还提供了 `read16()`、`write16()`、`read32()`、`write32()` 等函数用于直接读写不同颜色深度下的 framebuffer; + +* `Framebuffer`:具体的 framebuffer 结构体: + + ```rust + pub struct Framebuffer { + pub fb_info: FramebufferInfo, + pub color_depth: ColorDepth, + buf: ColorBuffer, + } + ``` + +### 初始化 + +Framebuffer 在函数 `Framebuffer::new()` 中初始化。流程如下: + +1. 通过 mailbox property interface,获取 framebuffer 物理分辨率、颜色深度等信息。也可以不获取,而是手动设置; +2. 设置好相关参数,调用 `mailbox::framebuffer_alloc()` 由 GPU 分配 framebuffer,构造出 `FramebufferInfo` 结构体; +3. 将 framebuffer GPU 总线地址转换为物理内存地址,然后调用 `memory::ioremap()` 将这段内存做对等映射,内存属性为 NormalNonCacheable; +4. 构造出 `Framebuffer` 结构体并返回。 + +### 读写 + +可通过 `Framebuffer::read()` 和 `Framebuffer::write()` 函数读取 framebuffer 中的一个像素,或写入一个像素。 + +为了提升连续区域读写的速度,还实现了 `Framebuffer::copy()` 与 `Framebuffer::fill()` 函数,分别用于拷贝一块区域、将一块区域都置为同一颜色。具体做法是将连续几个像素拼成一个 64 位整数,以减少访存次数。 + +`Framebuffer::clear()` 函数用于将屏幕清空(黑屏)。 + ## Console From dfb2d49cd62c17bacd80f8440a8fb0c793f8e45e Mon Sep 17 00:00:00 2001 From: equation314 Date: Wed, 2 Jan 2019 19:15:47 +0800 Subject: [PATCH 29/30] aarch64/doc: add console driver --- docs/2_OSLab/g2/boot.md | 14 +- docs/2_OSLab/g2/context.md | 22 +-- docs/2_OSLab/g2/drivers.md | 147 ++++++++++++++---- docs/2_OSLab/g2/img/fantastic-text.png | Bin 0 -> 350587 bytes docs/2_OSLab/g2/interrupt.md | 12 +- docs/2_OSLab/g2/memory.md | 28 ++-- docs/2_OSLab/g2/overview.md | 16 +- .../arch/aarch64/driver/console/fonts/mod.rs | 2 + 8 files changed, 162 insertions(+), 79 deletions(-) create mode 100644 docs/2_OSLab/g2/img/fantastic-text.png diff --git a/docs/2_OSLab/g2/boot.md b/docs/2_OSLab/g2/boot.md index c71d8f7..ee1d3be 100644 --- a/docs/2_OSLab/g2/boot.md +++ b/docs/2_OSLab/g2/boot.md @@ -208,11 +208,11 @@ pub extern "C" fn rust_main() -> ! { 流程如下: -1. 建立临时页表,启动 MMU; -2. 初始化串口输入输出,可以使用 `println!()` 等宏了; -3. 初始化 logging 模块,可以使用 `info!()`、`error!()` 等宏了; -4. 初始化中断,其实就是设置了异常向量基址; -5. 初始化内存管理,包括物理页帧分配器与内核堆分配器,最后会建立一个新的页表重新映射内核; -6. 初始化其他设备驱动,包括 Frambuffer、Console、Timer; -7. 初始化进程管理,包括线程调度器、进程管理器,并为每个核建立一个 idle 线程,最后会加载 SFS 文件系统加入用户态 shell 进程; +1. 建立临时页表,启动 MMU。 +2. 初始化串口输入输出,可以使用 `println!()` 等宏了。 +3. 初始化 logging 模块,可以使用 `info!()`、`error!()` 等宏了。 +4. 初始化中断,其实就是设置了异常向量基址。 +5. 初始化内存管理,包括物理页帧分配器与内核堆分配器,最后会建立一个新的页表重新映射内核。 +6. 初始化其他设备驱动,包括 Frambuffer、Console、Timer。 +7. 初始化进程管理,包括线程调度器、进程管理器,并为每个核建立一个 idle 线程,最后会加载 SFS 文件系统加入用户态 shell 进程。 8. 最后调用 `crate::kmain()`,按调度器轮流执行创建的线程。 diff --git a/docs/2_OSLab/g2/context.md b/docs/2_OSLab/g2/context.md index 4390675..1372c65 100644 --- a/docs/2_OSLab/g2/context.md +++ b/docs/2_OSLab/g2/context.md @@ -58,9 +58,9 @@ 每个进程控制块 `Process` ([kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L13)) 都会维护一个平台相关的 `Context` 对象,在 AArch64 中包含下列信息: - 1. `stack_top`:内核栈顶地址; - 2. `ttbr`:页表基址; - 3. `asid`:Address Space ID,详见下文“页表切换与 ASID 机制”。 + 1. `stack_top`:内核栈顶地址 + 2. `ttbr`:页表基址 + 3. `asid`:Address Space ID,详见下文“页表切换与 ASID 机制” ## 切换流程 @@ -135,8 +135,8 @@ impl AsidAllocator { 分配的流程如下: -1. 判断 `old_asid` 是否等于 `self.0.generation`,如果相等说明这一代的 ASID 还是有效的,直接返回 `old_asid`; -2. 否则,`old_asid` 已失效,如果当前代的 65535 个 ASID 没有分配完,就直接分配下一个; +1. 判断 `old_asid` 是否等于 `self.0.generation`,如果相等说明这一代的 ASID 还是有效的,直接返回 `old_asid`。 +2. 否则,`old_asid` 已失效,如果当前代的 65535 个 ASID 没有分配完,就直接分配下一个。 3. 如果当前代的 65535 个 ASID 都分配完了,就开始新的一代,同时刷新 TLB。 ### 寄存器与栈的切换 @@ -171,10 +171,10 @@ ret 流程如下: -1. 保存**当前栈顶** `sp` 到 `_self_stack` (`x0`),保存 **callee-saved 寄存器**到当前栈上; -2. 从 `_target_stack` (`x1`) 获取目标线程的**内核栈顶**,从目标线程内核栈顶恢复 **callee-saved 寄存器**; -4. 将 `sp` 设为目标线程内核栈顶,将 `_target_stack` (`x1`) 里的内容清空; -5. 使用 `ret` 指令返回,这会跳转到目标线程 `lr` 寄存器中存放的地址。 +1. 保存**当前栈顶** `sp` 到 `_self_stack` (`x0`),保存 **callee-saved 寄存器**到当前栈上。 +2. 从 `_target_stack` (`x1`) 获取目标线程的**内核栈顶**,从目标线程内核栈顶恢复 **callee-saved 寄存器**。 +3. 将 `sp` 设为目标线程内核栈顶,将 `_target_stack` (`x1`) 里的内容清空。 +4. 使用 `ret` 指令返回,这会跳转到目标线程 `lr` 寄存器中存放的地址。 为什么只保存了 `sp` 与 callee-saved 寄存器,而不是所有寄存器?因为执行上下文切换就是在调用一个函数,在调用前后编译器会自动保存并恢复 caller-saved 寄存器(调用者保存,即 `x0~x18`)。 @@ -186,8 +186,8 @@ ret 线程可通过下列三种方式创建: -1. 创建新的**内核线程**:直接给出一个内核函数; -2. 创建新的**用户线程**:解析 ELF 文件; +1. 创建新的**内核线程**:直接给出一个内核函数。 +2. 创建新的**用户线程**:解析 ELF 文件。 3. 从一个线程 **fork** 出一个新线程:通过 `fork` 系统调用。 三种线程的平台无关创建流程实现在 [kernel/src/process/context.rs](../../../kernel/src/process/context.rs#L40) 里,最终会分别调用 [kernel/src/arch/aarch64/interrupt/context.rs](../../../kernel/src/arch/aarch64/interrupt/context.rs#L146) 里的 `new_kernel_thread()`、`new_user_thread()` 和 `new_fork()` 这三个函数创建平台相关的 `Context` 结构。 diff --git a/docs/2_OSLab/g2/drivers.md b/docs/2_OSLab/g2/drivers.md index 200f199..eac26b4 100644 --- a/docs/2_OSLab/g2/drivers.md +++ b/docs/2_OSLab/g2/drivers.md @@ -81,11 +81,11 @@ pub fn into_input(self) -> Gpio { 引脚的上拉/下拉状态有 3 种:上拉(`10`)、下拉(`01`)与不拉(`00`)。设置该状态的流程如下: -1. 向 GPPUD 寄存器写入状态代码; -2. 等待 150 个时钟周期; -3. 根据引脚编号向相应的 GPPUDCLK0/1 寄存器的相应位写入 1; -4. 等待 150 个时钟周期; -5. 向 GPPUD 寄存器写入 0; +1. 向 GPPUD 寄存器写入状态代码。 +2. 等待 150 个时钟周期。 +3. 根据引脚编号向相应的 GPPUDCLK0/1 寄存器的相应位写入 1。 +4. 等待 150 个时钟周期。 +5. 向 GPPUD 寄存器写入 0。 6. 根据引脚编号向相应的 GPPUDCLK0/1 寄存器的相应位写入 0。 ```rust @@ -189,15 +189,15 @@ RustOS 中 mini UART 的驱动主要实现在 crate [bcm2837](../../../crate/bcm 初始化 mini UART 的流程如下: -1. 向 AUX_ENABLES 寄存器写 1,启用 mini UART; -2. 将 GPIO 的 14/15 引脚都设为 alternative function ALT5 (TXD1/RXD1) 模式,并都设为不拉状态; +1. 向 AUX_ENABLES 寄存器写 1,启用 mini UART。 +2. 将 GPIO 的 14/15 引脚都设为 alternative function ALT5 (TXD1/RXD1) 模式,并都设为不拉状态。 3. 配置 mini UART 参数: - 1. 暂时禁用接收器与发送器; - 2. 启用接收中断,禁用发送中断; - 3. 设置数据大小为 8 bit; - 4. 设置 RTS line 为 high; - 5. 设置波特率为 115200; + 1. 暂时禁用接收器与发送器。 + 2. 启用接收中断,禁用发送中断。 + 3. 设置数据大小为 8 bit。 + 4. 设置 RTS line 为 high。 + 5. 设置波特率为 115200。 6. 重新启用接收器与发送器。 ```rust @@ -243,8 +243,8 @@ pub fn write_byte(&mut self, byte: u8) { BCM283x 系列可用下列三种不同的时钟: -* System Timer:BCM2837 ARM Peripherals 第 12 章,IO 基地址为 `0x3F003000`,最常用的时钟,但是在 QEMU 中不可用; -* ARM Timer:BCM2837 ARM Peripherals 第 14 章,IO 基地址为 `0x3F00B400`,在 QEMU 中也不可用,RustOS 并未实现; +* System Timer:BCM2837 ARM Peripherals 第 12 章,IO 基地址为 `0x3F003000`,最常用的时钟,但是在 QEMU 中不可用。 +* ARM Timer:BCM2837 ARM Peripherals 第 14 章,IO 基地址为 `0x3F00B400`,在 QEMU 中也不可用,RustOS 并未实现。 * Generic Timer:ARMv8 Reference Manual 第 D10 章,通过 AArch64 系统寄存器访问 CPU 的时钟,外围设备只提供了中断控制(IO 基地址为 `0x40000000`),可同时在 QEMU 与真机上使用。 时钟主要实现在 crate [bcm2837](../../../crate/bcm2837/) 的 [timer](../../../crate/bcm2837/src/timer) 模块中。可以指定 crate bcm2837 的 feature `use_generic_timer` 来选择是否使用 Generic Timer。在 [mod.rs](../../../crate/bcm2837/src/timer/mod.rs#L12) 中提供了以下 `trait`,具体的时钟驱动需要实现这些函数: @@ -288,9 +288,9 @@ if controller.is_pending() { System Timer 通过 CS、CLO、CHI 等 IO 地址访问时钟,通过上文 Interrupt 节描述的 IRQ 控制器提供中断(IRQ 编号为 system timer 1)。实现方式如下: -* 初始化:使用 [interrupt](../../../crate/bcm2837/src/interrupt.rs#L68) 模块的 `enable()` 函数启用 system timer 1 IRQ; -* 当前时刻:分别读取时钟计数器的高、低 32 位(CLO、CHI),再拼接起来得到 64 位计数器值(单位微秒); -* 设置下一次中断的时刻:向 System Timer Compare 1 (C1) 寄存器写入当前计数器值加上时间间隔,同时向 System Timer Control/Status (CS) 寄存器的第 1 位写入 1 表示当前的中断已被处理好; +* 初始化:使用 [interrupt](../../../crate/bcm2837/src/interrupt.rs#L68) 模块的 `enable()` 函数启用 system timer 1 IRQ。 +* 当前时刻:分别读取时钟计数器的高、低 32 位(CLO、CHI),再拼接起来得到 64 位计数器值(单位微秒)。 +* 设置下一次中断的时刻:向 System Timer Compare 1 (C1) 寄存器写入当前计数器值加上时间间隔,同时向 System Timer Control/Status (CS) 寄存器的第 1 位写入 1 表示当前的中断已被处理好。 * 判断是否有时钟中断:使用 [interrupt](../../../crate/bcm2837/src/interrupt.rs#L78) 模块的 `is_pending()` 函数。 ```rust @@ -334,9 +334,9 @@ RustOS 实现的 Generic Timer 是 CPU 在 EL1 下的 Physical Timer,可通过 而 Generic Timer 的中断控制器需要通过 `0x40000000` 开始的那些 IO 地址访问。Generic Timer 实现方式如下: -* 初始化:将 `CNTP_CTL_EL0` 寄存器的 ENABLE 位置为 1,启用 CPU Physical Timer;将 Core0 timers Interrupt control 的 CNTPNSIRQ 位置为 1,开启中断; -* 当前时刻:读取 `CNTPCT_EL0` 寄存器获得当前时钟计数器的值,再与时钟频率 `CNTFRQ_EL0` 经过简单的换算即能得到以微秒为单位的当前时刻; -* 设置下一次中断的时刻:向 `CNTP_TVAL_EL0` 寄存器写入时间间隔对应的时钟周期数; +* 初始化:将 `CNTP_CTL_EL0` 寄存器的 ENABLE 位置为 1,启用 CPU Physical Timer;将 Core0 timers Interrupt control 的 CNTPNSIRQ 位置为 1,开启中断。 +* 当前时刻:读取 `CNTPCT_EL0` 寄存器获得当前时钟计数器的值,再与时钟频率 `CNTFRQ_EL0` 经过简单的换算即能得到以微秒为单位的当前时刻。 +* 设置下一次中断的时刻:向 `CNTP_TVAL_EL0` 寄存器写入时间间隔对应的时钟周期数。 * 判断是否有时钟中断:判断 Core0 IRQ Source 的 CNTPNSIRQ 位是否为 1。 ```rust @@ -378,9 +378,9 @@ Mailbox 有若干通道(channels),不同通道提供不同种类的功能。 读的流程如下: -1. 读状态寄存器 MAIL0_STA,直到 empty 位没有被设置; -2. 从 MAIL0_RD 寄存器读取数据; -3. 如果数据的最低 4 位不与要读的通道匹配,则回到 1; +1. 读状态寄存器 MAIL0_STA,直到 empty 位没有被设置。 +2. 从 MAIL0_RD 寄存器读取数据。 +3. 如果数据的最低 4 位不与要读的通道匹配,则回到 1。 4. 否则返回数据的高 28 位。 ```rust @@ -397,8 +397,8 @@ pub fn read(&self, channel: MailboxChannel) -> u32 { 写的流程如下: -1. 读状态寄存器 MAIL1_STA,直到 full 位没有被设置; -3. 将数据(高 28 位)与通道(低 4 位)拼接,写入 MAIL1_WRT 寄存器。 +1. 读状态寄存器 MAIL1_STA,直到 full 位没有被设置。 +2. 将数据(高 28 位)与通道(低 4 位)拼接,写入 MAIL1_WRT 寄存器。 ```rust pub fn write(&mut self, channel: MailboxChannel, data: u32) { @@ -476,12 +476,12 @@ Framebuffer 是一块内存缓存区,树莓派的 GPU 会将其中的数据转 + GPU 总线地址 `bus_addr` + 大小 `screen_size` -* `ColorDepth`:表示颜色深度的枚举值,目前支持 16 位和 32 位颜色深度; +* `ColorDepth`:表示颜色深度的枚举值,目前支持 16 位和 32 位颜色深度。 * `ColorBuffer`:一个 union 类型,可将同一个 framebuffer 基址解析为下列三种类型: - + 一个 32 位无符号整数,表示 framebuffer 基址的虚拟地址; - + 一个类型为 16 位整数,大小为 framebuffer 分辨率的数组,表示 16 位颜色深度下的每个像素点; - + 一个类型为 32 位整数,大小为 framebuffer 分辨率的数组,表示 32 位颜色深度下的每个像素点; + + 一个 32 位无符号整数,表示 framebuffer 基址的虚拟地址。 + + 一个类型为 16 位整数,大小为 framebuffer 分辨率的数组,表示 16 位颜色深度下的每个像素点。 + + 一个类型为 32 位整数,大小为 framebuffer 分辨率的数组,表示 32 位颜色深度下的每个像素点。 ```rust union ColorBuffer { @@ -491,7 +491,7 @@ Framebuffer 是一块内存缓存区,树莓派的 GPU 会将其中的数据转 } ``` - 该 union 还提供了 `read16()`、`write16()`、`read32()`、`write32()` 等函数用于直接读写不同颜色深度下的 framebuffer; + 该 union 还提供了 `read16()`、`write16()`、`read32()`、`write32()` 等函数用于直接读写不同颜色深度下的 framebuffer。 * `Framebuffer`:具体的 framebuffer 结构体: @@ -507,9 +507,9 @@ Framebuffer 是一块内存缓存区,树莓派的 GPU 会将其中的数据转 Framebuffer 在函数 `Framebuffer::new()` 中初始化。流程如下: -1. 通过 mailbox property interface,获取 framebuffer 物理分辨率、颜色深度等信息。也可以不获取,而是手动设置; -2. 设置好相关参数,调用 `mailbox::framebuffer_alloc()` 由 GPU 分配 framebuffer,构造出 `FramebufferInfo` 结构体; -3. 将 framebuffer GPU 总线地址转换为物理内存地址,然后调用 `memory::ioremap()` 将这段内存做对等映射,内存属性为 NormalNonCacheable; +1. 通过 mailbox property interface,获取 framebuffer 物理分辨率、颜色深度等信息。也可以不获取,而是手动设置。 +2. 设置好相关参数,调用 `mailbox::framebuffer_alloc()` 由 GPU 分配 framebuffer,构造出 `FramebufferInfo` 结构体。 +3. 将 framebuffer GPU 总线地址转换为物理内存地址,然后调用 `memory::ioremap()` 将这段内存做对等映射,内存属性为 NormalNonCacheable。 4. 构造出 `Framebuffer` 结构体并返回。 ### 读写 @@ -521,3 +521,84 @@ Framebuffer 在函数 `Framebuffer::new()` 中初始化。流程如下: `Framebuffer::clear()` 函数用于将屏幕清空(黑屏)。 ## Console + +有了 framebuffer,就可以将显示器作为输出设备显示字符了。为此 +Console (控制台) 是一个平台无关的抽象输出设备,表示屏幕上要显示的字符矩阵。该设备负责将字符转成像素点写入 framebuffer 中,以实现显示器中字符的显示,并支持颜色、字体等多种效果。 + +Console 驱动实现在模块 [kernel/src/arch/aarch64/driver/console](../../../kernel/src/arch/aarch64/driver/console/) 中,依赖 framebuffer,包含下面几部分: + +1. 控制台主体([mod.rs](../../../kernel/src/arch/aarch64/driver/console/mod.rs)) +2. 颜色([color.rs](../../../kernel/src/arch/aarch64/driver/console/color.rs)) +3. 字体([fonts](../../../kernel/src/arch/aarch64/driver/console/fonts)) +4. ANSI 转移序列解析器([escape_parser.rs](../../../kernel/src/arch/aarch64/driver/console/escape_parser.rs)) + +### 控制台主体 + +包含下列结构体: + +* `ConsoleChar`:控制台中的字符,由 ASCII 码 `ascii_char` 与字符属性 `attr` (详见下节“ANSI 转移序列解析器”)构成。 +* `ConsoleBuffer`:控制台字符缓冲区,是一个 `num_row` 行 `num_col` 列,元素类型是 `ConsoleChar` 的二维数组。主要包含以下函数: + + + `write()`:向 `(row, col)` 处写入一个字符 `ch`。这会根据给定的字体与字符属性,将字符转成像素点呈现在 framebuffer 上。 + + `new_line()`:向字符缓冲区的底部插入一个新行,并将原来的内容都向上平移一行。在真机上测试时,发现 framebuffer 读的速度非常慢,所以没有用 `Framebuffer::copy()` 函数直接拷贝 framebuffer 内容,而是根据新的字符缓冲区重新绘制。 + + `clear()`:清空屏幕与字符缓冲区内容。 + +* `Console`:具体的控制台结构体,通过传入的字体泛型 `` 构造,包含当前光标位置 `(row, col)`、 ANSI 转移序列解析器 `parser` 以及控制台字符缓冲区 `buffer`,主要包含以下函数: + + + `new()`:根据 `FramebufferInfo` 新建一个 `Console` 对象。当前字体下字符的高、宽与 framebuffer 分辨率将决定字符缓冲区的大小。 + + `write_byte()`:向当前光标位置处写入一个字符。这会根据具体是什么字符进行相应的操作,包括:直接显示该字符、换行、删除前一个字符、传给转移序列解析器。 + + `new_line()`:换行。如果当前光标位于字符缓冲区最底部则会调用 `ConsoleBuffer::new_line()` 移动屏幕内容。 + + `clear()`:清空并初始化。 + + 此外,`Console` 实现了 trait `fmt::Write` 的 `write_str()` 函数,这样就可以用 `write_fmt()` 格式化输出了。 + +### 颜色 + +该模块定义了 16 种颜色(8 种标准颜色与 8 种高亮的标准颜色),并提供了将 RGB 值转换为 framebuffer 可识别的 16/32 位像素值的方法。 + +### 字体 + +该模块定义了统一的字体接口: + +```rust +pub trait Font { + const HEIGHT: usize; + const WIDTH: usize; + + /// the `y` coordinate of underline. + const UNDERLINE: usize; + /// the `y` coordinate of strikethrough. + const STRIKETHROUGH: usize; + + /// Whether the character `byte` is visible at `(x, y)`. + fn get(byte: u8, x: usize, y: usize) -> bool; +} +``` + +添加一种字体只需实现该 trait 即可,支持下划线与删除线。目前内置了一种 8x16 的字体(直接从 linux 中拷贝而来,[CP437 编码](https://en.wikipedia.org/wiki/Code_page_437))。 + +### ANSI 转移序列解析器 + +> 参考:https://en.wikipedia.org/wiki/ANSI_escape_code + +为了在控制台上支持文字颜色等选项,RustOS 实现了一个简易的 ANSI 转移序列(ANSI escape sequences)解析器,可识别标准的ANSI 转移序列并呈现在屏幕上,支持下列 SGR (Select Graphic Rendition) 字符属性: + +| SGR 代码 | 效果 | +|------------|------------------------| +| 0 | 重置为默认 | +| 4 | 下划线 | +| 7 | 反转前景与背景色 | +| 9 | 删除线 | +| 24 | 取消下划线 | +| 27 | 取消反转前景与背景色 | +| 29 | 取消删除线 | +| 30~37 | 设置前景色 | +| 40~47 | 设置背景色 | +| 90~97 | 设置高亮前景色 | +| 100~107 | 设置高亮背景色 | + +具体实现时,结构体 `EscapeParser` 维护了一个状态机,通过 `parse()` 函数传入一个字符,转移状态,解析出 SGR 参数并更新当前字符属性;通过 `char_attribute()` 函数获取当前的字符属性。 + +目前显示效果与在终端下使用 `screen` 获取串口输出的效果一致,如在 QEMU 中运行 `fantastic_text` 测例的效果如下: + +![](img/fantastic-text.png) diff --git a/docs/2_OSLab/g2/img/fantastic-text.png b/docs/2_OSLab/g2/img/fantastic-text.png new file mode 100644 index 0000000000000000000000000000000000000000..15c3f19e8e26f7d5da5738773e809b00e17f54e9 GIT binary patch literal 350587 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