xref: /openbmc/u-boot/doc/README.NetConsole (revision bcb6dd9187d4b23c748704767bd12d20c829e996)
168ceb29eSwdenk
268ceb29eSwdenkIn U-Boot, we implemented the networked console via the standard
368ceb29eSwdenk"devices" mechanism, which means that you can switch between the
468ceb29eSwdenkserial and network input/output devices by adjusting the 'stdin' and
568ceb29eSwdenk'stdout' environment variables. To switch to the networked console,
668ceb29eSwdenkset either of these variables to "nc". Input and output can be
768ceb29eSwdenkswitched independently.
868ceb29eSwdenk
9eedcd078SwdenkWe use an environment variable 'ncip' to set the IP address and the
10eedcd078Swdenkport of the destination. The format is <ip_addr>:<port>. If <port> is
11eedcd078Swdenkomitted, the value of 6666 is used. If the env var doesn't exist, the
12eedcd078Swdenkbroadcast address and port 6666 are used. If it is set to an IP
13eedcd078Swdenkaddress of 0 (or 0.0.0.0) then no messages are sent to the network.
14eedcd078Swdenk
15b1bf6f2cSwdenkFor example, if your server IP is 192.168.1.1, you could use:
16b1bf6f2cSwdenk
17b1bf6f2cSwdenk	=> setenv nc 'setenv stdout nc;setenv stdin nc'
18b1bf6f2cSwdenk	=> setenv ncip 192.168.1.1
19b1bf6f2cSwdenk	=> saveenv
20b1bf6f2cSwdenk	=> run nc
21b1bf6f2cSwdenk
22b1bf6f2cSwdenk
2368ceb29eSwdenkOn the host side, please use this script to access the console:
2468ceb29eSwdenk
25*bcb6dd91SMike Frysinger	tools/netconsole <ip> [port]
2668ceb29eSwdenk
27*bcb6dd91SMike FrysingerThe script uses netcat to talk to the board over UDP.  It requires you to
28*bcb6dd91SMike Frysingerspecify the target IP address (or host name, assuming DNS is working). The
29*bcb6dd91SMike Frysingerscript can be interrupted by pressing ^T (CTRL-T).
30b1bf6f2cSwdenk
31443feb74SIgor MarnatBe aware that in some distributives (Fedora Core 5 at least)
32443feb74SIgor Marnatusage of nc has been changed and -l and -p options are considered
33443feb74SIgor Marnatas mutually exclusive. If nc complains about options provided,
34443feb74SIgor Marnatyou can just remove the -p option from the script.
35443feb74SIgor Marnat
3625d6712aSwdenkIt turns out that 'netcat' cannot be used to listen to broadcast
37eedcd078Swdenkpackets. We developed our own tool 'ncb' (see tools directory) that
38eedcd078Swdenklistens to broadcast packets on a given port and dumps them to the
39eedcd078Swdenkstandard output. use it as follows:
40eedcd078Swdenk
41eedcd078Swdenk+++++++++++++++++++++++++++++++++++++++++++
42eedcd078Swdenk#! /bin/bash
43eedcd078Swdenk
44b1bf6f2cSwdenk[ $# = 1 ] || { echo "Usage: $0 target_ip" >&2 ; exit 1 ; }
45b1bf6f2cSwdenkTARGET_IP=$1
46b1bf6f2cSwdenk
47eedcd078Swdenkstty icanon echo intr ^T
48eedcd078Swdenk./ncb &
49b1bf6f2cSwdenknc -u ${TARGET_IP} 6666
50eedcd078Swdenkstty icanon echo intr ^C
51eedcd078Swdenkkill 0
52eedcd078Swdenk+++++++++++++++++++++++++++++++++++++++++++
53eedcd078Swdenk
54b1bf6f2cSwdenkAgain, this script takes exactly one argument, which is interpreted
55b1bf6f2cSwdenkas the target IP address (or host name, assuming DNS is working). The
56b1bf6f2cSwdenkscript can be interrupted by pressing ^T (CTRL-T).
57b1bf6f2cSwdenk
58b1bf6f2cSwdenkThe 'ncb' tool can be found in the tools directory; it will not be
59b1bf6f2cSwdenkbuilt by default so you will ither have to adjust the Makefile or
60b1bf6f2cSwdenkbuild it manually.
61b1bf6f2cSwdenk
62b1bf6f2cSwdenk
6368ceb29eSwdenkFor Linux, the network-based console needs special configuration.
6468ceb29eSwdenkMinimally, the host IP address needs to be specified. This can be
6568ceb29eSwdenkdone either via the kernel command line, or by passing parameters
6668ceb29eSwdenkwhile loading the netconsole.o module (when used in a loadable module
6768ceb29eSwdenkconfiguration). Please refer to Documentation/networking/logging.txt
6868ceb29eSwdenkfile for the original Ingo Molnar's documentation on how to pass
6968ceb29eSwdenkparameters to the loadable module.
7068ceb29eSwdenk
7168ceb29eSwdenkThe format of the kernel command line parameter (for the static
7268ceb29eSwdenkconfiguration) is as follows:
7368ceb29eSwdenk
7468ceb29eSwdenk  netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
7568ceb29eSwdenk
7668ceb29eSwdenkwhere
7768ceb29eSwdenk
7868ceb29eSwdenk  src-port	source for UDP packets
7968ceb29eSwdenk		(defaults to 6665)
8068ceb29eSwdenk  src-ip	source IP to use
8168ceb29eSwdenk		(defaults to the interface's address)
8268ceb29eSwdenk  dev		network interface
8368ceb29eSwdenk		(defaults to eth0)
8468ceb29eSwdenk  tgt-port	port for logging agent
8568ceb29eSwdenk		(defaults to 6666)
8668ceb29eSwdenk  tgt-ip	IP address for logging agent
8768ceb29eSwdenk		(this is the required parameter)
8868ceb29eSwdenk  tgt-macaddr	ethernet MAC address for logging agent
8968ceb29eSwdenk		(defaults to broadcast)
9068ceb29eSwdenk
9168ceb29eSwdenkExamples:
9268ceb29eSwdenk
9368ceb29eSwdenk  netconsole=4444@10.0.0.1/eth1,9353@10.0.0.2/12:34:56:78:9a:bc
9468ceb29eSwdenk
9568ceb29eSwdenkor
9668ceb29eSwdenk
9768ceb29eSwdenk  netconsole=@/,@192.168.3.1/
9868ceb29eSwdenk
9968ceb29eSwdenkPlease note that for the Linux networked console to work, the
10068ceb29eSwdenkethernet interface has to be up by the time the netconsole driver is
10168ceb29eSwdenkinitialized. This means that in case of static kernel configuration,
10268ceb29eSwdenkthe respective Ethernet interface has to be brought up using the "IP
10368ceb29eSwdenkAutoconfiguration" kernel feature, which is usually done by defaults
10468ceb29eSwdenkin the ELDK-NFS-based environment.
10568ceb29eSwdenk
10668ceb29eSwdenkTo browse the Linux network console output, use the 'netcat' tool invoked
10768ceb29eSwdenkas follows:
10868ceb29eSwdenk
10968ceb29eSwdenk	nc -u -l -p 6666
11025d6712aSwdenk
11125d6712aSwdenkNote that unlike the U-Boot implementation the Linux netconsole is
11225d6712aSwdenkunidirectional, i. e. you have console output only in Linux.
113