COHERENT manpages
This page displays the COHERENT manpage for patch [Patch a variable or flag within the kernel].
List of available manpages
Index
patch -- Command
Patch a variable or flag within the kernel
/conf/patch [-k] image symbol=value ...
The command patch alters the value of datum symbol to value in executable
image. In general, you should use patch to alter configuration data
(constants) in programs, in device drivers, and in the COHERENT kernel.
For patch to work with a symbolic constant, image must have a symbol table
that includes information about symbol. Therefore, executables that have
been processed by the command strip cannot be patched.
Options
patch recognizes the following command-line options:
-k Patch image, and patch the kernel memory of the running COHERENT
system via device /dev/kmem. Only the superuser root can use patch to
access kernel memory.
-K Patch /dev/kmem only. Refer to image for its symbol table, but do not
change it.
-p ``Peek'' -- just display current values; change nothing.
-v Verbose -- display values before and after patching.
Variable Names
symbol and value can be either a numeric constant or a symbol from the
symbol table of image. symbol and value expressions can include a numeric
offset. In addition, value can be composed of the construct
makedev(major,minor), where major and minor are the ``major'' and ``minor''
device numbers, respectively, resulting in a dev_t-sized device type. No
spaces can appear around the equal sign in the symbol=constant construct.
Numeric constants default to decimal, but may be specifyed with a leading 0
prefix to specify an octal number or a 0x prefix to specify a hexadecimal
number.
The size of the altered symbol field is, by default, sizeof(int). patch
recognizes the following explicit size overrides:
:c The size of the altered field is sizeof(char).
:i The size of the altered field is sizeof(int).
:l The size of the altered field is sizeof(long).
:s The size of the altered field is sizeof(short).
Example
The following example gives technique that allows kernel display -- that
is, the output of the routines cmn_err() and the kernel's version of
printf() -- to go to a serial port. With this, you can save the panic
messages and register dumps on a terminal screen or printer page while you
reboot and try to track down what went wrong. To do so, plug a terminal
into a serial port, and then do the following.
1. Find the major and minor numbers of a working serial port. Do not
configure the port for modem control or flow control; use something
simple like com2l. Make sure you can send data out the port; for example
see that the command
date > /dev/com2l
sends data to the terminal's screen. The baud rate for the port will be
whatever is specified for the default in file /etc/default/async -- 9600
unless you have changed it.
2. Make sure the port is not enabled.
3. Create a test kernel around that you can modify. Call it something
easily remembered, such as /testcoh.
4. Patch the kernel with the command
/conf/patch -v /testcoh condev=makedev(major,minor):s
where major is the major number for the serial port, and minor is its
minor number.
5. Boot the patched kernel.
With this change, you will not be able to control kernel output with XON
and XOFF, nor will you seen kernel output from very early startup (before
the page tables are working) appear on the serial device.
Example
The following example patches the kernel to redirect error messages to a
terminal device on a serial port, instead of displaying them on the
console:
/conf/patch -v /Ikernel_name "condev=makedev(maj, min):s"
where kernel_name names the kernel you wish to patch, and maj and min are,
respectively, the major and minor device numbers of the serial port to
which you wish to redirect messages.
Note that condev is a short integer, so the ``:s'' is essential. The patch
is made to the file on disk. You must reboot before it can work -- chaos
results if you try to switch console devices in a running kernel.
See Also
commands,
device drivers,
kernel
Notes
It is extremely dangerous to patch the COHERENT kernel. Almost all changes
that you may wish to make the kernel can be accomplished more safely by
using the commands idtune and idmkcoh. For details on how to use the
commands, see their entries in the Lexicon. Therefore, do not use
/conf/patch to patch the kernel unless you know exactly what you are doing.
Caveat utilitor!
Beginning with release 4.2 of COHERENT, the symbol table has been removed
from the kernel, and is kept in its own file. The symbol-table file is
named after its corresponding kernel; for example, the symbol table for a
kernel named /coherent is kept in file /coherent.sym. This complicates
using patch to hot-patch a kernel. As noted above, you are well advised to
use commands idtune and idenable to modify your kernel configuration, than
using patch to hot-patch an existing kernel.




