Documentation/Platforms/OpenRISC: Difference between revisions
(add user to config target list, add some notes on debug) |
No edit summary |
||
Line 10: | Line 10: | ||
qemu-system-or1k -cpu or1200 -M or1k-sim -kernel $LINUX/vmlinux -serial stdio -nographic -monitor none | qemu-system-or1k -cpu or1200 -M or1k-sim -kernel $LINUX/vmlinux -serial stdio -nographic -monitor none | ||
== Networking emulation == | |||
- | The <tt>or1k-sim</tt> will write in an <tt>opencore_eth</tt> device at address <tt>0x92000000</tt> when the qemu -net option is provided. This device is supported by the Linux kernel's <tt>ethoc</tt> Ethernet driver. | ||
The below options can be added to the qemu command line to enable networking. | |||
-net nic -net tap,ifname=tap0,script=no,downscript=no | |||
Qemu has a default set of networking setup scripts you can use which will create a tunnel device for you, these have been disabled with the above ''script'' and ''downscript'' command line options. If we disable the qemu startup commands we will need to create our own tun and tap0 devices which can be done with the below commands: | |||
IPRANGE=10.8.0 | |||
echo "Setup tun device for QEmu networking, (may need sudo)..." | |||
# Make the tap0 dev node if it doesn't exist | |||
if [ ! -e /dev/net/tap0 ]; then | |||
sudo true | |||
sudo mknod /dev/net/tap0 c 10 200 | |||
sudo chown $(whoami) /dev/net/tap0 | |||
fi | |||
# Check that the tap0 network interface exists | |||
if [ ! -e /sys/class/net/tap0 ]; then | |||
sudo true | |||
if sudo which openvpn > /dev/null; then | |||
sudo openvpn --mktun --dev tap0 --user $(whoami) | |||
elif sudo which tunctl > /dev/null; then | |||
sudo tunctl -t tap0 -u $(whoami) | |||
else | |||
echo "Unable to find tool to create tap0 device!" | |||
exit 1 | |||
fi | |||
fi | |||
# Check the tap0 device if configure and up | |||
if sudo which ifconfig > /dev/null; then | |||
if ! ifconfig tap0 | grep -q "UP" || ! ifconfig tap0 | grep -q "$IPRANGE.100"; then | |||
sudo true | |||
sudo ifconfig tap0 $IPRANGE.100 netmask 255.255.255.0 up | |||
fi | |||
elif sudo which ip > /dev/null; then | |||
if ! ip addr show tap0 | grep -q "UP" || ! ip addr show tap0 | grep -q "$IPRANGE.100"; then | |||
sudo true | |||
sudo ip addr add $IPRANGE.100/24 dev tap0 | |||
sudo ip link set dev tap0 up | |||
fi | |||
else | |||
echo "Unable to find tool to configure tap0 address" | |||
exit 1 | |||
fi | |||
== User mode emulation == | == User mode emulation == |
Revision as of 06:06, 24 March 2019
Description
OpenRISC is an open source processor architecture. While instruction sets like x86 are proprietary and owned by a single company, OpenRISC is free. Its main use is as a processor on embedded systems.
Build Directions
./configure --target-list='or1k-softmmu or1k-linux-user' && make
Full system emulation
To boot linux you can run the following. If you are starting out you can download the OpenRISC test image from Testing/System_Images. The test image may be gzipped, so be sure to gunzip it first.
qemu-system-or1k -cpu or1200 -M or1k-sim -kernel $LINUX/vmlinux -serial stdio -nographic -monitor none
Networking emulation
The or1k-sim will write in an opencore_eth device at address 0x92000000 when the qemu -net option is provided. This device is supported by the Linux kernel's ethoc Ethernet driver.
The below options can be added to the qemu command line to enable networking.
-net nic -net tap,ifname=tap0,script=no,downscript=no
Qemu has a default set of networking setup scripts you can use which will create a tunnel device for you, these have been disabled with the above script and downscript command line options. If we disable the qemu startup commands we will need to create our own tun and tap0 devices which can be done with the below commands:
IPRANGE=10.8.0 echo "Setup tun device for QEmu networking, (may need sudo)..." # Make the tap0 dev node if it doesn't exist if [ ! -e /dev/net/tap0 ]; then sudo true sudo mknod /dev/net/tap0 c 10 200 sudo chown $(whoami) /dev/net/tap0 fi # Check that the tap0 network interface exists if [ ! -e /sys/class/net/tap0 ]; then sudo true if sudo which openvpn > /dev/null; then sudo openvpn --mktun --dev tap0 --user $(whoami) elif sudo which tunctl > /dev/null; then sudo tunctl -t tap0 -u $(whoami) else echo "Unable to find tool to create tap0 device!" exit 1 fi fi # Check the tap0 device if configure and up if sudo which ifconfig > /dev/null; then if ! ifconfig tap0 | grep -q "UP" || ! ifconfig tap0 | grep -q "$IPRANGE.100"; then sudo true sudo ifconfig tap0 $IPRANGE.100 netmask 255.255.255.0 up fi elif sudo which ip > /dev/null; then if ! ip addr show tap0 | grep -q "UP" || ! ip addr show tap0 | grep -q "$IPRANGE.100"; then sudo true sudo ip addr add $IPRANGE.100/24 dev tap0 sudo ip link set dev tap0 up fi else echo "Unable to find tool to configure tap0 address" exit 1 fi
User mode emulation
Using QEMU user mode emulation we can run and debug OpenRISC binaries on your host linux.
$ cat main.c #include <stdio.h> int main() { printf ("hello\n"); return 0; } $ or1k-linux-musl-gcc main.c # Here $LDPATH/lib/ld-musl-or1k.so.1 is linked to or1k-linux-musl/lib/libc.so $ qemu-or1k -L $LDPATH ./a.out hello
Debugging Tips
For debugging QEMU can listen on a gdb stub port with the below options. Note, you can also use -S with the -gdb option to have QEMU wait for a gdb client connection before starting the boot process.
-gdb tcp::10001
To get good traces you can also add the following, this will output trace info to the file trace.txt
-D trace.txt -d in_asm,exec,int,op_opt
Pictures
Links
- Video introducing OpenRISC
- The OpenRISC project site
- OpenRISC 1000 specification
- GCC toolchain releases and binaries
Contacts
Maintainer: Stafford Horne