How to make my new driver be configurable in the kernel configuration file?

M. Warner Losh imp at bsdimp.com
Wed Nov 16 08:38:08 PST 2005


In message: <200511161128.26191.jhb at freebsd.org>
            John Baldwin <jhb at freebsd.org> writes:
: On Wednesday 16 November 2005 05:33 am, Yong Ma wrote:
: > ----- Original Message -----
: > From: "Warner Losh" <imp at bsdimp.com>
: > To: jhb at freebsd.org
: > Subject: Re: How to make my new driver be configurable in the kernel
: > configuration file? Date: Tue, 15 Nov 2005 09:19:09 -0700 (MST)
: >
: > > From: John Baldwin <jhb at freebsd.org>
: > > Subject: Re: How to make my new driver be configurable in the
: > > kernel configuration file?
: > > Date: Tue, 15 Nov 2005 10:21:59 -0500
: > >
: > > > On Tuesday 15 November 2005 03:59 am, Yong Ma wrote:
: > > > > Hi all,
: > > > > I wrote and debuged my driver for a new device in KLD mode,now I want
: > > > > to plug it into the kernel,so that it can be loaded when the system 
: > > > > boots,and make it be configurable in the kernel configuration file
: > > > > like other device driver as "device XXX",I don't know what to
: > > > > do,could anyone be kind to help me?
: > > >
: > > > To add your driver you update the src/sys/conf/files* files.  If
: > > > your driver is machine independent, you can add it to
: > > > src/sys/conf/files.  For example, here are the lines in
: > > > sys/conf/files for the cy(4) driver:
: > > >
: > > > dev/cy/cy.c                     optional cy
: > > > dev/cy/cy_isa.c                 optional cy isa
: > > > dev/cy/cy_pci.c                 optional cy pci
: > > >
: > > > If your driver only works on a single architecture (such as i386)
: > > > then add it to the architecture file sys/conf/files.<arch> (e.g.
: > > > sys/conf/files.i386).  The device names after 'optional' specify
: > > > which devices must be enabled in the kernel config for that file
: > > > to be included.  Thus, in the example above, src/sys/dev/cy/cy.c
: > > > is included as long as 'device cy' is in the kernel, but
: > > > src/sys/dev/cy/cy_isa.c is only included if both 'device cy' and
: > > > 'device isa' are in the kernel config file.
: > >
: > > You can augment the system files with the files directive if you don't
: > > want to edit sys/conf/files.foo:
: > >
: > > files "/foo/bar/baz"
: > >
: > > and put something like the above in that.
: > >
: > > Warner
: > >
: > > _______________________________________________
: > > freebsd-drivers at freebsd.org mailing list
: > > http://lists.freebsd.org/mailman/listinfo/freebsd-drivers
: > > To unsubscribe, send any mail to
: > > "freebsd-drivers-unsubscribe at freebsd.org"
: >
: > Thank you! I did as that but came across some problems,these are the
: > jobs and the errors:
: >
: >   1) I copyed the files to the sys/dev/mydevice and added
: > "dev/mydevice/mydevice.c   optinonal mydevice" in the file
: > /usr/src/sys/conf/files.i386,and added a line "device mydevice" in
: > the sys/i386/conf/MYKERNEL(a copy of GENERIC),but met a error when
: > config MYKERNEL:syntax error (the line I just added).
: >
: >   2) Then,I modified line in files.i386 as "dev/mydevice/mydevice.c
: > standard",configed successfully,but another error occured when make
: > depend(make buildkernel KERNCONF=MYKERNEL the same):
: >       ...
: >       ../../../dev/mydevice/mydevice.c:27:20: mydevice.h: No such
: > file or directory
: >       ../../../dev/mydevice/mydevice.c:28:44: mydevicekern.h: No such
: > file or directory
: >       ../../../dev/mydevice/mydevice.c:29:49: mydeviceioctl.h: No
: > such file or directory
: >       mkdep: compile failed
: >       *** Error code 1
: >       ...
: > and the source code of mydevice.c is as follows:
: >        ...
: >        #include "sjy22b.h"
: >        #include "sjy22bkern.h"
: >        #include "sjy22bioctl.h"
: >        ...
: > the three headers are just in the sys/dev/mydevice directory,I don't
: > know why this happened.
: > Need your suggestion!
: 
: You'll need to include them as "dev/mydevice/mydevice.h" rather than 
: "mydevice.h"

Usually that's spelled '#include <dev/mydevice/mydevice.h>' since it
is relative to one of the -I paths.  In practice, however, it rarely
makes a difference.

Warner


More information about the freebsd-drivers mailing list