1. INTRO
  2. 1. Intro
  3. 2. Prerequisites for the Book
  4. UNDERSTANDING DRIVERS (theory)
  5. 3. Intro to Drivers
  6. 4. Role 1: Controlling the device below
  7. 5. Role 2: Providing an interface
  8. 6. Types of Drivers
  9. BARE METAL PROGRAMMING
  10. 7. No std preface
    1. 7.1. Machine Code
    2. 7.2. Dependencies
    3. 7.3. The Standard Library
    4. 7.4. Bare Metal
    5. 7.5. Disabling the Standard Library
    6. 7.6. The Core library
      1. 7.6.1. Panic Symbols
      2. 7.6.2. Memory Symbols
    7. 7.7. Practicals - part 1
    8. 7.8. Practicals - part 2
  11. 8. Cross-Compilation
    1. 8.1. LLVM
    2. 8.2. Cranelift
  12. 9. Linkers and Linking
  13. 10. Practicals - part 3
  14. 11. Binary Inspection
  15. THEORY ON THE UART
  16. 12. Intro
  17. 13. general overview
  18. 14. uart registers- part 1
  19. 15. uart registers- part 2
  20. ABSTRACTIONS OVER HARDWARE
  21. 16. Abstractions
  22. 17. Abstracting a Peripheral
    1. 17.1. System Timer - Part 1
    2. 17.2. System Timer - Step 1 & 2
  23. 18. Registers and MMIO programming
  24. 19. re-definition using strict provenance
  25. 20. The datasheet
  26. 21. Abstraction
    1. 21.1. MAC, PAC, HAL
    2. 21.2. svd2rust
    3. 21.3. SVD
    4. 21.4. IP-XACT
    5. 21.5. UVM
    6. 21.6. SystemRDL
    7. 21.7. vcell
    8. 21.8. representations
  27. 22. random
  28. THE UART IMPLEMENTATION (on Qemu and single-threaded)
  29. 23. Intro
    1. 23.1. Setting Things Up
    2. 23.2. Setting up the compiler
    3. 23.3. No-std recap
    4. 23.4. Setting up the Riscv Virtual environment
    5. 23.5. Setting up the linker
    6. 23.6. Automating build & run
  30. 24. Loaders and Bootloaders
    1. 24.1. The Bootloader
    2. 24.2. tutorial over a naive UART implementation on a Esp32 device
  31. Testing
  32. 25. no-std testing
  33. Probing
  34. 26. Probing
    1. 26.1. Probing Theory
    2. 26.2. Probing Pracs
    3. 26.3. udev
    4. 26.4. Flashing
    5. 26.5. Monitoring and Logging
      1. 26.5.1. draft_1
    6. 26.6. Debugging
    7. 26.7. No-std testing
  35. THE UART IMPLEMENTATION (less naive, with concurrency in mind)
  36. 27. Concurrency
    1. 27.1. critical section crate
    2. 27.2. critical-sections in single-threaded cores
    3. 27.3. critical-secions above multi-cores
    4. 27.4. real-life-examples
  37. 28. tutorial over a naive UART implementation on a Qemu device
  38. 29. tutorial over a naive UART implementation on a Esp32 device
  39. OTHER STORIES
  40. 30. Performance testing
  41. 31. Driver Security
    1. 31.1. Common Security Issues in Driver Development
    2. 31.2. Rust's Safety Features for Driver Security
    3. 31.3. Best Practices for Secure Driver Development
  42. 32. Case Studies and Examples
    1. 32.1. Real-world Driver Development Examples
    2. 32.2. Analyzing an Existing Rust Driver
  43. 33. Iterative Implementation
  44. 34. core::io
    1. 34.1. display and debuging structure
  45. 35. Custom Targets
  46. APPENDIX
  47. 36. Notable Crates
  48. 37. Notable Learning Resources
  49. 38. Notable core-crates
  50. 39. why use Rust?
  51. 40. The Rust Toolchain
  52. 41. Further Explanations
    1. 41.1. Firmware versus Drivers
    2. 41.2. different_std_libs
    3. 41.3. a-runtime
    4. 41.4. the-C-runtime
    5. 41.5. the-Rust-runtime
    6. 41.6. Riscv Runtime
    7. 41.7. execution-environment
    8. 41.8. api-definition
    9. 41.9. abi-definition
    10. 41.10. isa-definition
    11. 41.11. factors affecting object file
    12. 41.12. How to build runtimes
    13. 41.13. rustup-target-add
    14. 41.14. Direct Memory Access
    15. 41.15. communication protocols
  53. 42. tips on pointer abstraction
  54. 43. svd2rust further explanations
  55. DRAFTS
  56. 44. bench-marking
  57. 45. more on no-std
    1. 45.1. core::mem
    2. 45.2. core::iter
  58. 46. macros
  59. 47. untouched
  60. 48. Codegen
  61. UNBECOMING
  62. 49. HDLs
  63. 50. Interfaces
  64. 51. community_links

driver development in Rust

Riscv Runtime