1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/native
Kaspar Schleiser 21238b2ccc Merge pull request #3347 from benoit-canet/timer
native: timer: synchronize HWTIMER_SPIN_BARRIER with native timer min resolution
2015-07-29 10:14:58 +02:00
..
include Merge pull request #3347 from benoit-canet/timer 2015-07-29 10:14:58 +02:00
net global: renamed cpu-conf.h into cpu_conf.h 2015-05-28 15:45:05 +02:00
ng_net sys: net: add ng_netdev_eth netdev driver for dev_eth based ethernet devices 2015-05-26 21:05:19 +02:00
periph Merge pull request #3347 from benoit-canet/timer 2015-07-29 10:14:58 +02:00
irq_cpu.c native: irq_cpu: Rewrite IRQs (de)registration 2015-07-09 02:43:04 +02:00
lpm_cpu.c cpu: native: work around shared errno in _native_lpm_sleep 2015-07-09 00:31:31 +02:00
Makefile cpu: native: add tap implementation of dev_eth (ng_nativenet) 2015-05-26 15:37:55 +02:00
Makefile.include cpu: native: switch to hwtimer_compat 2015-07-09 02:43:04 +02:00
native_cpu.c native: fix wrong pointer type warning 2015-07-21 18:31:13 +02:00
panic.c core: unified core_panic implementation 2015-05-10 11:58:43 +02:00
README.md native: update README 2014-05-13 11:25:34 +02:00
startup.c cpu: native: switch to hwtimer_compat 2015-07-09 02:43:04 +02:00
syscalls.c native: add address sanitizer make target 2015-07-09 15:00:19 +02:00
tapsetup-freebsd.sh native/freebsd: fix tapsetup permission 2014-10-08 16:11:04 +02:00
tapsetup-osx.sh native cc1100x_ng network 2013-08-15 14:05:26 +02:00
tapsetup.sh allow for custom tap names 2013-11-08 13:59:26 +01:00
tramp.S native: removing externs from native tramp 2014-12-03 15:50:53 +01:00

Valgrind Support

Rebuild your application using the all-valgrind target like this:

make -B clean all-valgrind

That way native will tell Valgrind about RIOT's stacks and prevent Valgrind from reporting lots of false positives. The debug information flag -g is not strictly necessary, but passing it allows Valgrind to tell you precisely which code triggered the error.

To run your application run:

make term-valgrind

All this does is run your application under Valgrind. Now Valgrind will print some information whenever it detects an invalid memory access.

In order to debug the program when this occurs you can pass the --db-attach parameter to Valgrind. E.g:

valgrind --db-attach=yes ./bin/native/default.elf tap0

Now, you will be asked whether you would like to attach the running process to gdb whenever a problem occurs.

In order for this to work under Linux 3.4 or newer, you might need to disable the ptrace access restrictions: As root call:

echo 0 > /proc/sys/kernel/yama/ptrace_scope

Network Support

If you compile RIOT for the native cpu and include the native_net module, you need to specify a network interface like this:

make term PORT=tap0

Setting Up A Tap Network

There is a shellscript in RIOT/cpu/native called tapsetup.sh which you can use to create a network of tap interfaces.

Usage: To create a bridge and two (or count at your option) tap interfaces:

./tapsetup.sh create [count]

To delete the bridge and all tap interfaces:

./tapsetup.sh delete

OSX Tap Networking

For tun/tap networking in OSX you will need: http://tuntaposx.sourceforge.net/

For OSX there is a separate script called tapsetup-osx.sh. Run it, (it instructs you to start the RIOT instances). In contrast to Linux you will need to run tapsetup-osx.sh delete after killing your instances and rerun tapsetup-osx.sh create before restarting.

FreeBSD Tap Networking

For FreeBSD there is a separate script called tapsetup-freebsd.sh.

Daemonization

You can daemonize a riot process. This is useful for larger networks. Valgrind will fork along with the riot process and dump its output in the terminal.

Usage:

./bin/native/default.elf -d

Use UART redirection if you want to use a shell or get stderr/stdout output with/from a daemonized process.

UART Redirection

You can redirect the processes' stdin/stdout/stderr by specifying one or more options from below.

UNIX socket

To redirect stdio to a UNIX socket run:

./bin/native/default.elf -u -d
RIOT pid: 18663

Attach this UNIX socket:

nc -U /tmp/riot.tty.18663

TCP socket

To redirect stdio to a TCP socket:

./bin/native/default.elf -t 4711 -d
RIOT pid: 18663

Attach this TCP socket:

nc localhost 4711

Stop the process:

kill 18663

File for stderr

To redirect stderr to a file:

./bin/native/default.elf -d -e
RIOT pid: 18663

Read from it:

tail -f /tmp/riot.stderr.18663

File for stdout

To redirect stdout to a file:

./bin/native/default.elf -d -o
RIOT pid: 18663

Read from it:

tail -f /tmp/riot.stdout.18663

Notes

The stdout redirection only writes to file while no socket connection is established.

Socket redirection is only available when the UART module has been compiled in.

Compile Time Options

Compile with

CFLAGS=-DNATIVE_AUTO_EXIT make

to exit the riot core after the last thread has exited.