Давайте напишемо драйвер UART

Машина QEMU ‘virt’ має PL011 UART, тож давайте напишемо для нього драйвер.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

  • Зауважте, що Uart::new є небезпечним, тоді як інші методи є безпечними. Це пов’язано з тим, що доки викликач Uart::new гарантує, що його вимоги безпеки дотримано (тобто, що існує лише один екземпляр драйвера для даного UART, і ніщо інше не змінює його адресний простір), доти безпечно викликати write_byte пізніше, оскільки ми можемо припустити, що виконано необхідні передумови.
  • Ми могли б зробити це навпаки (зробити new безпечним, але write_byte небезпечним), але це було б набагато менш зручно використовувати, оскільки кожне місце, яке викликає write_byte, мало б міркувати про безпеку
  • Це загальний шаблон для написання безпечних оболонок небезпечного коду: перенесення тягаря доведення правильності з великої кількості місць на меншу кількість місць.