			  =========================
			  BOOTING FR-V LINUX KERNEL
			  =========================

======================
PROVIDING A FILESYSTEM
======================

First of all, a root filesystem must be made available. This can be done in
one of two ways:

  (1) NFS Export

      A filesystem should be constructed in a directory on an NFS server that
      the target board can reach. This directory should then be NFS exported
      such that the target board can read and write into it as root.

  (2) Flash Filesystem (JFFS2 Recommended)

      In this case, the image must be stored or built up on flash before it
      can be used. A complete image can be built using the mkfs.jffs2 or
      similar program and then downloaded and stored into flash by RedBoot.


========================
LOADING THE KERNEL IMAGE
========================

The kernel will need to be loaded into RAM by RedBoot (or by some alternative
boot loader) before it can be run. The kernel image (arch/frv/boot/Image) may
be loaded in one of three ways:

  (1) Load from Flash

      This is the simplest. RedBoot can store an image in the flash (see the
      RedBoot documentation) and then load it back into RAM. RedBoot keeps
      track of the load address, entry point and size, so the command to do
      this is simply:

	fis load linux

      The image is then ready to be executed.

  (2) Load by TFTP

      The following command will download a raw binary kernel image from the
      default server (as negotiated by BOOTP) and store it into RAM:

	load -b 0x00100000 -r /tftpboot/image.bin

      The image is then ready to be executed.

  (3) Load by Y-Modem

      The following command will download a raw binary kernel image across the
      serial port that RedBoot is currently using:

	load -m ymodem -b 0x00100000 -r zImage

      The serial client (such as minicom) must then be told to transmit the
      program by Y-Modem.

      When finished, the image will then be ready to be executed.


==================
BOOTING THE KERNEL
==================

Boot the image with the following RedBoot command:

	exec -c "<CMDLINE>" 0x00100000

For example:

	exec -c "console=ttySM0,115200 ip=:::::dhcp root=/dev/mtdblock2 rw"

This will start the kernel running. Note that if the GDB-stub is compiled in,
then the kernel will immediately wait for GDB to connect over serial before
doing anything else. See the section on kernel debugging with GDB.

The kernel command line <CMDLINE> tells the kernel where its console is and
how to find its root filesystem. This is made up of the following components,
separated by spaces:

  (*) console=ttyS<x>[,<baud>[<parity>[<bits>[<flow>]]]]

      This specifies that the system console should output through on-chip
      serial port <x> (which can be "0" or "1").

      <baud> is a standard baud rate between 1200 and 115200 (default 9600).

      <parity> is a parity setting of "N", "O", "E", "M" or "S" for None, Odd,
      Even, Mark or Space. "None" is the default.

      <stop> is "7" or "8" for the number of bits per character. "8" is the
      default.

      <flow> is "r" to use flow control (XCTS on serial port 2 only). The
      default is to not use flow control.

      For example:

	console=ttyS0,115200

      To use the first on-chip serial port at baud rate 115200, no parity, 8
      bits, and no flow control.

  (*) root=<xxxx>

      This specifies the device upon which the root filesystem resides. It
      may be specified by major and minor number, device path, or even
      partition uuid, if supported.  For example:

	/dev/nfs	NFS root filesystem
	/dev/mtdblock3	Fourth RedBoot partition on the System Flash
	PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF/PARTNROFF=1
		first partition after the partition with the given UUID
	253:0		Device with major 253 and minor 0

      Authoritative information can be found in
      "Documentation/kernel-parameters.txt".

  (*) rw

      Start with the root filesystem mounted Read/Write.

  The remaining components are all optional:

  (*) ip=<ip>::::<host>:<iface>:<cfg>

      Configure the network interface. If <cfg> is "off" then <ip> should
      specify the IP address for the network device <iface>. <host> provide
      the hostname for the device.

      If <cfg> is "bootp" or "dhcp", then all of these parameters will be
      discovered by consulting a BOOTP or DHCP server.

      For example, the following might be used:

	ip=192.168.73.12::::frv:eth0:off

      This sets the IP address on the VDK motherboard RTL8029 ethernet chipset
      (eth0) to be 192.168.73.12, and sets the board's hostname to be "frv".

  (*) nfsroot=<server>:<dir>[,v<vers>]

      This is mandatory if "root=/dev/nfs" is given as an option. It tells the
      kernel the IP address of the NFS server providing its root filesystem,
      and the pathname on that server of the filesystem.

      The NFS version to use can also be specified. v2 and v3 are supported by
      Linux.

      For example:

	nfsroot=192.168.73.1:/nfsroot-frv

  (*) profile=1

      Turns on the kernel profiler (accessible through /proc/profile).

  (*) console=gdb0

      This can be used as an alternative to the "console=ttyS..." listed
      above. I tells the kernel to pass the console output to GDB if the
      gdbstub is compiled in to the kernel.

      If this is used, then the gdbstub passes the text to GDB, which then
      simply dumps it to its standard output.

  (*) mem=<xxx>M

      Normally the kernel will work out how much SDRAM it has by reading the
      SDRAM controller registers. That can be overridden with this
      option. This allows the kernel to be told that it has <xxx> megabytes of
      memory available.

  (*) init=<prog> [<arg> [<arg> [<arg> ...]]]

      This tells the kernel what program to run initially. By default this is
      /sbin/init, but /sbin/sash or /bin/sh are common alternatives.
