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>