Coder Social home page Coder Social logo

prudebug's Introduction

NOTE: THIS IS NOT MY CODE. I'm hosting this here to back up my own changes in case my laptop and BeagleBone get lost in a fire or something.

Prudebug Version 0.25

(C) Copyright 2011, 2013 by Arctica Technologies Written by Steven Anderson

Prudebug is a very small program that was initially intended to be 100-200 lines of code to start/stop the PRU and load a binary in the PRU. As I worked through my PRU development project I added several addition features (some I needed for debugging the project, and a few just because they seemed nice). After completing the PRU coding project this program sat unused for about a year before I decided that maybe someone else out there needed a PRU debugger. After all, if you need a hard realtime process and you're using Linux, a PRU is an easy way to go.

THIS PROGRAM HAS VERY LIMITED TESTING - USE AT YOUR OWN RISK. I did test the features that I used, but there are many features I didn't need for my project. I attempted a couple quick tests with the unused features, but it would be very easy to miss something. For example, I only used PRU0 for my coding, so very little testing was done with PRU1. I'm sure the user interface has bugs but I haven't hit them yet....it's easy to miss issues when you know how it's supposed to work. As I continue to add code, I'll try to do a more complete job of testing, but I will continue to use feedback for locating most bugs.

RELEASE NOTES for prudebug

Version 0.24 Improvements:

Added support for UIO PRUSS driver
Moved to dynamic processor selection - user can pick a processor on the command line
Fixed watchpoints and breakpoints to support different values on different PRUs

Version 0.25 Bug fixes provided by Shoji Suzuki Correction to the QBA instruction decode Fix backspace code for terminals using 0x7f Corrected issue with writing numbers greater than 0x7fffffff to PRU memory with the wr command

BUGS

Please let me know if you find any bugs or you have comments on prudebug ([email protected]). You can also log a bug on the SourceForge page. I will try to fix bugs as time permits.

No known bugs at the time of v0.25 release

USE WITH PRUSS v2

prudebug should work fine with the PRUSSv2. It does not support any new features of the PRUSSv2, but I will try to add some as time permits. I have done some testing on both the AM1707 (PRUSSv1) and AM3358 (PRUSSv2) processors.

CONTRIBUTORS

Christian Joly - bug fixes, and modifications to make prudebug work with PRUSSv2.
Shoji Suzuki - bug fixes for v0.25

INSTALLATION

To build just run make in the source code directory (make sure you have the correct cross-compiler in place and in the path - arm-none-linux-gnueabi-gcc). You may also need to run

sudo apt-get install libreadline-dev

to install the readline library. The binary is called prudebug.

USAGE

Usage: prudebug [-a pruss-address] [-u] [-m] [-p processor]
    -a - pruss-address is the memory address of the PRU in ARM memory space
    -u - force the use of UIO to map PRU memory space
    -m - force the use of /dev/mem to map PRU memory space
    if neither the -u or -m options are used then it will try the UIO first
    -p - select processor to use (sets the PRU memory locations)
        AM1707 - AM1707
        AM335X - AM335x
        AM57X1 - AM57x1
        AM57X2 - AM57x2

Generally the -a option should not be used. If it is used, then prudebug will use the -a address for the PRU base with the selected processor as the various PRU subsystem offsets. -u and -m control the way the PRU base address is mapped for program access (either the /dev/mem or /dev/uio* device). If -u or -m are selected then it will only used the selected method or fail. If neither the -u or -m are selected then prudebug will try to use the UIO device driver, and if that fails then it will use /dev/mem. The -p option allows you to select the processor. If your processor is not listed then determine if one of the listed processors has compatible PRU (same base address and PRU subsystem offsets). If not, you'll need to modify prudbg.c and prudbg.h (see remarks near the beginning of prudbg.c). If you do add to the list of processors, please send me the diff so I can add it into future releases.

COMMAND HELP I would like to spend a little time writing up a command document, but in the meantime the following will have to do. The command line takes the command 'help' to provide a detailed help, and 'hb' for a brief help. Listed below is both.

PRU0> hb Command help

