Cheat Sheet#

pw_kernel: Kernel experiments

rust_analyzer#

Generating rust-project.json#

For a given $CONFIG in:

  • k_host

  • k_qemu_mps2_an505

  • k_rp2350

bazelisk run @rules_rust//tools/rust_analyzer:gen_rust_project -- --config $CONFIG //pw_kernel/...

Errors and warnings in VSCode#

Add this to Pigweed’s .vscode/settings.json. Note that it only builds the kernel targets to limit the amount of time that it takes to run. Substitute $CONFIG for the config chosen above.

"rust-analyzer.check.overrideCommand": [
  "bazelisk",
  "build",
  "--config=$CONFIG",
  "--@rules_rust//:error_format=json",
  "//pw_kernel/..."
],

Build and Test#

Host#

Test#

bazelisk test --config k_host //pw_kernel/...

QEMU#

Supported QEMU platforms: * k_qemu_mps2_an505 - a cortex-m33 based system * k_qemu_virt_riscv32 - a riscv32 based system

Test#

bazelisk test --config k_qemu_mps2_an505 //pw_kernel/...

Run#

^A-x to exit qemu

bazelisk run --config k_qemu_mps2_an505 //pw_kernel/entry:kernel
bazelisk run --config k_qemu_virt_riscv32 //pw_kernel/entry:kernel

If the tokenized logger is being used, the stream can be detokenized with:

bazelisk run --config k_qemu_mps2_an505 //pw_kernel/entry:kernel | python -m pw_tokenizer.detokenize base64 ./bazel-bin/pw_kernel/entry/kernel
bazelisk run --config k_qemu_virt_riscv32 //pw_kernel/entry:kernel | python -m pw_tokenizer.detokenize base64 ./bazel-bin/pw_kernel/entry/kernel

Note that this requires a bootstrapped environment.

RP2350 Target Board#

Build#

bazelisk build --config k_rp2350 //pw_kernel/entry:kernel

Flash#

probe-rs download --chip rp2350 bazel-bin/pw_kernel/entry/kernel && probe-rs reset