Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
KLDPATCH(8)		     System Manager's Manual		     KLDPATCH(8)

NAME
     kldpatch -- print/modify device/quirk tables in kernel modules

SYNOPSIS
     kldpatch [-v] [-m file] [-t file | format] module_name table_name [@offset
	      [args ...]]

DESCRIPTION
     The  kldpatch utility can print or alter the content of device/quirk tables
     in kernel modules. These tables are generally used to identify devices, and
     possibly apply specific quirks to enable/disable certain features.

     kldpatch is especially useful to let the  kernel  recognise  a  new  device
     without  rebooting  and rebuilding/reinstalling kernel or modules, see Sec-
     tion "EXAMPLES" for some examples of use.

OPTIONS
     The following options and arguments can be used:

     -v      Verbose mode, print some debugging info.

     -m file
	     Patch the module specified as an argument instead of the  in-memory
	     copy.   Use this option when you want to make the change persistent
	     across reboots.

     -t file | format
	     Specify the name and structure of descriptor tables that can be ma-
	     nipulated by kldpatch.  The argument can be a filename, or the  de-
	     scription itself, as documented in Section "MODULE DESCRIPTION".

     module_name table_name
	     The module and table that we want to print/modify.  Both values are
	     compared  against the content of the description file until a match
	     is found.	A value of ``-'' in either parameter indicates	a  wild-
	     card.

     @offset
	     Specify  the  entry in the quirk table that we want to list or mod-
	     ify.  Values start from 0, and negative  offsets  can  be	used  to
	     count  from the end of the table, with @-1 indicating the last ele-
	     ment in the table, @-2 the previous one, and so on.

	     If @offset is not specified, then kldpatch operates  in  read  mode
	     and lists the full content of the table.

     args    The  values  to be written to the table. If they are not specified,
	     kldpatch operates in read mode and prints the entry specified  with
	     the @offset argument. If they are present, they are checked against
	     the  description  of  the matching module/table and changes are ap-
	     plied to the memory or file version of the table, as required.

MODULE DESCRIPTION
     kldpatch relies on a list describing which modules and  tables  (associated
     to kernel symbols) it can work on, and what is the format of the records in
     each table.

     By default kldpatch uses an internal list, which can be overridden from the
     command  line using the -t option followed by either a file name, or by im-
     mediate text.

     In write mode, kldpatch checks that the arguments (module and  table  name,
     offset,  parameters formats) are compatible with the structure indicated in
     the description, and also with the content of the module itself.

     The file (or text) containing the module description has a simple text for-
     mat with one line per table. The `#' character is a comment delimiter,  and
     can  appear anywhere in the text.	Each valid line must contain the follow-
     ing fields:

     module_name symbol_name entry_format [entry_format ...]

     Each entry_format describes one field in the table, and it  is  made  of  a
     number and/or a character specifying the field size and format, followed by
     an optional ':' and a word describing the field itself.

     Supported formats are:

     1	     8-bit unsigned;

     2 | 2l | 2b
	     16-bit unsigned in host, little-endian or big-endian format;

     4 | 4l | 4b
	     32-bit unsigned in host, little-endian or big-endian format;

     8 | 8l | 8b
	     64-bit unsigned in host, little-endian or big-endian format;

     p	     a pointer;

     s	     a null-terminated string;

     The  optional description is used as a header when listing the content of a
     table.

   EXAMPLE MODULE DESCRIPTION
     The following is an example of a file containing module descriptions.

	   umass.ko    umass_devdescrs 4:vendor 4:product 4:rev 2:proto 2:quirks
	   uscanner.ko uscanner_devs   2:vendor 2:device 4:flags # comment
	   if_nfe.ko   nfe_devs        2:vendor 2:device s:name
	   if_re.ko    re_devs	       2:vendor 2:device 4:type s:name

EXAMPLES
     Spme examples of use:

     kldpatch umass.ko - @0 0x4050 0x4a5 0x0101 0x4200

	 tell  the  kernel  (actually,	the   umass   module)	to   use   flags
	 "UMASS_PROTO_SCSI | UMASS_PROTO_BBB" and quirks "WRONG_CSWSIG | NO_SYN-
	 CHRONIZE_CACHE"  for  a certain GSM phone that implements the umass in-
	 terface;

     kldpatch uscanner.ko - @0 0x04b8 0x084a 0

	 let uscanner.ko recognise a newly introduced MFP scanner device.

     kldpatch -m /boot/kernel/uscanner.ko uscanner.ko - @0 0x04b8 0x084a 0

	 as above, but patch the actual file instead of the  in-memory	copy  of
	 the  module,  so  the effects will be visible when the module is loaded
	 next.

     kmodpatch if_re -

	 print all entries in module if_re.

     kmodpatch umass - @-1

	 print the last entry in module umass.

     kmodpatch uscanner.ko - @-1 0x04b8 0x0839 0

	 set the last entry in module uscanner.ko

WARNINGS
     kldpatch requires root privileges even to just read the content of the ker-
     nel tables.

     In write mode, the use of kldpatch is as dangerous as  accessing  /dev/kmem
     in  write	mode,  even though kldpatch does some amount of checking to make
     sure that the arguments passed are reasonable. To this purpose, it is  fun-
     damental  that  the  table  descriptions  used by kldpatch match the actual
     structure of the kernel tables.  There is no automatic way to extract  this
     info.

BUGS
     The  algorithm used to navigate ELF files (.ko modules and the kernel) when
     using the -m option makes some assumptions on the structure  of  the  files
     which should be verified at runtime.

SEE ALSO
     kldconfig(8), kldload(8), kldstat(8), kldunload(8)

HISTORY
     The  kldpatch  utility  first appeared in FreeBSD 8.0 inspired by a similar
     feature present on Linux.

AUTHORS
     The  kldpatch  utility  was  designed  and  implemented  by   Luigi   Rizzo
     <luigi@FreeBSD.org>.

FreeBSD ports 15.quarterly	 January 1, 2009		     KLDPATCH(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=kldpatch&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help