Porting Layer

nimBLE supports being built as part of different OS, not only their mynewt RTOS. A porting layer was written for NuttX, which was mostly a copy of the Linux porting layer.

Modifying the porting layer

NuttX is supported in nimBLE by adding an entry in the porting layer used to support different OSs. However, nimBLE supports each OS by generating a configuration header (syscfg.h) from YAML configuration files. If you want to modify the porting layer and change its configuration you will need to regenerate this header. This process is a bit involved since nimBLE uses its own newt build tool to do so and also somewhat assumes it will be built for their mynewt OS, so it actually may fail to build completely but it will still get to generate the required files.

So, first is to get the newt tool:

$ cd apps/nimble
$ git clone https://github.com/apache/mynewt-newt
$ cd mynewt-newt

At the moment, you will probably require unstable version instead of a release so select a known working:

$ git checkout c14c47bb683d
$ ./build.sh

There should be now a newt binary under mynewt-newt/newt. Extend your path so that it is visible:

$ export PATH=mynewt-newt/newt:$PATH

Now, create a newt project:

$ newt new foo

We want latest master version of mynewt OS and stack, so edit foo/project.yml and change the vers variable to 0.0.0. Now do:

$ cd foo/
$ newt upgrade

Under foo/repos there will be a clone of both mynewt and nimble repo. Since this app already downloads nimble repo outside of foo, you can delete foo/repos/apache-mynewt-nimble and simply make a link to the mynewt-nimble directory, so that you can work on the nimBLE code directly.

Now you can make any changes to the yml files such as porting/targets/nuttx/syscfg.yml. Finally, you can build with:

$ newt build @apache-mynewt-nimble/porting/targets/nuttx

This will most likely fail to complete but the generated headers should be there. So now copy them to the appropriate location in the nuttx target directory:

$ cd foo/
$ cp bin/@apache-mynewt-nimble/porting/targets/nuttx/generated/include/logcfg/logcfg.h \
      repos/apache-mynewt-nimble/porting/examples/nuttx/include/logcfg
$ cp bin/@apache-mynewt-nimble/porting/targets/nuttx/generated/include/syscfg/syscfg.h \
      repos/apache-mynewt-nimble/porting/examples/nuttx/include/syscfg

If these changes are done to fix a problem with NuttX porting layer in nimBLE, you should open a pull-request to nimBLE repository to include the updated header files. It is recommended to mention the issue in NuttX mailing list first to ensure the change is needed.