BR [breakpoint_number [address]] - View or set an instruction breakpoint
D memory_location_wa [length] - Raw dump of PRU data memory (32-bit word offset from beginning of full PRU memory block - all PRUs)
DD memory_location_wa [length] - Dump data memory (32-bit word offset from beginning of PRU data memory)
DI memory_location_wa [length] - Dump instruction memory (32-bit word offset from beginning of PRU instruction memory)
DIS memory_location_wa [length] - Disassemble instruction memory (32-bit word offset from beginning of PRU instruction memory)
G - Start processor execution of instructions (at current IP)
GSS - Start processor execution using automatic single stepping - this allows running a program with breakpoints
HALT - Halt the processor
L memory_location_iwa file_name - Load program file into instruction memory
PRU pru_number - Set the active PRU where pru_number ranges from 0 to 1
Q - Quit the debugger and return to shell prompt.
R - Display the current PRU registers.
RESET - Reset the current PRU
SS - Single step the current instruction.
WA [watch_num [address [value]]] - Clear or set a watch point
WR memory_location_wa value1 [value2 [value3 ...]] - Write a 32-bit value to a raw (offset from beginning of full PRU memory block)
WRD memory_location_wa value1 [value2 [value3 ...]] - Write a 32-bit value to PRU data memory for current PRU
WRI memory_location_wa value1 [value2 [value3 ...]] - Write a 32-bit value to PRU instruction memory for current PRU

PRU0> help Command help

Commands are case insensitive
Address and numeric values can be dec (ex 12), hex (ex 0xC), or octal (ex 014)
Memory addresses can be wa=32-bit word address, ba=byte address.  Suffix of i=instruction or d=data memory
Return without a command will rerun a previous d, dd, or di command while displaying the next block

BR [breakpoint_number [address]]
View or set an instruction breakpoint
   'b' by itself will display current breakpoints
   breakpoint_number is the breakpoint reference and ranges from 0 to 4
   address is the instruction word address that the processor should stop at (instruction is not executed)
   if no address is provided, then the breakpoint is cleared

D memory_location_wa [length]
Raw dump of PRU data memory (32-bit word offset from beginning of full PRU memory block - all PRUs)

DD memory_location_wa [length]
Dump data memory (32-bit word offset from beginning of PRU data memory)

DI memory_location_wa [length]
Dump instruction memory (32-bit word offset from beginning of PRU instruction memory)

DIS memory_location_wa [length]
Disassemble instruction memory (32-bit word offset from beginning of PRU instruction memory)

G
Start processor execution of instructions (at current IP)

GSS
Start processor execution using automatic single stepping - this allows running a program with breakpoints

HALT
Halt the processor

L memory_location_iwa file_name
Load program file into instruction memory at 32-bit word address provided (offset from beginning of instruction memory

PRU pru_number
Set the active PRU where pru_number ranges from 0 to 1
Some debugger commands do action on active PRU (such as halt and reset)

Q
Quit the debugger and return to shell prompt.

R
Display the current PRU registers.

RESET
Reset the current PRU

SS
Single step the current instruction.

WA [watch_num [address [value]]]
Clear or set a watch point
  format 1:  wa - print watch point list
  format 2:  wa watch_num - clear watch point watch_num
  format 3:  wa watch_num address - set a watch point (watch_num) so any change at that word address
             in data memory will be printed during program execution with gss command
  format 4:  wa watch_num address value - set a watch point (watch_num) so that the program (run with gss) will
             be halted when the memory location equals the value
  NOTE: for watchpoints to work, you must use gss command to run the program

WR memory_location_wa value1 [value2 [value3 ...]]
Write a 32-bit value to a raw (offset from beginning of full PRU memory block - all PRUs)
memory_location is a 32-bit word index from the beginning of the PRU subsystem memory block

WRD memory_location_wa value1 [value2 [value3 ...]]
Write a 32-bit value to PRU data memory (32-bit word offset from beginning of PRU data memory)

WRI memory_location_wa value1 [value2 [value3 ...]]
Write a 32-bit value to PRU instruction memory (32-bit word offset from beginning of PRU instruction memory)

A brief version of help is available with the command hb

prudebug's People

Contributors

olsonse avatar giuliomoro avatar poopgiggle avatar dhruvag2000 avatar

Stargazers

Ronny Kunze avatar Jack Armitage avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.