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.