Embedded shell.
Tooling for register exploration using SVD files and GDB-MI or OpenOCD backends
emhell
Embedded development could be hell without a good tooling!
Applications
emhell
emhell
is a SVD (System View Description) register browser
Commands
:set
- Set register field (for example:set uart4.brr.div_mantissa = 0x123
).Since
emhell
has no backend, it simply renders the altered register.
hocd
hocd
is a register viewer utilizing OpenOCD as a backend using hocd
Commands
:set
- Set register field (for example:set gpioa.odr.odr5 = 1
).Alters current register value with hexadecimal field value and writes new register value to memory.
:halt
- Halts target:reset
- Resets target:resume
- Resumes execution:step
- Single-steps target:version
- Print OpenOCD version
hgdb
hgdb
is a register viewer and a GDB
frontend, built on top hgdbmi
Inspecting registers
To use arm-none-eabi-gdb
with BlackMagicProbe available via /dev/bmp
launch hgdb
in following manner
hgdb --arm --bmp /dev/bmp --svd stm32f407.svd
You can then inspect registers via REPL using their names (tab completion available) delimited by comma, e.g.
λ> scb.scr
Register SCR
- System Control Register
- Address 0xE000ED10 (including offset 0x10)
0000000004
0x00000004
0b00000000000000000000000000000100
0b0000 0000 0000 0000 0000 0000 0000 0000 0100
Bit 2 SLEEPDEEP
+-------+---------+-+---------+-----------+-+
|◦[26:0]|SEVONPEND|◦|SLEEPDEEP|SLEEPONEXIT|◦|
+-------+---------+-+---------+-----------+-+
| 0 | 0 |0| 1 | 0 |0|
+-------+---------+-+---------+-----------+-+
Command line options
-e | --ex
behaves likegdb --ex
--svd
specifies SVD file to load on start--file
can be used to load image to Gdb on start-a | --arm
to usearm-none-eabi-gdb
--bmp DEV
for use with BlackMagicProbe over UART--bmphosted HOST:PORT
for use with PC hosted BlackMagicProbe (blackmagic_stlinkv2
binary)--remotegdb HOST:PORT
for use with remotely running GDB server over TCP (could be OpenOCD provided one)
For full list refer to hgdb --help
Commands
:set
- Set register value (for example:set gpioa.odr.odr5 = 1
).:svd
- Load SVD file, can be used instead of--svd
arguments or to change current SVD file:file
- Load file to Gdb
All other REPL commands are forwarded to GDB as CLI input.
Build
Using Cabal
git clone https://github.com/DistRap/emhell
cabal build
Using Nix
nix-build
Notes
The interface is not final and will probably change. With more recent Gdb than currently available on distributions we could also do completion for function names and variables (requires -symbol-list-functions
and -symbol-list-variables
).