NDISCVT(8) | MidnightBSD System Manager's Manual | NDISCVT(8) |
ndiscvt
— convert
Windows® NDIS drivers for use with MidnightBSD
ndiscvt |
[-O ] [-i
inffile] -s
sysfile [-n
devname] [-o
outfile] |
ndiscvt |
[-f firmfile] |
The ndiscvt
utility transforms a
Windows® NDIS driver into a data file which is used to build an
ndis(4) compatibility
driver module. Windows® drivers consist of two main parts: a
.SYS file, which contains the actual driver
executable code, and an .INF file, which provides
the Windows® installer with device identifier information and a list
of driver-specific registry keys. The ndiscvt
utility can convert these files into a header file that is compiled into
if_ndis.c to create an object code module that can
be linked into the FreeBSD kernel.
The .INF file is typically required since
only it contains device identification data such as PCI vendor and device
IDs or PCMCIA identifier strings. The .INF file may
be optionally omitted however, in which case the
ndiscvt
utility will only perform the conversion of
the .SYS file. This is useful for debugging purposes
only.
The options are as follows:
-i
inffilendiscvt
utility will
parse this file and emit a device identification structure and registry
key configuration structures which will be used by the
ndis(4) driver and
ndisapi(9) kernel
subsystem. If this is omitted, ndiscvt
will emit a
dummy configuration structure only.-s
sysfilendiscvt
utility will perform some manipulation of
the sections within the executable file to make runtime linking within the
kernel a little easier and then convert the image into a data array.-n
devnameIFNAMSIZ
. If no name is specified, the driver will
use the default a default name
(“ndis
”).-o
outfile-
’), the data will be written to
the standard output. The if_ndis.c module expects
to find the driver data in a file called
ndis_driver_data.h, so it is recommended that this
name be used.-O
-f
firmfileIn FreeBSD there are two mechanism for loading these files. If the driver is built as a loadable kernel module which is loaded after the kernel has finished booting (and after the root file system has been mounted), the extra files can simply be copied to the /compat/ndis directory, and they will be loaded into the kernel on demand when the driver needs them.
If however the driver is required to bootstrap the system (i.e., if the NDIS-based network interface is to be used for diskless/PXE booting), the files need to be pre-loaded by the bootstrap loader in order to be accessible, since the driver will need them before the root file system has been mounted. However, the bootstrap loader is only able to load files that are shared FreeBSD binary objects.
The -f
flag can be used to convert an
arbitrary file firmfile into shared object format
(the actual conversion is done using the
objcopy(1) and
ld(1) commands). The
resulting files can then be copied to the
/boot/kernel directory, and can be pre-loaded
directly from the boot loader prompt, or automatically by editing the
loader.conf(5)
file. If desired, the files can also be loaded into memory at runtime
using the kldload(8)
command.
When an NDIS driver tries to open an external file, the ndisapi(9) code will first search for a loaded kernel module that matches the name specified in the open request, and if that fails, it will then try to open the file from the /compat/ndis directory as well. Note that during kernel bootstrap, the ability to open files from /compat/ndis is disabled: only the module search will be performed.
When using the -f
flag,
ndiscvt
will generate both a relocatable object
file (with a .o extension) and a shared object
file (with a .ko extension). The shared object
is the one that should be placed in the
/boot/kernel directory. The relocatable object
file is useful if the user wishes to create a completely static kernel
image: the object file can be linked into the kernel directly along with
the driver itself. Some editing of the kernel configuration files will
be necessary in order to have the extra object included in the
build.
The ndiscvt
utility first appeared in
FreeBSD 5.3.
The ndiscvt
utility was written by
Bill Paul
<wpaul@windriver.com>.
The lex(1) and
yacc(1)
INF file parser was written by
Matthew Dodd
<mdodd@FreeBSD.org>.
December 10, 2003 | midnightbsd-3.1 |