Comprehensive Rust(한국어) 202412드라이버작성 QEMU 의 'virt' 보드에는 PL011 UART 가있으므로 이를 위한 드라이버를 작성해 보겠습니다. const FLAG_REGISTER_OFFSET: usize = 0x18; const FR_BUSY: u8 = 1 << 3; const FR_TXFF: u8 = 1 << 5; /// PL011 UART 의 최소 드라이버입니다. pub struct { base_address: *mut u8, } impl Uart { /// 지정된 기본 주소에 PL011 기기에 대한 UART 드라이버의 새 인스턴스를 /// 생성합니다. 275 /// /// # 안전 /// /// 지정된 기본 주소는 PL011 기기의 /// MMIO 제어 레지스터 8 개를 가리켜야 하며, /// 이는 프로세스의 주소 공간에 // TX 버퍼에 공간이 확보될 때까지 기다립니다. while self.read_flag_register() & FR_TXFF != 0 {} // 기본 주소가 적절하게 매핑된 PL011 기기의 제어 레지스터를 // 가리키고 있으므로 안전합니다. unsafe { // TX 버퍼에 씁니다. self.base_address.write_volatile(byte);0 码力 | 369 页 | 1.29 MB | 11 月前3
Comprehensive Rust드라이버작성 QEMU 의 'virt' 보드에는 PL011 UART 가있으므로 이를 위한 드라이버를 작성해 보겠습니다. const FLAG_REGISTER_OFFSET: usize = 0x18; const FR_BUSY: u8 = 1 << 3; const FR_TXFF: u8 = 1 << 5; /// PL011 UART 의 최소 드라이버입니다. pub struct { base_address: *mut u8, } impl Uart { /// 지정된 기본 주소에 PL011 기기에 대한 UART 드라이버의 새 인스턴스를 /// 생성합니다. 274 /// /// # 안전 /// /// 지정된 기본 주소는 PL011 기기의 /// MMIO 제어 레지스터 8 개를 가리켜야 하며, /// 이는 프로세스의 주소 공간에 // TX 버퍼에 공간이 확보될 때까지 기다립니다. while self.read_flag_register() & FR_TXFF != 0 {} // 기본 주소가 적절하게 매핑된 PL011 기기의 제어 레지스터를 // 가리키고 있으므로 안전합니다. unsafe { // TX 버퍼에 씁니다. self.base_address.write_volatile(byte);0 码力 | 368 页 | 1.29 MB | 1 年前3
Krita 5.2 브로셔a nice noticeable speed improvement for Linux users. source: https://linux.slashdot.org/comments.pl?sid=2117150&cid=35987784 wikipedia: https://en.wikipedia.org/wiki/Profile-guided_optimization g++0 码力 | 1531 页 | 79.11 MB | 1 年前3
共 3 条
- 1













