Right, so what I was trying to get at is that there are two separate topics here: a) board-common drivers (ie: they depend on a given board family such as stm32) and b) board-independent drivers (they use only nuttx generic interfaces).
a) is already supported (although only for stm32 and cxd65xx) while b) is not. Maybe the best way would be to use the same scheme for both somehow. On Wed, Aug 12, 2020, at 12:53, Fotis Panagiotopoulos wrote: > As a matter of fact, the exact driver that I am working on now, is for an > out-of-board device. > It uses a UART and an SPI to create a high-level interface towards an > external, physically separated device. > > It does not require anything special from the board, other than an UART and > SPI. And in fact will be used on multiple different boards, using MCUs from > different vendors (NXP & ST). > > > Στις Τετ, 12 Αυγ 2020 στις 6:47 μ.μ., ο/η Fotis Panagiotopoulos < > f.j.pa...@gmail.com> έγραψε: > > > Hi Matias, > > > > Within nuttx/drivers lie high-level drivers, that do not depend directly > > on any board. As I get it the purpose of nuttx/drivers/platform is to > > extend NuttX drivers out-of-tree, exactly as CONFIG_ARCH_BOARD_CUSTOM does > > for custom boards. > > > > Within board/src lie drivers specific to the selected board. Low-level > > drivers that make the very specific hardware to work with NuttX. > > > > So as long as NuttX architecture has two layers of drivers, I believe it > > is beneficial to have them separated. > > I indeed added board-specific drivers in my board dir. > > And I want to use drivers/platform for non-board-dependent stuff. Think of > > a character device driver for an I2C chip. You instantiate this providing > > an I2C driver, and use it without ever caring about the actual board. > > > > How I actually plan to use it. > > I want to make various "driver packs" as different repositories. When you > > start a new project you get the desired "packs" as git submodules, creating > > a collection of only the needed drivers. Each one is developed and > > versioned separately. > > > > I have already done the same regarding the various boards. > > This allows me to have a very modular workspace, and maximize code > > reusability. > > (This is also why the directories structure is important to me. I have to > > specify the exact structure that my projects will have to support this kind > > of modularity). > > > > > > > > > > > > Στις Τετ, 12 Αυγ 2020 στις 6:15 μ.μ., ο/η Abdelatif Guettouche < > > abdelatif.guettou...@gmail.com> έγραψε: > > > >> Take a look under boards/arm/cxd56xx/drivers for an idea of what that > >> folder might contain. > >> During dirlink that folder is linked to drivers/platform if it's not > >> present a dummy folder is linked. > >> I understand that Spresense has some special mechanisms to access on > >> board drivers (the sequencer?) and the logic is grouped under > >> cxd56xx/drivers. > >> We'll need Alin's input for a detailed explanation. > >> > >> I'm not sure how Fotis will/wants to use it. I also wanted to ask. > >> Thus far I personally only had to use common/. > >> > >> On Wed, Aug 12, 2020 at 3:56 PM Matias N. <mat...@imap.cc> wrote: > >> > > >> > Hi, > >> > I'm trying to follow the discussion to understand what would the final > >> layout look for board specific drivers now. I was unaware of this > >> CONFIG_SPECIFIC_DRIVERS option. What is the role of drivers/platform? I > >> would expect board specific drivers to be under the board directory. > >> > > >> > Best, > >> > Matias > >> > > >> > On Wed, Aug 12, 2020, at 12:13, Abdelatif Guettouche wrote: > >> > > It's PR1571, there was no need to update any config as I kept the > >> same name. > >> > > > >> > > On Wed, Aug 12, 2020 at 3:51 PM Abdelatif Guettouche > >> > > <abdelatif.guettou...@gmail.com> wrote: > >> > > > > >> > > > I'll provide a PR for review. > >> > > > The change by itself is simple, we just need to add one config > >> option > >> > > > to nuttx/drivers/Kconfig. > >> > > > However we need to update all of Spresense defconfigs (for now only > >> > > > Spresense uses this folder). > >> > > > > >> > > > On Wed, Aug 12, 2020 at 2:33 PM Fotis Panagiotopoulos > >> > > > <f.j.pa...@gmail.com> wrote: > >> > > > > > >> > > > > Unfortunately I am not sure whether I can help with a PR. I don't > >> feel that > >> > > > > I understand the NuttX build system well enough to proceed with > >> such a > >> > > > > change. > >> > > > > Could you help on this? > >> > > > > > >> > > > > Of course I can help with testing too. > >> > > > > > >> > > > > Στις Τετ, 12 Αυγ 2020 στις 4:29 μ.μ., ο/η David Sidrane < > >> > > > > david.sidr...@nscdg.com> έγραψε: > >> > > > > > >> > > > > > I am volunteering to help test any of these type changes. There > >> were many > >> > > > > > subtle breakages in the past that tended to slip through. Also > >> once all > >> > > > > > this > >> > > > > > settles out, it so needs to be documented. > >> > > > > > > >> > > > > > -----Original Message----- > >> > > > > > From: Abdelatif Guettouche [mailto: > >> abdelatif.guettou...@gmail.com] > >> > > > > > Sent: Wednesday, August 12, 2020 6:41 AM > >> > > > > > To: dev@nuttx.apache.org > >> > > > > > Subject: Re: Board-specific drivers in NuttX 9.1.0. > >> > > > > > > >> > > > > > Note that this common board organisation and these two folders > >> are > >> > > > > > relatively new and didn't get as much attention as they need. > >> > > > > > That said, I like the second suggestion. Would you like to > >> prepare a > >> > > > > > PR and see what others have to say? I could do that if you > >> want. > >> > > > > > > >> > > > > > On Wed, Aug 12, 2020 at 12:31 PM Fotis Panagiotopoulos > >> > > > > > <f.j.pa...@gmail.com> wrote: > >> > > > > > > > >> > > > > > > Thank you very much. > >> > > > > > > Indeed it now works perfectly. > >> > > > > > > > >> > > > > > > However I would propose a little change on this. > >> > > > > > > Currently board drivers require a specific directory > >> structure, and this > >> > > > > > > non-obvious (for me) config entry. > >> > > > > > > > >> > > > > > > Why not instead handle external drivers exactly like external > >> boards? > >> > > > > > > That is, add CONFIG_ARCH_DRIVERS_CUSTOM, > >> CONFIG_ARCH_DRIVERS_CUSTOM_DIR, > >> > > > > > > CONFIG_ARCH_DRIVERS_CUSTOM_DIR_RELPATH etc in > >> nuttx/drivers/Kconfig and > >> > > > > > > have the user select whether they need external drivers and > >> where should > >> > > > > > > they be located, instead of implying things. > >> > > > > > > > >> > > > > > > Or, at a minimum, I believe CONFIG_SPECIFIC_DRIVERS could be > >> defined in > >> > > > > > > nuttx/drivers/Kconfig. Since the build system uses this > >> symbol, nuttx > >> > > > > > > should define it, instead of relying on external Kconfigs. > >> > > > > > > > >> > > > > > > Στις Τετ, 12 Αυγ 2020 στις 2:02 μ.μ., ο/η Abdelatif > >> Guettouche < > >> > > > > > > abdelatif.guettou...@gmail.com> έγραψε: > >> > > > > > > > >> > > > > > > > > It's the drivers/Kconfig that > >> > > > > > > > defines it (i.e. you add it), you can then enable it from > >> menuconfig. > >> > > > > > > > > >> > > > > > > > To be clear I meant the "drivers" folder that's linked to > >> "platform" > >> > > > > > > > not the toplevel nuttx/drivers. > >> > > > > > > > > >> > > > > > > > On Wed, Aug 12, 2020 at 12:51 PM Abdelatif Guettouche > >> > > > > > > > <abdelatif.guettou...@gmail.com> wrote: > >> > > > > > > > > > >> > > > > > > > > As far as I can tell it's the same, current master[1], > >> 9.1[2], > >> > > > > > 9.0[3], > >> > > > > > > > 8.1[4] > >> > > > > > > > > I do have some flashes about the necessity of a drivers > >> folder > >> > > > > > > > > alongside the board folder with custom boards, but I > >> can't remember. > >> > > > > > > > > That was an issue, it's now resolved. > >> > > > > > > > > > >> > > > > > > > > > But the code is not included in the build. I checked my > >> Make.defs, > >> > > > > > > > > > and > >> > > > > > > > it > >> > > > > > > > > > is similar to other Make.defs of the other drivers: > >> > > > > > > > > > >> > > > > > > > > You need CONFIG_SPECIFIC_DRIVERS set. It's the > >> drivers/Kconfig that > >> > > > > > > > > defines it (i.e. you add it), you can then enable it from > >> menuconfig. > >> > > > > > > > > > >> > > > > > > > > 1. > >> > > > > > > > > >> > > > > > > >> https://github.com/apache/incubator-nuttx/tree/master/boards/arm/cxd56xx > >> > > > > > > > > 2. > >> > > > > > > > > >> > > > > > > >> https://github.com/apache/incubator-nuttx/tree/releases/9.1/boards/arm/cxd56xx > >> > > > > > > > > 3. > >> > > > > > > > > >> > > > > > > >> https://github.com/apache/incubator-nuttx/tree/releases/9.0/boards/arm/cxd56xx > >> > > > > > > > > 4. > >> > > > > > > > > >> > > > > > > >> https://github.com/apache/incubator-nuttx/tree/nuttx-8.1/boards/arm/cxd56xx > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > On Wed, Aug 12, 2020 at 10:57 AM Fotis Panagiotopoulos > >> > > > > > > > > <f.j.pa...@gmail.com> wrote: > >> > > > > > > > > > > >> > > > > > > > > > > NB: You'll need this patch too: > >> > > > > > > > > > > https://github.com/apache/incubator-nuttx/pull/1480 > >> > > > > > > > > > <https://github.com/apache/incubator-nuttx/pull/1480> > >> > > > > > > > > > > >> > > > > > > > > > Oh, I didn't realize that I had to patch v9.1.0 with > >> this. I > >> > > > > > thought > >> > > > > > > > it was > >> > > > > > > > > > already included in the latest releases. After > >> patching, linking of > >> > > > > > > > > > my > >> > > > > > > > > > drivers folder into nuttx/drivers/platform works. > >> > > > > > > > > > Kconfig is parsed, and the new options appear in > >> menuconfig. > >> > > > > > > > > > But the code is not included in the build. I checked my > >> Make.defs, > >> > > > > > > > > > and > >> > > > > > > > it > >> > > > > > > > > > is similar to other Make.defs of the other drivers: > >> > > > > > > > > > > >> > > > > > > > > > CSRCS += driver.c > >> > > > > > > > > > DEPPATH += --dep-path platform > >> > > > > > > > > > VPATH += :platform > >> > > > > > > > > > CFLAGS += $(shell $(INCDIR) "$(CC)" > >> > > > > > > > > > $(TOPDIR)$(DELIM)drivers$(DELIM)platform) > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > > The structure has not changed, Xiang patch made it > >> possible to > >> > > > > > > > > > > omit > >> > > > > > > > > > > the "drivers" folder when it's not needed, in that > >> case a dummy > >> > > > > > > > folder > >> > > > > > > > > > > is linked > >> > > > > > > > > > > >> > > > > > > > > > As I see, in v9.0.0, the structure was: > >> > > > > > > > > > └── boards_dir > >> > > > > > > > > > └── board1 > >> > > > > > > > > > └── drivers > >> > > > > > > > > > > >> > > > > > > > > > but in v9.1.0 it is > >> > > > > > > > > > └── boards_dir > >> > > > > > > > > > ├── board1 > >> > > > > > > > > > └── drivers > >> > > > > > > > > > > >> > > > > > > > > > or am I missing anything? > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > Στις Τετ, 12 Αυγ 2020 στις 5:22 π.μ., ο/η Xiang Xiao < > >> > > > > > > > > > xiaoxiang781...@gmail.com> έγραψε: > >> > > > > > > > > > > >> > > > > > > > > > > You can try > >> > > > > > > > > > > > >> > > > > > > > > >> > > > > > > >> https://github.com/apache/incubator-nuttx/tree/master/boards/arm/cxd56xx > >> > > > > > > > > > > and compare the difference with yours. > >> > > > > > > > > > > > >> > > > > > > > > > > > -----Original Message----- > >> > > > > > > > > > > > From: Nathan Hartman <hartman.nat...@gmail.com> > >> > > > > > > > > > > > Sent: Wednesday, August 12, 2020 5:34 AM > >> > > > > > > > > > > > To: dev@nuttx.apache.org > >> > > > > > > > > > > > Subject: Re: Board-specific drivers in NuttX 9.1.0. > >> > > > > > > > > > > > > >> > > > > > > > > > > > On Tue, Aug 11, 2020 at 1:14 PM Fotis > >> Panagiotopoulos < > >> > > > > > > > > > > f.j.pa...@gmail.com> > >> > > > > > > > > > > > wrote: > >> > > > > > > > > > > > > >> > > > > > > > > > > > The structure proposed by Xiang Xiao is not working > >> for me. > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > By looking in the Makefiles, I did understand > >> that the > >> > > > > > > > > > > > > structure > >> > > > > > > > has > >> > > > > > > > > > > > > changed a bit. > >> > > > > > > > > > > > > Now my structure is: > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > ├── CustomBoard > >> > > > > > > > > > > > > │ ├── defconfig > >> > > > > > > > > > > > > │ ├── include > >> > > > > > > > > > > > > │ ├── Kconfig > >> > > > > > > > > > > > > │ ├── Make.defs > >> > > > > > > > > > > > > │ ├── scripts > >> > > > > > > > > > > > > │ └── src > >> > > > > > > > > > > > > └── drivers > >> > > > > > > > > > > > > ├── driver.c > >> > > > > > > > > > > > > ├── driver.h > >> > > > > > > > > > > > > ├── Kconfig > >> > > > > > > > > > > > > └── Make.defs > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > But still it does not work. > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > Any ideas what may break it? > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > Maybe need to make distclean, followed by > >> tools/configure.sh, > >> > > > > > to > >> > > > > > > > refresh > >> > > > > > > > > > > NuttX's symbolic links? > >> > > > > > > > > > > > > >> > > > > > > > > > > > Nathan > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > >> > > > > > > >> > > > >> > > >