Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Apr 2015 07:13:37 -0600
From:      Ian Lepore <ian@freebsd.org>
To:        Daniel Braniss <danny@cs.huji.ac.il>
Cc:        Tom Jones <jones@sdf.org>, freebsd-arm@freebsd.org
Subject:   Re: help with coding a loadable kernel module
Message-ID:  <1429276417.1182.71.camel@freebsd.org>
In-Reply-To: <32D7EBD3-813E-4062-8A06-ED8E82BA50DA@cs.huji.ac.il>
References:  <EDB591F5-E056-4E53-9ED2-2A2E571F319C@cs.huji.ac.il> <20150417080839.GO2743@home.opsec.eu> <9B835088-661C-456E-84A7-47BC1835C0CB@cs.huji.ac.il> <20150417095536.GA38091@gmail.com> <32D7EBD3-813E-4062-8A06-ED8E82BA50DA@cs.huji.ac.il>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2015-04-17 at 13:46 +0300, Daniel Braniss wrote:
> > On Apr 17, 2015, at 12:55 PM, Tom Jones <jones@sdf.org> wrote:
> >=20
> > On Fri, Apr 17, 2015 at 12:15:33PM +0300, Daniel Braniss wrote:
> >>=20
> >>> On Apr 17, 2015, at 11:08 AM, Kurt Jaeger <lists@opsec.eu> wrote:
> >>>=20
> >>> Hi!
> >>>=20
> >>>> I know I'm embarking on a dangerous trip, but I want to use a Rasp=
berry Pi
> >>>> and or a BeagleBone to read (and write) RFID cards.
> >>>> Since a driver is needed to use the spibus, I have 2 options while
> >>>> developing:
> >>> [...]
> >>>> So before I give up on option 2, is there some examples/help?
> >>>=20
> >>> Are you aware of this book ?
> >>>=20
> >>> http://www.nostarch.com/bsddrivers.htm <http://www.nostarch.com/bsd=
drivers.htm>
> >>=20
> >> no, but before I spend more money (this is getting expensive :-),
> >> does it explain how to write a loadable module that needs to to talk
> >> to a spibus?=20
> >=20
> > I don't think it does.
> >=20
> > spibus is very simple, there is one interface call
> >=20
> > SPIBUS_TRANSFER(device_t, device_t, strcut spi_command);
> >=20
>=20
> chicken and egg issue :-), what device_t dev should I use?
> it must point to the spibus =85

Your device will be a child of the spibus, and it is the bus that
implements the SPIBUS_TRANSFER() method, so it's the bus's device_t that
needs to be passed as the first parameter in the call (if it were C++ it
would be the "this" pointer -- this stuff is OO implemented in plain-C).
>From your driver, something like:

  SPIBUS_TRANSFER(device_get_parent(sc->sc_dev), sc->sc_dev, cmdptr);

I haven't got time this morning to put together a complete example of
how to add a module to the build, but the process is basically along the
lines of...

  Add a new directory to sys/dev for your driver just like you were
going to compile it into the kernel.  Then in sys/modules find another
simple driver, copy it to a new directory, and change the names of
things in the makefile so that it refers to your new dir/files in
sys/dev.  You can set MODULES_OVERRIDE=3Dyournew_dirname on the make
command line or in your kernel config to make it compile.

-- Ian





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1429276417.1182.71.camel>